Outils SAST et DAST en DevSecOps
Outils SAST et DAST en DevSecOps
DEV-SEC-OPS
Sujet
Devoir 2 :
1
TABLE DES MATIERES
I. Introduction Générale .............................................................................................. 4
II. Partie 1 : SAST .......................................................................................................... 5
1. Introduction .......................................................................................................... 5
2. Atelier 1 : SAST avec le projet [Link]/qamar16/DevSecOps-crash-course-
pygoat sur GitHub................................................................................................................... 5
1. Fork et importation de projet ........................................................................... 5
2. Création du workflow ....................................................................................... 6
3. Explication de la configuration ......................................................................... 7
4. Aperçu de l’outil Bandit .................................................................................... 8
5. Résultats après exécution : ............................................................................. 10
6. Analyse des Résultats ..................................................................................... 12
7. Ajouter des clés par défaut pour les environnements de développement .... 13
8. Améliorations pour éviter les faux positifs ..................................................... 14
9. Les vulnérabilités détectées par bandit avec corrections nécessaires ........... 15
10. Corrections et améliorations du workflow ................................................. 18
11. Nouvelle Configuration : Explication ........................................................... 19
12. Comparaison avec les Configurations Précédentes .................................... 21
13. Améliorations de la Nouvelle Configuration ............................................... 21
14. Résultat de l’exécution de la nouvelle configuration .................................. 22
15. Différentes étapes du workflow : ................................................................ 22
3. Partie 2 : sast avec le projet [Link]/qamar16/DevSecOps-crash-course-
pogota sur gitlab................................................................................................................... 24
1. Importation de projet sur gitlab ..................................................................... 24
2. Fichier de configuration yml ........................................................................... 25
3. Explication de la configuration ....................................................................... 27
4. Pipeline résultat .............................................................................................. 30
5. Rapport généré ............................................................................................... 30
6. Améliorations pour Réduire les Faux Positifs ................................................. 31
7. Rapport après amélioration ............................................................................ 32
8. Rapport sast_scan ........................................................................................... 32
4. Conclusion de la partie sast ................................................................................ 35
III. Partie 2 : DAST ........................................................................................................ 36
1. Introduction ........................................................................................................ 36
2. Atelier 1 dast avec Template sous image docker ............................................... 36
2
1. Configuration yml ........................................................................................... 36
2. Aperçu de l'analyse DAST (Dynamic Application Security Testing)................. 36
3. Le fichier de configuration yml ....................................................................... 38
4. Description de la configuration ...................................................................... 39
5. Pipeline résultat : ............................................................................................ 43
6. Tableau de bord de sécurité ........................................................................... 43
7. Rapport de sécurité ........................................................................................ 44
8. Rapport généré dans la phase DAST ............................................................... 45
9. Points positifs : ................................................................................................ 46
3. Atelier 2 : dast avec intégration de OWASP ZAP ................................................ 46
1. Aperçu sur OWASP ZAP .................................................................................. 46
2. Exécution ........................................................................................................ 48
3. Configuration du pipeline GitLab pour DAST et ZAP ...................................... 50
4. Configuration yml ........................................................................................... 50
5. Explication de la configuration ....................................................................... 51
6. Détails de la configuration : ............................................................................ 52
7. Rapports générés : .......................................................................................... 53
8. Résultats et rapports....................................................................................... 53
9. Conclusion de l’atelier..................................................................................... 54
4. Conclusion de la partie dast ............................................................................... 55
IV. Conclusion Générale .............................................................................................. 56
3
I. Introduction Générale
Dans le monde actuel de la transformation numérique, la sécurité des applications est
devenue un enjeu stratégique majeur. Face à des cybermenaces de plus en plus
sophistiquées, il est indispensable de garantir la résilience des systèmes dès les premières
étapes de leur développement. L’approche DevSecOps, qui intègre la sécurité dans chaque
phase du cycle de vie des applications, repose sur des pratiques automatisées permettant de
détecter et de corriger les vulnérabilités rapidement et efficacement. Ce projet s’inscrit dans
cette démarche en mettant en œuvre une stratégie combinée de Static Application Security
Testing (SAST) et de Dynamic Application Security Testing (DAST).
L’analyse SAST se concentre sur l’évaluation statique du code source, permettant de
repérer des vulnérabilités telles que des erreurs de syntaxe, des failles de logique ou encore
des problèmes de sécurité potentiels avant même l’exécution de l’application. De son côté,
l’analyse DAST cible les comportements dynamiques en scannant les applications dans un
environnement d’exécution. L’intégration de l’outil OWASP ZAP, une référence dans les tests
dynamiques de sécurité, a permis d’enrichir cette démarche en simulant des attaques contre
l’application web afin d’identifier des vulnérabilités exploitables comme les failles XSS (Cross-
Site Scripting), les injections SQL ou les mauvaises configurations de sécurité. Ces deux
méthodes complémentaires, orchestrées dans un pipeline CI/CD automatisé, assurent une
couverture globale des tests de sécurité tout au long du développement logiciel.
4
II. Partie 1 : SAST
1. Introduction
Le développement sécurisé des applications est devenu une priorité dans un contexte
où les cybermenaces sont omniprésentes. Le DevSecOps, qui intègre la sécurité dès les
premières étapes du cycle de vie du développement logiciel, est une pratique essentielle
pour garantir des applications sûres et robustes. Ce rapport met en lumière l'intégration des
outils d'analyse de sécurité statique (SAST) dans les pipelines CI/CD sur des plateformes
comme GitHub Actions et GitLab CI/CD. Nous avons utilisé l'outil Bandit, spécialisé dans la
détection des vulnérabilités spécifiques au code Python, afin d'identifier et d'analyser des
failles potentielles telles que des injections de commandes, des erreurs de désérialisation ou
encore des mauvaises pratiques dans l'utilisation de bibliothèques. Ce processus met en
avant les bonnes pratiques de configuration et les mécanismes permettant de réduire les
faux positifs et d'intégrer la sécurité de manière continue et automatisée dans les pipelines
de développement.
En examinant et en corrigeant les vulnérabilités identifiées par les scans, nous avons
démontré l'importance de l'automatisation dans la détection précoce des failles de sécurité.
Cette approche permet non seulement de renforcer la sécurité des applications mais aussi
d'améliorer l'efficacité des équipes en réduisant les coûts liés aux corrections tardives. Ce
travail se concentre également sur la mise en place de pipelines fonctionnels et adaptés aux
deux plateformes principales que sont GitHub et GitLab, tout en respectant les standards de
sécurité modernes.
Une fois fait, on procède à la création du workflow qui sera exécuté par GitHub actions.
L’objectif étant d’intégrer la partie sas du cycle DevSecOps, ainsi que l’intégration de l’outil
5
« bandit » pour analyser le code en statique et détecter s’il y’a des vulnérabilités à corriger
avant de passer à la mise en production du projet en question.
2. Création du workflow
Le workflow nécessaire pour implémenter la partie sast dans le pipeline DevSecOps, se
décline comme suit :
name: Bandit Analysis
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
bandit-scan:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
Se workflow est contenue dans un fichier sous le nom de [Link], comme est
illustré dans la photo ci-après :
6
3. Explication de la configuration
Voici une explication détaillée de ce workflow GitHub Actions nommé "Bandit
Analysis" :
a. Nom et Déclencheurs
name: Bandit Analysis
• Ce workflow est nommé "Bandit Analysis" et a pour objectif d'exécuter des analyses
de sécurité du code Python en utilisant l'outil Bandit.
on:
• push:
Ce workflow est déclenché lorsqu’un push est effectué vers la branche main.
• pull_request:
Il est également déclenché lorsqu’une pull request est créée ou mise à jour pour la
branche main.
d. Étapes du Workflow
1. Checkout du Code
- name: Checkout code
uses: actions/checkout@v3
• Cette étape récupère le code source du dépôt GitHub afin qu'il puisse être analysé.
2. Configuration de Python
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.8'
• Cette étape configure l’environnement Python nécessaire pour exécuter Bandit.
7
• Elle utilise l'action GitHub actions/setup-python@v4 et spécifie la version Python 3.8.
3. Installation de Bandit
- name: Install Bandit
run: |
python -m pip install --upgrade pip
pip install bandit
• Cette étape installe Bandit, un outil d’analyse statique de sécurité pour le code
Python.
• La commande :
o python -m pip install --upgrade pip : Met à jour pip, le gestionnaire de
paquets Python.
o pip install bandit : Installe Bandit dans l’environnement Python.
4. Exécution de Bandit
- name: Run Bandit
run: bandit -r pygoat/
• Cette étape lance Bandit pour analyser le code source du projet, spécifiquement dans
le dossier pygoat/.
• -r : Signifie "récursivement", pour que Bandit analyse tous les fichiers dans le
répertoire et ses sous-dossiers.
e. Objectif Global
Ce workflow permet :
✓ Automatisation de l'analyse de sécurité : Les analyses de sécurité sont
automatiquement exécutées à chaque modification de code (push ou pull request).
✓ Détection des vulnérabilités : Bandit identifie les failles potentielles dans le code
Python, comme des mots de passe codés en dur, des mauvaises pratiques de gestion
des entrées, etc.
✓ Intégration continue : Ce workflow s’intègre dans une stratégie CI/CD pour garantir
un code sécurisé.
4. Aperçu de l’outil Bandit
Bandit est un outil d'analyse statique conçu spécifiquement pour examiner la sécurité
des projets Python. Il scanne le code source Python à la recherche de vulnérabilités
courantes, fournissant ainsi aux développeurs un moyen rapide et efficace de renforcer la
sécurité de leurs applications.
a. Fonctionnalités principales
i. Analyse de sécurité automatisée :
8
o Bandit inspecte les fichiers Python d'un projet et détecte les vulnérabilités
potentielles ou les constructions de code risquées, telles que :
▪ Utilisation de fonctions dangereuses comme eval(), exec().
▪ Utilisation de modules non sécurisés comme pickle.
▪ Mauvaise gestion des fichiers YAML avec [Link]().
▪ Problèmes dans l’utilisation de bibliothèques cryptographiques,
comme les hachages non sécurisés (MD5, SHA1).
ii. Rapports détaillés :
o Les résultats de Bandit sont classés par niveau de gravité (faible, moyen,
élevé) et niveau de confiance (faible, moyen, élevé).
o Génération de rapports dans divers formats (TXT, JSON, HTML), ce qui facilite
son intégration dans des pipelines CI/CD.
iii. Flexibilité :
o Les utilisateurs peuvent configurer Bandit pour ignorer certains fichiers ou
règles spécifiques.
o Support pour l’ajout de tests personnalisés adaptés à des besoins particuliers.
b. Importance de Bandit
i. Amélioration proactive de la sécurité :
o Bandit permet de détecter les failles dès la phase de développement,
réduisant ainsi les risques d'exploitation en production.
o Il s’intègre parfaitement dans une stratégie de sécurité "Shift Left", où les
problèmes de sécurité sont traités au plus tôt.
ii. Adapté aux équipes DevSecOps :
o Son intégration facile dans les pipelines CI/CD (GitLab CI, GitHub Actions,
Jenkins, etc.) en fait un outil précieux pour les équipes DevSecOps.
o Permet de normaliser les bonnes pratiques de sécurité dans le cycle de
développement.
c. Avantages de Bandit
i. Spécialisé pour Python :
o Optimisé pour analyser le code Python, avec une connaissance approfondie
des spécificités et vulnérabilités de ce langage.
ii. Simplicité d’utilisation :
o Un simple appel à la commande bandit peut analyser un projet entier.
o Convient aussi bien aux développeurs débutants qu’aux experts en sécurité.
9
iii. Open Source :
o Gratuit et maintenu par une communauté active, il bénéficie d’une évolution
continue et de contributions externes.
iv. Compatible avec CI/CD :
o Intégration aisée avec des outils comme GitLab CI, GitHub Actions, ou Jenkins
pour une détection automatique des failles à chaque commit.
d. Limites
• Bandit ne couvre que les vulnérabilités liées au code Python. Les problèmes liés à
l’infrastructure ou aux bibliothèques externes doivent être traités par d'autres outils.
• Nécessite une configuration avancée pour ignorer les faux positifs ou inclure des tests
spécifiques.
En résumé, Bandit est un outil essentiel pour tout projet Python qui vise à renforcer la
sécurité et à adopter les meilleures pratiques dès les premières phases du développement.
Son intégration dans les workflows modernes le rend indispensable pour les équipes axées
sur DevSecOps.
10
11
6. Analyse des Résultats
a. Vulnérabilités détectées :
➔ [B105: Hardcoded password string]
o Localisation : Ligne 24 (SECRET_KEY) dans le fichier pygoat/[Link]
o Détail : Un mot de passe ou une clé secrète a été codé en dur dans le fichier
source :
SECRET_KEY = "lr66x-a!$km5ed@n5ug!tya5bv!0(qywa1tn!q%3m2nh%xoml"
o Gravité : Faible (Low).
Cela pourrait cependant poser un problème si le code est déployé en
production sans modification.
➔ [B105: Hardcoded password string]
o Localisation : Ligne 169 (SECRET_COOKIE_KEY) dans le fichier
pygoat/[Link].
o Détail : Une autre chaîne codée en dur :
SECRET_COOKIE_KEY = "PYGOAT"
o Gravité : Faible (Low).
b. Actions Correctives
1. Externaliser les secrets dans des variables d'environnement :
Au lieu de coder les mots de passe et clés directement dans le code source, utilisez des
variables d'environnement. Voici comment corriger ces vulnérabilités :
12
Étape 1 : Modifier le fichier [Link]
• Remplacez les valeurs codées en dur par des lectures depuis des variables
d’environnement :
import os
Dans le rapport généré, la clé précédente a été déclarée explicitement dans le fichier
pygoat/[Link] comme suit :
Voici la partie du rapport généré par le workflow qui discute de cette partie :
13
Une autre clé déclarée explicitement dans le code du projet est au niveau du même
fichier pygoat/[Link] :
Voici la partie du rapport qui montre que cette clé est déclarée explicitement dans le
code :
Voici une analyse des vulnérabilités trouvées dans votre rapport Bandit avec des
explications détaillées et des suggestions de corrections pour chaque type de problème :
➔ [B506:yaml_load]
Description :
• L'utilisation de [Link]() peut permettre la désérialisation d'objets arbitraires, ce
qui pourrait être exploité pour exécuter du code malveillant.
• Exemple dans le rapport :
data = [Link](stream)
Correction :
• Remplacez [Link]() par yaml.safe_load(), qui limite le chargement aux types de
base comme str, int, list, etc.
• Correction :
import yaml
data = yaml.safe_load(stream)
16
import json
admin = [Link]([Link]('utf-8'))
B303: MD5 (hash faible) Utilisation de Remplacer par un algorithme plus sûr
MD5 comme SHA-256.
17
code arbitraire limiter les entrées aux types de base.
b. Résumé :
Le rapport met en lumière des pratiques dangereuses courantes dans la manipulation
des données et l'exécution de commandes. Les corrections proposées utilisent des
alternatives sécurisées ou des bibliothèques spécialisées pour éliminer les risques associés.
Ces ajustements renforceront considérablement la sécurité du code tout en maintenant sa
fonctionnalité.
10. Corrections et améliorations du workflow
Après avoir corriger les vulnérabilités : et apporter les améliorations nécessaires
expliqué précédemment, surtout pour éviter les détections type « false positive », le
nouveau code YML se présente comme suit :
name: CI
on: [push]
jobs:
sast_scan:
name: Run Bandit Scan
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
18
- name: Display Bandit Report
run: cat [Link]
Le nouveau fichier yml, est en fait enregistré dans un nouveau fichier nommé « main.
Yml », l’objectif derrière la création de ce nouveau fichier au lieu de garder l’ancien fichier
« bandit. Yml » est bien évidement de vire te toucher de près l’importance de cette nouvelle
configuration en comparaison avec l’ancienne configuration, surtout quand a des détections
« false positives ». Ceci est très important dans la mesure de nous permettre de se focaliser
sur les vraies vulnérabilités, plus particulièrement les « ture positives ».
b. Jobs et Étapes
3. jobs: sast_scan
o Ce job est nommé "Run Bandit Scan" et s'exécute sur une machine virtuelle
Ubuntu.
4. runs-on: ubuntu-latest
o Le job est exécuté sur la version la plus récente d'Ubuntu.
c. Étapes
1. Checkout code
- name: Checkout code
uses: actions/checkout@v3
• Télécharge le code source du dépôt pour permettre son analyse.
2. Set up Python
19
- name: Set up Python
uses: actions/setup-python@v3
with:
python-version: 3.8
• Configure un environnement Python, en spécifiant explicitement la version Python
3.8 (similaire aux précédentes configurations).
3. Install Bandit
- name: Install Bandit
run: pip install bandit
• Installe Bandit via pip, permettant son utilisation dans l'environnement.
o -ll : Affiche les détails les plus basiques des problèmes détectés (niveau de log
le plus bas).
o -ii : Ajoute des informations détaillées sur les vulnérabilités (comme les
recommandations et CWE associées).
o -r . : Scanne récursivement tout le répertoire (.).
o -f txt : Génère un rapport au format texte.
o -o [Link] : Enregistre le rapport dans un fichier nommé bandit-
[Link].
• continue-on-error: true :
o Permet au workflow de continuer, même si des vulnérabilités sont détectées.
o Cette option est particulièrement utile pour éviter que le pipeline CI échoue à
cause de faux positifs.
20
12. Comparaison avec les Configurations Précédentes
Affichage des Simple affichage des logs de Affiche le contenu du fichier rapport
Résultats Bandit. dans les logs (plus clair).
21
o Les vulnérabilités détectées peuvent bloquer le pipeline.
• Nouvelle Configuration :
o Utilise continue-on-error: true, permettant au pipeline de continuer malgré les
vulnérabilités détectées.
o Fournit un fichier de rapport ([Link]), qui peut être analysé manuellement
pour valider ou ignorer les résultats signalés.
f. Conclusion
La nouvelle configuration est une version optimisée des précédentes :
• Elle est plus flexible grâce à continue-on-error: true.
• Elle offre des résultats plus détaillés avec des métriques précises.
• Elle génère un rapport exploitable, ce qui améliore la gestion des faux positifs et la
collaboration entre les équipes.
Comme est clairement montré dans la photo, cette fois ci, le workflow passe sans
erreurs, ceci est dû au fait que la nouvelle configuration permet d’éviter la détection des
« false positives », aussi bien que la correction des vulnérabilités liées au secrets, en
appliquant bien sur les recommandations afférentes a ceci, il s’agit de supprimer les
déclarations explicites des secrets et les déclarer comme variables d’environnement dans
GitHub.
22
Apres avoir apporter les corrections nécessaires on voit clairement que les différentes
étapes du workflow passent sans échecs, ce qui montre bien évidement que les correctifs
apportés au projet marchent très bien et répondent exactement au besoins et nécessités
voulus, et ceci et très important pour justement rendre l’application moins vulnérable.
23
3. Partie 2 : sast avec le projet [Link]/qamar16/DevSecOps-crash-course-pogota
sur gitlab
L’objectif de cette étape étant d’utiliser cette fois ci gitlab pour bien évidement tacler le
projet en utilisant le pipeline cid. Pour ce faire on doit d’abord importer le projet vie son lien
sur GitHub, vers gitlab et de créer un fichier de configuration yml, le lancer, voir les
vulnérabilités détectées et procéder par la suite à la correction de quelque vulnérabilité.
1. Importation de projet sur gitlab
Comme est déjà vue lors du premier TP, l’importation du projet nécessite le suivie d’un
certain nombre d’étapes, la première étant d’aller sur le bouton « new projet », par la suite
choisir l’option import Project comme illustré ci-après :
Entrer l’url du projet dans la zone réservée et cliquer sur cérate Project et c fini !
24
L’importation in Progress …
Apres avoir créer me projet sur gitlab, vient l’étape de la création du fichier de
configuration yml.
25
stages:
- build
- test
- sast_scan
- deploy
variables:
DJANGO_SETTINGS_MODULE: [Link] # Updated with the
correct settings module name
PYTHONUNBUFFERED: 1
build_application:
stage: build
image: python:3.8
script:
- pip install -r [Link]
- python [Link] collectstatic --noinput --
ignore="fonts/*" --verbosity 2 || true
- python [Link] makemigrations || true
- python [Link] migrate || true
artifacts:
paths:
- staticfiles/
- [Link]
test_application:
stage: test
image: python:3.8
script:
- pip install -r [Link]
- python [Link] test || true
sast_scan:
stage: sast_scan
image: python:3.8
script:
- echo "Setting up environment for SAST scan..."
- python --version
- python -m ensurepip --upgrade
- pip install --upgrade pip
- pip install bandit
- echo "Running Bandit SAST scan..."
- bandit -ll -ii -r . -f txt -o [Link] || true
- cat [Link]
artifacts:
paths:
- [Link]
reports:
sast: [Link]
allow_failure: true
deploy_application:
stage: deploy
image: python:3.8
26
script:
- echo "Skipping deployment stage as it's not critical for
this pipeline."
only:
- main # Deployment happens only on the main branch
allow_failure: true
3. Explication de la configuration
Voici une explication détaillée de la configuration YAML pour GitLab CI/CD :
a. Définition des étapes du pipeline (stages)
stages:
- build
- test
- sast_scan
- deploy
Les différentes étapes de ce pipeline sont :
• build : Étape pour préparer et construire l'application (par exemple, installer les
dépendances, collecter les fichiers statiques, etc.).
• test : Étape pour exécuter les tests de l'application et vérifier son bon
fonctionnement.
• sast_scan : Étape pour effectuer une analyse statique de sécurité (SAST - Static
Application Security Testing) en utilisant l'outil Bandit.
• deploy : Étape optionnelle de déploiement pour mettre l'application en production.
b. Définition des variables globales
variables:
DJANGO_SETTINGS_MODULE: [Link]
PYTHONUNBUFFERED: 1
• DJANGO_SETTINGS_MODULE : Variable d'environnement utilisée par Django pour
localiser le fichier de configuration ([Link]). Ici, elle est définie sur
[Link] (adapté à la structure de votre projet).
• PYTHONUNBUFFERED : Défini à 1 pour désactiver la mise en mémoire tampon de la
sortie Python. Cela garantit que les logs sont affichés en temps réel dans la console.
c. Job : build_application
build_application:
stage: build
image: python:3.8
script:
- pip install -r [Link]
- python [Link] collectstatic --noinput --
ignore="fonts/*" --verbosity 2 || true
- python [Link] makemigrations || true
- python [Link] migrate || true
artifacts:
paths:
- staticfiles/
- [Link]
27
• Étape : Ce job appartient à l'étape build.
• Image Docker : Le job s'exécute dans un conteneur basé sur l'image Docker
python:3.8, qui inclut Python 3.8.
• Script :
o pip install -r [Link] : Installe les dépendances spécifiées dans le
fichier [Link].
o python [Link] collectstatic : Collecte les fichiers statiques de l'application
Django (CSS, JS, etc.) dans un répertoire dédié. Le flag --ignore="fonts/*" évite
les erreurs liées aux fichiers manquants. || true permet au pipeline de
continuer même si cette commande échoue.
o python [Link] makemigrations : Prépare les migrations de base de
données nécessaires (ne bloque pas le pipeline en cas d'échec).
o python [Link] migrate : Applique les migrations pour synchroniser la
base de données avec les modèles Django.
• Artifacts : Les fichiers générés, comme staticfiles/ et [Link], sont
sauvegardés et rendus disponibles pour les étapes suivantes.
d. Job : test_application
test_application:
stage: test
image: python:3.8
script:
- pip install -r [Link]
- python [Link] test || true
• Étape : Appartient à l'étape test.
sast_scan:
stage: sast_scan
image: python:3.8
script:
- echo "Setting up environment for SAST scan..."
- python --version
- python -m ensurepip --upgrade
- pip install --upgrade pip
- pip install bandit
- echo "Running Bandit SAST scan..."
- bandit -ll -ii -r . -f txt -o [Link] || true
- cat [Link]
28
artifacts:
paths:
- [Link]
reports:
sast: [Link]
allow_failure: true
• Étape : Appartient à l'étape sast_scan.
• Image Docker : Utilise toujours python:3.8.
• Script :
o Initialisation : Met à jour pip et installe Bandit, un outil qui analyse le code
Python pour détecter les vulnérabilités.
o Exécution de Bandit : Analyse le code source à la recherche de vulnérabilités
potentielles. Le rapport est généré dans un fichier texte [Link]. La
commande utilise || true pour permettre au pipeline de continuer, même si
des problèmes de sécurité sont détectés.
o Affichage du rapport : Affiche le contenu de [Link] dans les logs.
• Artifacts :
o Sauvegarde le fichier [Link] pour consultation.
o Marque le rapport comme un rapport SAST, compatible avec l'interface
GitLab.
• allow_failure: true : Le job peut échouer sans interrompre le pipeline, car il est
souvent utilisé à titre informatif.
f. Job : deploy_application
deploy_application:
stage: deploy
image: python:3.8
script:
- echo "Skipping deployment stage as it's not critical for
this pipeline."
only:
- main # Déploiement uniquement à partir de la branche
principale
allow_failure: true
• Étape : Appartient à l'étape deploy.
29
i. Pipeline Structuré :
o Les étapes du pipeline sont bien définies, avec une séparation claire entre la
construction, les tests, l'analyse SAST et le déploiement.
ii. Flexibilité :
o Les commandes critiques (comme collectstatic, makemigrations)
n'interrompent pas le pipeline grâce à || true.
o Le déploiement est marqué comme optionnel (allow_failure: true).
iii. Analyse de Sécurité Intégrée :
o L'utilisation de Bandit dans l'étape sast_scan permet d'intégrer une
vérification de sécurité automatisée dans le pipeline CI/CD.
iv. Artifacts :
o Les fichiers générés (staticfiles/, [Link], etc.) sont sauvegardés et
peuvent être utilisés par les jobs suivants.
v. Compatible avec Django :
o Les commandes spécifiques à Django (collectstatic, migrate, etc.) sont bien
intégrées.
4. Pipeline résultat
Apres avoir commuter la configuration précitée, le pipeline CI-CD du gitlab s’exécute.
Les différents stages configurés passent sans échecs, comme est bien illustré ci-après :
Le stage sast-scan présente, comme convenue, un rapport détaillé sur les différentes
vulnérabilités que contient le projet.
5. Rapport généré
Dans cette configuration YAML, le stage sast_scan utilise Bandit pour analyser le code
Python à la recherche de vulnérabilités. Cependant, en l'état actuel, il n'inclut pas de
mécanisme explicite pour réduire ou éviter les faux positifs.
Le rapport global généré dans cette étape se décline comme suit :
30
6. Améliorations pour Réduire les Faux Positifs
Pour réduire les faux positifs, on doit ajuster la configuration :
a. Utiliser un Profil Bandit Personnalisé :
• Bandit permet de définir un profil (--profile) pour inclure ou exclure des tests
spécifiques.
• Exemple : Exclure les tests connus pour générer des faux positifs.
sast_scan:
stage: sast_scan
image: python:3.8
script:
- echo "Setting up environment for SAST scan..."
- python --version
- python -m ensurepip --upgrade
- pip install --upgrade pip
- pip install bandit
- echo "Running Bandit SAST scan with custom profile..."
- bandit -ll -ii --skip B101,B303 -r . -f txt -o bandit-
[Link] || true
- cat [Link]
artifacts:
paths:
- [Link]
reports:
sast: [Link]
allow_failure: true
• --skip : Cette option permet de sauter des tests spécifiques (par exemple, B101 pour
assert ou B303 pour md5()).
b. Utiliser des Directives # nosec dans le Code :
• Pour les faux positifs connus, ajoutez # nosec dans votre code pour indiquer à Bandit
d'ignorer certaines lignes.
• Exemple :
password = md5(input_password.encode()).hexdigest() # nosec
• Avantage : Bandit n'inclura pas cette ligne dans son rapport.
31
c. Utiliser l'Option --confidence :
• Vous pouvez ajuster le seuil de confiance des résultats pour afficher uniquement ceux
avec un niveau de confiance élevé.
• Exemple :
bandit -ll --confidence high -r . -f txt -o [Link] ||
true
• Cela limite les faux positifs en excluant les résultats de faible confiance.
d. Analyser les Résultats Avant Échec du Pipeline :
• Plutôt que de laisser le pipeline continuer à cause de || true, vous pouvez ajouter
une étape pour analyser et filtrer les résultats avant de décider si le pipeline doit
échouer.
• Exemple (analyser uniquement les vulnérabilités graves) :
bandit -ll -r . -f txt -o [Link]
grep -q "High" [Link] || echo "No critical issues
found"
e. Conclusion
Dans la configuration actuelle :
• Le stage sast_scan permet de détecter les vulnérabilités, mais il ne réduit pas
directement les faux positifs.
• Pour éviter les faux positifs, il est recommandé d'ajouter des options comme --skip, --
confidence, ou d'utiliser des directives # nosec dans le code.
7. Rapport après amélioration
Apres cette amélioration, le rapport des vulnérabilités généré contient bien moins de
vulnérabilité, et ceci est dû aux faites que la nouvelle configuration de ce job « généré »
permet de traiter au mieux les « false positives ». Le résultat est alors comme suit :
Les résultats entourés sont ceux qui ont connus des modifications apr. rapport a
l’ancien rapport, après cette dernière rectification.
8. Rapport sast_scan
32
Le job sast scan est configuré de manière à faire appel à l’outil bandit, comme on a déjà
exploré l’importance de cet outil dans l’analyse des vulnérabilités existant dans un projet
python, on va passer directement à exposer et analyser le rapport généré par cet outil lors
de son exécution dans le cadre du job sast_scan configuré comme stage dans le pipeline CI-
CD.
a. Analyse du rapport bandit avec explication et corrections nécessaires pour
chaque vulnérabilité
Voici une explication de chaque vulnérabilité détectée avec la correction appropriée :
1. [B506: yaml_load]
• Description : L'utilisation de [Link] permet d'instancier des objets arbitraires, ce
qui peut être exploité pour exécuter du code malveillant.
• Correction : Utilisez yaml.safe_load pour charger les fichiers YAML de manière
sécurisée.
• Code corrigé :
import yaml
stream = open('/home/fox/[Link]', 'r')
data = yaml.safe_load(stream)
2. [B307: eval]
• Description : La fonction eval exécute des expressions Python passées sous forme de
chaînes de caractères. Elle est vulnérable à l'exécution de code arbitraire.
• Correction : Utilisez ast.literal_eval, qui évalue de manière sûre des littéraux Python.
• Code corrigé :
import ast
expression = [Link]('expression')
result = ast.literal_eval(expression)
3. [B602: subprocess_popen_with_shell_equals_true]
• Description : L'utilisation de [Link] avec shell=True peut permettre des
attaques d'injection de commande.
• Correction : Désactivez shell=True et transmettez les commandes sous forme de liste.
• Code corrigé :
import subprocess
command = ["ls", "-l"]
process = [Link](command, stdout=[Link],
stderr=[Link])
stdout, stderr = [Link]()
4. [B301: [Link]]
• Description : [Link] peut désérialiser des données non fiables, entraînant
l'exécution de code arbitraire.
33
• Correction : Évitez d'utiliser pickle pour désérialiser des données non fiables. Utilisez
un format sécurisé comme JSON.
• Code corrigé :
import json
admin = [Link](token)
if admin["admin"] == 1:
# Logique de traitement
5. [B317: [Link].make_parser]
• Description : [Link].make_parser est vulnérable aux attaques XML (XXE, entités
externes).
• Correction : Utilisez la bibliothèque defusedxml pour sécuriser l'analyse XML.
• Code corrigé :
from [Link] import make_parser
parser = make_parser()
[Link](feature_external_ges, True)
6. [B319: [Link]]
• Description : [Link] est également vulnérable aux attaques
XML.
• Correction : Utilisez defusedxml pour une analyse XML sécurisée.
• Code corrigé :
from [Link] import parseString
doc = parseString([Link]('utf-8'))
34
data = yaml.safe_load(file)
b. Résumé des corrections à apporter
1. Remplacer tous les appels à [Link] par yaml.safe_load.
2. Remplacer eval par ast.literal_eval.
3. Remplacer [Link] avec shell=True par des listes de commandes sans
shell=True.
4. Éviter pickle pour désérialiser et utiliser [Link].
5. Utilisez la bibliothèque defusedxml pour tout traitement XML.
Ces changements permettront de sécuriser le code contre les vulnérabilités détectées
et réduiront les risques d'exploitation.
35
III. Partie 2 : DAST
1. Introduction
Dans le cadre de l’intégration des pratiques DevSecOps dans notre pipeline CI/CD, la
mise en œuvre de tests de sécurité dynamiques (DAST - Dynamic Application Security
Testing) joue un rôle central. Cette démarche vise à identifier les vulnérabilités de sécurité
au sein des applications web pendant leur exécution. En complément de l’outil DAST natif de
GitLab, nous avons intégré OWASP ZAP, une solution open source reconnue pour son
efficacité dans l'analyse dynamique des applications. Cette configuration permet non
seulement de renforcer la robustesse de nos applications, mais aussi d’automatiser les tests
de sécurité, garantissant ainsi une détection proactive des failles, telles que les injections
SQL, les vulnérabilités XSS ou encore les configurations de sécurité inadéquates.
Une fois importé, l’étape qui suit s’agit bien évidement de la configuration du fichier
yml.
1. Configuration yml
L'objectif est de configurer un pipeline CI/CD intégrant une analyse DAST (Dynamic
Application Security Testing) afin de mieux comprendre et apprécier l'importance de cette
étape dans le domaine du DevSecOps. Ce processus vise à détecter les vulnérabilités de
sécurité dans les applications en temps réel, en les testant dans un environnement
opérationnel. L'intégration de DAST dans un pipeline CI/CD permet de renforcer la sécurité
des applications dès les phases initiales du développement, contribuant ainsi à livrer des
logiciels robustes et conformes aux exigences de sécurité.
2. Aperçu de l'analyse DAST (Dynamic Application Security Testing)
36
L’analyse DAST (Dynamic Application Security Testing) est une méthode de test de
sécurité qui consiste à analyser les applications en cours d'exécution pour détecter des
vulnérabilités exploitables dans un environnement opérationnel. Contrairement aux outils
SAST (Static Application Security Testing) qui examinent le code source, DAST effectue des
tests "dynamiques" en simulant des attaques comme le ferait un attaquant.
a. Objectif principal :
• Identifier les vulnérabilités de sécurité dans une application en cours d'exécution,
telles que les failles XSS (Cross-Site Scripting), les injections SQL, ou les mauvaises
configurations.
• Garantir la sécurité des applications avant leur mise en production.
b. Importance et utilité :
i. Détection des vulnérabilités en temps réel :
o Permet de tester l’application dans un environnement réel, proche de celui de
production.
ii. Validation des mesures de sécurité :
o Vérifie que les configurations et les contrôles de sécurité (comme
l’authentification et les autorisations) fonctionnent correctement.
iii. Réduction des risques :
o Diminue les chances d'exploitation par des attaquants après le déploiement
de l’application.
c. Caractéristiques principales :
i. Analyse en boîte noire :
o Ne nécessite pas l’accès au code source de l’application.
o Simule les actions d’un attaquant externe.
ii. Approche dynamique :
o Analyse l'application lorsqu'elle est en cours d'exécution, en interagissant avec
ses interfaces.
iii. Portée étendue :
o Peut détecter des vulnérabilités liées à l’environnement, aux services tiers ou
aux erreurs de configuration.
d. Avantages :
• Indépendance du code source : Convient aux applications écrites dans différentes
technologies ou dans des environnements complexes.
• Réduction des faux positifs : Les vulnérabilités identifiées sont exploitables, ce qui
garantit une précision élevée.
• Tests réalistes : Simule des attaques réelles pour évaluer la robustesse de
l’application face à des menaces externes.
• Complémentarité avec d'autres tests : Combine bien avec SAST pour une couverture
complète des vulnérabilités.
37
e. Limitations :
i. Accès limité à l'intérieur de l'application :
o Ne peut pas identifier les vulnérabilités liées à la logique métier ou au code
source.
ii. Tests dépendants de l'environnement :
o Les résultats peuvent varier selon l’environnement de test utilisé.
iii. Nécessité de configurations spécifiques :
o Des erreurs de configuration dans les tests DAST peuvent entraîner des faux
négatifs ou omettre certaines vulnérabilités.
iv. Délai de test :
o Les tests dynamiques peuvent être plus longs à exécuter, ce qui peut ralentir
le pipeline CI/CD si non optimisé.
f. Conclusion :
L'analyse DAST est un outil essentiel dans le cadre du DevSecOps, car elle permet de
sécuriser les applications en détectant des vulnérabilités critiques en temps réel. Bien qu'elle
présente certaines limitations, son intégration dans un pipeline CI/CD permet de renforcer la
sécurité globale des applications, en particulier lorsqu'elle est utilisée en complément
d'autres tests comme SAST et les tests de pénétration.
3. Le fichier de configuration yml
La configuration yml que nous proposons dans ce cas se décline comme suit :
stages:
- build
- test
- docker
- dast
# Run tests
test_application:
stage: test
image: maven:3.8-openjdk-11
script:
- mvn test
artifacts:
paths:
- target/*-reports/TEST-*.xml
38
# Build and push docker image
docker_image:
stage: docker
image: docker:latest
services:
- docker:dind
variables:
DOCKER_TLS_CERTDIR: ""
script:
- docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD
$CI_REGISTRY
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
artifacts:
paths:
- [Link]
when: always
# DAST scan
dast_scan:
stage: dast
image: [Link]/gitlab-org/security-
products/dast:latest
variables:
DAST_WEBSITE: [Link]
DAST_FULL_SCAN_ENABLED: "true"
DAST_HTML_REPORT: "true"
services:
- name: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
alias: app
script:
- curl -s [Link] || (echo "Target application is
not accessible" && exit 1)
- /analyze
- cp /app/zap/[Link] [Link] || echo "No DAST
HTML report generated"
artifacts:
paths:
- [Link]
- [Link]
reports:
dast: [Link]
only:
- main
4. Description de la configuration
Cette configuration GitLab CI/CD est destinée à automatiser les étapes de construction,
de test, de création d'image Docker et de tests de sécurité dynamique (DAST) pour une
application web. Elle repose sur une structure bien définie de pipelines visant à garantir à la
fois la qualité fonctionnelle et la robustesse sécuritaire du code.
a. Structure et rôles des étapes principales :
Étape 1 : Build
39
• Objectif : Compiler le code source et générer un fichier exécutable .jar.
• Environnement : Utilise une image Docker contenant Maven et Java 11 (maven:3.8-
openjdk-11).
• Commandes exécutées :
o mvn clean package -DskipTests : Nettoie et compile le projet en générant un
fichier .jar sans exécuter les tests.
• Artefacts générés :
o Le fichier .jar compilé est sauvegardé pour être utilisé dans les étapes
suivantes.
Étape 2 : Test
• Objectif : Exécuter les tests unitaires pour garantir la fiabilité du code.
• Commandes exécutées :
o mvn test : Lance tous les tests unitaires définis dans le projet.
• Artefacts générés :
o Les résultats des tests sont sauvegardés sous forme de fichiers XML pour une
analyse ultérieure.
Étape 3 : Docker
• Objectif : Construire une image Docker contenant l'application et la déployer dans le
registre Docker GitLab.
• Services associés :
o docker:dind (Docker-in-Docker) permet de manipuler Docker dans le pipeline.
• Commandes exécutées :
o Construction de l'image Docker avec la commande :
docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
o Connexion au registre GitLab :
40
• Services associés :
o L'image Docker de l'application (créée lors de l'étape Docker) est utilisée pour
déployer temporairement l'application sous l'alias app.
• Variables définies :
o DAST_WEBSITE : URL cible de l'application (dans ce cas, [Link]
o DAST_FULL_SCAN_ENABLED : Active un scan complet pour une couverture
exhaustive.
o DAST_HTML_REPORT : Génère un rapport HTML pour une consultation plus
facile.
• Commandes exécutées :
a. Vérification que l'application est accessible :
curl -s [Link] || (echo "Target application is not
accessible" && exit 1)
b. Exécution du scan DAST avec l'outil intégré :
/analyze
c. Copie du rapport généré :
cp /app/zap/[Link] [Link] || echo "No DAST HTML
report generated"
• Rapports générés :
42
c. Conclusion :
Cette configuration CI/CD démontre une approche complète et moderne pour la
gestion des cycles de développement logiciel, en intégrant des contrôles de qualité et de
sécurité. L’étape DAST, en particulier, représente une valeur ajoutée essentielle, car elle
permet d’identifier les failles de sécurité avant que l’application ne soit déployée en
production. En combinant les tests dynamiques (DAST) avec les étapes de build, de test, et
de déploiement Docker, ce pipeline garantit que l'application est à la fois fonctionnellement
robuste et sécurisée contre les menaces courantes.
5. Pipeline résultat :
Le pipeline résultat de cette configuration est le suivant :
→ On voit que les différents stages du pipeline passent sans échec, cela montre que la
configuration est bien correcte,
Ceci est le tableau de bord de sécurité issu du pipeline GitLab, présentant une vue
historique des vulnérabilités ouvertes dans la branche par défaut au fil du temps. Les points
clés sont :
• Catégories de vulnérabilités : Critique, Élevée, Moyenne, Faible, Info et Inconnue.
• Chronologie : Couvre la période du 2 novembre 2024 au 30 novembre 2024.
43
• Résultats :
o Le 30 novembre 2024, une vulnérabilité de gravité "Faible" et un résultat dans
la catégorie "Info" ont été détectés.
o Aucune vulnérabilité n’a été classée comme Critique, Élevée, Moyenne ou
Inconnue sur toute la période.
• Tendance : Le statut de sécurité est resté stable, avec des vulnérabilités apparaissant
uniquement à la dernière date.
Ce tableau de bord fournit un aperçu de l'état de sécurité du projet, utile pour suivre et
corriger les risques potentiels.
7. Rapport de sécurité
45
o Après avoir implémenté l'en-tête, utilisez un outil tel que curl ou un scanner
de sécurité pour vérifier que l'en-tête est bien inclus dans toutes les réponses
HTTP.
9. Points positifs :
• L'application semble résistante à plusieurs types d'attaques :
o Aucune vulnérabilité détectée pour SQL Injection, XSS, Remote Command
Execution, et autres failles critiques.
o Bonnes pratiques observées dans les mécanismes de session et de gestion des
cookies.
• Les logs montrent que les plugins ZAP ont été bien chargés, et les scans actifs/passifs
ont couvert de nombreuses vulnérabilités potentielles.
3. Atelier 2 : dast avec intégration de OWASP ZAP
Dans cette partie du projet on va essayer de tacler le projet avec une autre approche
pour mieux comprendre et assimiler l’intégration de l’analyse DAST dans les projets.
l’objectif et étant de se focaliser sur l’analyse DAST avec l’intégration Dun outil fort dans ce
domaine, il s’agit de « OWASP ZAP ».
1. Aperçu sur OWASP ZAP
OWASP ZAP (Zed Attack Proxy) est un outil open source de test de sécurité des
applications web développé par le projet OWASP (Open Web Application Security Project). Il
est conçu pour détecter les vulnérabilités de sécurité dans les applications web de manière
dynamique, en simulant des attaques réelles sur une application en cours d'exécution.
a. Objectifs principaux :
• Identifier les vulnérabilités de sécurité dans les applications web.
• Permettre aux développeurs et aux testeurs de sécurité d’effectuer des analyses de
sécurité sans nécessiter des connaissances approfondies en sécurité.
• Automatiser les tests de sécurité dans des pipelines CI/CD pour une intégration
continue.
b. Fonctionnalités principales :
➔ Scan passif :
o Inspecte passivement les requêtes et réponses HTTP pour détecter des
vulnérabilités sans modifier ou perturber le comportement de l'application.
o Exemple : Vérification des en-têtes de sécurité, détection de fichiers ou
répertoires exposés.
➔ Scan actif :
o Simule des attaques sur l'application pour identifier les vulnérabilités
exploitables.
o Exemple : Injection SQL, XSS (Cross-Site Scripting), inclusion de fichiers, etc.
46
➔ Proxy intermédiaire (Man-in-the-Middle) :
o Fonctionne comme un proxy entre le client et le serveur pour intercepter,
analyser et modifier les requêtes/réponses HTTP.
o Idéal pour tester manuellement les comportements des applications web.
➔ Spidering (Crawling) :
o Explore automatiquement les pages et les ressources d'une application web
pour construire une vue complète de ses endpoints (URL accessibles).
o Utile pour détecter des endpoints oubliés ou non documentés.
➔ Ajout de scripts personnalisés :
o Supporte des langages comme Python ou JavaScript pour automatiser des
scénarios de tests personnalisés.
➔ Tests de sécurité automatisés :
o Intégration dans les pipelines CI/CD pour détecter automatiquement les
vulnérabilités à chaque build ou déploiement.
➔ Rapports de sécurité :
o Génère des rapports détaillés au format HTML, JSON ou XML, contenant les
résultats des scans.
c. Types de vulnérabilités détectées par OWASP ZAP :
➔ Failles d'injection :
o Exemples : Injection SQL, XSS, injection de commandes système.
o Impact : Exécution de commandes non autorisées ou accès à des données
sensibles.
➔ Exposition de données sensibles :
o Exemples : Réponses HTTP contenant des informations sensibles (emails,
tokens, identifiants).
o Impact : Fuite d'informations critiques.
➔ Mauvaise configuration de sécurité :
o Exemples : Absence d'en-têtes HTTP comme X-Content-Type-Options, Strict-
Transport-Security.
o Impact : Exploitation par des attaques de type clickjacking ou injection.
➔ Problèmes d'authentification et d'autorisation :
o Exemples : Session fixation, cookies non sécurisés.
o Impact : Prise de contrôle de sessions utilisateur.
➔ Failles de logique métier :
o Tests personnalisés pour détecter des comportements inattendus dans
l'application (exemple : transactions illégitimes).
47
➔ Attaques sur les APIs :
o Vérifie les endpoints des APIs REST ou SOAP pour détecter des vulnérabilités
liées à des injections ou des mauvaises configurations.
d. Points forts :
• Gratuit et open source : Accessible pour tous, y compris les petites entreprises et les
développeurs indépendants.
• Facilité d’utilisation : Interface intuitive et options pour les utilisateurs débutants ou
avancés.
• Personnalisation : Possibilité d’ajouter des plugins ou des scripts personnalisés.
• Intégration avec CI/CD : Compatible avec les pipelines de développement continu
comme GitLab CI/CD, Jenkins, etc.
• Communauté active : Supporté par une large communauté et constamment mis à
jour.
e. Cas d’utilisation typiques :
• Développeurs :
o Tester la sécurité des applications pendant le développement.
o Détecter les failles de sécurité courantes sans avoir besoin de compétences
approfondies en cybersécurité.
• Équipes DevSecOps :
o Automatiser les tests de sécurité dans les pipelines CI/CD pour détecter les
vulnérabilités dès les premières étapes du développement.
• Testeurs de sécurité (pentesters) :
o Utiliser ZAP comme outil complémentaire pour identifier des vulnérabilités
exploitables.
f. Conclusion :
OWASP ZAP est un outil puissant, polyvalent et accessible pour effectuer des analyses
de sécurité dynamiques sur les applications web. Son intégration dans les workflows
DevSecOps et sa capacité à détecter un large éventail de vulnérabilités en font un choix
incontournable pour les développeurs et les testeurs soucieux de sécuriser leurs applications
face aux menaces modernes.
2. Exécution
Dans le cadre de ce travail à faire, l'objectif principal était d'implémenter l'analyse de
sécurité DAST (Dynamic Application Security Testing) dans un pipeline GitLab, ainsi que
d'utiliser l'outil OWASP ZAP pour effectuer une analyse de vulnérabilité sur une application
Web. Voici les étapes clés suivies pour atteindre cet objectif :
a. Clonage du projet et mise en place de l'application
Tout d'abord, nous avons cloné le projet contenant l'application vulnérable en utilisant
la commande suivante :
48
git clone git://[Link]/ScaleSec/vulnado
cd vulnado
Ensuite, nous avons utilisé Docker Compose pour faire tourner l'application en arrière-
plan, afin de simuler un environnement vulnérable pour l'analyse de sécurité :
docker-compose up
Une fois l'application en cours d'exécution, nous avons vérifié que l'application était
bien disponible à l'adresse [Link]
Ensuite, nous avons exécuté Ngrok pour exposer l'application à travers un tunnel HTTP :
49
Cela a généré une URL publique [[Link] que
nous avons utilisée dans le pipeline pour les analyses de sécurité.
4. Configuration yml
Voici la configuration yml :
50
5. Explication de la configuration
Cette configuration GitLab CI/CD définit un pipeline d'intégration et de déploiement
continu avec deux étapes principales liées à des scans de sécurité DAST (Dynamic Application
Security Testing), utilisant GitLab et OWASP ZAP.
a. Déclaration des étapes (stages) :
stages:
- dast
- zap_scan
Deux étapes sont définies dans ce pipeline :
• dast : Étape où le scan DAST de GitLab est exécuté à l'aide de son modèle intégré.
• zap_scan : Étape personnalisée pour exécuter un scan de sécurité avec OWASP ZAP.
b. Inclusion du template GitLab DAST :
include:
- template: [Link]
• Cette ligne inclut un modèle GitLab préconstruit pour les scans DAST.
• Ce modèle contient une configuration standard pour exécuter des scans de sécurité à
l'aide de l'outil DAST intégré dans GitLab.
c. Déclaration des variables globales :
variables:
DAST_WEBSITE: [Link]
51
• DAST_WEBSITE : Définit l'URL cible pour le scan de sécurité. Ici, l'application web
hébergée est accessible via un tunnel Ngrok.
d. Étape 1 : Scan DAST intégré de GitLab
dast:
stage: dast
variables:
DAST_WEBSITE: [Link]
• Cette étape utilise le modèle intégré GitLab pour exécuter un scan DAST.
6. Détails de la configuration :
a. Image Docker utilisée :
o maven:3.8.5-openjdk-17-slim : L'image Docker contenant Maven et Java pour
exécuter des commandes, nécessaires pour OWASP ZAP.
b. Installation et téléchargement de ZAP :
o Les commandes téléchargent la version 2.14.0 de OWASP ZAP (outil de scan)
depuis GitHub, la décompressent et la préparent pour l'exécution.
c. Exécution du scan rapide (quick scan) :
o Commande :
53
Le rapport ZAP a été sauvegardé en tant qu'artifact HTML, ce qui nous permet de le
récupérer et de l'analyser pour les vulnérabilités détectées.
9. Conclusion de l’atelier
Ce travail a permis d'implémenter une analyse dynamique de sécurité (DAST) en
utilisant les outils GitLab et OWASP ZAP dans un pipeline CI/CD. Nous avons configuré un
environnement local accessible via Internet à l'aide de Ngrok, et avons utilisé GitLab pour
automatiser le processus de test de vulnérabilité sur l'application cible. Le rapport généré
fournit une vue d'ensemble complète des vulnérabilités de l'application, contribuant ainsi à
l'amélioration de sa sécurité.
54
4. Conclusion de la partie dast
L’intégration combinée de l’outil DAST de GitLab et de OWASP ZAP dans notre pipeline
CI/CD nous a permis d’instaurer un environnement sécurisé et automatisé pour l’analyse des
vulnérabilités dynamiques des applications web. Grâce à cette approche, nous avons pu non
seulement détecter et documenter efficacement les failles potentielles, mais aussi mettre en
œuvre des mécanismes d’amélioration continue pour la sécurité des applications. Cette
stratégie s’inscrit dans une démarche DevSecOps proactive, favorisant la livraison
d’applications sûres et fiables tout en minimisant les risques en production. L’utilisation
d’OWASP ZAP, couplée aux capacités de GitLab DAST, constitue une solution robuste et
flexible pour répondre aux exigences de sécurité modernes.
55
IV. Conclusion Générale
L’intégration des analyses SAST et DAST dans un pipeline CI/CD constitue une solution
innovante et efficace pour relever les défis croissants de la sécurité des applications. Grâce à
l’analyse SAST, les vulnérabilités présentes dans le code source sont détectées dès les
premières étapes, réduisant ainsi les coûts et les délais liés à leur correction. Parallèlement,
l’analyse DAST, avec l’intégration d’OWASP ZAP, offre une évaluation complète en temps réel
des applications en environnement d’exécution, permettant de détecter des failles difficiles à
identifier dans un contexte purement statique.
L’automatisation de ces processus au sein du pipeline CI/CD a non seulement renforcé
la sécurité des applications, mais aussi favorisé un développement plus agile, en réduisant le
temps nécessaire pour identifier et corriger les problèmes. De plus, la capacité à produire
des rapports détaillés et exploitables a permis une meilleure collaboration entre les
développeurs et les équipes de sécurité. Ce projet démontre ainsi que l’intégration des tests
de sécurité au cœur du cycle de développement logiciel n’est pas seulement un impératif
technique, mais également une nécessité stratégique pour garantir des solutions robustes,
fiables et conformes aux standards de sécurité modernes. En adoptant une démarche
DevSecOps, les organisations peuvent anticiper les menaces et bâtir des applications
résilientes tout en répondant aux exigences de rapidité et de qualité dans un marché
compétitif.
56