Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
BokuLoader — Cobalt Strike의 회피 기능을 재현·통합·강화하는 것을 목표로 하는 개념 증명용 Cobalt Strike Reflective Loader입니다! | Kitploit
도구/GitHubGitHub/xforcered/bokuloader
Penetration Testing FrameworksIDS/IPS EvasionPost-ExploitationCommand and ControlRed TeamingPayload DevelopmentAdversarial Attack
GitHubxforcered/bokuloader

BokuLoader

Cobalt Strike의 회피 기능을 재현·통합·강화하는 것을 목표로 하는 개념 증명용 Cobalt Strike Reflective Loader입니다!

저장소 보기
3352512년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

BokuLoader : Cobalt Strike Reflective Loader

Cobalt Strike의 회피 기능을 재현, 통합, 개선하는 것을 목표로 하는 개념 증명(PoC)용 User-Defined Reflective Loader (UDRL)입니다!

기여자:

기여자Twitter주요 기여
Bobby Cooke@0xBoku프로젝트 원저자 및 관리자
Santiago Pecin@s4ntiago_pReflective Loader 주요 개선
Chris Spehn@ConsciousHackerAggressor 스크립팅
Joshua Magri@passthehashbrwnIAT 후킹
Dylan Tran@d_tranmanReflective 콜 스택 스푸핑
James Yeung@5cript1diot간접 시스템 콜

UDRL 사용 시 고려 사항

내장된 Cobalt Strike reflective loader는 강력하며 Cobalt Strike가 제공하는 모든 Malleable PE 회피 기능을 처리합니다. 사용자 정의 UDRL을 사용할 때의 가장 큰 단점은 Malleable PE 회피 기능이 기본적으로 지원될 수도 있고 지원되지 않을 수도 있다는 것입니다.

공개 BokuLoader 프로젝트의 목표는 레드 팀이 자체적인 Cobalt Strike UDRL을 제작하는 것을 돕는 것입니다. 이 프로젝트는 가치 있는 모든 CS Malleable PE 회피 기능을 지원하는 것을 목표로 합니다. 일부 회피 기능은 CS 통합을 활용하고, 다른 기능은 완전히 재구현되었으며, 일부는 지원되지 않습니다.

이 프로젝트를 어떤 형태로든 사용하기 전에 회피 기능이 의도한 대로 작동하는지 제대로 테스트해야 합니다. C 코드와 Aggressor 스크립트 사이에서 운영 체제, 컴파일러, Java의 서로 다른 버전으로 컴파일하면 다른 결과가 나올 수 있습니다.

회피 기능

BokuLoader 고유 회피 기능

  • 합성 프레임을 통한 Reflective 콜 스택 스푸핑.
  • 사용자 정의 ASM/C reflective loader 코드
  • HellsGate 및 HalosGate 기법을 통한 간접 NT 시스템 콜
    • 모든 할당 옵션에 대한 모든 메모리 보호 변경은 NtProtectVirtualMemory에 대한 간접 시스템 콜을 통해 수행됩니다.
  • 사용자 정의 UDRL Aggressor 스크립트 구현을 통한 obfuscate "true"
  • NOHEADERCOPY
    • 로더는 raw beacon DLL의 헤더를 가상 beacon DLL로 복사하지 않습니다. 처음 0x1000 바이트는 null이 됩니다.
  • 심볼 해석을 위한 XGetProcAddress
    • Kernel32.GetProcAddress를 사용하지 않습니다.
  • DLL의 기본 주소 해석 및 DLL 로딩을 위한 xLoadLibrary
    • 로드된 DLL의 경우 TEB->PEB->PEB_LDR_DATA->InMemoryOrderModuleList에서 DLL 기본 주소를 가져옵니다.
    • Kernel32.LoadLibraryA를 사용하지 않습니다.
  • 문자열 난독화를 위한 시저 암호(Caesar Cipher)
  • 100k UDRL 크기
  • 가져온(import) DLL 이름과 import 항목 이름 문자열은 가상 beacon DLL에서 스톰프(stomp) 처리됩니다.

지원되는 Malleable PE 회피 기능

테스트

  • (2023/02/22) 4가지 할당자 방식 모두 threatexpress/malleable-c2/master/jquery-c2.4.7.profile로 테스트됨

프로젝트 배경

  • Stephen Fewer의 놀라운 Reflective Loader 프로젝트를 기반으로 함:
    • https://github.com/stephenfewer/ReflectiveDLLInjection
  • 처음에는 Sektor7 Malware Developer Intermediate (MDI) 과정에서 Renz0h의 Reflective DLL 동영상을 학습하면서 만들어짐

