Analyse de code et sécurité applicative
Mise à jour :
En 2021, un chercheur découvre que le code source de Twitch a fuité sur Internet. Parmi les 125 Go de données : des clés API en clair, des tokens d’accès et des secrets de production directement commitées dans le code. Cette fuite massive illustre un problème récurrent : les développeurs sous-estiment ce que leur code révèle.
Analyser le code avant qu’il n’atteigne la production n’est plus optionnel. Entre les vulnérabilités introduites par inadvertance, les secrets exposés dans les commits et les dépendances obsolètes qui traînent, la surface d’attaque d’une application moderne est considérable.
Pourquoi analyser le code ?
Chaque ligne de code est une opportunité d’introduire une vulnérabilité. Une injection SQL oubliée, une validation d’entrée manquante, un secret hardcodé pour “tester rapidement”… Ces erreurs arrivent même aux équipes expérimentées.
Le coût de correction explose selon le moment de détection :
| Phase de détection | Coût relatif |
|---|---|
| Pendant le développement | 1x |
| Pendant les tests | 10x |
| En production | 100x |
| Après un incident | 1000x+ |
Détecter une faille pendant qu’on écrit le code coûte quelques minutes. La corriger après une compromission peut coûter des millions.
Les trois piliers de l’analyse
L’analyse de sécurité du code repose sur trois approches complémentaires :
| Approche | Cible | Moment | Ce qu’elle détecte |
|---|---|---|---|
| SAST | Code source | Développement | Injections, secrets, mauvaises pratiques |
| DAST | Application déployée | Staging/Prod | Failles exploitables, misconfigurations |
| SCA | Dépendances | Build | CVE dans les bibliothèques tierces |
Aucune de ces approches n’est suffisante seule. C’est leur combinaison qui offre une couverture efficace.
Quand utiliser chaque approche
SAST : pendant le développement
Le SAST (Static Application Security Testing) analyse le code sans l’exécuter. Il parcourt le code source, suit les flux de données et identifie les patterns problématiques.
Cas d’usage :
- Scanner chaque pull request avant merge
- Détecter les secrets dans l’historique Git
- Valider les fichiers IaC (Terraform, Kubernetes)
- Bloquer les commits avec des failles critiques
Outils : Semgrep, CodeQL, Checkov, Gitleaks, TruffleHog
DAST : après déploiement
Le DAST (Dynamic Application Security Testing) teste l’application en cours d’exécution. Il envoie des requêtes malformées, tente des injections et analyse les réponses.
Cas d’usage :
- Scanner l’environnement de staging avant production
- Détecter les CVE connues sur des services exposés
- Valider la configuration des headers de sécurité
- Tester les mécanismes d’authentification
Outils : OWASP ZAP, Nuclei, Burp Suite, Nikto
SCA : pendant le build
Le SCA (Software Composition Analysis) analyse les dépendances pour identifier les vulnérabilités connues dans les composants tiers.
Cas d’usage :
- Scanner les dépendances à chaque build
- Générer un inventaire logiciel (SBOM)
- Surveiller les nouvelles CVE sur les projets déployés
- Bloquer les versions avec des failles critiques
Outils : Trivy, Grype, Dependency-Track, Snyk
Intégrer l’analyse dans la CI/CD
Pipeline type
Un pipeline DevSecOps intègre les analyses de sécurité à chaque étape :
# Exemple GitHub Actionsname: Security Pipelineon: [push, pull_request]
jobs: secrets-scan: runs-on: ubuntu-24.04 steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 0 - name: Gitleaks uses: gitleaks/gitleaks-action@ff98106e4c7b2bc287b24eaf42907196329070c7 # v2.3.9
sast: runs-on: ubuntu-24.04 steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Semgrep uses: returntocorp/semgrep-action@713efdd345f3035192eaa63f56867b88e63e4e5d # v1 with: config: p/security-audit
sca: runs-on: ubuntu-24.04 steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Trivy uses: aquasecurity/trivy-action@6c175e9c4083a92bbca2f9724c8a5e33bc2d97a5 # 0.30.0 with: scan-type: 'fs' severity: 'HIGH,CRITICAL' exit-code: '1'Stratégie de gates progressive
On ne peut pas tout bloquer du jour au lendemain. Une approche graduée :
| Phase | Comportement | Objectif |
|---|---|---|
| Observation | Scan, log, ne bloque pas | Établir une baseline |
| Warning | Alerte sur les nouvelles issues | Sensibiliser les équipes |
| Soft gate | Bloque les critiques uniquement | Empêcher les régressions graves |
| Hard gate | Bloque high+ sans exception | Maintenir un niveau de sécurité |
Gérer les faux positifs
Le problème de l’alert fatigue
Un scanner mal configuré peut remonter des centaines d’alertes. Si 80% sont des faux positifs, les équipes finissent par ignorer les vraies alertes. C’est l’alert fatigue — et c’est dangereux.
Stratégies de réduction
- Baseline : ignorer les issues existantes, ne traiter que les nouvelles
- Suppression ciblée : marquer les faux positifs confirmés comme ignorés
- Règles personnalisées : ajuster la configuration aux spécificités du projet
- VEX pour le SCA : documenter les vulnérabilités non exploitables
Chaque guide dédié (SAST, DAST, SCA) détaille les techniques de gestion des faux positifs spécifiques à chaque approche.
Checklist minimale
- Secrets : scanner chaque commit avec Gitleaks ou TruffleHog
- SAST : analyser le code avec Semgrep ou CodeQL à chaque PR
- SCA : vérifier les dépendances avec Trivy ou Grype en CI/CD
- DAST : tester l’application déployée avec ZAP ou Nuclei
- Centraliser : utiliser Dependency-Track pour suivre les vulnérabilités
- Prioriser : utiliser CVSS, EPSS et le contexte pour trier les alertes
- Automatiser : intégrer progressivement des gates bloquants