BLOG
Tracefield · 02
Tracefield · 01
블로그 · 14
Vibe Audit · 04
Vibe Audit · 03
Vibe Audit · 02
Vibe Audit · 01
출판편집자 · 01
StudyTree · 01
SecurityOps · 02
SecurityOps · 01
AI챗봇 · 04
AI챗봇 · 03
AI챗봇 · 02
AI챗봇 · 01
퍼플심 · 04
퍼플심 · 03
퍼플심 · 02
퍼플심 · 01
블로그 · 13
rootscan · 07
rootscan · 06
블로그 · 12
블로그 · 11
블로그 · 10
블로그 · 09
블로그 · 08
블로그 · 07
블로그 · 06
블로그 · 05
블로그 · 04
블로그 · 03
블로그 · 02
블로그 · 01
rootscan · 05
rootscan · 04
rootscan · 03
asmspeak · 03
asmspeak · 02
rootscan · 02
asmspeak · 01
rootscan · 01
웹보안도구 · 02
웹보안도구 · 01
루트캠프 · 02
루트캠프 · 01
All notes 167
무기화 및 페이로드
1. 무기화(Weaponization) 개요
무기화는 공격 코드를 실제로 쓸 수 있는 실행 형태(EXE, DLL 등)로 포장하는 단계다. 단순히 쉘코드를 만드는 것에서 끝나지 않고, EDR, AV를 피하면서 타깃 시스템에서 안정적으로 돌아가게 만드는 과정까지 포함한다.
2. C2 에이전트와 로더(Loader) 구조
레드팀에서는 보통 C2 프레임워크(Sliver, Cobalt Strike 등)에서 만든 쉘코드를 커스텀 로더를 통해 실행한다.
- 쉘코드(Shellcode): 실제 동작을 수행하는 기계어 코드다. C2 서버와 통신하는 기능도 여기에 들어간다.
- 로더(Loader): 쉘코드를 메모리에 올리고 실행하는 프로그램이다. 암호화된 쉘코드를 복호화하고, 메모리를 잡은 뒤 실행 권한(RWX)까지 부여한다.
- Reflective DLL Loading: 디스크에 파일을 남기지 않고(Fileless), 메모리에서 직접 DLL을 로드해 실행하는 방식이다. 흔적을 줄이는 데 유리하다.
3. 탐지 우회(Defense Evasion) 기법
최신 EDR은 메모리 스캔, 행위 기반 탐지, 정적 분석을 함께 써서 악성 코드를 잡아낸다. 그래서 우회 기법도 같이 준비해야 한다.
3.1. 난독화(Obfuscation)와 암호화
- Sleep Mask: 에이전트가 대기(Sleep) 상태일 때 메모리 속 쉘코드 영역을 암호화해, 메모리 스캐너 탐지를 피한다. 실행 순간에만 다시 복호화된다.
- Mutator: 쉘코드 형태를 매번 바꿔 정적 시그니처 탐지를 어렵게 만든다.
3.2. DLL 사이드로딩(DLL Sideloading)
정상 실행 파일이 같은 폴더의 DLL을 먼저 읽는 윈도우 특성을 이용하는 기법이다.
- 원리: 예를 들어 정상 프로그램인
Notepad.exe가kernel32.dll을 호출할 때, 같은 경로에 둔 가짜kernel32.dll이 먼저 로드되게 만드는 식이다. - 장점: 서명된 정상 프로세스 아래에서 실행되므로, 화이트리스트 기반 통제를 우회하기가 상대적으로 쉽다.
3.3. 간접 시스템 호출(Indirect Syscalls)
EDR은 보통 사용자 모드 후킹(User-land Hooking)으로 API 호출을 감시한다. 예를 들어 ntdll.dll 호출을 가로채는 방식이다.
- Direct Syscalls:
ntdll.dll을 거치지 않고 어셈블리 수준에서 직접 커널에 시스템 콜을 보낸다. EDR 감시를 거의 벗어날 수 있지만 구현이 까다롭다. - Indirect Syscalls: Direct Syscalls의 단점, 예를 들어 시스템 콜 번호 변경 문제를 보완하려고
ntdll.dll안의syscall명령어 주소로 점프하는 방식이다. Call Stack Spoofing과 함께 쓰면 EDR을 더 정교하게 속일 수 있다.
4. 결론
페이로드 제작은 C, C++, Assembly 같은 프로그래밍 능력과 운영체제 내부 구조에 대한 이해가 같이 필요하다. Sliver 같은 오픈소스 도구는 시그니처가 이미 알려져 있으니, 그대로 쓰기보다 반드시 커스터마이징해서 쓰는 편이 현실적이다.

