
팀서버 없이 Cobalt Strike Aggressor Scripts(.cna)의 구문을 검증하고, Beacon API를 모킹하며, COFFLoader를 통해 BOF를 실행하는 독립형 에뮬레이션 및 테스트 하네스입니다.
CnaEmulator는 Cobalt Strike Aggressor Script(.cna)를 위한 독립 실행형 범용 개발, 에뮬레이션 및 테스트 하네스입니다. 보안 연구원, 도구 개발자, BOF 작성자가 팀서버나 GUI 클라이언트를 실행하지 않고도 스크립트 구문을 검증하고, Beacon 콘솔 별칭 명령을 시뮬레이션하며, COFFLoader64.exe를 통해 인메모리 BOF(Beacon Object File)를 직접 실행할 수 있게 해줍니다.
[!WARNING] 면책 조항: 이 코드는 Antigravity로 완전히 생성되었으며 아직 검토되지 않았습니다.
check):
.cna 스크립트를 컴파일합니다.bof_pack):
datap 바이너리 형식과 일치하는 네이티브 리틀 엔디언 직렬화를 구현합니다:
'i': 4바이트 정수's': 2바이트 short'z': 길이 접두사가 붙은 null 종료 문자열(strlen + 1 접두사)'Z': 길이 접두사가 붙은 와이드 UTF-16LE 문자열'b': 길이 접두사가 붙은 바이너리 버퍼beacon_inline_execute):
beacon_inline_execute($bid, $bof_data, "go", $packed_args)를 자동으로 가로챕니다.COFFLoader64.exe go <bof_path> <hex_args>를 자식 서브프로세스로 실행합니다.test):
<script>.cna.tests 또는 <script>.tests 시나리오 스위트를 자동으로 검색하고 실행합니다.console):
beacon> )입니다..
├── .gitignore # 컴파일된 바이너리 및 바이트코드에 대한 Git 무시 규칙
├── COFFLoader64.exe # 64비트 독립 실행형 인메모리 COFF 재배치 및 로더
├── cna_emulator.bat # 편리한 CLI 런처 스크립트
├── README.md # 포괄적인 문서 및 사용 가이드
├── TESTING.md # 컴포넌트 검증 보고서 및 품질 게이트
├── TEST_SPEC.md # 48개 시나리오 7개 카테고리 테스트 명세
└── CnaEmulator/ # Java CNA 에뮬레이터 컴포넌트
├── .gitignore # CnaEmulator 하위 폴더에 대한 Git 무시 규칙
├── CnaEmulator.java # 에뮬레이터 소스 코드 및 Sleep 엔진 브리지
├── CnaEmulator.class # 컴파일된 바이트코드
├── CnaEmulator.jar # 패키징된 바이트코드 JAR
├── build.bat # CnaEmulator를 컴파일하고 패키징하는 빌드 스크립트
├── test.bat # 독립 실행형 테스트 러너 스크립트 (48개 시나리오)
└── tests/ # 테스트 스위트 및 픽스처
├── TestCnaEmulator.java # 48개 시나리오 테스트 하네스
└── fixtures/ # 범용 테스트 픽스처
├── sample_bof.cna # 독립 실행형 샘플 Aggressor Script
├── sample_bof.cna.tests # 컴패니언 테스트 스위트
├── multi_alias.cna # 다중 별칭 샘플 스크립트
└── multi_alias.cna.tests # 다중 별칭 컴패니언 테스트 스위트
| 요구 사항 | 설명 및 설정 |
|---|---|
| Java JDK (17+) | java 및 javac 바이너리. JAVA_HOME을 JDK 경로로 설정하고 %JAVA_HOME%\bin이 PATH에 있는지 확인하십시오. |
Sleep 2.1 (sleep.jar) | Aggressor Script용 스크립팅 엔진. Sleep 2.1에서 다운로드하거나 Cobalt Strike에서 복사하십시오. SLEEP_JAR를 설정하거나(예: set "SLEEP_JAR=C:\path\to\sleep.jar"), 루트 폴더 또는 CnaEmulator\에 sleep.jar를 배치하십시오. |
인메모리 로더 (COFFLoader64.exe) | 독립 실행형 로더 바이너리(예: trustedsec/COFFLoader에서 컴파일). 루트 디렉터리에 배치하거나 COFFLOADER_PATH로 재정의하십시오. |
빠른 환경 설정 (cmd.exe):
set "JAVA_HOME=C:\path\to\jdk-17"
set "PATH=%JAVA_HOME%\bin;%PATH%"
set "SLEEP_JAR=C:\path\to\sleep.jar"
컴파일된 클래스나 JAR을 실행하기 전에 CnaEmulator.java를 컴파일하십시오:
빌드 스크립트 사용:
CnaEmulator\build.bat
또는 수동 컴파일 및 패키징:
:: 소스를 바이트코드로 컴파일
javac -cp "%SLEEP_JAR%" -d CnaEmulator CnaEmulator\CnaEmulator.java
:: 실행 가능한 바이트코드 JAR로 패키징
cd CnaEmulator
jar cfe CnaEmulator.jar CnaEmulator *.class
cd ..
프로젝트 루트 디렉터리에서 다음 방법 중 하나를 사용하여 CnaEmulator를 호출할 수 있습니다:
런처 스크립트는 JDK 검색, 클래스패스 설정, 경로 확인을 자동으로 처리합니다:
cna_emulator.bat <action> [arguments...]
java -cp "CnaEmulator\CnaEmulator.jar;%SLEEP_JAR%" CnaEmulator <action> [arguments...]
java -cp "CnaEmulator;%SLEEP_JAR%" CnaEmulator <action> [arguments...]
check)코드를 실행하지 않고 Sleep 2.1을 통해 Aggressor Script 구문을 검증하고 AST 트리를 컴파일합니다:
cna_emulator.bat check <path\to\script.cna>
번들 픽스처를 사용한 예제:
cna_emulator.bat check CnaEmulator\tests\fixtures\sample_bof.cna
샘플 출력:
[*] Checking syntax of: CnaEmulator\tests\fixtures\sample_bof.cna
[+] sample_bof.cna syntax OK
run)선언된 Aggressor 별칭을 실행하고, 인수를 바이너리 형식(bof_pack)으로 패킹하고, 오브젝트 파일(script_resource)을 확인한 후 COFFLoader64.exe를 호출하여 호출자 메모리에서 BOF를 실행합니다:
cna_emulator.bat run <path\to\script.cna> <alias_name> [arguments...]
번들 픽스처를 사용한 예제:
cna_emulator.bat run CnaEmulator\tests\fixtures\sample_bof.cna sample_bof run test_target
샘플 출력:
[*] Invoking: sample_bof 1 run test_target
[*] Tasked beacon: Executing sample_bof with action: run
[+] [COFFLoader Bridge] Executing: COFFLoader64.exe go sample_bof.o
| Got contents of COFF file
| Running/Parsing the COFF file
| Ran/parsed the coff
| Outdata Below:
| ...
[+] [COFFLoader Bridge] Completed with exit code: 0
test)CnaEmulator test는 자동화된 테스트 실행을 제공합니다:
cna_emulator.bat test <path\to\script.cna> [alias] [arguments...]
실행 모드:
<alias>와 [arguments...]가 지정된 경우 해당 특정 시나리오만 실행됩니다.CnaEmulator는 스크립트 옆에 있는 컴패니언 테스트 파일을 확인합니다:
<script_dir>\<script_name>.cna.tests<script_dir>\<script_name>.tests
발견되면 컴패니언 파일의 모든 시나리오 줄이 순차적으로 실행됩니다.CnaEmulator는 등록된 모든 명령 별칭을 검사하고, 잘못된 인수 개수가 처리되지 않은 예외를 발생시키지 않고 사용법 오류를 출력하도록 보장하는 가드 절 테스트를 실행합니다.예제:
:: 번들 샘플 스크립트에 대한 자동화된 테스트 실행 (sample_bof.cna.tests 실행)
cna_emulator.bat test CnaEmulator\tests\fixtures\sample_bof.cna
:: 번들 다중 별칭 스크립트에 대한 자동화된 테스트 실행 (multi_alias.cna.tests 실행)
cna_emulator.bat test CnaEmulator\tests\fixtures\multi_alias.cna
:: CLI를 통해 대상 지정 시나리오 직접 실행
cna_emulator.bat test CnaEmulator\tests\fixtures\sample_bof.cna sample_bof query
컴패니언 테스트 파일 작성 (<script>.cna.tests):
.cna 스크립트 옆에 일반 텍스트 파일을 만드십시오. 비어 있지 않은 각 비주석 줄은 별칭과 해당 매개변수를 지정합니다:
# Sample BOF Companion Test Suite
# Format: <alias> [arguments...]
sample_bof run test_target
sample_bof query
console)등록된 별칭, 명령 기록, 시뮬레이션 실행을 지원하는 대화형 beacon> 프롬프트를 시작합니다:
cna_emulator.bat console <path\to\script.cna>
대화형 세션 예제:
====================================================================
CnaEmulator Interactive Beacon Console
Loaded Script: sample_bof.cna
====================================================================
Type 'help' to see registered commands, or 'exit' to quit.
beacon> help
Registered Beacon Commands:
- sample_bof : Sample BOF execution command
beacon> sample_bof run local_target
[*] Tasked beacon: Executing sample_bof with action: run
[+] [COFFLoader Bridge] Executing: COFFLoader64.exe go sample_bof.o
...
beacon> exit
CnaEmulator는 완전히 범용적이며 파일시스템의 모든 디렉터리나 외부 저장소에 있는 Aggressor Script 및 BOF 바이너리를 테스트할 수 있습니다:
:: 외부 스크립트 구문 검증
cna_emulator.bat check C:\Projects\CustomBof\my_bof.cna
:: 라이브 인수로 외부 BOF 별칭 명령 실행
cna_emulator.bat run C:\Projects\CustomBof\my_bof.cna my_command target_argument
:: 외부 스크립트에 대한 컴패니언 테스트 스위트 실행
cna_emulator.bat test C:\Projects\CustomBof\my_bof.cna
:: 외부 스크립트로 대화형 콘솔 열기
cna_emulator.bat console C:\Projects\CustomBof\my_bof.cna