
Framework agentico per Penetration Testing automatizzato basato su Large Language Models
Agente di Penetration Testing Autonomo Alimentato da IA
Pubblicato a USENIX Security 2024
Sito ufficiale: pentestgpt.com »
Articolo di Ricerca
·
Segnala un Bug
·
Richiedi una Funzionalità
La pipeline autonoma per CTF è collegabile al backend per Claude Code e Codex. La modalità modernizzata legacy interattiva (
pentestgpt-legacy) supporta un set più ampio di provider: OpenAI, Anthropic, Google Gemini, DeepSeek, xAI, Qwen, Moonshot e Ollama locale. Vedi Modalità Interattiva Multi-LLM.
claude) - installato e autenticato per esecuzioni locali di Claude. Vedi Documentazione Claude Codecodex) - installato e autenticato per esecuzioni locali di Codex. Il flusso Docker qui sotto include entrambi i CLI.git clone https://github.com/GreyDGL/PentestGPT.git
cd PentestGPT
make install # esegue uv sync
| Comando | Descrizione |
|---|---|
make install | Installa le dipendenze |
make test | Esegui tutti i test |
make check |
# Esegui contro un target (modalità CTF predefinita)
pentestgpt --target 10.10.11.234
# Con contesto della sfida
pentestgpt --target 10.10.11.50 --instruction "Sito WordPress, concentrati su vulnerabilità dei plugin"
# Modalità penetration test (scoperta asset → vulnerabilità → report)
pentestgpt --target 10.10.11.234 --mode pentest
# Elenca sessioni salvate in precedenza
pentestgpt --list-sessions
L'agente lavora attraverso una pipeline multistadio, alimentando ogni fase con i risultati della precedente — ricognizione → exploit → walkthrough per CTF, scoperta asset → identificazione vulnerabilità → report per pentest.
Un'immagine autonoma include lo strumento insieme ai CLI di Claude Code e Codex. Accedi una volta e le sessioni persistono in volumi nominati — nessun nuovo login nelle esecuzioni successive.
make docker-build # costruisci l'immagine dello strumento
make docker-login # UNICA VOLTA, idempotente: verifica i login, effettua login solo per quelli mancanti
make docker-auth-status # verifica che entrambi siano loggati (ROUNDTRIP=1 per un controllo live con 1 token)
# Esegui la pipeline contro un target (qualsiasi backend / modello / modalità):
make docker-run TARGET=http://127.0.0.1:8000 BACKEND=codex MODEL=gpt-5.5 MODE=ctf
make docker-run TARGET=10.10.11.234 BACKEND=claude MODEL=opus MODE=pentest
make docker-login effettua il login per Claude (setup-token → token salvato nel volume) e Codex (il
suo codex login interno, callback OAuth inoltrato via socat — non seminato, poiché i token di aggiornamento ChatGPT
sono monouso). È idempotente: rieseguendo salta ciò che è ancora valido. I login persistono anche dopo
la ricreazione del contenitore; make docker-down li mantiene, make docker-nuke rimuove i volumi di login (per
forzare un nuovo login / ruotare un token). Design + dettagli: docs/docker-dev-plan.md.
Il classico PentestGPT con intervento umano dell'articolo USENIX 2024 è preservato e
modernizzato come pentestgpt-legacy. Esegue tre sessioni LLM cooperanti —
ragionamento / generazione / parsing — che mantengono un Albero dei Compiti di Penetration Testing (PTT) mentre
guidano la sessione in modo interattivo (next, more, todo, discuss). La pipeline autonoma a fasi fisse
supporta backend Claude e Codex; questa modalità legacy parla nativamente a molti provider
tramite i loro SDK ufficiali.
Imposta una chiave API per qualsiasi provider desideri utilizzare (nell'ambiente o .env — vedi
.env.example). Vengono abilitati solo i provider che configuri.
OPENAI_API_KEY=... ANTHROPIC_API_KEY=... GEMINI_API_KEY=... # o GOOGLE_API_KEY
DEEPSEEK_API_KEY=... GROK_API_KEY=... QWEN_API_KEY=... KIMI_API_KEY=...
# Seleziona automaticamente i migliori modelli disponibili per ogni sessione
pentestgpt-legacy
# Scegli modelli per sessione
pentestgpt-legacy --reasoning-model claude-opus-4-8 --parsing-model gemini-3.5-flash
# Modello locale tramite Ollama (compatibile OpenAI)
pentestgpt-legacy --reasoning-model ollama:qwen3 --base-url http://localhost:11434/v1
# Elenca tutti i modelli supportati (mostra quali provider sono configurati)
pentestgpt-legacy --list-models
# Round-trip live di ogni modello configurato e stampa una matrice pass/fail
pentestgpt-legacy --smoke-test
pentestgpt-legacy --list-models mostra sempre il registro live. Riesegui --smoke-test
dopo che gli ID dei modelli cambiano. Istantanea attuale:
Il registro si trova in
pentestgpt_legacy/llm/registry.py(l'unica fonte di verità). Aggiungere un modello è una voceModelSpec; i provider compatibili con OpenAI riutilizzano un connettore.
PentestGPT raccoglie dati di utilizzo anonimi per aiutare a migliorare lo strumento. Questi dati vengono inviati al nostro progetto Langfuse e includono:
Nessun dato sensibile viene raccolto - output dei comandi, credenziali o valori effettivi dei flag non vengono mai trasmessi.
# Tramite flag da riga di comando
pentestgpt --target 10.10.11.234 --no-telemetry
# Tramite variabile d'ambiente
export LANGFUSE_ENABLED=false
PentestGPT ha raggiunto un tasso di successo dell'86,5% (90/104 benchmark) in un esperimento con la suite di validazione XBOW
nel dicembre 2025. Quel numero è un risultato di ricerca storico, non una garanzia di regressione
attuale di pentestgpt-agent.
Gli harness XBOW e gli archivi dei risultati sono mantenuti al di fuori di questo repository del prodotto come artefatti di ricerca di solo riferimento. Il CLI PentestGPT supportato, Makefile, CI e runtime Docker non espongono un esecutore XBOW. Una futura valutazione potrebbe riutilizzare quel corpus tramite un adattatore di proprietà separata senza renderlo una dipendenza del prodotto.
Se utilizzi PentestGPT nella tua ricerca, ti preghiamo di citare il nostro articolo:
@inproceedings{299699,
author = {Gelei Deng and Yi Liu and Víctor Mayoral-Vilches and Peng Liu and Yuekang Li and Yuan Xu and Tianwei Zhang and Yang Liu and Martin Pinzger and Stefan Rass},
title = {{PentestGPT}: Evaluating and Harnessing Large Language Models for Automated Penetration Testing},
booktitle = {33rd USENIX Security Symposium (USENIX Security 24)},
year = {2024},
isbn = {978-1-939133-44-1},
address = {Philadelphia, PA},
pages = {847--864},
url = {https://www.usenix.org/conference/usenixsecurity24/presentation/deng},
publisher = {USENIX Association},
month = aug
}
Distribuito sotto licenza MIT. Vedi LICENSE.md per maggiori informazioni.
Disclaimer: Questo strumento è destinato esclusivamente a scopi educativi e test di sicurezza autorizzati. Gli autori non approvano alcun uso illegale. Utilizzare a proprio rischio.
(torna su)
| Esegui lint + typecheck |
make build | Crea pacchetto distribuibile |
| Provider | Modelli attuali | Legacy (mantenuti) | Chiave ambiente |
|---|
| OpenAI | gpt-5.5, gpt-5.5-pro, gpt-5.4-mini, gpt-5.4-nano, gpt-5.2, gpt-5.3-codex | gpt-4o, gpt-4o-mini, o3, o4-mini | OPENAI_API_KEY |
| Anthropic | claude-opus-4-8, claude-sonnet-4-6, claude-haiku-4-5-20251001 | — | ANTHROPIC_API_KEY |
| Google Gemini | gemini-3.1-pro, gemini-3.5-flash, gemini-3-pro, gemini-3.1-flash-lite | gemini-2.5-pro, gemini-2.5-flash | GEMINI_API_KEY / GOOGLE_API_KEY |
| DeepSeek | deepseek-v4-flash, deepseek-v4-pro | deepseek-chat, deepseek-reasoner | DEEPSEEK_API_KEY |
| xAI Grok | grok-4.3 | — | GROK_API_KEY / XAI_API_KEY |
| Alibaba Qwen | qwen3.7-max, qwen3.5-flash | qwen3-max | QWEN_API_KEY / DASHSCOPE_API_KEY |
| Moonshot Kimi | kimi-k2.6 | — | KIMI_API_KEY (predefinito .cn; imposta MOONSHOT_BASE_URL per .ai) |
| Locale (Ollama) | ollama:<modello> (es. ollama:qwen3) | — | nessuna (OLLAMA_BASE_URL) |