Playbook-basiertes Angriffssimulations-Framework, das JSON-definierte Angriffspfade in positionsunabhängige Shellcode-Payloads kompiliert, um erweiterte Erkennungsmechanismen und KI-basierte Untersuchungsagenten zu validieren.

SynthAPT ist ein playbook-basiertes Framework zur Adversary-Simulation für die Nachbildung komplexer Angriffspfade. Es ist für die Validierung fortschrittlicher Erkennungen und KI-basierter Untersuchungsagenten konzipiert. Die Kernidee ist, dass Malware-Verhalten in JSON ausgedrückt und in funktionsfähige Malware kompiliert werden kann, was eine schnelle Entwicklung realistischer Szenarien mithilfe von LLMs ermöglicht.

Das Kernimplantat ist ein Shellcode-Payload, der von einem Playbook-Interpreter gesteuert wird. Ein Playbook definiert den gesamten Angriffspfad vor, und das Implantat folgt ihm, indem es sich durch Prozessinjektion, laterale Bewegung usw. durch die Umgebung bewegt. Jedes Implantat wird als unabhängiger Thread mit eigenem Befehlssatz gestartet, sodass mehrstufige Angriffe (z. B. initialer Zugriff → Privilegienerweiterung → laterale Bewegung → Exfiltration) als Graph kooperierender Implantate dargestellt werden, die alle im Voraus im Playbook definiert sind. Dies hat drei wesentliche Vorteile:

Wenn Sie das Release nicht verwenden möchten, können Sie es wie folgt kompilieren:
Mit cargo make bauen:```bash
cargo make build
./target/release/synthapt
Dies wird den Shellcode und den Editor kompilieren.
Wenn Sie SynthAPT ohne Befehle ausführen, gelangen Sie in den Editor. Sie können einen Claude API-Key angeben und die Änderungen während der Eingabe anzeigen.```bash SynthAPT playbook editor and compiler
Usage: synthapt [COMMAND]
Commands: edit Open the TUI editor with a playbook loaded from PATH validate Validate a playbook JSON file and print any errors export-skill Export the agent system prompt as a Claude Code slash command skill compile Compile a playbook to a payload
Wenn Sie ein anderes LLM oder ein Abonnement verwenden möchten, können Sie `synthapt export-skill` ausführen und das mit Ihrem jeweiligen Coding-Setup verwenden.
Es sollte ein JSON-Playbook ausgeben. Kompilieren Sie es mit dem compile-Befehl in ein Payload:```bash
Compile a playbook to a payload
Usage: synthapt compile [OPTIONS] <PLAYBOOK> [OUTPUT]
Arguments:
<PLAYBOOK> Path to the playbook JSON file
[OUTPUT] Output file path (default: payload.bin / payload.exe / payload.dll)
Options:
-e, --exe Compile to PE EXE
-d, --dll Compile to PE DLL
-b, --base <BASE> Override the embedded base shellcode with a custom binary
-h, --help Print help
Konstanten können als Zeichenketten, Hex-Objekte oder Base64-Objekte definiert werden:```json "constants": [ "c:\windows\temp\file.txt", { "hex": "deadbeef" }, { "base64": "SGVsbG8=" } ]
---
### end (0x00)
Ende des Aufgabensatzes. Wird automatisch vom Compiler angehängt – Sie müssen es nicht hinzufügen.
---
### store_result (0x01)
Speichert das letzte Operationsergebnis in einer Variable.
| Feld | Typ | |
|-------|------|-|
| var | u16 | **erforderlich** |```json
{ "op": "store_result", "var": 0 }
Gibt die aktuellen Shellcode-Bytes zurück, optional mit einer Task-ID und/oder einem Magic-Wert eingefügt.
| Field | Type | |
|---|---|---|
| task | u8 | optional |
| magic | u32 Hex-String oder Zahl | optional |
| { "op": "get_shellcode" } | ||
| { "op": "get_shellcode", "task": 5, "magic": "0x18181818" } |
---
### sleep (0x03)
Schlafe für die angegebene Anzahl von Millisekunden.
| Field | Type | |
|-------|------|-|
| ms | u32 | **erforderlich** |```json
{ "op": "sleep", "ms": 5000 }
Führen Sie einen Befehl über cmd.exe aus.
| Feld | Typ | |
|---|---|---|
| command | string | erforderlich |
| { "op": "run_command", "command": "whoami /all" } |
### get_cwd (0x05)
Aktuelles Arbeitsverzeichnis abrufen. Keine Argumente.```json
{ "op": "get_cwd" }
Liest eine Datei und gibt deren Inhalt zurück.
| Field | Type | |
|---|---|---|
| path | string | erforderlich |
| { "op": "read_file", "path": "c:\users\public\data.txt" } | ||
| { "op": "read_file", "path": "%0" } |
### write_file (0x07)
Schreibe Bytes in eine Datei.
| Feld | Typ | |
|-------|------|-|
| path | string | **erforderlich** |
| content | bytes | *optional* (leere Datei, wenn ausgelassen) |```json
{ "op": "write_file", "path": "c:\\temp\\out.txt", "content": "hello" }
{ "op": "write_file", "path": "%0", "content": "$1" }
Gibt den Statuscode einer Variablen aus (0 = Erfolg, ungleich Null = Fehler).
| Field | Type | |
|---|---|---|
| var | u16 | erforderlich |
| { "op": "check_error", "var": 0 } |
---
### conditional (0x09)
Verzweige zu verschiedenen Task-Indizes basierend auf dem Zustand einer Variable.
| Feld | Typ | |
|-------|------|-|
| mode | `"data"` oder `"error"` | **erforderlich** |
| var1 | u16 | **erforderlich** |
| var2 | u16 | *optional* (zwei Variablen vergleichen anstatt einzelne Prüfung) |
| true | u16 | **erforderlich** (Task-Index, wenn die Bedingung wahr ist) |
| false | u16 | **erforderlich** (Task-Index, wenn die Bedingung falsch ist) |
`true_target` und `false_target` werden als Aliase für `true` und `false` akzeptiert.
Einzelvariablen-Modi:
- `"data"` — wahr, wenn var1 nicht-leere Daten hat
- `"error"` — wahr, wenn var1-Status 0 ist (Erfolg)