
raptor v3.1.0
Autonomes Sicherheitsforschungs-Framework, das statische Analyse, Binäranalyse, Fuzzing, LLM-gestützte Schwachstellenvalidierung, Exploit-Generierung und Patch-Erstellung für offensive und defensive Operationen integriert.
╔═══════════════════════════════════════════════════════════════════════════╗
║ ║
║ ██████╗ █████╗ ██████╗ ████████╗ ██████╗ ██████╗ ║
║ ██╔══██╗██╔══██╗██╔══██╗╚══██╔══╝██╔═══██╗██╔══██╗ ║
║ ██████╔╝███████║██████╔╝ ██║ ██║ ██║██████╔╝ ║
║ ██╔══██╗██╔══██║██╔═══╝ ██║ ██║ ██║██╔══██╗ ║
║ ██║ ██║██║ ██║██║ ██║ ╚██████╔╝██║ ██║ ║
║ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ║
║ ║
║ Autonomous Offensive/Defensive Research Framework ║
║ Based on Claude Code (v3.1.0) ║
║ ║
║ Gadi Evron, Daniel Cuthbert, Thomas Dullien (Halvar Flake) ║
║ Michael Bargury, John Cartwright ║
║ ║
╚═══════════════════════════════════════════════════════════════════════════╝
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⣤⣀⣀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⣿⣿⠿⠿⠟
⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⣀⣀⣀⣀⣤⣴⣶⣶⣶⣤⣿⡿⠁⠀⠀⠀
⣀⠤⠴⠒⠒⠛⠛⠛⠛⠛⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠁⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⣿⣿⣿⡟⠻⢿⡀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⢿⣿⠟⠀⠸⣊⡽⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡇⣿⡁⠀⠀⠀⠉⠁⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⠿⣿⣧⠀ Get them bugs.....⠀⠀⠀⠀⠀
Autoren: Gadi Evron, Daniel Cuthbert, Thomas Dullien (Halvar Flake), Michael Bargury, John Cartwright (@gadievron, @danielcuthbert, @thomasdullien, @mbrg, @grokjc)
Lizenz: MIT, siehe LICENSE. Beachte, dass CodeQL eine eigene Lizenz hat und keine kommerzielle Nutzung erlaubt.
Repository: https://github.com/gadievron/raptor
Was ist RAPTOR?
RAPTOR ist ein autonomes Sicherheitsforschungs-Framework, das auf Claude Code aufbaut (aber nicht daran gebunden ist -- du kannst auch deine eigene Analyses chicht einbinden). Es verkettet statische Analyse, Binäranalyse, LLM-gestützte Schwachstellenvalidierung, Exploit-Generierung und Patch-Erstellung zu einem einzigen Workflow, den du gegen eine Codebasis oder ein Binary ausführen kannst.
Es ist keine ausgereifte Software. Sie wurde in der Freizeit gebaut, mit Enthusiasmus und Klebeband zusammengehalten, und sie funktioniert gut genug, dass wir nicht aufhören können, sie zu benutzen. Wenn du sie verbessern möchtest, öffne einen PR.
RAPTOR steht für Recursive Autonomous Penetration Testing and Observation Robot. Wir wollten es unbedingt RAPTOR nennen.
Wie es gebaut ist
RAPTOR ist größtenteils KI-generierter Code. Die Menschen geben die Richtung vor, prüfen die Ausgabe und treffen Designentscheidungen; die KI schreibt die Implementierung. Mechanische Verifikation (Tests, statische Analyse, Korpus-Kalibrierung) hält die Qualitätslatte dort, wo sie sein muss, unabhängig davon, wer — oder was — den Code geschrieben hat.
Voraussetzungen
- Claude Code mit einem aktiven Abonnement (Max, Pro, Team oder Enterprise) oder einem Anthropic-API-Schlüssel. Dies ist die Orchestrierungsschicht für die interaktive
raptor-Shell -- optional, wenn du nur die eigenständigen CLIs benötigst, siehe Vollständig eigenständig ausführen unten. - Python 3.10+ und Node.js 18+.
- Semgrep (
pip install semgrep) für die statische Analyse. CodeQL ist optional, aber empfohlen.
Für die Analyse-Dispatch-Schicht (das LLM, das einzelne Befunde analysiert) übernimmt Claude Code selbst standardmäßig alles -- es sind keine zusätzlichen API-Schlüssel erforderlich. Wenn du eine Multi-Modell-Analyse (z. B. Claude + GPT + Gemini) oder ein vollständig lokales Setup möchtest, musst du den/die anderen Anbieter konfigurieren. Siehe Ein anderes LLM verwenden unten.
Schnellstart
Option 1: Manuell installieren```bash
Clone the repo
git clone https://github.com/gadievron/raptor.git cd raptor
Install Python dependencies
uv sync --locked
Compatibility path during the uv migration
pip install -r requirements.txt
Install Claude Code (if you don't already have it)
npm install -g @anthropic-ai/claude-code
Install Semgrep (required for scanning)
pip install semgrep
Add the launcher to your PATH -- put this in your shell profile to make it
permanent. Append rather than prepend, so system directories stay ahead of
the repo. (Alternatively, symlink bin/raptor into a directory already on PATH.)
export PATH="$PATH:$PWD/bin"
Launch RAPTOR
raptor
Der `raptor`-Launcher ist der empfohlene Weg, um eine Sitzung zu starten, und er funktioniert aus jedem Verzeichnis -- er ermittelt die RAPTOR-Installation, merkt sich das Verzeichnis, aus dem du gestartet hast (sodass Befehle wie `/scan` standardmäßig darauf zugreifen), führt die Pre-Flight-Vertrauens- und Projektprüfungen aus, lädt das Coverage-Tracking-Plugin und bereinigt die Umgebung, bevor er an Claude Code übergibt. Er akzeptiert außerdem einen optionalen Zielpfad und Flags wie `--project`, `--continue` und `--model` -- siehe `raptor --help`.
Das Ausführen von einfachem `claude` aus dem Repo-Verzeichnis heraus funktioniert ebenfalls -- Claude Code übernimmt RAPTORs Konfiguration aus dem Checkout -- aber du überspringst alles, was der Launcher oben tut: keine Pre-Flight-Prüfungen, kein Coverage-Tracking, und Befehle, die standardmäßig auf „das Verzeichnis, aus dem du dies ausgeführt hast" zugreifen, können es nicht sehen.
**Wichtig:** RAPTOR lädt seine Konfiguration aus dem Repo-Verzeichnis. Wenn du `claude` aus einem anderen Verzeichnis ausführst, erhältst du einfaches Claude Code, nicht RAPTOR. Der `raptor`-Launcher vermeidet diesen Fehlermodus vollständig.
### Option 2: In einem Container ausführen (empfohlen)
Die Verwendung von Containern ist eine gängige Sicherheitspraxis, um Agenten daran zu hindern, auf Bereiche deines Dateisystems zuzugreifen, auf die sie nicht zugreifen sollen, sowie um den Schadensradius von bösartigem Code zu begrenzen, der ausgeführt werden könnte (z. B. über einen Supply-Chain-Angriff). Das Image ist groß (etwa 6 GB). Es basiert auf dem Microsoft Python 3.12 devcontainer und fügt statische Analyse-, Fuzzing- und Browser-Automatisierungswerkzeuge hinzu.
Du kannst ein vorgefertigtes Image herunterladen:```bash
docker pull danielcuthbert/raptor:latest
oder bauen Sie es lokal mit dem enthaltenen Dockerfile:```bash
docker build -f .devcontainer/Dockerfile -t raptor:latest .
Das Image erwartet, dass das RAPTOR-Framework (dieses Repo) beim Start in `/workspaces/raptor` eingebunden wird. Optional können Sie einen Zielordner für die lokale Analyse einbinden.
Um den Container zu starten:```bash
docker run -it \
-v "$(pwd):/workspaces/raptor" \
raptor:latest
Um zusätzlich einen Zielordner einzubinden:```bash
docker run -it
-v "$(pwd):/workspaces/raptor"
-v "/path/to/target-folder:/workspaces/target"
raptor:latest
Fügen Sie `--privileged` hinzu, wenn Sie den deterministischen Debugger `rr` benötigen.
VS Code Devcontainers werden ebenfalls unterstützt. Um einen Zielordner einzubinden, fügen Sie ihn zum Abschnitt `mounts` von `.devcontainer/devcontainer.json` hinzu:```jsonc
"mounts": [
// ...existing entries...
"source=/path/to/target-folder,target=/workspaces/target,type=bind,consistency=cached"
]
Dann öffne das Repository in VS Code — es wird dich auffordern, im Container erneut zu öffnen:```bash cd /path/to/raptor code .
So oder so, sobald du dich im Container befindest, führe `raptor` aus, um zu starten.
---
## Was dich beim ersten Durchlauf erwartet
Das Einfachste, was du tun kannst:```
/scan /path/to/code
Dies führt Semgrep (plus Coccinelle, wenn spatch installiert ist; füge --codeql für CodeQL hinzu) gegen das Ziel aus, dedupliziert die Ergebnisse und schreibt einen SARIF-Bericht. Keine LLM-Analyse, keine API-Schlüssel außer Claude Code. Dauert bei einem typischen Repository einige Minuten.
Um LLM-gestützte Validierung hinzuzufügen:``` /agentic /path/to/code
Dies führt die vollständige Pipeline aus: Scannen, Deduplizieren und dann jeden Fund durch die Validierungsstufen (A-F) schicken. Bei einer mittelgroßen Codebasis mit ~50 Funden sind 10-30 Minuten und 2-8 $ an LLM-Kosten der Analyseebene zu erwarten (je nach Modell). Die standardmäßige Kostengrenze liegt bei 10 $ pro Lauf; anpassbar mit `--max-cost-usd`.
**Kostenhinweis:** Die Orchestrierungsebene von Claude Code nutzt dein Claude-Abonnement. Die Dispatch-Ebene der Analyse führt separate LLM-API-Aufrufe durch, die pro Token abgerechnet werden. Wenn du Claude Code nur als Analysemodell verwendest (der Standard), entstehen keine zusätzlichen Kosten über dein Abonnement hinaus. Wenn du externe Modelle konfigurierst (OpenAI, Gemini usw.), werden diese API-Aufrufe den jeweiligen Anbietern in Rechnung gestellt.
---
## Sicherheitsmodell
RAPTOR führt LLM-generierten Code aus und analysiert nicht vertrauenswürdige Repositories. Subprozesse, die nicht vertrauenswürdige Inhalte verarbeiten, werden mit Linux-Namespaces, Landlock und seccomp in einer Sandbox isoliert. Die Sandbox blockiert Netzwerkzugriff, schränkt die Dateisystem-Sichtbarkeit ein und begrenzt den Ressourcenverbrauch. Siehe `docs/sandbox.md` für das vollständige Bedrohungsmodell und die Konfiguration.
Umgebungsvariablen, die Code in die Launcher-Kette einschleusen könnten, werden beim Start entfernt (`core/security/_dangerous_env_strip.sh`). Dateipfade aus gescannten Repositories werden niemals in Shell-Strings interpoliert — alle Subprozess-Aufrufe verwenden listenbasierte Argumente.
---
## Was RAPTOR kann
| Befehl | Was er tut | Status |
|---------|-------------|--------|
| `/agentic` | Vollständiger autonomer Workflow: Scannen, Validieren, Ausnutzen, Patchen | Stabil |
| `/scan` | Statische Analyse mit Semgrep und CodeQL | Stabil |
| `/understand` | Angriffsfläche kartieren, Datenflüsse verfolgen, nach Schwachstellenvarianten suchen | Stabil |
| `/binary` | Black-Box-Binäruntersuchung, Laufzeitnachweise, Graph-Abfragen und Übergabe | Beta |
| `/ghidra` | Ghidra-RE-Brücke: `.gpr`-Projekte anhängen/importieren, versionsübergreifender Diff, Export von Funden | Beta |
| `/audit` | Hypothesengetriebene, werkzeuggestützte systematische Code-Überprüfung | Beta |
| `/review` | Audit-Status abfragen: Funde, Lücken, Abdeckung, Betreibernotizen | Stabil |
| `/annotate` | Freiform-Prosa-Annotationen pro Funktion anhängen (Betreiber-Review-Notizen) | Stabil |
| `/validate` | Mehrstufige Pipeline zur Validierung der Ausnutzbarkeit (Stufen 0-F) | Stabil |
| `/diagram` | Visuelle Mermaid-Karten aus den JSON-Ausgaben von `/understand` und `/validate` | Beta |
| `/codeql` | CodeQL-exklusive Tiefenanalyse mit SMT-Datenfluss-Vorprüfung | Stabil |
| `/analyze` | Vorhandene SARIF-Funde mit LLM analysieren, ohne erneutes Scannen | Stabil |
| `/openant` | OpenAnt-LLM-Quellcode-Scan: AST-Analyse plus LLM-Reasoning pro Funktion | Beta |
| `/sca` | Software-Composition-Analyse: Abhängigkeiten, Advisories, Lieferketten-Signale, SBOMs und Fixes | Beta |
| `/cve-diff` | Den Fix-Commit für eine CVE über OSV, NVD, GitHub und GitLab finden und diffen | Beta |
| `/cve-env` | Eine Docker-Umgebung erstellen und verifizieren, die die betroffene Anwendung einer CVE in ihrer Vor-Patch-Version ausführt | Experimentell |
| `/exploit` | Proof-of-Concept-Exploit-Code generieren | Beta |
| `/patch` | Sichere Patches für bestätigte Schwachstellen generieren | Beta |
| `/fuzz` | Binäres Fuzzing mit AFL++ und Crash-Analyse | Stabil |
| `/crash-analysis` | Autonome Ursachenanalyse für C/C++-Abstürze | Stabil |
| `/oss-forensics` | Evidenzbasierte forensische Untersuchung für GitHub-Repositories | Stabil |
| `/project` | Benannte Arbeitsbereiche zum Organisieren von Läufen und Verfolgen von Funden über die Zeit | Stabil |
| `/describe` | Ein Ziel beschreiben: Sprachmix, Build-System, Werkzeuglücken, Kostenschätzung (schreibgeschützt) | Stabil |
| `/threat-model` | Bedrohungsmodelle pro Projekt erstellen, einsehen und pflegen | Stabil |
| `/sage` | Persistente Gedächtnisschicht (speichern, abrufen, verknüpfen, bestätigen) | Stabil |
| `/ask` | Einen Freiform-Prompt an ein beliebiges konfiguriertes LLM-Modell senden | Stabil |
| `/scorecard` | Zuverlässigkeit pro Modell über Entscheidungsklassen hinweg einsehen | Stabil |
| `/frida` | Dynamische Instrumentierung über Frida | Alpha |
| `/web` | Webanwendungs-Scanning: Crawling, ffuf/nuclei-Integration, oracle-verifizierte Injection, Blind-SSRF-Callbacks | Beta |
---
## Wie die Pipeline funktioniert
Beginne damit, ein Projekt zu erstellen, damit alle deine Läufe an einem Ort landen:```
/project create myapp --target /path/to/code # create a project first
/project use myapp # set it as active
/understand --map # map the attack surface
/agentic --threat-model --validate # map, model, scan, validate
/project findings # review everything in one place
Für ein kompiliertes Artefakt ist der entsprechende Ausgangspunkt:```text /binary investigate /path/to/binary # build the evidence-backed binary map /binary graph --edges --json # query the persisted graph /binary trace-parser # collect runtime parser evidence /binary harness # draft a harness only when the boundary is explicit
`/understand` erstellt eine Kontextkarte von Einstiegspunkten, Vertrauensgrenzen und Senken, bevor eine Zeile des Scannens stattfindet. `/agentic` führt dann Semgrep und CodeQL aus, dedupliziert Befunde und leitet jeden einzelnen zur Validierung mithilfe der exploitation-validator-Methodik weiter:
Mit `--threat-model` führt RAPTOR zuerst die Karte aus, erstellt `threat-model.json` und `THREAT_MODEL.md`, falls das Projekt diese noch nicht besitzt, und speist dann eine kompakte Version in `/understand`, die autonome Analyse und `/validate` ein. Bestehende Bedrohungsmodelle des Projekts bleiben erhalten, es sei denn, du übergibst `--threat-model-refresh`; veraltete Fallback-Karten werden abgelehnt, es sei denn, du übergibst explizit `--threat-model-use-stale`. Außerdem wandelt es kartierte ungeprüfte Flüsse in Kandidaten-SARIF um, damit Scanner-Fehlschläge den Lauf nicht beenden. Es ist betreibereigener Kontext, kein magischer Beweis: Befunde benötigen weiterhin Code-Belege oder oracle-gestützte Bestätigung. Siehe `docs/threat-model.md`.
- Stufe A: Ist das Muster tatsächlich eine Schwachstelle, oder ist das Tool nur Musterabgleich-Rauschen?
- Stufe B: Was muss ein Angreifer tun, um es zu erreichen, und was steht im Weg?
- Stufe C: Existiert der Codepfad tatsächlich? Kann er von außen erreicht werden?
- Stufe D: Endgültige Entscheidung -- ist dies Testcode, benötigt er unrealistische Vorbedingungen, weicht das Modell aus?
- Stufe E: Binäre Exploit-Machbarkeit (wenn ein kompiliertes Artefakt verfügbar ist)
- Stufe F: Selbstüberprüfung -- hat eine frühere Stufe ausgewichen oder sich selbst widersprochen?
Befunde, die die Validierung bestehen, erhalten Exploit-PoCs und generierte Patches. Am Ende läuft eine übergreifende Befundanalyse, um gemeinsame Grundursachen und Angriffsketten zu finden.
`/validate` führt dieselbe Pipeline als eigenständigen Schritt aus, wenn du bereits Befunde aus einem vorherigen Scan hast.
Für ein kompiliertes Artefakt führt `/binary <path>` nun eine evidenzbasierte Untersuchung durch, anstatt einen Haufen roher Reverse-Engineering-Artefakte auf den Operator zu werfen. Darunter erstellt es weiterhin das SHA-256-gebundene Manifest, das Evidenz-Ledger, die Kontextkarte, die Checkliste und den SQLite-Graphen aus Dateimetadaten, Imports und radare2-Xrefs. Mach-O-Apps erhalten außerdem ein Slice-Inventar, Bundle-Metadaten und Objective-C-/Swift-Klassenselektoren; hochwertiger Pseudocode wird persistiert, anstatt während des Laufs zu verschwinden. PE-DLL-Exporte, Windows-Treiber-Dispatcher und Linux-Kernelmodul-ioctl-Handler werden ebenfalls als eigene Ingress-Kandidaten behandelt, wobei die PE-Architektur aus dem COFF-Header gelesen und nicht geraten wird. Die Untersuchungsschicht fragt dann diesen Graphen ab, priorisiert externen Ingress vor generischen Senken-Hinweisen, entdeckt deklarierte Helfer-/Geschwister-Binärdateien und schreibt einen kompakten Bericht, der in Fakten, strukturelle Schlussfolgerungen und unbewiesene Hypothesen unterteilt ist. Frida-Beobachtungen, Fuzz-Crash-Zeugen, explizite Z3-Prüfungen und Binärdiffs können später stärkere Evidenz hinzufügen. RAPTOR behält außerdem den internen Aufrufgraphen bei, der benötigt wird, um begrenzte Ingress-zu-Parser-Kandidaten wiederherzustellen, sodass ein App-Callback auf die interne Funktion eingegrenzt werden kann, die tatsächlich `XML_Parse`, `d2i_X509`, `jpeg_read_header` oder eine andere echte Parser-Oberfläche aufruft, ohne vorzugeben, dass dies ein Taint-Beweis ist. `/binary trace-parser <run-dir>` ist die explizite dynamische Fortsetzung: Es führt den engen Frida-Parser-Trace aus und aktualisiert dann dieselbe Kontextkarte, den Handoff, den Graphen und den Untersuchungsbericht an Ort und Stelle. `/binary investigate --active` kartiert zuerst und startet nur dann eine echte Fuzz-Kampagne, wenn eine konkrete Harness-Grenze existiert; App-, DLL- und Treiber-Ziele erhalten stattdessen einen Harness- oder Snapshot-Schritt. `/binary harness` schreibt eine evidenzgestützte Harness-Spezifikation für den gewählten Ingress und gibt nur dann Kandidatenquellcode aus, wenn der ABI- oder IOCTL-Vertrag explizit ist. Es schwindelt sich nicht von „`memcpy` existiert" zu „dies ist ausnutzbar": Imports, Selektoren und Aufrufkanten bleiben Kandidaten, bis etwas Mechanisches mehr beweist. Siehe `docs/binary-analysis.md`.
---
## Software Composition Analysis
`/sca` analysiert die Abhängigkeits- und Lieferkettenseite eines Projekts. Es ist nicht nur ein CVE-Lookup in einer Requirements-Datei: RAPTOR entdeckt Manifeste, Lockfiles, Inline-Installationsbefehle, Workflow-Abhängigkeiten und Paketquellen von Containern/Basis-Images und normalisiert sie dann in eine einzige Abhängigkeitsansicht.
Der Scan reichert Abhängigkeiten mit OSV-Advisories, CISA KEV, EPSS, CISA Vulnrichment/SSVC, Erreichbarkeit, Exploit-Evidenzsignalen, Hygiene-Prüfungen, Lieferketten-Heuristiken, Lizenzrichtlinien-Befunden und optionaler LLM-Überprüfung/-Triage an. Er gibt RAPTOR-native Befunde sowie SBOM- und CI-freundliche Ausgaben aus:
- `findings.json` - kanonische RAPTOR-Befunde
- `report.md` - menschenlesbare Zusammenfassung
- `sbom.cdx.json` - CycloneDX-SBOM mit VEX-Daten
- `findings.sarif` - GitHub/GitLab-Code-Scanning-Ausgabe
Häufige Befehle:```bash
python3 raptor.py sca --repo /path/to/project
python3 raptor.py sca --repo /path/to/project --no-llm
python3 raptor.py sca --repo /path/to/project --fail-on-severity high --fail-on-kev
python3 raptor.py sca --repo /path/to/project fix
python3 raptor.py sca check PyPI django 4.2.10
Nützliche Unterbefehle sind fix, check, upgrade, diff, verify, health, render, suppress und clean-cache. Siehe docs/sca.md für die vollständige Referenz.
Z3-SMT-Integration
RAPTOR verfügt über eine zweischichtige Z3-Integration (pip install z3-solver). Sie ist optional. Alles funktioniert ohne sie, aber die Ergebnisse sind mit ihr besser.
Dataflow-Vorprüfung (CodeQL)
Wenn CodeQL ein Pfadergebnis liefert, werden die Pfadbedingungen auf Erfüllbarkeit geprüft, bevor ein LLM-Aufruf erfolgt. Pfade, die nachweislich unerreichbar sind, werden sofort verworfen. Für erreichbare Pfade erzeugt Z3 konkrete Kandidateneingaben, die in den Analyse-Prompt einfließen, sodass das LLM etwas Konkretes zum Analysieren hat statt abstrakter Muster.
One-Gadget-Constraint-Analyse (Binär-Machbarkeit)
Während der Bewertung der Machbarkeit von Binär-Exploits prüft Z3, ob die Register- und Speicher-Constraints eines One-Gadgets gegen den konkreten Absturzzustand erfüllbar sind. Gadgets werden nach tatsächlicher Erreichbarkeit statt nach Heuristiken eingestuft, sodass Sie Zeit für Gadgets aufwenden, die tatsächlich funktionieren können.
Z3 ist im Devcontainer vorinstalliert. Für manuelle Installationen: pip install z3-solver.
Ausführung offline und in air-gapped Pipelines
RAPTORs benutzerdefinierte Regeln unter engine/semgrep/rules/ sind vollständig lokal und laufen ohne Netzwerkzugriff.
Für Registry-Packs (p/security-audit, p/owasp-top-ten usw.) wird das Cache-Verzeichnis leer ausgeliefert. Ein Cache-Tool (engine/semgrep/tools/cache-packs.py) übernimmt die Befüllung:```bash
On a connected machine — update the local cache directly:
python3 engine/semgrep/tools/cache-packs.py update
Or fetch into a zip bundle for airgap transfer:
python3 engine/semgrep/tools/cache-packs.py fetch
→ produces semgrep-cache-YYYY-MM-DD.zip
On the airgapped machine — import the bundle:
python3 engine/semgrep/tools/cache-packs.py import semgrep-cache-2026-07-16.zip
Check what's cached:
python3 engine/semgrep/tools/cache-packs.py list
Sobald der Cache befüllt ist, löst der Scanner Pack-IDs in lokale Dateien auf und es findet kein Netzwerkaufruf statt. Ohne den Cache versucht RAPTOR, Registry-Packs zur Scan-Zeit von semgrep.dev abzurufen; wenn offline, werden nicht gecachte Packs ordnungsgemäß verworfen und nur mit benutzerdefinierten Regeln ausgeführt.
CodeQL benötigt Netzwerkzugriff nur während der Ersteinrichtung, um die CLI und Query-Packs herunterzuladen. Nach der Installation läuft es offline.
---
## Benutzerdefinierte Regeln
RAPTOR liefert über 200 benutzerdefinierte Regeln zur statischen Analyse mit, die adversarial getestet wurden, um False Positives zu eliminieren:
- **Semgrep (~150 Regeln)** — Taint-Tracking- und Pattern-Regeln für Python, Go, Java und JS/TS. Deckt SQLi, XSS, SSRF, SSTI, Command Injection, Deserialisierung, XXE, LDAP/NoSQL Injection, Path Traversal, Open Redirect, Log-/Header-Injection, Eval-Injection, ReDoS, Prototype Pollution, JWT-Fehlkonfiguration, schwache Kryptografie, unsicheres TLS und hartcodierte Secrets ab.
- **Coccinelle (68 Regeln)** — strukturelles Matching für C/C++. Memory Safety (Double Free, Use-after-Free, Free eines Nicht-Basis-Zeigers, Free eines Stack-Arrays, mmap'd Memory, Use-after-Close), Integer-Bugs (Overflow, Sign Extension, doppeltes sizeof), Ressourcenlecks (popen/fclose-Mismatch, fdopendir Double Close), Buffer-Handling (strncpy ohne NUL, copy_user Size-Mismatch, malloc/strlen Off-by-One), Signal-Handler-Sicherheit, API-Missbrauch (fcntl-Flag-Domain, SIGKILL/SIGSTOP, doppelter Byte-Swap, inet_ntoa statischer Buffer), Compiler Dead-Store-Elimination, Kernel IS_ERR/PTR_ERR-Verwechslung, Format-String-Injection, TOCTOU-Races und mehr.
- **CodeQL (8 Queries)** — interprozedurales Taint-Tracking für C++ (Format-String-Injection, Integer-Truncation, Use-after-Move, Iterator-Invalidierung) und Java (XXE, unsichere Deserialisierung, Log-Injection, Spring SSRF).
Die Regeln direkt durchsuchen: `engine/semgrep/rules/`, `engine/coccinelle/rules/`, `engine/codeql/queries/`. Diese ergänzen die Semgrep-Registry-Packs, die RAPTOR einbindet (`p/security-audit`, `p/owasp-top-ten`, `p/secrets` immer; zusätzlich policy-gruppenspezifische Packs wie `p/command-injection`, `p/jwt`, `p/xss`) — die Überschneidung ist minimal.
---
## Wie RAPTOR sich selbst prüft
RAPTOR verwendet einen guten Teil seines eigenen Security-Toolings für sich selbst, aber es lohnt sich, ehrlich zu sein darüber, was tatsächlich einen PR blockiert und was nur im Hintergrund läuft, um uns ehrlich zu halten. Einiges davon ist ein hartes Gate, einiges ist ein geplanter Check, und einiges ist nur ein Benchmark, den wir beibehalten, damit wir erkennen können, wann wir etwas verschlechtert haben. Die ausführlichere Aufschlüsselung, einschließlich der tatsächlichen Parameter und wie man die Checks reproduziert, findet sich in `docs/ci-controls.md`.
| Control | Was geprüft wird | Auslöser | Konfiguration / Nachweis |
|---|---|---|---|
| Ruff | Python-Korrektheits-Linting (`F401`, `F811`, `F821`, `F841`) | PR-Diff-Gate, plus wöchentliches Full-Tree-Audit | `pyproject.toml`, `.github/workflows/lint.yml` |
| Pytest | Schnelle Unit-/Integration-Grenzen, subsystem-spezifische Tiers (via Import-Graph-Dispatch), Prompt-Envelope-Audit | PRs, Pushes auf `main`, Merge Queue, geplante vollständige Suite | `pytest.ini`, `.github/workflows/tests.yml`, `.github/workflows/nightly.yml` |
| CodeQL Advanced | Python-, C/C++- und GitHub-Actions-Code-Scanning mit Import-Graph-Scope-Narrowing | PRs, Pushes auf `main`, Merge Queue, wöchentlicher Zeitplan | `.github/workflows/codeql.yml`, `.github/codeql/codeql-config.yml` |
| Workflow-Härtung | SHA-gepinnte Third-Party-Actions, Least-Privilege-Berechtigungen, Command-Metadata-Linting | Jede Workflow-Änderung und jeder Lint-Lauf | `.github/workflows/`, `.github/scripts/check_command_metadata.py` |
| Corpus-Label-Lint | Validierung des Audit-Corpus-Label-Schemas und Verifikation der Upstream-Pins | PRs (geänderte Labels), wöchentlicher vollständiger Sweep | `.github/workflows/corpus-labels.yml` |
| RAPTOR SCA PR Gate | Durch einen PR eingeführte Dependency- und Supply-Chain-Regressionen | Manifest- / Lockfile- / Workflow-Änderungen | `.github/workflows/sca-pr-gate.yml` |
| RAPTOR SCA Self-Bump | Mechanische Dependency-Härtung und Vorschläge für sichere Upgrades | Wöchentlicher Zeitplan, manueller Lauf | `.github/workflows/sca-self-bump.yml` |
| SCA Compromise Corpus | Ob bekannte Dependency-Kompromittierungen noch das erwartete Signal auslösen | Wöchentlicher Zeitplan, relevante PR-Änderungen | `test/data/sca-e2e/compromise-corpus/`, `.github/workflows/sca-compromise-check.yml` |
| Repo-Invariant-Detektoren | Dead-Code- / Wrong-Call-Erkennung, Drift der Env-Var-Dokumentation, Guardrails für Vokabular-Listen, kanonische JSON-Byte-Formen, Optional-Dep-Import-Lint | PR-Gate (`lint.yml` `repo-invariants`-Job), plus täglicher Sweep | `.github/workflows/lint.yml`, `.github/workflows/miswiring-scan.yml`, `.github/scripts/*_baseline.json` |
| SCA-Kalibrierung + Stress-Corpus | Ob Risk-Scoring und Parser-Abdeckung im Laufe der Zeit driften | Wöchentliche / monatliche geplante Jobs | `packages/sca/data/calibration/`, `.github/workflows/refresh-sca-calibration.yml`, `.github/workflows/sca-stress-sweep.yml` |
| Dataflow-Corpus | Precision / Recall / FP-Kategorie-Tracking für Validator-Verhalten | Von Entwicklern ausgeführter Benchmark und Corpus-Tests | `core/dataflow/corpus/`, `core/dataflow/scripts/corpus-metrics` |
| CI-Controls-Doc-Guard | Dokumentierte Pfade existieren, Ruff-Konfiguration stimmt überein, README verlinkt das Dokument | PRs | `.github/tests/test_ci_controls_docs.py` |
Derzeit nicht erzwungen: `mypy` ist in `pyproject.toml` gepinnt, blockiert aber nichts; Ruff-Formatierung wird nicht erzwungen; Semgrep ist Teil von RAPTORs Scanner-Oberfläche, aber wir haben noch keinen dedizierten „RAPTOR mit RAPTOR scannen"-Semgrep-Workflow.
---
## Verwendung eines anderen LLM
RAPTOR hat zwei separate Modellschichten, und es lohnt sich zu wissen, wie beide funktionieren, bevor man etwas ändert.
Die **Orchestrierungsschicht** ist Claude Code -- aber nur für die interaktive `raptor`-Shell (diese konversationelle Slash-Command-Schicht). Die CLAUDE.md, Skills und Commands laufen dort alle als Claude-Code-Anweisungen. Um zu ändern, welches Claude-Modell diese Schicht orchestriert, verwende das `--model`-Flag von Claude Code oder den `/model`-Befehl innerhalb einer Session. Wenn du diese Schicht überhaupt nicht willst, siehe [Vollständig eigenständig ausführen](#running-fully-standalone-no-claude-code) unten.
Die **Analyse-Dispatch-Schicht** ist das LLM, das einzelne Vulnerability-Findings analysiert. Diese ist von der Orchestrierungsschicht getrennt und kann ein beliebiger unterstützter Provider sein. Konfiguriere sie in `~/.config/raptor/models.json`:```json
{
"models": [
{
"provider": "anthropic",
"model": "claude-opus-4-6",
"api_key": "sk-ant-...",
"role": "analysis"
},
{
"provider": "openai",
"model": "gpt-5.4",
"api_key": "sk-...",
"role": "analysis"
},
{
"provider": "anthropic",
"model": "claude-sonnet-4-6",
"api_key": "sk-ant-...",
"role": "aggregate"
}
]
}
Oder überspringen Sie die Konfigurationsdatei und setzen Sie Umgebungsvariablen. RAPTOR erkennt sie automatisch:```bash export ANTHROPIC_API_KEY=sk-ant-... # Anthropic Claude export OPENAI_API_KEY=sk-... # OpenAI export GEMINI_API_KEY=... # Google Gemini export MISTRAL_API_KEY=... # Mistral export OLLAMA_HOST=http://localhost:11434 # Local Ollama
Modellrollen ermöglichen es dir, verschiedene Modelle verschiedenen Aufgaben zuzuweisen:
| Rolle | Was sie tut |
|------|-------------|
| `analysis` | Validiert und analysiert jeden Fund (Stufen A-F) |
| `code` | Schreibt Exploit-PoCs und Patch-Code |
| `consensus` | Zweitmeinungs-Abstimmung über echte Positive |
| `aggregate` | Optional. LLM-geschriebene narrative Synthese zusätzlich zur deterministischen Multi-Modell-Korrelation, geschrieben in `aggregation.json` und den finalen `agentic-report.md` |
| `fallback` | Wird verwendet, wenn das primäre Modell fehlschlägt oder Rate-Limits erreicht |
Wenn keine Rollen festgelegt sind, übernimmt das erste Modell in der Liste alles. Für Multi-Modell-
Quellcode-Analyse konfiguriere zwei oder mehr `analysis`-Modelle — du erhältst
standardmäßig die deterministische Korrelation. Die `aggregate`-Rolle ist optional und fügt eine
LLM-geschriebene Zusammenfassung obendrauf hinzu:```bash
python3 raptor.py agentic --repo /code \
--model claude-opus-4-6 \
--model gpt-5.4 \
--aggregate claude-sonnet-4-6
Budget-Kontrolle:```bash
Cap analysis-layer LLM spend at $5 for this run (default: $10)
python3 raptor.py agentic --repo /code --max-cost-usd 5.00
Ollama eignet sich gut für die Analyse; die Zuverlässigkeit bei der Generierung von Exploit-/Patch-Code hängt eher von Modellgröße und Quantisierung ab als von einer festen Eigenschaft lokaler Modelle — siehe [Quality Tradeoffs](https://github.com/gadievron/raptor/blob/main/llm.md#quality-tradeoffs) im LLM-Leitfaden und prüfe `/scorecard`, um zu sehen, was dein spezifisches Modell tatsächlich misst.
### Vollständig eigenständig ausführen (ohne Claude Code)
`bin/raptor` -- die interaktive Shell mit Banner und Slash-Befehlen, also diese konversationelle Ebene -- führt direkt in die Claude Code CLI aus und benötigt immer einen eigenen Login. Die eigentliche Mechanik darunter nicht: `python3 raptor.py <mode>` ist eine reine Python-CLI ohne jegliche Claude-Code-Abhängigkeit.```bash
# No `claude` process involved at any point
python3 raptor.py doctor # status check -- explicitly "no claude needed"
python3 raptor.py agentic --repo /path/to/code # scan -> dedup -> analysis
python3 raptor.py scan --repo /path/to/code
libexec/raptor-*-Skripte (einschließlich raptor-project-manager -- raptor.py hat keinen project-Modus, die Projektverwaltung befindet sich ausschließlich dort) sind ebenfalls reines Python, aber sie weigern sich zu laufen, es sei denn CLAUDECODE ist gesetzt (automatisch true innerhalb einer Claude Code-Sitzung) oder _RAPTOR_TRUSTED=1 ist explizit gesetzt -- ein Schutz davor, außerhalb der Umgebungsbereinigung des Launchers aufgerufen zu werden. Einmalig für die eigenständige Nutzung setzen:```bash
export _RAPTOR_TRUSTED=1
libexec/raptor-project-manager create myapp --target /path/to/code libexec/raptor-project-manager use myapp python3 raptor.py agentic --repo /path/to/code # picks up the active project automatically libexec/raptor-project-manager status libexec/raptor-project-manager findings
Richte `models.json` / `OLLAMA_HOST` auf eine lokale Ollama-Instanz aus (siehe oben), und dieser gesamte Pfad spricht nie mit Anthropic -- nützlich für airgapped Boxen oder rein lokale Hardware. Du verlierst die konversationelle Slash-Command-Ebene (dieser Chat); die Scan-/Analyse-/Exploit-Pipeline selbst ist davon nicht betroffen.
### Fast-Tier-Kurzschluss + das Modell-Scorecard
Wenn dein Analyse-Tier-Modell ein günstigeres Geschwistermodell desselben Anbieters hat (Anthropic Opus → Haiku, OpenAI 5.x → 4o-mini, Gemini Pro → Flash-Lite, Mistral Large → Small), verwendet RAPTOR es als Vorfilter für Consumer, die in das Substrat eingebunden sind (heute codeql; SCA und andere, sobald Follow-ups landen). Das günstige Modell schließt nur bei **sicheren False Positives** kurz; mehrdeutige Fälle und sichere TPs durchlaufen immer die vollständige Analyse. Vertrauen akkumuliert sich pro `(model, decision_class)`-Zelle — RAPTOR zeichnet die Übereinstimmung zwischen günstig und vollständig auf und schließt erst dann kurz, wenn die Wilson-95%-Obergrenze der Fehlerrate der Zelle bei oder unter 5% liegt.
Um zu prüfen, worin deine Modelle gut sind, verwende `/scorecard` (oder direkt: `libexec/raptor-llm-scorecard list`). Die Scorecard ist global (Lektionen werden über Projekte hinweg übernommen) und wird unter `out/llm_scorecard.json` persistiert.
---
## Projekte
Ohne ein Projekt erhält jeder Lauf sein eigenes zeitgestempeltes Verzeichnis unter `out/`. Mit einem Projekt geht alles an einen Ort, und du erhältst zusammengeführte Findings, Coverage-Tracking und Diffs zwischen Läufen.```bash
/project create myapp --target /path/to/code -d "Short description"
/project use myapp
/scan
/understand --map
/validate
/project status # all runs, pass/fail, timestamps
/project findings # merged findings across all runs
/project findings --detailed # per-finding detail
/project coverage --detailed # which files were reviewed
/project diff myapp run1 run2 # compare two runs
/project report # full merged report
/project clean --keep 3 # remove old runs, keep the last 3
/project export myapp /tmp/myapp.zip
/project none # clear active project
Architektur
RAPTOR besteht aus zwei Schichten.
Die Python-Ausführungsschicht (raptor.py, packages/, core/, engine/) übernimmt die Schwerarbeit: Ausführen von Semgrep und CodeQL, Verwalten von Subprozessen, Parsen von SARIF, Deduplizieren von Findings, Verteilen von LLM-API-Aufrufen, Verfolgen von Kosten, Schreiben von Ausgabedateien. Sie trifft keine Entscheidungen. Sie führt aus.
Die Claude Code-Entscheidungsschicht (.claude/, tiers/, CLAUDE.md) trifft die Entscheidungen: welche Findings priorisiert werden, wie Ergebnisse interpretiert werden, was das Angriffsszenario ist, ob der Exploit realistisch ist. Implementiert als Claude Code-Skills, -Befehle und -Agenten, die progressiv geladen werden.```
CLAUDE.md always loaded -- bootstrap, routing, security rules
.claude/commands/ slash commands (/agentic, /scan, /validate, etc.)
.claude/skills/ methodology detail, loaded on demand
tiers/ adversarial thinking, recovery, expert personas
.claude/agents/ specialist sub-agents (offsec, crash analysis, forensics)
Die Aufteilung bedeutet, dass Sie die Python-Schicht aus einer CI-Pipeline heraus ausführen können (`python3 raptor.py scan --repo ...`) und strukturierte SARIF-Ausgabe ohne Claude Code erhalten, oder sie interaktiv mit dem vollständigen agentischen Workflow ausführen können.
---
## OSS-Forensik
`/oss-forensics` untersucht öffentliche GitHub-Repositories anhand von Beweisen aus mehreren Quellen: der GitHub-API, GH Archive (unveränderliche Ereignishistorie über BigQuery), der Wayback Machine und der lokalen Git-Historie. Es führt eine strukturierte Pipeline von der Beweissammlung über die Hypothesenbildung bis hin zu einem abschließenden forensischen Bericht aus.
Erfordert `GOOGLE_APPLICATION_CREDENTIALS` für den BigQuery-Zugriff. Siehe `.claude/commands/oss-forensics.md` für Details.
---
## Experten-Personas
Acht Experten-Personas sind auf Abruf verfügbar. Laden Sie eine, wenn Sie eine andere Perspektive auf einen Befund oder eine bestimmte Technik wünschen:```
Exploit Developer (Mark Dowd) Exploit PoC generation
Crash Analyst (Charlie Miller / Halvar Flake) Crash analysis and exploitability assessment
Security Researcher General adversarial code review
Patch Engineer Secure fix generation
Penetration Tester Realistic attack scenario assessment
Web Researcher (James Kettle) Web endpoint research (smuggling, cache poisoning, SSRF)
Fuzzing Strategist Corpus design and triage
Binary Exploitation Specialist ROP, heap, and memory corruption
Sag Claude, welche verwendet werden soll, z. B. „Use the Binary Exploitation Specialist".
Dokumentation
Siehe docs/README.md für den vollständigen Index. Wichtige Leitfäden:
| Datei | Inhalt |
|---|---|
docs/commands.md | Vollständige Slash-Command-Referenz mit jedem Flag |
docs/architecture.md | Codebasis-Struktur und Verzeichnisbaum |
docs/llm.md | LLM-Provider-Konfiguration, Bedrock, Multi-Model-Workflows |
docs/sandbox.md | Prozessisolierung: Profile, Landlock, Namespaces |
docs/troubleshooting.md | Selbsttest, Sandbox-Setup-Fehler (mount-ns/uidmap unter Ubuntu 24.04+), EDR-Interaktion |
docs/agent-security.md | Agent-Fähigkeiten, Tool-Grenzen, Netzwerkkontrollen, menschliche Freigabe |
docs/audit.md | Systematische Code-Überprüfung: Hypothesen, Tools, Strategien, Gates |
docs/validation.md | Ausnutzbarkeits-Validierungspipeline (Stufen 0--1) |
docs/static-analysis.md | Semgrep- und Coccinelle-Regeln |
docs/codeql.md | CodeQL-Integration und autonome Analyse |
docs/binary-analysis.md | Binary Oracle, /binary, Exploit-Machbarkeit |
docs/fuzzing.md | AFL++ und libFuzzer |
docs/crash-analysis.md | Autonome Crash-Root-Cause-Analyse |
docs/sca.md | Software-Composition-Analyse |
docs/frida.md | Dynamische Instrumentierung |
docs/security.md | RAPTORs eigenes Sicherheitsmodell |
docs/ci-controls.md | CI-Kontrollen, Workflows und Benchmark-Nachweise |
docs/threat-model.md | Threat-Model-Funktion pro Projekt |
docs/python-cli.md | Python-CLI-Referenz für Skripting und CI |
docs/concepts.md | Kernkonzepte: Zwei-Schichten-Modell, Finding-Lebenszyklus, Auswahl eines Befehls |
docs/agentic.md | Autonomer Workflow: /agentic-Pipeline, Anreicherungs-Flags, Multi-Model |
docs/sage.md | SAGE persistentes Gedächtnis: Einrichtung, HMAC-Schlüssel, CPU/GPU, Anwendungsfälle |
docs/dependencies.md | Externe Tools, Versionen und Lizenzen |
tiers/personas/README.md | Referenz zu Experten-Personas |
Mitwirken
RAPTOR ist Open Source. Gute Einstiegspunkte, wenn du beitragen möchtest:
- Browser-Engine-Crawling und DOM-XSS-Abdeckung für den Web-Scanner (Playwright ist gepinnt, aber ungenutzt)
- SSRF-Regelabdeckung für annotationsgesteuerte Frameworks (Spring
@RequestParam, FastAPI typisierte Parameter) — semgrep kann diese Quellen nicht abgleichen, daher sind alternative Ansätze willkommen - YARA-Signaturerzeugung
- Portierungen auf andere KI-Coding-Tools (Cursor, Windsurf, Copilot, Cline)
- Bessere Firmware-Analyse-Abdeckung
- Alles, was deiner Meinung nach fehlt
Releases werden als vX.Y.Z getaggt und automatisch von CI gebaut. Commit-Präfixe bestimmen, was ins Changelog kommt: feat: für neue Funktionen, fix: für Bugfixes, security: für Sicherheitsänderungen, docs: für Dokumentation. Alles ohne Präfix landet unter „Other changes". Keine strikte Konvention erforderlich, aber es hilft.
Reiche Pull Requests ein. Chatte mit uns im #raptor-Kanal im Prompt||GTFO Slack: https://join.slack.com/t/promptgtfo/shared_invite/zt-3v2b4sll3-SfyzFRw2lykx_XQX7F3uNQ
Lizenz
MIT -- Copyright (c) 2025-2026 Gadi Evron, Daniel Cuthbert, Thomas Dullien (Halvar Flake), Michael Bargury, John Cartwright.
Siehe LICENSE für den vollständigen Text. Prüfe die Lizenzen aller Abhängigkeiten vor kommerzieller Nutzung -- insbesondere CodeQL erlaubt diese nicht.
Issues: https://github.com/gadievron/raptor/issues
Python-Abhängigkeiten
RAPTOR verwendet pyproject.toml und uv.lock als maßgebliche Quelle für
Python-Abhängigkeiten. Die eingecheckte requirements.txt bleibt als
Kompatibilitätsexport für Nutzer erhalten, die pip install bevorzugen.
Nützliche Installationen:```bash uv sync --locked # core runtime uv sync --locked --group dev # tests + linting uv sync --locked --extra web # /web scanner support uv sync --locked --extra "web smt llm sage" # optional stacks
Wenn `/web`, Z3, SAGE und Cloud-Provider-SDKs als optionale Extras beibehalten werden, wird verhindert, dass die Standardinstallation von RAPTOR schwerer und fehleranfälliger wird als nötig.