Cette deuxième partie de la solution type explique comment configurer des essais dynamiques (DAST) pour vérifier automatiquement la sécurité d’une application Web après son déploiement. Si vous n’avez pas suivi les étapes de la première partie <lien vers la première partie>, veuillez le faire maintenant afin d’installer les logiciels nécessaires à l’analyse statique (SAST) et dynamique (DAST). Nous préconisons que vous commenciez par des essais statiques avant de passer aux essais dynamiques, dont la configuration est plus complexe.
Dans ce document, nous vous montrerons comment Parabellyx utilise Selenium/Zaproxy et Kubernetes pour effectuer une analyse dynamique du pipeline de développement des logiciels.
Prérequis à l’utilisation du Propulseur
Google Chrome 95.0.4638.69 (ou version plus récente)
Dépôt Git (privé ou personnel)
Déploiement du Propulseur Iris dans l’ATIR
Module d’extension Selenium IDE pour le navigateur [facultatif]
Diagramme de la solution
Le schéma ci-dessous illustre la structure de la solution type.
Nous utiliserons un script Selenium et Zaproxy avec Jenkins (pipeline CI) pour intégrer automatiquement l’analyse DAST à une application Web de source ouverte populaire (DVWA).
Selenium IDE
Selenium est un coffre à outils servant à tester les sites Web. Nous vous fournissons le script Selenium avec lequel vous effectuerez l’analyse DAST. Cependant, si vous préférez utiliser votre propre script ou modifier le nôtre, voyez l’annexe pour savoir comment installer Selenium IDE et vous en servir.
Automatisation de l’analyse DAST (CI)
On peut automatiser les essais dynamiques en les intégrant au pipeline Jenkins. Vous en trouverez une illustration dans le dépôt Git https://github.com/parabellyx/dast-nocode.
Pour commencer, clonez le dépôt mentionné ci-dessus et copiez le clone dans votre propre dépôt Git. Vous devrez modifier les fichiers en fonction de la plateforme d’essai locale et relancer l’automatisation de la copie.
Interface utilisateur (IU) Web de Jenkins
Ensuite, nous verrons comment configurer ZAP_KEY, UAT_USER et UAT_PASSWORD avec Jenkins.
Pour que des personnes non autorisées ne puissent accéder à l’API de Zaproxy, vous devrez absolument créer une clé ZAP_KEY. Par défaut, Zaproxy interdira la communication avec son API si aucune clé n’a été configurée.
Vous aurez aussi besoin des identifiants UAT_USER et UAT_PASSWORD pour analyser les applications Web avec Selenium.
1. Ouvrez une séance sur votre instance de l’IU Web de Jenkins.
2. Créez l’identifiant ZAP_KEY avec l’option Manage Credentials dans Manage Jenkins.
3. Cliquez (global) dans Domains.
4. Cliquez Add Credentials.
5. Dans le menu déroulant Kind, sélectionnez Secret text.
6. Saisissez la clé de l’API qui servira à communiquer avec l’API des serveurs mandataires de ZAP.
7. Saisissez la clé ZAP_KEY dans ID.
8. Inscrivez « 12ab56cd78ef » dans Secret.
9. Cela fait, cliquez OK.
10. Reprenez ces étapes pour ajouter l’identifiant UAT_USER à ID et saisissez « admin » dans Secret.
11. Enfin, ajoutez UAT_PASSWORD dans ID et saisissez « password » dans Secret.
Ces opérations associeront le contenu de Secret au pipeline CI/CD de façon sécurisée même si, dans la pratique, on recourrait à des valeurs moins faciles à déchiffrer.
Installation de Maven
Vous devez installer Maven avec Jenkins pour bâtir l’application DAST. Pour cela, utilisez Global Tool Configuration dans Manage Jenkins.
1. Descendez jusqu’à Global Tool Configuration, au bas de l’écran puis cliquez Add Maven.
2. Dans Name, saisissez « maven 3.6.3 ».
3. Cochez Install automatically et sélectionnez la version 3.6.3 puis cliquez Save.
Le pipeline a été créé.
4. Sur l’écran principal, cliquez New Item.
5. Donnez un nom au pipeline puis sélectionnez Pipeline et cliquez OK.
6. Dans le menu déroulant Definition, sélectionnez Pipeline script from SCM.
7. Dans le menu déroulant SCM, sélectionnez Git et spécifiez l’URL du dépôt.
Remplacez https://github.com/parabellyx/dast-nocode.git par l’URL de votre dépôt Git (voir la saisie d’écran qui suit).
Remarque : si vous utilisez un dépôt privé, vous devrez indiquer les identifiants nécessaires pour y accéder. Assurez-vous que l’embranchement est bien main. Cliquez Save.
Remarque : il se peut que Jenkins utilise l’embranchement principal par défaut pour analyser le code dans le pipeline des versions. Certaines organisations ont modifié la terminologie de Jenkins en remplaçant « master » par « main ». Assurez-vous que le Branch Specifier a été correctement paramétré.
Vous êtes maintenant prêt à passer aux essais dynamiques.
1. Cliquez Build Now sur l’écran du projet pour lancer le pipeline.
2. Une fois le pipeline traversé, cliquez le numéro de la version la plus récente.
3. Pour ouvrir le rapport du serveur mandataire Zap, cliquez report.html dans le résumé Build Artifacts.
4. Le rapport Zap ressemblera à ce qui suit.
5. Pour corriger l’application, cliquez une des Alerts énumérées sous Name (Directory Browsing, par exemple).
Le rapport mentionnera tous les endroits où Zaproxy a détecté la vulnérabilité « Directory Browsing ». Zaproxy proposera aussi un moyen pour régler le problème et des liens qui vous en apprendront plus sur la vulnérabilité.
Scripts Selenium sur mesure pour l’analyse DAST
Création de scripts d’analyse fonctionnels avec Selenium
Dans la procédure qui précède, vous avez utilisé un script Selenium existant (il faisait partie du Propulseur) pour vérifier la fonctionnalité de l’application DVWA.
La partie qui suit vous montrera comment créer vos propres scripts afin d’automatiser l’analyse fonctionnelle de l’application Web et la raccorder au cadre d’analyse DAST déployé par le Propulseur. Pour intégrer Selenium à l’analyse DAST, vous pouvez utiliser le module d’extension Selenium IDE et suivre les instructions ci-dessous.
Module d’extension Selenium IDE pour le navigateur
Ce module produit rapidement un script d’automatisation fonctionnel pour n’importe quelle application Web. Le script, baptisé fichier « side » peut être réutilisé à l’envi pour automatiser les tests d’acceptation par l’utilisateur (UAT) et être lancé en même temps que l’analyse DAST.
1. Téléchargez et installez le module Selenium IDE qui correspond à votre navigateur. Chrome, dans notre exemple.
2. Sur l’onglet des modules d’extension de Chrome, sélectionnez Selenium IDE.
Le menu principal s’affichera à l’écran.
3. Puisqu’il s’agit du premier UAT, nous choisirons Record a new test in a new project.
4. Donnez un nom au projet. Ici, nous avons retenu le nom de la principale application testée.
5. Saisissez l’URL de l’application.
6. Cela fait, cliquez START RECORDING. Une fenêtre s’affichera sur le navigateur et Selenium IDE commencera à enregistrer les opérations (clics de la souris et touches du clavier).
7. Ensuite, examinez le site Web en suivant une liste de vérification qui énumère les gestes typiques de l’utilisateur.
Exemple d’une liste servant à vérifier les instructions de l’essai d’acceptation
UAT 1 : Ouverture de séance
Description : vérifie l’ouverture d’une séance sur le site tgtprac
Étapes
Aller à https://tgtprac.managedbyparabellyx.com/index.php
Fournir les identifiants pour le test (admin, mot de passe)
Après ouverture de la séance, vérifier que le site Web affiche bien la page d’accueil
Cliquer « Setup » à gauche
Vérifier que SERVER_NAME est bien tgtprac.managedbyparabellyx.com
Cliquer « DVWA Security » à gauche
Vérifier que la page « DVWA Security » s’affiche
Vérifier que la valeur de « Security Level » est « low »
Cliquer « Logout »Vérifier que la page d’ouverture de séance s’affiche
—
UAT 2 : Vérification du chargement des pages
Description : s’assure que les pages requises s’affichent
Étapes
Aller à https://tgtprac.managedbyparabellyx.com/index.php
Fournir les identifiants pour le test (admin, mot de passe)
Vérifier que la page « Welcome to Damn Vulnerable Web Application! » s’affiche
Cliquer le bouton « Brute Force » dans le menu de gauche
Vérifier que la page « Vulnerability: Brute Force » s’affiche
Cliquer le bouton « Command Injection » dans le menu de gauche
Vérifier que la page « Vulnerability: Command Injection » s’affiche
Cliquer le bouton « CSRF » dans le menu de gauche
Vérifier que la page « Vulnerability: Cross Site Request Forgery (CSRF) » s’affiche
Cliquer le bouton « Logout » dans le menu de gauche
Vérifier que la page d’ouverture de séance s’affiche
8. Une fois que vous aurez terminé un des scénarios UAT, stoppez l’enregistrement en cliquant le bouton dans le coin supérieur droit de la fenêtre Selenium IDE.
9. Donnez un nom à l’enregistrement et cliquez OK, puis l’icône d’enregistrement dans le coin supérieur droit.
Ceci créera un fichier JSON avec une extension « side » qu’on pourra importer dans Selenium IDE pour le revoir, l’analyser ou le modifier, au besoin. Le fichier contient du texte en clair, donc soyez prudent avec les mots de passe, car tous ceux qui y auront accès les verront.
Truc : pour protéger votre identité et vos justificatifs, utilisez un compte temporaire sur une plateforme de développement ou d’essai et changez-en couramment les mots de passe.