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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
BOF_RunPe — 콘솔 생성 없이 Cobalt Strike Beacon에서 PE를 실행하는 BOF | Kitploit
도구/GitHubGitHub/ntdallas/bof_runpe
Memory ForensicsShellcodePost-ExploitationRed Teaming
GitHubntdallas/bof_runpe

BOF_RunPe

콘솔 생성 없이 Cobalt Strike Beacon에서 PE를 실행하는 BOF

저장소 보기
2002529개월 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

BOF_RunPE

BOF RunPE는 Cobalt Strike용 Beacon Object File로, beacon 프로세스 내에서 PE 파일을 완전히 인메모리로 실행합니다. 기존의 fork&run과 달리 자식 프로세스가 생성되지 않고, 콘솔이 생성되지 않으며, 파이프도 사용되지 않습니다 - 모든 출력은 IAT 후킹을 통해 캡처되어 beacon 콘솔로 리디렉션됩니다.

아키텍처: x64 전용

개요

root@kitploit:~
┌──────────────────────────────────────────────────────────────┐
│                   Cobalt Strike Beacon                       │
│                    (Current Process)                         │
└────────────────────────┬─────────────────────────────────────┘
                         │
                         │  beacon_inline_execute()
                         │
                         ▼
┌──────────────────────────────────────────────────────────────┐
│                    BOF RunPE                                 │
│  ┌────────────────────────────────────────────────────────┐  │
│  │  VxTable + Draugr Initialization                       │  │
│  │  (Syscall Resolution + Stack Spoofing)                 │  │
│  └──────────────────────┬─────────────────────────────────┘  │
│                         │                                    │
│  ┌──────────────────────▼─────────────────────────────────┐  │
│  │  PE Mapping                                            │  │
│  │  - Section Copy    - IAT Patching (with hooks)         │  │
│  │  - Relocations     - Memory Protection                 │  │
│  └──────────────────────┬─────────────────────────────────┘  │
│                         │                                    │
│  ┌──────────────────────▼─────────────────────────────────┐  │
│  │  Thread Execution                                      │  │
│  │  - Spoofed Start Address                               │  │
│  │  - RIP Hijacking to Entry Point                        │  │
│  │  - Output Redirection via Hooks                        │  │
│  └────────────────────────────────────────────────────────┘  │
└──────────────────────────────────────────────────────────────┘

주요 기능

  • 프로세스 생성 없음: PE는 beacon 프로세스 내에서 실행됩니다
  • 콘솔/파이프 없음: printf/WriteConsole 후크를 통해 출력을 캡처합니다
  • 다중 할당 방식: Heap, VirtualAlloc, Module Stomping
  • 프록시 로딩: Timer Queue, RegisterWait 또는 직접 호출
  • Ntdll 언후킹: 선택적으로 디스크에서 새 복사본 사용
  • RWX : 선택적으로 RWX 메모리 할당
  • 스레드 시작 스푸핑: RIP 하이재킹과 함께 합법적인 시작 주소 사용

구성 옵션

BOF의 동작은 Additionals postex -> RunPe Config에서 편집할 수 있습니다.

Custom BOF

프록시 방식

Method설명
None직접 API 호출
Draugr스택 스푸핑된 API 호출
RegwaitRegisterWaitForSingleObject 콜백

할당 방식

Method설명
HeapDraugr와 함께 RtlCreateHeap을 통한 프라이빗 힙
VirtualAllocDraugr와 함께 NtAllocateVirtualMemory
Module stomping합법적인 DLL .text 섹션을 덮어씀

일반 옵션

Option설명
AllocRWXRWX로 할당 (RW→RX 전환 대신)

스레드 스푸핑

Option설명
ModuleName시작 주소용 합법적인 모듈 (예: Kernel32.dll)
ProcedureName모듈 내 함수 이름 (예: BaseThreadInitThunk)

출력 캡처

모든 PE 출력은 IAT 후크를 통해 beacon 콘솔로 리디렉션됩니다. 콘솔 창이나 명명된 파이프는 생성되지 않습니다.

