Aller au contenu

Stage Pentests (DAST) [TODO]

Nous avons vu précédemment des outils pour analyser ton code, tes dépendances et image docker, mais de façon statique appelé SAST.

Ici je te propose plonger dans le monde du DAST, AKA l'analyse cette fois-ci dîtes dynamique.

Avoir un système qui tourne chaque nuit, analyse ton application avec des tests d'intrusions qui analyses ton API et tes endpoints d'accès à tes autres micro-services, database, etc, et qui en modifie dynamiquement les paramètres, attribut et contenu, te permet d'avoir encore plus de retour sur la sécurité de ton système.

Cela va aller du simple bruteforce par des patterns communs, en allant avec tout type d'injections, etc.

Combiner un tel système avec des daily report et un système de monitoring & d'alerting avec Grafana, Datadog ou PagerDuty te permet d'avoir une vision intégrale à un instant T de l'ensemble des CVE que tu pourrais rencontrer.

OWASP - Zap Proxy

C'est un outils écrit en java open source très connu et très activement maintenu, qui te permet plusieurs choses :

  • Découverte de ton API/endpoint, de ton application web avec des systèmes de spyder et crawler. Ce sont des sortes de bot qui vont se promener tout seul sur ton site pour en découvrir toute les pages
  • Test d'intrusions statique
  • Test d'intrusions dynamique

En fin d'analyse, il te dévoile un rapport avec l'ensemble des vulnérabilités qu'il aura rencontre sur ton application. Il les classes selon la criticité de la faille détecté, et te donnes des conseils pour comment les fixer.

Extension par marketplace

Etant open source, il existe une multitude d'extensions intéréssante. Tu peux retrouver des rules supplémentaires d'attaques pour améliorer l'éfficacité du tool, avoir des outputs de resultats de tes tests sous divers formats, et bien d'autres.

Tips - Script

Zap Proxy te permet de coder sous divers language (Javascript avec Nashorn engine, Zest, Groovy, Kotlin, Python avec Jython engine, Ruby), des scripts variés te permettant de réaliser toute sorte de tâche pour des uses cases spécifique que tu aurais besoin et d'améliorer dynamiquement ses utilités :

  • Authentification : réaliser des authentication complexe
  • Http Sender : script appelé à chaque requête/réponse
  • Session mangement : gère comment les sessions sont maintenu dans ton app
  • Stand alone : appelé manuellement par ta main
  • Targeted : comme le Stand Alone, mais avec une target bien spécifique
  • Et bien d'autres 🔥

Tips - Authentification

Authentification simple

Afin que Zap proxy analyse et test ton site dans sa globalité, il est nécessaire si tu as une partie avec de l'authentification, par exemple un site web de vente en ligne, de lui fournir les instructions pour être loggé comme un vrai utilisateur.

Pour cela tu peux très bien lui indiqué une simple page de connexion, avec un username/password traditionnel à remplir avec un sytème de bouton basique. Tu devras lui fournir aussi un système lui permettant de se rendre compte si il a bien réussi son authentification (ex, accès à une page spécifique à un compte utilisateur).

Authentification complexe

Il fonctionne notemment avec les sites web moderne à base d'OIDC (OpenID Connect), OAuth ou encore Kong, qui se base sur une authentification avec un serveur spécifique, des redirections spécifiques, peut être même avec des sytemes de token, bearer token, JWT, etc. Pour réaliser ce genre d'authentification complexe, tu devras utiliser un script spécifique selon ton type d'authent recherché, vu dans la section plus haut.

Tip

J'ai déjà réalisé ce type d'authentification, explications et code disponible ici : Blog DeeplyLearning

Exemple

Fonctionnement globale

Pour réaliser ton pentest, tu vas devoir comprendre comment le mettre en place.

Tu dois d'abord lancer le Daemon de ZAP. C'est un simple serveur qui va tourner et attendre des instructions. Pour cela, à partir de l'image officiel de zap, tu peux t'en sortir facilement avec ./zap-x.sh, disponible à la racine de l'image officiel.

La version ./zap.sh est la même mais avec l'UI. Donc en CI/CD, on l'évitera.

Une fois le daemon lancé, tu peux interagir avec ce serveur avec des scripts en Python. Libre à toi de faire ton propre utilisation custom (Chose que j'avais réalisé chez Thales histoire d'avoir quelque chose qui fit 100% nos besoin en terme d'analyse). Par example :

  1. Attendre de façon scripté le lancement du daemon ZAP (et donc d'avoir un sleep en dur)
  2. Lancer le spyder simple
  3. Lancer le spyder ajax
  4. Lancer le scan passif
  5. Lancer le scan actif
  6. Générer le repport de résultat en HTML
  7. Shutdown le serveur

Si tu souhaites juste faire une première utilisation pour voir comment il fonctionne, tu peux te baser sur les scripts build-in : - zap-api-scan.py - zap-baseline-scan.py - zap-full-scan.py

Code d'un cas basique avec script built-in

1
2
3
4
5
6
7
owasp_zap_scan:
  stage: security_scan
  image: owasp/zap2docker-stable
  script:
    - ./zap-x.sh &
    - sleep 10
    - python zap-baseline.py -t http://example.com