Framework di simulazione avversaria basato su playbook che compila percorsi di attacco definiti in JSON in payload shellcode indipendenti dalla posizione per validare rilevamenti avanzati e agenti investigativi basati su IA.

SynthAPT è un framework di simulazione avversaria basato su playbook per replicare percorsi di attacco complessi. È progettato per convalidare rilevamenti avanzati e agenti di investigazione basati su IA. L'idea centrale è che il comportamento del malware può essere espresso in JSON e compilato in malware funzionale, consentendo uno sviluppo rapido di scenari realistici utilizzando LLM.

L'impianto principale è un payload shellcode guidato da un interprete di playbook. Un playbook predefinisce l'intero percorso di attacco e l'impianto lo segue, spostandosi nell'ambiente tramite injection di processi, movimento laterale, ecc. Ogni impianto viene generato come thread indipendente con il proprio set di istruzioni, quindi gli attacchi multi-stadio (es. accesso iniziale → privilege escalation → movimento laterale → esfiltrazione) sono espressi come un grafo di impianti cooperanti, tutti definiti a priori nel playbook. Questo ha tre principali vantaggi:

Se non vuoi usare la release puoi compilarlo come segue:
Compila con cargo make:```bash
cargo make build
./target/release/synthapt
This compilerà lo shellcode e l'editor.
Eseguire SynthAPT senza alcun comando ti porterà nell'editor. Puoi fornire una chiave API di Claude e vedere le modifiche mentre scrivi i prompt.```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
Se vuoi utilizzare un altro LLM o un abbonamento, puoi eseguire `synthapt export-skill` e usarlo con qualsiasi configurazione di codice tu abbia.
Dovrebbe generare un playbook JSON. Compilalo in un payload con il comando compile:
???```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
Le costanti possono essere definite come stringhe, oggetti esadecimali o oggetti base64:```json "constants": [ "c:\windows\temp\file.txt", { "hex": "deadbeef" }, { "base64": "SGVsbG8=" } ]
---
### end (0x00)
Fine del set di attività. Aggiunto automaticamente dal compilatore - non è necessario aggiungerlo.
---
### store_result (0x01)
Salva il risultato dell'ultima operazione in una variabile.
| Campo | Tipo | |
|-------|------|-|
| var | u16 | **obbligatorio** |```json
{ "op": "store_result", "var": 0 }
Restituisce i byte dello shellcode corrente con un ID task opzionale e/o un valore magic inseriti.
| Field | Type | |
|---|---|---|
| task | u8 | opzionale |
| magic | u32 hex string or number | opzionale |
| { "op": "get_shellcode" } | ||
| { "op": "get_shellcode", "task": 5, "magic": "0x18181818" } |
### sleep (0x03)
Dormi per il numero di millisecondi specificato.
| Campo | Tipo | |
|-------|------|-|
| ms | u32 | **richiesto** |```json
{ "op": "sleep", "ms": 5000 }
Esegue un comando tramite cmd.exe.
| Campo | Tipo | |
|---|---|---|
| command | string | obbligatorio |
| { "op": "run_command", "command": "whoami /all" } |
---
### get_cwd (0x05)
Ottiene la directory di lavoro corrente. Nessun argomento.```json
{ "op": "get_cwd" }
Legge un file e ne restituisce il contenuto.
| Campo | Tipo | |
|---|---|---|
| path | string | obbligatorio |
| { "op": "read_file", "path": "c:\users\public\data.txt" } | ||
| { "op": "read_file", "path": "%0" } |
### write_file (0x07)
Scrive byte in un file.
| Campo | Tipo | |
|-------|------|-|
| path | string | **richiesto** |
| content | bytes | *opzionale* (file vuoto se omesso) |```json
{ "op": "write_file", "path": "c:\\temp\\out.txt", "content": "hello" }
{ "op": "write_file", "path": "%0", "content": "$1" }
Stampa il codice di stato di una variabile (0 = successo, non-zero = errore).
| Campo | Tipo | |
|---|---|---|
| var | u16 | richiesto |
| { "op": "check_error", "var": 0 } |
### condizionale (0x09)
Dirama verso diversi indici di attività in base allo stato di una variabile.
| Campo | Tipo | |
|-------|------|-|
| mode | `"data"` o `"error"` | **obbligatorio** |
| var1 | u16 | **obbligatorio** |
| var2 | u16 | *opzionale* (confronta due variabili invece di un singolo controllo) |
| true | u16 | **obbligatorio** (indice dell'attività se la condizione è vera) |
| false | u16 | **obbligatorio** (indice dell'attività se la condizione è falsa) |
`true_target` e `false_target` sono accettati come alias per `true` e `false`.
Modalità a singola variabile:
- `"data"` — vero se var1 ha dati non vuoti
- `"error"` — vero se lo stato di var1 è 0 (successo)