
Lokaler KI-gestützter Red-Teamer auf einem Telefon
Ein autonomer Penetrationstest-Agent, der vollständig auf einem Smartphone läuft. Legen Sie das Telefon in ein Netzwerk, gehen Sie weg, und es entdeckt Hosts, kartiert Dienste, findet Schwachstellen und erstellt einen Pentest-Bericht – ganz ohne Cloud-Anbindung.
░█▄░█ █ █▀▀ █░█ ▀█▀ █▀▀ █▀█ ▄▀█ █░█░█ █░░ █▀▀ █▀█
░█░▀█ █ █▄█ █▀█ ░█░ █▄▄ █▀▄ █▀█ ▀▄▀▄▀ █▄▄ ██▄ █▀▄ v0.1.0
AUTONOMOUS MOBILE PENTEST AGENT
OnePlus 8 · NetHunter · LFM2.5-1.2B · OpenCL GPU
Penetrationstests (Pentesting) sind die Praxis, die Sicherheit eines Computernetzwerks zu testen, indem ein Angriff simuliert wird – mit ausdrücklicher Genehmigung des Netzwerkbesitzers. Professionelle Pentester werden beauftragt, Schwachstellen zu finden, bevor echte Angreifer es tun.
Nightcrawler automatisiert diesen Prozess auf einem Telefon. Es verwendet ein kleines KI-Modell (LFM2.5-1.2B-Instruct-Heretic, 1,2 Milliarden Parameter), das lokal auf der GPU des Telefons läuft, um zu entscheiden, was als Nächstes zu tun ist – welcher Host untersucht wird, welches Tool verwendet wird, wonach gesucht werden soll. Keine Internetverbindung oder Cloud-API erforderlich.
▶️ Sehen Sie Nightcrawler in Aktion auf Instagram
Der Agent arbeitet wie ein geduldiger menschlicher Pentester – er rotiert zwischen Hosts, führt eine kleine Aktion pro Zug aus und baut über Stunden hinweg schrittweise Wissen auf. Dadurch ist er viel schwerer zu erkennen als herkömmliche Schwachstellenscanner, die jeden Host auf einmal attackieren.
┌──────────────────────────────────────────────────────────┐
│ 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 │ │
│ └──────────────────┘ └──────────────────┘ │
└──────────────────────────────────────────────────────────┘
Für das vollständige Systemdesign siehe docs/ARCHITECTURE.md.
Siehe docs/FEATURES.md für die vollständige Funktionsreferenz.
Alle Inferenzen über OpenCL auf der Adreno-650-GPU:
Hinweis: Android drosselt die GPU im Akkubetrieb (6-fache Verlangsamung). Nightcrawler enthält einen GPU-Governor-Daemon, der maximale Leistung erzwingt und bei ≤15 % Akku automatisch drosselt.
# 1. Installation (innerhalb des Kali NetHunter chroot)
bash INSTALL.sh
# 2. Warten, bis llama-server startet (~5 Min nach dem Booten)
curl -s http://127.0.0.1:8080/health # Sollte {"status":"ok"} zurückgeben
# 3. Alle Dienste starten
bash scripts/run-36h.sh
# 4. Web-Dashboard öffnen (von jedem Gerät in Ihrem Tailscale-Netzwerk)
# https://<your-tailscale-hostname>:8888
NC_DRY_RUN=1 python3 main.py
Dies verwendet einen Mock-Kali-Server, sodass Sie die Agent-Schleife testen können, ohne echte Netzwerkbefehle auszuführen.
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 &
Bearbeiten Sie config.yaml vor der Bereitstellung:
mission:
id: "CLIENT-YYYY-XXX" # Ihre Engagement-ID
scope:
networks: ["auto"] # "auto" = vom wlan0 beim Start erkennen
excluded_hosts: ["auto"] # "auto" = Gateway + eigene IP
excluded_ports: [502, 503] # SCADA/ICS-Ports, die nie berührt werden
authorization: "ROE-YYYY-XXX.pdf"
max_runtime_hours: 0 # 0 = keine Begrenzung
model:
local:
ctx_size: 8192
port: 8080
Dynamische Scope-Erkennung bedeutet null Konfigurationsänderungen beim Wechsel zwischen Netzwerken – der Agent liest das aktuelle Subnetz beim Start von wlan0.
nightcrawler/
├── main.py # Einstiegspunkt
├── config.yaml # Missions-Scope + Modellkonfiguration
├── scope_proxy.py # Scope-Durchsetzungs-Proxy
├── INSTALL.sh # Installationsprogramm
│
├── agent/ # Kern-Agent-Logik
│ ├── loop.py # Entscheidungsschleife + Fehlerbehebung
│ ├── planner.py # Phasen-Zustandsmaschine (recon → exploit)
│ ├── llm_client.py # LLM-API-Client (llama.cpp / remote)
│ ├── db.py # SQLite-Backend (Hosts, Schwachstellen, Anmeldedaten)
│ ├── host_memory.py # Beobachtungen pro Host + Auto-Tagging
│ ├── cve_db.py # 24.956-Einträge-CVE-Datenbank
│ ├── attack_planner.py # Strategische Anweisungen für die Exploit-Phase
│ ├── output_parser.py # Extrahiert strukturierte Daten aus Tool-Ausgaben
│ ├── offline_manager.py # WiFi-Breach-Pipeline-Zustandsmaschine
│ ├── net_detect.py # Automatische Netzwerkerkennung von wlan0
│ ├── cover_traffic.py # Stealth-Vermischung mit realistischem Web-Traffic
│ ├── passive_capture.py # Hintergrund-tcpdump für Broadcast-Traffic
│ └── ...
│
├── proxy/ # Scope-Durchsetzungskomponenten
│ ├── scope.py # IP-/Port-/Host-Validierung
│ ├── rate_limiter.py # Befehlsratenbegrenzung + Jitter
│ └── command_filter.py # Blockliste für destruktive Befehle
│
├── webui/ # Web-Dashboard (Flask)
│ ├── server.py # API + Stealth-Middleware
│ └── templates/index.html # Dashboard-UI
│
├── data/ # Statische Datendateien
│ ├── cve_exploits.json # CVE→Exploit-Befehlszuordnungen
│ └── playbooks.json # 27 mehrstufige Angriffs-Playbooks
│
├── prompts/ # LLM-Prompt-Vorlagen (hot-reloadable)
├── scripts/ # Betriebsskripte (Start, Stopp, Watchdogs)
├── tests/ # Test-Suiten (API, UI, Offline-Modus)
├── kernels/ # WiFi-Treibermodule + Kernel-Dokumentation
├── simulation/ # Trockenlauf-Mock-Server
├── docs/ # Architektur, GPU-Setup, Funktionen
├── logs/ # Laufzeitdaten (gitignored)
└── models/ # Modelldateien (gitignored)
Der Agent verwendet eine einfache, aber effektive Schleife:
REASONING: ... COMMAND: ...Das 1,2B-Modell hat eine ~50 %ige Befehls-Erfolgsrate (seiner Größe inhärent). Der Agent kompensiert dies mit:
Das Dashboard unter :8888 bietet Echtzeitüberwachung und -steuerung:
Das Dashboard ist stealth-gefiltert: Es spoofed nginx-Header und gibt leere 404s an Verbindungen aus dem Zielnetzwerk zurück.
Aus 72+ Stunden autonomen Betriebs über mehrere Netzwerke:
Beiträge sind willkommen! Siehe CONTRIBUTING.md für Richtlinien.
# Repo klonen
git clone https://github.com/garagehq/nightcrawler.git
cd nightcrawler
# Trockenlauf-Modus (keine echten Befehle, keine Hardware erforderlich)
NC_DRY_RUN=1 python3 main.py
# Tests ausführen
python3 -m pytest tests/
Dieses Tool ist nur für autorisierte Penetrationstests bestimmt. Sie müssen eine schriftliche Genehmigung (Rules of Engagement) vom Netzwerkbesitzer haben, bevor Sie Nightcrawler einsetzen. Die unbefugte Verwendung gegen Netzwerke, die Sie nicht besitzen oder für die Sie keine Testgenehmigung haben, ist illegal.
MIT – siehe LICENSE für Details.
Wenn Ihnen dieses Projekt gefällt, können Sie mir einen Kaffee kaufen ☕:
| Begriff | Bedeutung |
|---|
| Drop Box | Ein Gerät, das in einem Zielnetzwerk zurückgelassen wird, um autonom Tests durchzuführen |
| Scope | Die Gruppe von Netzwerken/Hosts, die Sie testen dürfen |
| Rules of Engagement (ROE) | Ein rechtliches Dokument, das festlegt, was Sie tun dürfen |
| Stealth | Techniken zur Vermeidung der Erkennung durch Netzwerküberwachung (IDS/IPS) |
| MCP | Model Context Protocol – eine Standardschnittstelle für die KI-Werkzeugnutzung |
| C2 | Command and Control – das Web-Dashboard zur Überwachung und Steuerung des Agents |
| Modell | Quantisierung | Prompt-Geschwindigkeit | Generierungsgeschwindigkeit |
|---|
| LFM2.5-1.2B-Instruct-Heretic (Produktion) | 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 |