
레드팀 작전 중 이루어진 운영 변경 사항을 추적하는 공격자 스크립트입니다. 변경된 내용과 아직 정리해야 할 항목에 대한 전체 감사 추적을 제공합니다.
Ledger는 Cobalt Strike 공격자 스크립트로, 작업 중 이루어진 모든 운영 변경 사항을 추적합니다. 활성화한 모든 서비스, 뚫은 방화벽 규칙, 생성한 계정, 건드린 레지스트리 키가 위험 점수, 운영자 기여도, 정리 상태와 함께 기록됩니다. 작업 종료 시 변경된 사항과 여전히 정리해야 할 사항에 대한 완전한 감사 추적이 생성됩니다.
레드 팀 작업은 아티팩트를 남깁니다. 서비스가 활성화되고, 계정이 생성되고, 방화벽 규칙이 열리고, 레지스트리 키가 수정됩니다. 구조화된 로그가 없으면 이러한 내용을 잊기 쉽습니다. 특히 장기 작업이나 여러 운영자가 동시에 작업할 때 더욱 그렇습니다.
Ledger는 다음을 포함한 실행 저널을 제공합니다:
ledger.cna를 Cobalt Strike 스크립트 디렉터리에 복사합니다.ledger.cna를 선택합니다.dirty 별칭을 사용할 수 있습니다.모든 명령은 dirty 별칭을 사용하여 Beacon 콘솔에서 실행됩니다.
dirty <CATEGORY> <command> [comment] [score]
comment와 score는 선택 사항입니다. 생략하면 카테고리에 따라 적절한 기본값이 사용됩니다.
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]
변경 사항을 기록하고 즉시 비컨에서 명령을 실행합니다 — 두 단계 대신 한 단계로.
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"
dirty exec의 제한 사항
dirty exec는 내부적으로 brun을 사용하며, 이는 cmd.exe /c 래퍼 없이 바이너리를 직접 실행합니다. 의미하는 바는:
net, sc, reg, nltest, whoami, ipconfig 등.sleep, cd, ls, pwd, download, upload, execute-assembly, inject 등. 이러한 경우 Beacon 명령을 정상적으로 실행하고 별도로 dirty <CATEGORY> <command>를 사용하여 기록하십시오.cmd.exe가 필요한 셸 내장 명령에는 작동하지 않음: dir, echo, set, type, 파이프(|), 리디렉션(>) 등. 이들은 dirty CATEGORY "shell <command>"로 수동 기록하십시오..cna 파일에서 로드된 사용자 정의 BOF 별칭은 dirty exec를 통해 올바르게 전달되지 않습니다.dirty show
dirty show DEFENDER
dirty show DESKTOP-ABC123
모든 기록된 항목을 표시합니다. 선택적 필터는 명령, 설명, 카테고리, 호스트 이름 및 사용자 이름과 일치합니다.

dirty score
집계 점수, 대기 중인 정리 개수 및 시각적 막대가 포함된 호스트별 위험 요약을 표시합니다. 호스트는 점수가 높은 순으로 정렬됩니다.
dirty clean <id>
dirty clean all
dirty clean host <hostname>
호스트 이름 일치는 대소문자를 구분하지 않으며 부분 일치를 지원합니다 — DESKTOP이 DESKTOP-FGN4LPG와 일치합니다.
dirty export text
dirty export json
dirty export text DEFENDER
dirty export json DESKTOP-ABC
내보내기는 ledger.cna가 포함된 디렉터리에 작성되며 상단에 호스트 점수 요약과 전체 변경 로그가 포함됩니다. Ledger 메뉴 표시줄 버튼은 필터링되지 않은 내보내기를 직접 트리거합니다.
dirty help
| 카테고리 | 기본 점수 | 기본 설명 |
|---|---|---|
| REGISTRY | 2 | 레지스트리 수정됨 |
| FIREWALL | 3 | 방화벽 규칙 수정됨 |
| SERVICE | 3 | 서비스 구성 변경됨 |
| RPC | 4 | RPC 변경 사항 있음 |
| WINRM | 4 | WinRM 활성화됨 |
| SMB | 4 | SMB 서명 변경됨 |
| DCOM | 4 | DCOM 활성화됨 |
| RDP | 5 | RDP 활성화됨 |
| SCHEDULED_TASK | 5 | 예약된 작업 생성됨 |
| DEFENDER | 6 | Defender 구성 변경됨 |
| GROUP | 6 | 그룹 구성원 수정됨 |
| USER | 7 | 사용자 계정 수정됨 |
| ACL | 8 | ACL 수정됨 |
| SPN | 8 | SPN 수정됨 |
| DOMAIN_ADMIN | 9 | 도메인 관리자 그룹 수정됨 |
| TRUST | 9 | 트러스트 관계 수정됨 |
목록에 없는 카테고리는 기본 점수 3으로 허용됩니다.
항목별
| 라벨 | 점수 |
|---|---|
| LOW | < 5 |
| MEDIUM | 5 – 7 |
| HIGH | 8+ |
집계 (호스트별)
| 라벨 | 점수 |
|---|---|
| LOW | < 5 |
| MEDIUM | 5 – 9 |
| HIGH | 10 – 14 |
| CRITICAL | 15+ |
비컨이 정리되지 않은 원장 항목이 남은 상태로 죽으면, Ledger는 연결된 모든 운영자에게 보이는 Cobalt Strike 이벤트 로그에 빨간 경고를 발생시킵니다:

경고는 비컨당 한 번 발생하며, 비컨이 복구되어 다시 체크인하면 자동으로 재설정됩니다. 연결된 (자식) 비컨 및 운영자가 명시적으로 종료한 비컨은 제외됩니다. 경고 타이밍은 비컨의 sleep 설정에 따라 조정됩니다 — 60초 sleep은 약 2분 후, 5분 sleep은 약 10분 후에 트리거됩니다.
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 [#########]
================================================================================
CHANGE LOG
================================================================================
[000002] 2026-05-21 19:22:56 | neo | GROUP | MEDIUM +6 | CLEANED
Host : DESKTOP-FGN4LPG
User : Admin
Process : HTTP Listener_x64.exe (PID 4716)
Command : net group 'Domain Admins' svc_backup /add /domain
Comment : Added svc_backup to Domain Admins for lateral movement
{
"exported": "2026-05-21 19:53:19",
"host_summary": [
{
"host": "DESKTOP-FGN4LPG (Admin)",
"risk": "CRITICAL",
"score": 18,
"pending": 0
},
{
"host": "DESKTOP-RLP4KBJ (sally *)",
"risk": "CRITICAL",
"score": 21,
"pending": 2
}
],
"entries": [
{
"id": "000004",
"timestamp": "2026-05-21 19:31:36",
"operator": "neo",
"beacon_id": "1607712302",
"computer": "DESKTOP-RLP4KBJ",
"beacon_user": "sally *",
"beacon_process": "HTTP Listener_x64.exe (PID 11540)",
"functionality": "USER",
"command": "net user svc_backup P@ssw0rd123! /add /domain",
"comment": "Created service account for persistence",
"score": 7,
"risk": "MEDIUM",
"cleaned": false
}
기록되고 정리된 모든 항목은 elog를 통해 Cobalt Strike 이벤트 로그로 브로드캐스트되므로, 연결된 모든 운영자가 서로의 변경 사항을 실시간으로 확인할 수 있습니다. 저널은 세션 기간 동안 팀서버 메모리에 저장됩니다.
ledger.cna가 포함된 디렉터리에 작성됩니다.dirty USER "net user ..." "my comment" 9 — 마지막 인수가 명시적 점수를 설정합니다.