
Uno script aggressor che tiene traccia delle modifiche operative effettuate durante un engagement red team. Fornisce una traccia di audit completa di ciò che è stato modificato e di ciò che deve ancora essere ripulito.
Ledger è uno script Aggressor per Cobalt Strike che traccia ogni modifica operativa effettuata durante un engagement. Ogni servizio che abiliti, regola firewall che apri, account che crei o chiave di registro che tocchi viene registrato con un punteggio di rischio, l'attribuzione dell'operatore e lo stato di pulizia. Al termine dell'engagement disponi di una traccia di audit completa di ciò che è stato modificato e di ciò che deve ancora essere ripulito.
Gli engagement di red team lasciano artefatti. I servizi vengono abilitati, gli account creati, le regole firewall aperte, le chiavi di registro modificate. Senza un log strutturato è facile dimenticarsene — soprattutto negli engagement lunghi o quando più operatori lavorano contemporaneamente.
Ledger ti offre un journal in continuo aggiornamento con:
ledger.cna nella directory degli script di Cobalt Strike.ledger.cna.dirty è ora disponibile in ogni console Beacon.Tutti i comandi vengono eseguiti da una console Beacon utilizzando l'alias dirty.
dirty <CATEGORY> <command> [comment] [score]
comment e score sono opzionali. Se omessi, vengono utilizzati valori predefiniti sensati in base alla categoria.
dirty RPC "sql-enablerpc lon-db-1 lon-db-2"
dirty DEFENDER "add-exclusion C:\windows\temp" "Payload staging" 8
dirty GROUP "net group 'Domain Admins' svc_backup /add /domain"
dirty USER "net user backdoor P@ssw0rd! /add"
dirty SCHEDULED_TASK "schtasks /create /tn updater /tr C:\temp\beacon.exe /sc onlogon"
dirty exec <CATEGORY> <command> [comment] [score]
Registra la modifica ed esegue immediatamente il comando sul beacon — un passaggio invece di due.
dirty exec RPC "sql-enablerpc lon-db-1 lon-db-2"
dirty exec USER "net user backdoor P@ssw0rd! /add"
dirty exec DEFENDER "sc config WinDefend start= disabled"
dirty exec FIREWALL "netsh advfirewall set allprofiles state off"
Limiti di dirty exec
dirty exec usa brun internamente, che esegue un binario direttamente senza un wrapper cmd.exe /c. Ciò significa:
net, sc, reg, nltest, whoami, ipconfig, ecc.sleep, cd, ls, pwd, download, upload, execute-assembly, inject, ecc. Per questi, esegui normalmente il comando Beacon e usa dirty <CATEGORY> <command> separatamente per registrarlo.cmd.exe: dir, echo, set, type, pipe (|), reindirizzamenti (>), ecc. Registra questi manualmente con dirty CATEGORY "shell <command>"..cna non verranno gestiti correttamente tramite dirty exec.dirty show
dirty show DEFENDER
dirty show DESKTOP-ABC123
Mostra tutte le voci registrate. Il filtro opzionale cerca in comando, commento, categoria, hostname e nome utente.
dirty score
Mostra un riepilogo del rischio per host con punteggio aggregato, conteggio dei cleanup in sospeso e una barra visiva. Gli host sono ordinati dal punteggio più alto al più basso.
dirty clean <id>
dirty clean all
dirty clean host <hostname>
La corrispondenza dell'hostname non fa distinzione tra maiuscole e minuscole e supporta corrispondenze parziali — DESKTOP corrisponde a DESKTOP-FGN4LPG.
dirty export text
dirty export json
dirty export text DEFENDER
dirty export json DESKTOP-ABC
Le esportazioni vengono scritte nella directory che contiene ledger.cna e includono un riepilogo dei punteggi per host in cima, seguito dal log completo delle modifiche. I pulsanti della barra dei menu Ledger avviano direttamente esportazioni senza filtri.
dirty help
| Categoria | Punteggio Predefinito | Commento Predefinito |
|---|---|---|
| REGISTRY | 2 | Registro modificato |
| FIREWALL | 3 | Regola firewall modificata |
| SERVICE | 3 | Configurazione del servizio modificata |
| RPC | 4 | Modifiche apportate a RPC |
| WINRM | 4 | WinRM abilitato |
| SMB | 4 | Firma SMB modificata |
| DCOM | 4 | DCOM abilitato |
| RDP | 5 | RDP abilitato |
| SCHEDULED_TASK | 5 | Attività pianificata creata |
| DEFENDER | 6 | Configurazione di Defender modificata |
| GROUP | 6 | Appartenenza al gruppo modificata |
| USER | 7 | Account utente modificato |
| ACL | 8 | ACL modificata |
| SPN | 8 | SPN modificato |
| DOMAIN_ADMIN | 9 | Gruppo Domain Admin modificato |
| TRUST | 9 | Relazione di trust modificata |
Qualsiasi categoria non elencata viene accettata con un punteggio predefinito di 3.
Per voce
| Etichetta | Punteggio |
|---|---|
| LOW | < 5 |
| MEDIUM | 5 – 7 |
| HIGH | 8+ |
Aggregato (per host)
| Etichetta | Punteggio |
|---|---|
| LOW | < 5 |
| MEDIUM | 5 – 9 |
| HIGH | 10 – 14 |
| CRITICAL | 15+ |
Quando un beacon muore con voci del ledger non ripulite ancora in sospeso, Ledger emette un avviso rosso nell'Event Log di Cobalt Strike visibile a tutti gli operatori connessi:
L'avviso viene emesso una volta per beacon e si azzera automaticamente se il beacon si riprende e effettua nuovamente il check-in. I beacon collegati (figli) e i beacon terminati esplicitamente da un operatore sono esclusi. La tempistica dell'avviso scala con l'impostazione di sleep del beacon — uno sleep di 60s attiva l'avviso dopo ~2 minuti, uno sleep di 5m dopo ~10 minuti.
LEDGER EXPORT -- 2026-05-21 19:50:34
HOST SCORE SUMMARY
================================================================================
Host Risk Score Pending Bar
--------------------------------------------------------------------------------
DESKTOP-RLP4KBJ (sally *) CRITICAL +21 2 pend [##########]
DESKTOP-FGN4LPG (Admin) CRITICAL +18 0 pend [#########]
================================================================================