Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Purple-Team-Automation — Émulation automatisée d'adversaire (Caldera) contre un lab AD afin de valider la couverture de détection Sigma et de mapper les résultats à MITRE ATT&CK. | Kitploit
Outils/GitHubGitHub/joshuagodwin7929/purple-team-automation
Post-ExploitationTests d'IntrusionCommandement et ContrôleRenseignement sur les MenacesRed TeamingRéponse aux IncidentsAnalyse de JournauxAttaque AdversarialeLabs et Pratique
GitHubjoshuagodwin7929/purple-team-automation

Purple-Team-Automation

Émulation automatisée d'adversaire (Caldera) contre un lab AD afin de valider la couverture de détection Sigma et de mapper les résultats à MITRE ATT&CK.

Voir le dépôt
1313il y a 1 jourPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Purple-Team-Automation

Validation automatisée purple-team des règles de détection Sigma construites dans detection-as-code-repo, en utilisant MITRE Caldera pour exécuter un chemin d'attaque en chaîne d'accès aux identifiants Active Directory contre un lab de domaine existant, et une heatmap ATT&CK Navigator pour visualiser la couverture.

Pourquoi Caldera plutôt qu'Atomic Red Team

Caldera a été choisi plutôt qu'Atomic Red Team pour ce projet car il fournit un framework C2 complet, avec des agents, des profils d'adversaire et des opérations chaînées multi-étapes, plutôt qu'une exécution de technique unique et isolée. Cela correspond davantage à l'objectif de ce projet : pas seulement « est-ce que cette technique a été détectée », mais « est-ce qu'une chaîne d'attaque réaliste et ordonnée survit à notre stack de détection actuelle, du début à la fin. »

Structure du dépôt

root@kitploit:~
Purple-Team-Automation/
├── abilities/                          Custom Caldera ability YAMLs
├── adversary-profiles/                 The chained adversary profile used in the operation
├── validation/                         Kibana evidence per technique + the LLMNR known-gap writeup
├── attack-navigator-heatmap.json       ATT&CK Navigator layer, load at mitre-attack.github.io/attack-navigator
├── purple-team-automation-report.md    Full write-up: scope, methodology, results, gap analysis
└── README.md                           This file

Ce qui a été construit

Infrastructure

J'ai déployé un serveur Caldera dédié via Docker Compose sur une VM Ubuntu séparée (caldera-server, 192.168.18.205) sur le même réseau de lab que le lab de domaine AD existant, en le gardant isolé de la stack ELK/SIEM. Caldera v5.0.0 a démarré avec 2000 abilities stock et 29 adversaries stock prêts à l'emploi.

Problèmes de build dont j'ai identifié la cause racine en cours de route :

  • Mon build initial semblait se terminer mais ne produisait silencieusement aucune image, j'ai donc dû faire un rebuild propre.
  • Le conteneur bouclait sur un crash à cause d'un frontend Vue pré-compilé manquant (plugins/magma/dist/assets/). J'ai tracé cela jusqu'à un montage de volume Docker de répertoire complet dans docker-compose.yml qui écrasait le frontend compilé de l'image avec les sources non compilées de l'hôte. Corrigé en supprimant le montage de répertoire complet.
  • J'ai essayé de reconstruire le frontend au runtime du conteneur, mais cela a échoué car le Dockerfile désinstalle délibérément npm/nodejs après le build de l'image pour garder l'image finale légère.
  • Après avoir enfin réussi à faire fonctionner le login, l'UI était toujours non fonctionnelle. Le frontend compilé avait localhost:8888 codé en dur comme base d'API, intégré au moment du build Vue via plugins/magma/.env (VITE_CALDERA_URL), ce qui n'est pas contrôlé par le paramètre runtime app.frontend.api_base_url de conf/local.yml. Je l'ai corrigé en modifiant .env avec la vraie IP de la VM et en rebuildant.
  • J'ai aussi rencontré une panne distincte d'espace disque, que j'ai tracée jusqu'à un volume logique LVM n'utilisant que la moitié du disque alloué à la VM. Corrigé avec lvextend -l +100%FREE + resize2fs, plus la récupération des couches de cache de build via docker system prune -a --volumes.

