Aller au contenu principal

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

  1. Le code est analysé par un outil qui parcourt chaque ligne et détecte des problèmes potentiels.
  2. L'outil signale les erreurs, avertissements et recommandations pour améliorer le code.
  3. 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

  1. Le programme est exécuté dans un environnement de test.
  2. Des outils analysent son comportement et recherchent des failles de sécurité.
  3. 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èreAnalyse statique (SAST)Analyse dynamique (DAST)
Moment d'analyseAvant l'exécutionPendant l'exécution
Type d'analyseCode sourceComportement du programme
DétectionErreurs de syntaxe, failles connuesVulnérabilités exploitables, erreurs d'exécution
RapiditéRapidePlus long
Faux positifsPossiblesMoins 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

  1. Installer SonarQube et exécuter le serveur :
docker run -d --name sonarqube -p 9000:9000 sonarqube
  1. Accéder à l'interface web sur http://localhost:9000 et créer un projet.
  2. 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
  1. Observer les résultats et corriger les erreurs détectées.

Étape 2 : Analyse dynamique avec OWASP ZAP

  1. Installer OWASP ZAP :
sudo apt install zaproxy
  1. Lancer OWASP ZAP et entrer l'URL d'une application web de test.
  2. Exécuter un scan de sécurité et analyser les vulnérabilités détectées.

Test de mémorisation/compréhension


Quel est l'objectif principal de l'analyse statique du code ?


Quel outil est couramment utilisé pour l'analyse statique du code ?


Quelle est la principale limite de l'analyse statique ?


Quand l'analyse dynamique du code est-elle effectuée ?


Quel outil est utilisé pour l'analyse dynamique des applications web ?


Pourquoi l'analyse dynamique est-elle importante ?


Quelle est une différence clé entre SAST et DAST ?


Quel est un inconvénient de l'analyse dynamique ?


Quelle analyse est la plus rapide entre SAST et DAST ?


Pourquoi utiliser les deux types d'analyse ensemble ?



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é.

remarque

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

  1. Installer Node.js et Git si ce n'est pas déjà fait.
  2. Cloner le projet OWASP NodeGoat depuis GitHub :
git clone https://github.com/OWASP/NodeGoat.git
cd NodeGoat
  1. Installer les dépendances du projet :
npm install
  1. Lancer l'application :
npm start
  1. Accéder à l'application sur http://localhost:4000.
info

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 sur http://localhost:4000.

Une fois terminé, le projet est prêt pour l'analyse.


Étape 2 : Analyse statique avec SonarQube

  1. Installer et exécuter SonarQube en local :
docker run -d --name sonarqube -p 9000:9000 sonarqube
  1. Accéder à l'interface web sur http://localhost:9000 et créer un projet nommé NodeGoat.
  2. Installer SonarScanner :
npm install -g sonarqube-scanner
  1. Configurer SonarScanner en ajoutant un fichier sonar-project.properties à la racine du projet :
sonar.projectKey=NodeGoat
sonar.sources=.
sonar.host.url=http://localhost:9000
  1. Exécuter l'analyse statique :
sonar-scanner
info

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

  1. Installer Snyk :
npm install -g snyk
  1. Scanner les dépendances du projet :
snyk test
  1. Si des vulnérabilités sont détectées, tenter une correction automatique :
snyk fix
info

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

  1. Installer OWASP ZAP :
sudo apt install zaproxy
  1. Lancer OWASP ZAP et entrer l'URL de l'application web locale (http://localhost:4000).
  2. Exécuter un scan de sécurité et analyser les vulnérabilités détectées.
info

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

  1. Modifier le code source pour corriger les erreurs signalées par SonarQube.
  2. Mettre à jour les dépendances pour corriger les vulnérabilités détectées par Snyk.
  3. Relancer les analyses pour vérifier que les problèmes ont été corrigés.
info

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 ou snyk 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.