
AI locale potenziato per red teaming su un telefono
Un agente autonomo di penetration testing che gira interamente su uno smartphone. Lascia il telefono su una rete, allontanati, e lui scopre host, mappa servizi, trova vulnerabilità e genera un report di pentest — tutto senza connettività cloud.
░█▄░█ █ █▀▀ █░█ ▀█▀ █▀▀ █▀█ ▄▀█ █░█░█ █░░ █▀▀ █▀█
░█░▀█ █ █▄█ █▀█ ░█░ █▄▄ █▀▄ █▀█ ▀▄▀▄▀ █▄▄ ██▄ █▀▄ v0.1.0
AUTONOMOUS MOBILE PENTEST AGENT
OnePlus 8 · NetHunter · LFM2.5-1.2B · OpenCL GPU
Il penetration testing (pentest) è la pratica di testare la sicurezza di una rete informatica simulando un attacco — con il permesso esplicito del proprietario della rete. I pentester professionisti vengono assunti per trovare vulnerabilità prima che lo facciano i veri attaccanti.
Nightcrawler automatizza questo processo su un telefono. Usa un piccolo modello di IA (LFM2.5-1.2B-Instruct-Heretic, 1,2 miliardi di parametri) eseguito localmente sulla GPU del telefono per decidere cosa fare dopo — quale host sondare, quale strumento usare, cosa cercare. Nessuna connessione internet o API cloud richiesta.
▶️ Guarda Nightcrawler in azione su Instagram
L'agente opera come un pentester umano paziente — ruota tra gli host, fa una piccola azione per turno e costruisce conoscenza gradualmente nel corso delle ore. Questo lo rende molto più difficile da rilevare rispetto ai tradizionali scanner di vulnerabilità che bombardano tutti gli host contemporaneamente.
┌──────────────────────────────────────────────────────────┐
│ PHONE (OnePlus 8) │
│ │
│ ┌─────────────┐ ┌──────────────────┐ │
│ │ LFM2.5 │ │ Agent Loop │ │
│ │ 1.2B model │◄───►│ (main.py) │ │
│ │ on GPU │ │ Decides what │ │
│ │ (:8080) │ │ to do next │ │
│ └─────────────┘ └────────┬─────────┘ │
│ │ │
│ ┌────────▼─────────┐ │
│ │ Scope Proxy │ ← Safety layer │
│ │ Validates every │ Blocks out- │
│ │ command before │ of-scope │
│ │ execution │ actions │
│ └────────┬─────────┘ │
│ │ │
│ ┌────────▼─────────┐ │
│ │ Kali MCP Server │ ← Runs the │
│ │ nmap, curl, │ actual │
│ │ smbclient, ... │ commands │
│ └──────────────────┘ │
│ │
│ ┌──────────────────┐ ┌──────────────────┐ │
│ │ Web Dashboard │ │ SQLite DB │ │
│ │ (:8888) │ │ Hosts, vulns, │ │
│ │ Monitor & steer │ │ creds, commands │ │
│ └──────────────────┘ └──────────────────┘ │
└──────────────────────────────────────────────────────────┘
Per il design completo del sistema, vedi docs/ARCHITECTURE.md.
Vedi docs/FEATURES.md per il riferimento completo delle funzionalità.
Tutta l'inferenza tramite OpenCL su GPU Adreno 650:
Nota: Android limita la GPU quando si è a batteria (rallentamento di 6x). Nightcrawler include un demone del governor GPU che forza le massime prestazioni e auto-limita a ≤15% di batteria.
# 1. Installazione (dentro il chroot di Kali NetHunter)
bash INSTALL.sh
# 2. Attendi l'avvio di llama-server (~5 min dopo il boot)
curl -s http://127.0.0.1:8080/health # Dovrebbe restituire {"status":"ok"}
# 3. Avvia tutti i servizi
bash scripts/run-36h.sh
# 4. Apri la dashboard web (da qualsiasi dispositivo sulla tua rete Tailscale)
# https://<il-tuo-hostname-tailscale>:8888
NC_DRY_RUN=1 python3 main.py
Questo usa un server Kali mock così puoi testare il loop dell'agente senza eseguire comandi di rete reali.
kali-server-mcp --port 5000 &
python3 scope_proxy.py --config config.yaml --port 8800 --upstream http://127.0.0.1:5000 &
bash scripts/webui-daemon.sh start
python3 main.py &
Modifica config.yaml prima del deployment:
mission:
id: "CLIENT-YYYY-XXX" # Il tuo ID di engagement
scope:
networks: ["auto"] # "auto" = rileva da wlan0 all'avvio
excluded_hosts: ["auto"] # "auto" = gateway + IP proprio
excluded_ports: [502, 503] # Porte SCADA/ICS da non toccare mai
authorization: "ROE-YYYY-XXX.pdf"
max_runtime_hours: 0 # 0 = nessun limite
model:
local:
ctx_size: 8192
port: 8080
Rilevamento dinamico dello scope significa zero modifiche di configurazione quando ti sposti tra reti — l'agente legge la subnet corrente da wlan0 all'avvio.
nightcrawler/
├── main.py # Punto di ingresso
├── config.yaml # Config missione scope + modello
├── scope_proxy.py # Proxy di enforcement dello scope
├── INSTALL.sh # Installer
│
├── agent/ # Logica core dell'agente
│ ├── loop.py # Loop decisionale + recupero errori
│ ├── planner.py # Macchina a stati di fase (recon → exploit)
│ ├── llm_client.py # Client API LLM (llama.cpp / remoto)
│ ├── db.py # Backend SQLite (host, vuln, creds)
│ ├── host_memory.py # Osservazioni per-host + auto-tagging
│ ├── cve_db.py # Database CVE con 24.956 voci
│ ├── attack_planner.py # Direttive strategiche per la fase exploit
│ ├── output_parser.py # Estrae dati strutturati dall'output degli strumenti
│ ├── offline_manager.py # Macchina a stati del pipeline WiFi breach
│ ├── net_detect.py # Auto-rilevamento rete da wlan0
│ ├── cover_traffic.py # Blending stealth con traffico web realistico
│ ├── passive_capture.py # tcpdump in background per traffico broadcast
│ └── ...
│
├── proxy/ # Componenti di enforcement dello scope
│ ├── scope.py # Validazione IP/porta/host
│ ├── rate_limiter.py # Rate limiting comandi + jitter
│ └── command_filter.py # Blocklist comandi distruttivi
│
├── webui/ # Dashboard web (Flask)
│ ├── server.py # API + middleware stealth
│ └── templates/index.html # UI dashboard
│
├── data/ # File dati statici
│ ├── cve_exploits.json # Mappature CVE→comandi exploit
│ └── playbooks.json # 27 playbook di attacco multi-step
│
├── prompts/ # Template prompt LLM (hot-reloadable)
├── scripts/ # Script operativi (start, stop, watchdog)
├── tests/ # Suite di test (API, UI, modalità offline)
├── kernels/ # Moduli driver WiFi + documentazione kernel
├── simulation/ # Server mock per dry-run
├── docs/ # Architettura, setup GPU, funzionalità
├── logs/ # Dati runtime (gitignored)
└── models/ # File modello (gitignored)
L'agente usa un loop semplice ma efficace:
REASONING: ... COMMAND: ...Il modello da 1,2B ha un tasso di successo dei comandi di ~50% (intrinseco alla sua dimensione). L'agente compensa con:
La dashboard su :8888 fornisce monitoraggio e controllo in tempo reale:
La dashboard è filtrata stealth: spoofa gli header nginx e restituisce 404 vuoti alle connessioni dalla rete target.
Da 72+ ore di operazione autonoma su più reti:
I contributi sono benvenuti! Vedi CONTRIBUTING.md per le linee guida.
# Clona il repo
git clone https://github.com/garagehq/nightcrawler.git
cd nightcrawler
# Modalità dry-run (nessun comando reale, nessun hardware necessario)
NC_DRY_RUN=1 python3 main.py
# Esegui i test
python3 -m pytest tests/
Questo strumento è solo per penetration testing autorizzato. Devi avere il permesso scritto (Rules of Engagement) dal proprietario della rete prima di distribuire Nightcrawler. L'uso non autorizzato contro reti che non possiedi o per cui non hai il permesso di testare è illegale.
MIT — vedi LICENSE per i dettagli.
Se ti piace questo progetto, puoi offrirmi un caffè ☕:
| Termine | Cosa significa |
|---|
| Drop box | Un dispositivo lasciato su una rete target per eseguire test in autonomia |
| Scope | L'insieme di reti/host che sei autorizzato a testare |
| Rules of Engagement (ROE) | Un documento legale che specifica cosa ti è permesso fare |
| Stealth | Tecniche per evitare il rilevamento da parte del monitoraggio di rete (IDS/IPS) |
| MCP | Model Context Protocol — un'interfaccia standard per l'uso di strumenti IA |
| C2 | Command and Control — la dashboard web per monitorare e guidare l'agente |
| Modello | Quantizzazione | Velocità Prompt | Velocità Generazione |
|---|
| LFM2.5-1.2B-Instruct-Heretic (produzione) | Q8_0 | 115 tok/s | 13 tok/s |
| Qwen3.5-0.8B | Q8_0 | 30,5 tok/s | 6,3 tok/s |
| Qwen3.5-4B | Q4_0 | 10,1 tok/s | 2,0 tok/s |