
Ein Aggressor-Skript, das während eines Red-Team-Einsatzes vorgenommene operative Änderungen verfolgt. Gibt Ihnen einen vollständigen Prüfpfad darüber, was geändert wurde und was noch bereinigt werden muss.
Ledger ist ein Cobalt Strike Aggressor-Skript, das jede betriebliche Änderung während eines Einsatzes protokolliert. Jeder von Ihnen aktivierte Dienst, jede Firewall-Regel, die Sie durchbrechen, jedes Konto, das Sie erstellen, oder jeder Registry-Schlüssel, den Sie berühren, wird mit einer Risikobewertung, Operateur-Zuordnung und Bereinigungsstatus protokolliert. Am Ende des Einsatzes haben Sie eine vollständige Prüfspur darüber, was geändert wurde und was noch bereinigt werden muss.
Red-Team-Einsätze hinterlassen Artefakte. Dienste werden aktiviert, Konten erstellt, Firewall-Regeln geöffnet, Registrierungsschlüssel geändert. Ohne ein strukturiertes Protokoll können diese leicht vergessen werden – besonders bei langen Einsätzen oder wenn mehrere Operateure gleichzeitig arbeiten.
Ledger bietet Ihnen ein fortlaufendes Journal mit:
ledger.cna in Ihr Cobalt Strike Skriptverzeichnis.ledger.cna aus.dirty-Alias ist nun in jeder Beacon-Konsole verfügbar.Alle Befehle werden über eine Beacon-Konsole mit dem dirty-Alias ausgeführt.
dirty <CATEGORY> <command> [comment] [score]
comment und score sind optional. Wenn sie weggelassen werden, werden sinnvolle Standardwerte basierend auf der Kategorie verwendet.
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]
Protokolliert die Änderung und führt den Befehl sofort auf dem Beacon aus – ein Schritt statt zwei.
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"
Einschränkungen von dirty exec
dirty exec verwendet intern brun, das eine Binärdatei direkt ohne einen cmd.exe /c-Wrapper ausführt. Das bedeutet:
net, sc, reg, nltest, whoami, ipconfig usw.sleep, cd, ls, pwd, download, upload, execute-assembly, inject usw. Führen Sie für diese den Beacon-Befehl normal aus und verwenden Sie dirty <CATEGORY> <command> separat, um ihn zu protokollieren.cmd.exe erfordern: dir, echo, set, type, Pipes (|), Umleitungen (>) usw. Protokollieren Sie diese manuell mit dirty CATEGORY "shell <command>"..cna-Dateien geladen werden, werden nicht korrekt über dirty exec weitergeleitet.dirty show
dirty show DEFENDER
dirty show DESKTOP-ABC123
Zeigt alle protokollierten Einträge. Der optionale Filter stimmt mit Befehl, Kommentar, Kategorie, Hostname und Benutzername überein.
dirty score
Zeigt eine Zusammenfassung des Risikos pro Host mit Gesamtbewertung, Anzahl ausstehender Bereinigungen und einem visuellen Balken. Hosts werden nach höchster Bewertung zuerst sortiert.
dirty clean <id>
dirty clean all
dirty clean host <hostname>
Die Hostname-Übereinstimmung ist case-insensitiv und unterstützt partielle Übereinstimmungen – DESKTOP stimmt mit DESKTOP-FGN4LPG überein.
dirty export text
dirty export json
dirty export text DEFENDER
dirty export json DESKTOP-ABC
Exporte werden in das Verzeichnis geschrieben, das ledger.cna enthält, und enthalten oben eine Zusammenfassung der Host-Bewertung, gefolgt vom vollständigen Änderungsprotokoll. Die Ledger-Menüleistenschaltflächen lösen direkt ungefilterte Exporte aus.
dirty help
| Category | Default Score | Default Comment |
|---|---|---|
| REGISTRY | 2 | Registry geändert |
| FIREWALL | 3 | Firewall-Regel geändert |
| SERVICE | 3 | Dienstkonfiguration geändert |
| RPC | 4 | Änderungen an RPC vorgenommen |
| WINRM | 4 | WinRM aktiviert |
| SMB | 4 | SMB-Signierung geändert |
| DCOM | 4 | DCOM aktiviert |
| RDP | 5 | RDP aktiviert |
| SCHEDULED_TASK | 5 | Geplante Aufgabe erstellt |
| DEFENDER | 6 | Defender-Konfiguration geändert |
| GROUP | 6 | Gruppenmitgliedschaft geändert |
| USER | 7 | Benutzerkonto geändert |
| ACL | 8 | ACL geändert |
| SPN | 8 | SPN geändert |
| DOMAIN_ADMIN | 9 | Domain-Admin-Gruppe geändert |
| TRUST | 9 | Vertrauensstellung geändert |
Jede nicht aufgeführte Kategorie wird mit einer Standardbewertung von 3 akzeptiert.
Pro Eintrag
| Label | Score |
|---|---|
| LOW | < 5 |
| MEDIUM | 5 – 7 |
| HIGH | 8+ |
Aggregiert (pro Host)
| Label | Score |
|---|---|
| LOW | < 5 |
| MEDIUM | 5 – 9 |
| HIGH | 10 – 14 |
| CRITICAL | 15+ |
Wenn ein Beacon stirbt und noch nicht bereinigte Ledger-Einträge ausstehen, sendet Ledger eine rote Warnung an das Cobalt Strike Ereignisprotokoll, die für alle verbundenen Operateure sichtbar ist:
Die Warnung wird einmal pro Beacon ausgelöst und setzt sich automatisch zurück, wenn der Beacon wiederhergestellt wird und sich erneut eincheckt. Verknüpfte (untergeordnete) Beacons und von einem Operateur explizit beendete Beacons sind ausgeschlossen. Der Warnungszeitpunkt skaliert mit der Sleep-Einstellung des Beacons – ein 60s Sleep löst nach ca. 2 Minuten aus, ein 5m Sleep nach ca. 10 Minuten.
LEDGER EXPORT -- 2026-05-21 19:50:34