Share
## https://sploitus.com/exploit?id=80E15B48-9525-5CE1-8DB6-0FC4C91F9811
# Agent Autonome de Red Teaming Guidé par LLM et MITRE ATT&CK
**Projet Fil Rouge â PĂ©rimĂštre 2 : Red Teaming & LLM**
**TĂ©lĂ©com Paris â MSCYBER2 BE4**
---
## Démarrage rapide
### Prérequis
| Outil | Version minimale | RĂŽle |
|-------|-----------------|------|
| [Docker Desktop](https://www.docker.com/products/docker-desktop/) | 24+ | Orchestration des conteneurs |
| [Ollama](https://ollama.com/) | 0.3+ | Serveur LLM local (tourne sur l'hĂŽte) |
| Python | 3.12+ | Uniquement si lancement sans Docker |
> **Note :** Ollama doit tourner sur la machine hĂŽte, pas dans Docker. Les conteneurs le joignent via `host.docker.internal:11434`.
---
### 1. Installer le modĂšle LLM
```bash
ollama pull qwen2.5-coder:7b
```
Vérifier qu'Ollama répond :
```bash
curl http://localhost:11434/api/tags
```
---
### 2. Configurer l'environnement
```bash
cp .env.example .env
```
Variables clés dans `.env` :
```env
LLM_PROVIDER=ollama
LLM_MODEL=qwen2.5-coder:7b
OLLAMA_BASE_URL=http://host.docker.internal:11434
MSF_RPC_HOST=c2-server
MSF_RPC_PORT=55553
MSF_RPC_USER=msf
MSF_RPC_PASS=password
TARGET_IP=172.20.0.4
TARGET_PORT=80
VULN_INTEL_ENABLED=1 # extraction CVE live (NVD/EPSS/CIRCL/OSV)
MAX_HOSTS=64 # cap sécurité pour les scans CIDR
```
Pour passer en provider cloud (optionnel â hypothĂšse d'Ă©valuation) :
```env
LLM_PROVIDER=mistral
LLM_MODEL=mistral-large-latest
MISTRAL_API_KEY=sk-...
```
---
### 3. Lancer la stack complĂšte
```bash
docker compose up -d c2-server target-dvwa target-metasploitable target-juiceshop target-snmp dashboard
```
Attendre ~30 secondes que les services démarrent, puis ouvrir le dashboard :
```
http://localhost:8501
```
---
### 4. Choisir sa cible
Le projet embarque **quatre cibles** ; l'agent adapte automatiquement l'outil d'exploitation selon le service découvert :
| Cible | IP interne | Port | Type | Exploitation |
|-------|-----------|------|------|--------------|
| **DVWA** | `172.20.0.4` | 80 (â 8080 hĂŽte) | Application web PHP | Scripts Python (SQLi, XSS, command injection, CSRF, uploadâŠ) |
| **Metasploitable2** | `172.20.0.5` | â | Services rĂ©seau | **Metasploit** (vsftpd backdoor, Samba, VNC⊠â shells root) |
| **Juice Shop** | `172.20.0.6` | 3000 | Application web moderne (OWASP) | Scripts Python (injection, authz, XSS DOMâŠ) |
| **SNMP** | `172.20.0.7` | 161/udp | Ăquipement rĂ©seau simulĂ© | Metasploit `auxiliary/scanner/snmp/snmp_login` |
> Le LLM dĂ©cide lui-mĂȘme MSF vs Python selon les services dĂ©couverts par nmap.
Il est aussi possible de scanner une **plage CIDR** â l'agent dĂ©couvre automatiquement les hĂŽtes actifs :
```bash
docker compose run --rm agent-ia python -m agent.main --target 172.20.0.0/24
```
---
### 5. Utiliser le dashboard
Le dashboard Streamlit (`http://localhost:8501`) offre les panneaux suivants :
| Panneau | Description |
|---------|-------------|
| **SantĂ© des services** | Ătat Ollama / Metasploit / cible en temps rĂ©el |
| **Ping** | Bouton de vérification de liveness avant tout scan |
| **Profil de scan** | `quick` (~30 s) · `standard` (~2-3 min) · `full` · `stealth` · `udp` |
| **Arbre ATT&CK** | Graphe interactif des nĆuds, statut en direct |
| **Scan détaillé** | OS détecté, type d'équipement, ports/services/versions/CPE |
| **Scénarios d'attaque** | Table priorisée par faisabilité (EPSS + CVSS + exploit public + outil), kill-chains par tactique MITRE |
| **Commandes exécutées** | Commandes nmap, nuclei, MSF et scripts lancés pendant le run |
| **Résultats / AccÚs obtenus** | Tableau classifié : élévation de privilÚges · accÚs shell · identifiants · succÚs/échec |
| **Métriques tokens** | Consommation prompt + completion, appels LLM, débit tok/s |
| **Rapport** | Téléchargement `.md` et `.pdf` en fin de run |
**Flux d'utilisation :**
1. Vérifier l'état des services dans la barre latérale
2. Entrer l'IP cible et choisir le profil de scan
3. Cliquer **Ping** pour valider la liveness
4. Lancer le pipeline
5. Suivre l'arbre ATT&CK et les logs en temps réel
6. Télécharger le rapport une fois terminé
---
### 6. Lancer l'agent en ligne de commande
```bash
# Vérifier si une cible est joignable
docker compose run --rm agent-ia python -m agent.main --target 172.20.0.4 --ping
# DVWA (web) â profil standard
docker compose run --rm agent-ia python -m agent.main --target 172.20.0.4 --port 80 --profile standard
# Metasploitable2 (rĂ©seau) â exploitation Metasploit
docker compose run --rm agent-ia python -m agent.main --target 172.20.0.5 --profile quick
# Juice Shop (OWASP web app)
docker compose run --rm agent-ia python -m agent.main --target 172.20.0.6 --port 3000 --profile standard
# Plage CIDR â dĂ©couverte automatique + scan de chaque hĂŽte vivant
docker compose run --rm agent-ia python -m agent.main --target 172.20.0.0/24 --profile quick
```
**Options CLI :**
| Option | Description | Défaut |
|--------|-------------|--------|
| `--target` | IP, plage CIDR ou liste d'IPs | `$TARGET_IP` |
| `--port` | Port cible | `$TARGET_PORT` |
| `--profile` | `quick` · `standard` · `full` · `stealth` · `udp` | `standard` |
| `--ping` | VĂ©rifier la liveness puis quitter | â |
**Codes de sortie :**
- `0` â taux de complĂ©tion â„ 70 %
- `1` â taux de complĂ©tion < 70 %
- `2` â erreur critique (service inaccessible, etc.)
---
### Commandes utiles
```bash
# Voir les logs en temps réel
docker compose logs -f dashboard
docker compose logs -f agent-ia
# Reconstruire aprĂšs modification du code
docker compose build dashboard
docker compose up -d dashboard
# ArrĂȘter tous les services
docker compose down
# Réinitialiser complÚtement (supprime les volumes)
docker compose down -v
# Vider le cache intel CVE (force une re-interrogation NVD/EPSS)
rm -rf logs/intel_cache/
```
---
### Dépannage rapide
| SymptĂŽme | Cause probable | Solution |
|----------|---------------|----------|
| Ollama rouge dans le dashboard | Ollama non démarré sur l'hÎte | `ollama serve` |
| DVWA rouge | Conteneur pas encore prĂȘt | Attendre 30 s puis rafraĂźchir |
| Metasploit rouge | `c2-server` non démarré | `docker compose up -d c2-server` |
| Pipeline bloquĂ© sur un nĆud MSF | MSFRPC saturĂ© (nombreux runs) | `docker compose restart c2-server` |
| Scan nmap qui timeout | Profil trop lourd / timeout court | Utiliser `quick`, ou augmenter `SCAN_TIMEOUT` |
| Dashboard inaccessible | Port 8501 occupé | `docker compose down` puis relancer |
| CVE enrichissement vide | NVD rate limit (quota 5 req/30s) | Attendre 30 s ou désactiver avec `VULN_INTEL_ENABLED=0` |
| Ping échoue sur une cible | HÎte éteint ou filtré | Vérifier que le conteneur cible est `Up` via `docker compose ps` |
---
## Architecture
```
[Scan actif]
Nmap + Nuclei â ScanResult
â
ââââș Liveness check (nmap -sn) â discovery.py
ââââș Classification device_type â classify.py
ââââș Enrichissement CVE live â vuln_feed.py (NVD + EPSS + CIRCL + OSV)
â
âŒ
[ScĂ©narios priorisĂ©s] â scenarios.py
Score faisabilitĂ© = EPSSĂ0.40 + CVSSĂ0.15 + exploit_pubĂ0.20 + vecteurĂ0.10 + outilĂ0.15
Kill-chains par tactique ATT&CK
â
âŒ
[Moteur ATT&CK] â couche de contrĂŽle dĂ©terministe
ScanResult â AttackTree (EPSS-aware, prioritĂ© boostĂ©e si EPSS â„ 0.5)
â
âŒ
[LLM local (Ollama/qwen2.5-coder:7b)] â dĂ©cision contrainte + historique ReAct
SĂ©lection outil (MSF vs Python) â gĂ©nĂ©ration payload
Validateur : node_id â valid_ids (reject si hors arbre)
â
âŒ
[Exécution contrÎlée]
Metasploit MSFRPC | Script Python sandboxé (subprocess + timeout)
â
Ă©chec âââș [Reflexion] âââș correction (max 3)
â
Ă©chec âââș [Template dĂ©terministe] âââș fallback DVWA/MSF catalogue
â
âŒ
[Rapport ATT&CK] â reporter.py + pdf.py
Markdown + PDF : scénarios, kill-chains, accÚs obtenus, métriques tokens
```
---
## Infrastructure Docker
| Service | Image | IP | Port hĂŽte | RĂŽle |
|---------|-------|----|-----------|------|
| `agent-ia` | python:3.12-slim (Dockerfile.agent) | dynamique | â | Orchestrateur LLM + pipeline (CLI) |
| `dashboard` | python:3.12-slim (Dockerfile.dashboard) | dynamique | **8501** | Interface Streamlit de monitoring |
| `c2-server` | metasploit-framework | 172.20.0.3 | 55553 | Metasploit + MSFRPC |
| `target-dvwa` | vulnerables/web-dvwa | 172.20.0.4 | **8080** | Cible web (DVWA, Apache + PHP + MySQL) |
| `target-metasploitable` | tleemcjr/metasploitable2 | 172.20.0.5 | â | Cible rĂ©seau (services exploitables MSF) |
| `target-juiceshop` | bkimminich/juice-shop | 172.20.0.6 | **3000** | Cible web moderne (OWASP Juice Shop) |
| `target-snmp` | polinux/snmpd:alpine | 172.20.0.7 | 161/udp | Ăquipement rĂ©seau simulĂ© (SNMP) |
RĂ©seau interne isolĂ© `pentest-net` (172.20.0.0/16) â aucune connexion externe depuis les cibles.
---
## Stratégie LLM : local-first, cloud-ready
| Phase | Environnement | ModĂšle | Justification |
|-------|--------------|--------|---------------|
| **Développement & évaluation** | Ollama local | `qwen2.5-coder:7b` | Reproductible, gratuit, validé pour ATT&CK (SANS 2025) |
| **HypothĂšse cloud** | Cloud API | Mistral / OpenAI / Claude | Via abstraction LiteLLM â mĂȘme code, changer `LLM_PROVIDER` dans `.env` |
---
## Contribution technique et scientifique
| Propriété | Justification scientifique |
|-----------|---------------------------|
| Raisonnement contraint par ATT&CK + validateur d'action | OpenReview x4sdXZ7Jdu â +300% taux de succĂšs vs. non guidĂ© |
| Ingestion Nmap + Nuclei + classificateur de device | Gap documenté dans la littérature |
| Renseignement CVE live (NVD + EPSS + CIRCL + OSV) | PentestAgent â enrichissement dynamique des vulnĂ©rabilitĂ©s |
| Score de faisabilité EPSS-aware | Priorisation probabiliste de l'exploitabilité réelle |
| Scénarios priorisés + kill-chains ATT&CK | Planification tactique lisible et exportable |
| Scan multi-hÎtes / CIDR avec classification | Couverture d'infrastructure réaliste |
| Auto-correction bornée (Reflexion) | Shinn et al., NeurIPS 2023 |
| 3 couches d'exĂ©cution (LLM â Reflexion â fallback) | RĂ©silience face aux faiblesses du petit modĂšle local |
| Rapport explicable par tactique (Markdown + PDF) | Absence documentée dans la littérature |
---
## Documentation
| Document | Contenu |
|----------|---------|
| [Documentation technique](docs/technical_documentation.md) | Fonctionnement A-à -Z, modules, flux de données, décisions de conception |
| [Architecture](docs/architecture.md) | Modules, pipeline, garde-fous agentiques, variables d'env |
| [Ătat de l'art](docs/etat_de_lart.md) | 4 blocs, rĂ©fĂ©rences, lacunes identifiĂ©es |
| [Roadmap](docs/roadmap.md) | Milestones avec critÚres de validation et protocole expérimental |
---
## Limites explicites du projet
- **Scope** : environnements de laboratoire isolés uniquement (Docker, Metasploitable2, DVWA, Juice Shop, SNMP simulé)
- **ModĂšle Ă©valuĂ©** : Ollama `qwen2.5-coder:7b` local â le passage cloud (Mistral, OpenAIâŠ) est une hypothĂšse non Ă©valuĂ©e
- **Intel CVE** : nécessite un accÚs internet depuis la machine hÎte ; en mode hors-ligne, le cache disque (24h) est utilisé en dégradation gracieuse
- **MĂ©triques de rĂ©fĂ©rence** : les chiffres 71-78% de complĂ©tion et -55,9% d'appels LLM sont ceux du papier de rĂ©fĂ©rence (OpenReview x4sdXZ7Jdu) â les mesures propres au projet seront produites lors de la phase d'Ă©valuation
---
## Références clés
- **[PRINCIPAL]** *Guided Reasoning for LLM-Driven Penetration Testing Agents* â OpenReview x4sdXZ7Jdu
- *PentestAgent: Incorporating LLM Agents to Automated Penetration Testing* â arXiv:2411.05185
- *Can LLMs Hack Enterprise Networks?* â arXiv:2502.04227
- *Reflexion: Language Agents with Verbal Reinforcement Learning* â Shinn et al., NeurIPS 2023
- *MITRE ATT&CK Framework* â https://attack.mitre.org/
- *NVD 2.0 API* â https://nvd.nist.gov/developers/vulnerabilities
- *EPSS (Exploit Prediction Scoring System)* â https://www.first.org/epss/