
팀서버 없이 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 # 다중 별칭 컴패니언 테스트 스위트
빠른 환경 설정 (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
CnaEmulator에 대한 완전한 48개 시나리오 명세 준수 테스트 스위트를 실행하려면:
CnaEmulator\test.bat
예상 결과:
====================================================================
Execution Summary
====================================================================
Total Scenarios : 48
Passed : 48
Failed : 0
Assertions : 172
Elapsed Time : ~2800 ms
====================================================================
[+] ALL 48 TEST SCENARIOS PASSED CLEANLY (100% SPECIFICATION CONFORMANCE)
[!NOTE] 더미 / 스텁 구현: 프로세스 실행/인젝션(
bshell,bpowershell,bexecute,bspawn,binject), 토큰 조작(bsteal_token,brev2self,bgetuid), 파일시스템 탐색(bpwd,bls,bupload,bdownload), 피버팅(socks,rportfwd), UI 프롬프트(prompt_text, ), GUI 훅(, , , )을 포함한 다른 모든 Cobalt Strike API는 양의 비오류 값(, , , )을 반환하거나 no-op 블록으로 구현되어 스크립트가 실패 없이 오프라인으로 실행됩니다.
| 요구 사항 | 설명 및 설정 |
|---|
| 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로 재정의하십시오. |
| 함수 / 키워드 | 설명 |
|---|
bof_pack | 4바이트 버퍼 길이 접두사와 함께 리틀 엔디언 바이너리 인수(i, s, z, Z, b)를 패킹합니다. |
beacon_inline_execute | COFFLoader64.exe go <bof.o> <hex_args> 서브프로세스를 생성하고 라이브 stdout을 스트리밍합니다. |
script_resource | 스크립트 디렉터리, bin/, ../bin/, 상대 경로 전반에 걸쳐 상대 리소스 경로를 확인합니다. |
openf, readb, closef | 로컬 .o BOF 파일을 바이트 버퍼로 읽기 위한 네이티브 파일시스템 I/O입니다. |
btask, berror, blog, blog2 | 태스킹, 상태, 오류 메시지를 stdout/stderr로 포맷하고 출력합니다. |
beacon_command_register | 별칭, 요약, 도움말 세부 정보를 라이브 명령 카탈로그에 등록합니다. |
beacon_commands, beacon_command_detail | 대화형/콘솔 사용을 위해 등록된 명령 목록과 도움말 텍스트를 조회합니다. |
barch | "x64"를 반환합니다. |
bdata, beacon_info | 모의 Beacon 메타데이터 해시(id: 1, pid: 13020, user: SYSTEM, arch: x64)를 반환합니다. |
beacons, beacon_ids | 활성 시뮬레이션 beacon 배열(["1"])을 반환합니다. |
alias, command | 명령 블록을 대화형 또는 CLI 디스패치를 위한 실행 가능한 클로저로 바인딩합니다. |
prompt_confirmpopupmenuitemon1"NT AUTHORITY\SYSTEM""C:\Windows\System32"true