SAST et DAST
Comprendre comment détecter les vulnérabilités dans un programme grâce à l'analyse statique et dynamique du code.
Notions théoriques
L'analyse de sécurité des logiciels est essentielle pour éviter les failles exploitables par des attaquants.
Il existe 2 grandes méthodes pour détecter les vulnérabilités dans le code :
- L'analyse statique du code (SAST) qui examine le code source sans l'exécuter.
- L'analyse dynamique du code (DAST) qui teste l'application en cours d'exécution.
Analyse statique du code (SAST)
L'analyse statique permet de détecter des erreurs et des failles de sécurité avant même que le programme ne soit exécuté.
Fonctionnement
- Un outil analyse le code source et identifie des failles potentielles.
- Il signale les erreurs, avertissements et recommandations.
- Les développeurs corrigent les problèmes avant l'exécution du programme.
Avantages
- Détection précoce des erreurs.
- Identification des failles de sécurité dans le code source.
- Amélioration de la lisibilité et de la maintenabilité du code.
Inconvénients
- Peut générer des faux positifs.
- Ne détecte pas les erreurs liées à l'exécution du programme.
Analyse dynamique du code (DAST)
L'analyse dynamique permet de tester un programme en cours d'exécution pour repérer des vulnérabilités exploitables.
Fonctionnement
- L'application est exécutée dans un environnement de test.
- Un outil simule des attaques et analyse les réponses du programme.
- Les résultats indiquent les vulnérabilités détectées.
Avantages
- Permet de détecter des erreurs qui ne sont visibles qu'à l'exécution.
- Teste le programme dans des conditions réelles.
- Identifie les failles exploitables par des attaquants.
Inconvénients
- Nécessite un environnement de test fonctionnel.
- Peut être plus long à exécuter qu'une analyse statique.
Différences entre SAST et DAST
Critère | Analyse statique (SAST) | Analyse dynamique (DAST) |
---|---|---|
Moment d'analyse | Avant l'exécution | Pendant l'exécution |
Type d'analyse | Code source | Comportement du programme |
Détection | Erreurs de syntaxe, failles connues | Vulnérabilités exploitables, erreurs d'exécution |
Rapidité | Rapide | Plus long |
Faux positifs | Possibles | Moins fréquents |
Exemple pratique
Il est possible d'utiliser SonarQube pour une analyse statique et OWASP ZAP pour une analyse dynamique d'une application Web.
Étape 1 : Analyse statique avec SonarQube
- Installer et exécuter SonarQube en local :
docker run -d --name sonarqube -p 9000:9000 sonarqube
- Accéder à l'interface web sur
http://localhost:9000
et créer un projet. - Installer SonarScanner et analyser un projet local :
sonar-scanner -Dsonar.projectKey=mon-projet -Dsonar.sources=. -Dsonar.host.url=http://localhost:9000
- Observer les résultats et corriger les erreurs détectées.
Étape 2 : Analyse dynamique avec OWASP ZAP
- Installer OWASP ZAP :
sudo apt install zaproxy
- Lancer OWASP ZAP et entrer l'URL d'une application web de test.
- Exécuter un scan de sécurité et analyser les vulnérabilités détectées.
Test de mémorisation/compréhension
TP pour réfléchir et résoudre des problèmes
L'objectif de ce TP est d'analyser la sécurité d'une application Web en utilisant des outils d'analyse statique et dynamique.
L'application cible est Juice Shop, une application volontairement vulnérable développée par OWASP pour l'apprentissage de la sécurité Web.
Étape 1 : Préparation de l'environnement
- Installer Docker si ce n'est pas déjà fait.
- Télécharger et exécuter OWASP Juice Shop avec Docker :
docker run -d --name juiceshop -p 3000:3000 bkimminich/juice-shop
- Accéder à l'application sur
http://localhost:3000
.
Cette étape permet de préparer l'environnement avec une application contenant des vulnérabilités.
docker run -d --name juiceshop -p 3000:3000 bkimminich/juice-shop
télécharge et exécute Juice Shop en arrière-plan.- Juice Shop est accessible via un navigateur à l'adresse
http://localhost:3000
.
Une fois cette étape terminée, l'application est prête pour l'analyse.
Étape 2 : Analyse statique avec ESLint et SonarQube
- Installer ESLint, un outil d'analyse statique pour JavaScript :
npm install -g eslint
- Initialiser ESLint dans le projet Juice Shop :
cd ~/juice-shop
eslint --init
- Exécuter une analyse statique du code :
eslint .
- Installer et exécuter SonarQube en local :
docker run -d --name sonarqube -p 9000:9000 sonarqube
- Configurer SonarQube en créant un fichier
sonar-project.properties
dans le dossier Juice Shop :
sonar.projectKey=JuiceShop
sonar.sources=.
sonar.host.url=http://localhost:9000
- Exécuter l'analyse avec SonarScanner :
sonar-scanner
L'analyse statique permet d'identifier des erreurs dans le code source avant l'exécution.
npm install -g eslint
installe ESLint globalement.eslint --init
configure ESLint pour analyser le code JavaScript.eslint .
exécute une analyse statique sur tous les fichiers du projet.
Pour SonarQube :
docker run -d --name sonarqube -p 9000:9000 sonarqube
lance SonarQube en local.- Le fichier
sonar-project.properties
configure l'analyse pour Juice Shop. sonar-scanner
exécute l'analyse et envoie les résultats à SonarQube.
Les résultats sont visibles sur http://localhost:9000
, où les erreurs et recommandations sont affichées.
Étape 3 : Analyse dynamique avec OWASP ZAP
- Installer OWASP ZAP :
sudo apt install zaproxy
- Lancer OWASP ZAP et entrer l'URL de Juice Shop (
http://localhost:3000
). - Exécuter un scan automatique pour détecter les vulnérabilités.
- Analyser les résultats et identifier les failles les plus critiques.
L'analyse dynamique permet de détecter des failles exploitables en conditions réelles.
sudo apt install zaproxy
installe OWASP ZAP.- Lancer OWASP ZAP et entrer
http://localhost:3000
cible Juice Shop. - Le scan automatique teste l'application pour identifier les vulnérabilités.
Les résultats affichent les failles détectées, comme les injections SQL ou les failles XSS.
Étape 4 : Correction des vulnérabilités et nouvelle analyse
- Modifier le code source pour corriger les erreurs signalées par ESLint et SonarQube.
- Mettre à jour les dépendances pour corriger les vulnérabilités identifiées.
npm audit fix
- Relancer les analyses statique et dynamique pour vérifier les corrections.
Cette étape permet de valider les corrections effectuées.
- Modifier le code en suivant les recommandations d'ESLint et SonarQube améliore la qualité et la sécurité.
npm audit fix
met à jour les dépendances pour corriger les failles connues.- Relancer les analyses permet de vérifier que les vulnérabilités ont bien été corrigées.
Une fois toutes les corrections appliquées, l'application est plus sécurisée.