사용 방법

  1. make로 BokuLoader 오브젝트 파일을 컴파일합니다.
  2. Cobalt Strike 팀 서버를 시작합니다.
  3. Cobalt Strike에서 BokuLoader.cna Aggressor 스크립트를 가져옵니다.
  4. x64 beacon을 생성합니다 (Attacks -> Packages -> Windows Executable (S))
  5. Script Console을 사용하여 beacon 빌드에 BokuLoader가 구현되었는지 확인합니다.
  • x86 옵션은 지원하지 않습니다. x86 bin은 원래 Reflective Loader 오브젝트 파일입니다.
  • RAW beacon 생성은 기본적으로 바로 작동합니다. beacon 로더에 Artifact Kit을 사용하는 경우 stagesize 변수가 기본값보다 커야 합니다.
  • 추가 정보는 Cobalt Strike User-Defined Reflective Loader 문서를 참조하십시오.

탐지 지침

하드코딩된 문자열

  • BokuLoader는 일반적으로 탐지되는 일부 문자열을 새로운 하드코딩된 값으로 변경합니다. 이러한 문자열은 BokuLoader를 시그니처링하는 데 사용할 수 있습니다:
원본 Cobalt Strike 문자열BokuLoader Cobalt Strike 문자열
ReflectiveLoaderBokuLoader
Microsoft Base Cryptographic Provider v1.012367321236742382543232341241261363163151d
(admin)(tomin)
beaconbacons

메모리 할당자

DLL 모듈 스톰핑

  • DLL을 디스크에서 매핑하기 위해 Kernel32.LoadLibraryExA가 호출됩니다.
  • Kernel32.LoadLibraryExA의 세 번째 인자는 DONT_RESOLVE_DLL_REFERENCES (0x00000001)입니다.
    • 시스템이 DllMain을 호출하지 않습니다.
  • MDSec이 여기에서 설명한 대로 LDR PEB 항목의 주소를 해석하지 않습니다.
  • pe-sieve 도구로 프로세스 메모리를 스캔하여 탐지할 수 있습니다.

힙 할당

  • sleepmask kit을 사용하지 않으면 힙에 실행 가능한 RX 또는 RWX 메모리가 존재하게 됩니다.

매핑 할당자

  • 가상 beacon DLL의 메모리를 할당하기 위해 Kernel32.CreateFileMappingA 및 Kernel32.MapViewOfFile이 호출됩니다.

Sleepmask 탐지

  • sleepmask kit을 사용하는 경우, MDSec이 여기에서 설명한 대로 이 독립적인 메모리 할당에 대한 탐지 방법이 존재합니다.

간접 시스템 콜

  • BokuLoader는 로드된 실행 가능한 beacon 메모리를 설정하기 위해 다음 NT 시스템 콜을 호출합니다: NtAllocateVirtualMemory, NtProtectVirtualMemory
  • 이들은 BokuLoader 실행 메모리에서 간접적으로 호출됩니다.
  • ntdll.dll에 사용자 영역 후크를 설정해도 이러한 시스템 콜을 탐지할 수 없습니다.
  • 커널 드라이버를 사용하여 커널 콜백을 등록하면 위의 시스템 콜을 모니터링하고 그 사용을 탐지하는 것이 가능할 수 있습니다.
  • BokuLoader 자체는 실행 메모리 내에 mov eax, r11d; mov r11, r10; mov r10, rcx; jmp r11 어셈블리 명령을 포함합니다.

가상 Beacon DLL 헤더

  • 가상 beacon DLL의 처음 0x1000 바이트는 0입니다.

소스 코드 제공

  • BokuLoader 소스 코드는 저장소 내에 제공되며 메모리 시그니처를 만드는 데 사용할 수 있습니다.
  • 추가 탐지 지침이 있다면 풀 리퀘스트를 제출하여 자유롭게 기여해 주시기 바랍니다.

크레딧 / 참고 자료

Reflective 콜 스택 스푸핑

  • LoudSunRun: 간접 시스템 콜을 사용하는 콜 스택 합성 프레임 스푸퍼
  • SilentMoonwalk: 완전 동적 콜 스택 스푸퍼의 PoC 구현
  • Vulcan Raven: 시스템 콜 시 임의의 콜 스택을 스푸핑하기 위한 PoC 구현
  • CallStackMasker: 타이머를 사용하여 콜 스택을 동적으로 마스킹하는 PoC 구현
  • ThreadStackSpoofer: 스레드 스택 스푸핑 PoC
  • Behind the Mask: 타이머로 콜 스택을 동적으로 스푸핑하기

