
레드팀 작전 중 이루어진 운영 변경 사항을 추적하는 공격자 스크립트입니다. 변경된 내용과 아직 정리해야 할 항목에 대한 전체 감사 추적을 제공합니다.
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>를 사용하여 기록하십시오.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
목록에 없는 카테고리는 기본 점수 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 — 마지막 인수가 명시적 점수를 설정합니다.cmd.exe가 필요한 셸 내장 명령에는 작동하지 않음: dir, echo, set, type, 파이프(|), 리디렉션(>) 등. 이들은 dirty CATEGORY "shell <command>"로 수동 기록하십시오..cna 파일에서 로드된 사용자 정의 BOF 별칭은 dirty exec를 통해 올바르게 전달되지 않습니다.| 카테고리 | 기본 점수 | 기본 설명 |
|---|
| 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 | 트러스트 관계 수정됨 |