Abilities personnalisées

Stockpile ne fournit nativement qu'une ability pour le credential dumping basé sur LSASS/Mimikatz (T1003.001). Les quatre techniques dont j'avais besoin pour ce projet, Kerberoasting, AS-REP Roasting, Password Spraying et DCSync, ont toutes nécessité des abilities personnalisées que j'ai construites autour d'Impacket (GetUserSPNs.py, GetNPUsers.py, secretsdump.py) et Kerbrute, car les abilities Kerberoasting existantes de Stockpile (Rubeus, WinPwn) sont Windows/.NET uniquement et incompatibles avec l'agent Sandcat basé sur Linux de ce lab.

J'ai rencontré deux problèmes de build lors de l'écriture de celles-ci :

  • Le vrai schéma d'ability de Caldera v5 utilise des modules de parsing dédiés par outil (par ex. plugins.stockpile.app.parsers.katz) avec les champs source/edge/target, et non un parser générique à regex pattern comme je l'avais supposé à l'origine. Cela a causé un TypeError('ParserConfig.__init__()') silencieux au chargement. Comme aucun parser intégré n'existe pour la sortie brute d'Impacket, j'ai supprimé entièrement le bloc parsers: des quatre abilities. Les résultats sont capturés sous forme de fichiers de sortie brute/de hash et validés manuellement contre Kibana (voir /validation).
  • Deux de mes YAML d'ability (password spray, DCSync) ont d'abord été sauvegardés comme fichiers de 0 octet après qu'un collage dans nano a échoué silencieusement. Je l'ai repéré en vérifiant chaque fichier avec cat/wc -l avant de redémarrer le conteneur.

Déploiement de l'agent

J'ai déployé un agent Sandcat (Linux, groupe red) sur la VM Kali (192.168.18.70), en utilisant le nom de processus splunkd pour le masquage OPSEC, et j'ai confirmé qu'il était actif et de confiance, s'exécutant en root avec l'exécuteur proc/sh.

Profil d'adversaire et opération

J'ai construit le profil d'adversaire AD Credential Access Chain pour chaîner les quatre abilities personnalisées dans l'ordre qu'un attaquant interne opportuniste tenterait typiquement :

root@kitploit:~
    → Password Spray (Kerbrute)
    → Kerberoasting (GetUserSPNs.py)
    → AS-REP Roasting (GetNPUsers.py)
    → DCSync (secretsdump.py)

L'empoisonnement LLMNR/NBT-NS (T1557.001) a été délibérément exclu du profil Caldera. Voir validation/llmnr-known-gap.md pour savoir pourquoi, et comment il reste inclus comme contrôle négatif de lacune connue.

Résultats

Les quatre techniques exécutées ont toutes été confirmées détectées par les règles Sigma de detection-as-code-repo, recoupées directement dans Kibana. L'empoisonnement LLMNR/NBT-NS reste une lacune ouverte et documentée.

TechniqueStatut
T1110.003 – Password Spraying🟢 Détecté
T1558.003 – Kerberoasting🟢 Détecté
T1558.004 – AS-REP Roasting🟢 Détecté
T1003.006 – DCSync🟢 Détecté
T1557.001 – LLMNR/NBT-NS Poisoning🔴 Lacune

Détails complets : validation/detection-results.md Rapport complet : purple-team-automation-report.md Heatmap interactive : attack-navigator-heatmap.json

Prochaines étapes

  1. Corriger la configuration Sysmon (activer les Event ID 3 et 22) pour combler la lacune LLMNR.
  2. Écrire et ajuster une nouvelle règle Sigma pour l'empoisonnement LLMNR/NBT-NS.
  3. Relancer cette opération pour confirmer la correction et mettre à jour la heatmap.
  4. Alimente la feuille de route plus large des projets SOC (Projet D et au-delà).
Télécharger l’outil