Reflective Loader

  • https://github.com/stephenfewer/ReflectiveDLLInjection
  • Reflective DLL에 관심이 있다면 다음 동영상을 확인하십시오:
    • Import Address Table(IAT)과 함께 춤추기 - Sektor 7 MDI 과정
    • Export Address Table 살펴보기 - Sektor 7 MDI 과정
    • Reflective Injection 설명 - Sektor 7 MDI 과정
    • ReflectiveLoader 소스 검토 - Sektor 7 MDI 과정
  • TitanLdr
  • AceLdr
  • KaynLdr

HalosGate SysCaller

  • @SEKTOR7net의 Reenz0h
    • Reenz0h의 훌륭한 과정과 블로그를 확인하십시오!
    • 제가 수강한 악성코드 개발 과정 중 최고입니다.
    • halos gate 기법의 창시자입니다. 그의 작업이 처음에 이 프로젝트의 동기가 되었습니다.
    • Sektor7 HalosGate Blog

HellsGate Syscaller

  • @smelly__vx 및 @am0nsec ( Hells Gate 기법의 창시자/공개자 )
    • 그들이 없었다면 제 HellsGate 구현은 불가능했을 것입니다 :)
    • 이 방법에 대한 훌륭한 작업입니다. 직접 구현해 보면서 정말 즐거웠습니다. 감사합니다!
    • https://github.com/am0nsec/HellsGate
    • Hell's Gate 논문 링크: https://vxug.fakedoma.in/papers/VXUG/Exclusive/HellsGate.pdf

Aggressor 스크립팅

  • sinusoid @the_bit_diddler : returnIntegerFromArray

Cobalt Strike 사용자 정의 Reflective Loader

  • https://www.cobaltstrike.com/help-user-defined-reflective-loader

Intel ASM 학습을 위한 훌륭한 자료

  • Pentester Academy - SLAE64

ETW 및 AMSI 우회

  • @anthemtotheego inline-ExecuteAssembly
  • @mariuszbit - reflective loader에 우회 기능을 구현하는 훌륭한 아이디어를 주셨습니다!
  • @XPN .NET 숨기기 – ETW
  • ajpc500/BOFs
  • Offensive Security OSEP

GCC로 C 코드에 ASM 구현하기

  • https://outflank.nl/blog/2020/12/26/direct-syscalls-in-beacon-object-files/
  • https://www.cs.uaf.edu/2011/fall/cs301/lecture/10_12_asm_c.html
  • http://gcc.gnu.org/onlinedocs/gcc-4.0.2/gcc/Extended-Asm.html#Extended-Asm

Cobalt Strike C2 프로필

  • Tylous의 대작 SourcePoint 프로젝트
  • threatexpress/malleable-c2/jquery-c2.4.7.profile
도구 다운로드
명령옵션지원 여부
allocatorHeapAlloc, MapViewOfFile, VirtualAlloc모두 BokuLoader 구현을 통해 지원됨
module_x64문자열(DLL 이름)BokuLoader 구현을 통해 지원됨. CS 구현과 동일한 DLL 스톰핑 요구 사항이 적용됩니다
obfuscatetrue/falseHTTP/S 비콘은 BokuLoader 구현을 통해 지원됨. SMB/TCP는 현재 obfuscate true를 지원하지 않음. 자세한 내용은 이슈 참조. 수정할 수 있다면 도움을 환영합니다 :)
entry_point십진수 RVABokuLoader 구현을 통해 지원됨
cleanuptrueCS 통합을 통해 지원됨
userwxtrue/falseBokuLoader 구현을 통해 지원됨
sleep_mask(true/false) 또는 (Sleepmask Kit+true)지원됨. 기본 "sleepmask true"(sleepmask kit 없이)를 사용하는 경우 "userwx true"로 설정하십시오. RX beacon.text 메모리(src47/Ekko)를 지원하는 sleepmask kit을 사용하는 경우 "sleepmask true" && "userwx false"로 설정하십시오.
magic_mz_x644자 문자열CS 통합을 통해 지원됨
magic_pe2자 문자열CS 통합을 통해 지원됨
transform-x64 prepend이스케이프된 16진수 문자열BokuLoader.cna Aggressor 스크립트 수정
transform-x64 strrep문자열 문자열BokuLoader.cna Aggressor 스크립트 수정
stomppetrue/false지원되지 않음. BokuLoader는 beacon DLL 헤더를 복사하지 않습니다. 가상 beacon DLL의 처음 0x1000 바이트는 0x00입니다.
checksum숫자실험적. BokuLoader.cna Aggressor 스크립트 수정
compile_time날짜-시간 문자열실험적. BokuLoader.cna Aggressor 스크립트 수정
image_size_x64십진수 값지원되지 않음
name문자열실험적. BokuLoader.cna Aggressor 스크립트 수정
rich_header이스케이프된 16진수 문자열실험적. BokuLoader.cna Aggressor 스크립트 수정
stringw문자열지원되지 않음
string문자열지원되지 않음