Analyse du code
Analyse statique et dynamique du code. Comprendre les méthodes d'analyse du code pour détecter les vulnérabilités et améliorer la qualité logicielle
Notions théoriques
L'analyse du code est une étape essentielle du développement logiciel.
L'analyse du code permet de :
- détecter des erreurs, des failles de sécurité
- et d'améliorer la qualité du programme avant son déploiement.
Il existe 2 grandes catégories d'analyse du code :
Analyse statique du code (SAST)
L'analyse statique du code consiste à examiner le code source d'un programme sans l'exécuter. Elle permet de repérer des erreurs de syntaxe, des vulnérabilités de sécurité et des problèmes de structure.
Fonctionnement
- Le code est analysé par un outil qui parcourt chaque ligne et détecte des problèmes potentiels.
- L'outil signale les erreurs, avertissements et recommandations pour améliorer le code.
- Les développeurs corrigent le code avant son exécution.
Avantages
- Détection précoce des erreurs avant l'exécution du programme.
- 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 (erreurs signalées à tort).
- Ne permet pas de détecter les erreurs liées à l'exécution du programme.
Analyse dynamique du code (DAST)
L'analyse dynamique du code consiste à tester un programme en cours d'exécution pour détecter des vulnérabilités et des erreurs de comportement.
Fonctionnement
- Le programme est exécuté dans un environnement de test.
- Des outils analysent son comportement et recherchent des failles de sécurité.
- Les résultats sont examinés pour identifier les problèmes à corriger.
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 vulnérabilités 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 effectuer une analyse statique du code
- et OWASP ZAP pour une analyse dynamique d'une application Web.
Étape 1 : Analyse statique avec SonarQube
- Installer SonarQube et exécuter le serveur :
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 exécuter l'analyse sur 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 combinant une analyse statique et une analyse dynamique.
L'application cible est OWASP NodeGoat, une application Node.js volontairement vulnérable, utilisée pour la formation à la sécurité.
L'application Web OWASP NodeGoat est un projet maintenu et accessible sur GitHub à l'adresse : https://github.com/OWASP/NodeGoat
- Il contient des vulnérabilités réelles, ce qui rend l'exercice plus concret.
- Il est facile à installer et fonctionne en local sur
http://localhost:4000
.
Étape 1 : Préparation de l'environnement de travail
- Installer Node.js et Git si ce n'est pas déjà fait.
- Cloner le projet OWASP NodeGoat depuis GitHub :
git clone https://github.com/OWASP/NodeGoat.git
cd NodeGoat
- Installer les dépendances du projet :
npm install
- Lancer l'application :
npm start
- Accéder à l'application sur
http://localhost:4000
.
Cette étape permet de préparer l'environnement en récupérant un projet contenant des vulnérabilités.
git clone
télécharge le projet OWASP NodeGoat.cd NodeGoat
permet d'entrer dans le dossier du projet.npm install
installe les bibliothèques nécessaires.npm start
exécute l'application surhttp://localhost:4000
.
Une fois terminé, le projet est prêt pour l'analyse.
Étape 2 : 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 nomméNodeGoat
. - Installer SonarScanner :
npm install -g sonarqube-scanner
- Configurer SonarScanner en ajoutant un fichier
sonar-project.properties
à la racine du projet :
sonar.projectKey=NodeGoat
sonar.sources=.
sonar.host.url=http://localhost:9000
- Exécuter l'analyse statique :
sonar-scanner
SonarQube permet d'analyser le code source pour détecter des erreurs et des failles de sécurité.
docker run -d --name sonarqube -p 9000:9000 sonarqube
lance un serveur SonarQube en local.npm install -g sonarqube-scanner
installe l'outil SonarScanner.sonar-project.properties
configure l'analyse du projet.sonar-scanner
exécute l'analyse statique et envoie les résultats à SonarQube.
Une fois l'analyse terminée, les résultats sont visibles sur http://localhost:9000
.
Étape 3 : Analyse des dépendances avec Snyk
- Installer Snyk :
npm install -g snyk
- Scanner les dépendances du projet :
snyk test
- Si des vulnérabilités sont détectées, tenter une correction automatique :
snyk fix
Snyk permet d'identifier les vulnérabilités présentes dans les bibliothèques utilisées par le projet.
npm install -g snyk
installe Snyk.snyk test
analyse les dépendances et affiche les vulnérabilités trouvées.snyk fix
tente de corriger automatiquement les problèmes en mettant à jour les bibliothèques concernées.
Si certaines vulnérabilités persistent, il peut être nécessaire de les corriger manuellement.
Étape 4 : Analyse dynamique avec OWASP ZAP
- Installer OWASP ZAP :
sudo apt install zaproxy
- Lancer OWASP ZAP et entrer l'URL de l'application web locale (
http://localhost:4000
). - Exécuter un scan de sécurité et analyser les vulnérabilités détectées.
OWASP ZAP permet d'analyser une application web en cours d'exécution pour détecter des failles exploitables.
sudo apt install zaproxy
installe OWASP ZAP.- Lancer OWASP ZAP et entrer l'URL de l'application permet d'effectuer un scan de sécurité.
Les vulnérabilités détectées peuvent inclure des injections SQL, des failles XSS ou des mauvaises configurations de sécurité.
Étape 5 : Correction des vulnérabilités et nouvelle analyse
- Modifier le code source pour corriger les erreurs signalées par SonarQube.
- Mettre à jour les dépendances pour corriger les vulnérabilités détectées par Snyk.
- Relancer les analyses pour vérifier que les problèmes ont été corrigés.
Cette étape permet de valider les corrections effectuées.
- Modifier le code en suivant les recommandations de SonarQube améliore la qualité et la sécurité du projet.
- Mettre à jour les dépendances avec
npm audit fix
ousnyk fix
réduit les risques liés aux bibliothèques vulnérables. - Relancer les analyses permet de s'assurer que les problèmes ont bien été résolus.
Une fois toutes les corrections appliquées, l'application est plus sécurisée.