탐지 회피 기법

탐지 벡터

커널 텔레메트리 (ETW-TI)

NtGetContextThread / NtSetContextThread:

  • 일시 중단된 스레드의 컨텍스트를 조작한 다음 재개함

메모리 작업:

  • NtAllocateMemory 할당, RWX일 수 있음 (구성에 따라 다름)
  • NtProtectVirtualMemory 전환 (RW → RX)
  • 힙 영역의 실행 가능한 메모리는 의심스러움 (구성에 따라 다름)
  • 모듈 스토밍은 섹션 해시 불일치를 통해 탐지 가능 (구성에 따라 다름)

행동 기반 지표

  • 일시 중단된 스레드가 생성되고, 컨텍스트를 가져온 다음 RIP 값을 변경함
  • 힙 메모리가 실행 가능으로 표시됨 (메모리 할당자가 힙인 경우)
  • DONT_RESOLVE_DLL_REFERENCES 플래그로 DLL이 로드됨 (메모리 할당자가 모듈 스토밍인 경우)
  • Ntdll .text 섹션이 수정됨 (언후킹이 활성화된 경우)

사용법

스크립트 로드

root@kitploit:~
Cobalt Strike → Script Manager → Load → BOF_RunPe.cna

Aggressor 명령

root@kitploit:~
beacon> runpe /path/to/binary.exe --arg1 value1

Mimikatz

root@kitploit:~
beacon> help runpe

Help

컴파일

GCC 13 (mingw-w64)이 필요합니다. 제공된 Dockerfile을 사용하세요:

root@kitploit:~
sudo docker build -t ubuntu-gcc-13 .
sudo docker run --rm -it -v "$PWD":/work -w /work ubuntu-gcc-13:latest make

출력: Bin/runpe.o

제한 사항

제한 사항설명
CETCET(Control-flow Enforcement Technology)가 합성 스택 프레임을 차단할 수 있음
x64 전용x86/WoW64 지원 없음
커널 가시성

크레딧 / 개발에 사용된 리소스

저장소/블로그 포스트

  • https://github.com/susMdT/LoudSunRun
  • https://github.com/Octoberfest7/Inline-Execute-PE
  • https://www.coresecurity.com/core-labs/articles/running-pes-inline-without-console
  • https://0xdarkvortex.dev/proxying-dll-loads-for-hiding-etwti-stack-tracing/

도서

  • Windows Native API Programming - Pavel Yosifovich 저
  • Windows Internals, Part 1 - Pavel Yosifovich 저
  • Windows Internals, Part 2 - Andrea Allievi 저
도구 다운로드
Timer
타이머 큐 콜백
UnhookNtdllntdll.dll .text를 디스크의 새 복사본으로 교체
Timeout실행 제한 시간(밀리초) (0 = 무기한)
StompModule모듈 스토밍용 DLL 경로 (예: chakra.dll)
Offset
함수 시작 지점으로부터의 오프셋
후킹된 함수대상
GetCommandLineA/W스푸핑된 인자 반환
__getmainargs / __wgetmainargsCRT 인자 초기화
printf / wprintfBeaconPrintf 리디렉션
WriteConsoleA/WBeaconPrintf 리디렉션
__stdio_common_vfprintfUCRT 출력 함수
ExitProcess / exitExitThread로 변환
기법우회 대상
간접 시스템 콜(Indirect Syscalls)사용자랜드 API 후크 (EDR/AV)
Draugr 스택 스푸핑호출 스택 검사
스레드 시작 스푸핑스레드 시작 주소 분석
모듈 스토밍백업되지 않은 메모리 탐지
프라이빗 힙 할당VirtualAlloc 모니터링
Ntdll 언후킹디스크의 ntdll로 메모리 내 ntdll 덮어쓰기
IAT 후킹 (파이프 없음)명명된 파이프 모니터링
스레드 생성이 커널 콜백에 노출됨
.NET관리되는 실행 파일은 지원되지 않음