PE Injection: 디스크 없이 메모리에서만 실행되는 프로세스 인젝션 | T1055.002
Lazarus Operation SyncHole이 한국 기업 6곳을 공격할 때 사용한 PE Injection. DLL Injection과 달리 모듈 목록에 흔적이 남지 않는 파일리스 기법의 구조와 ETW-TI 탐지법.
Lazarus Operation SyncHole이 한국 기업 6곳을 공격할 때 사용한 PE Injection. DLL Injection과 달리 모듈 목록에 흔적이 남지 않는 파일리스 기법의 구조와 ETW-TI 탐지법.
MITRE ATT&CK: T1055.002 (Portable Executable Injection) | 전술: Defense Evasion, Privilege Escalation | 플랫폼: Windows
DLL Injection(T1055.001)은 디스크에 DLL 파일이 필요하고, LoadLibrary를 호출하면 Windows 모듈 목록에 등록된다. PE Injection은 이 두 가지 제약을 모두 제거한다.
PE Injection은 실행 파일(PE) 이미지 전체를 대상 프로세스의 메모리에 직접 기록한다. Windows 로더를 거치지 않으므로 PEB 모듈 목록에 흔적이 남지 않는다. 디스크에 파일을 생성하지 않아 파일 기반 탐지도 우회한다.
대신 공격자가 직접 해야 할 일이 늘어난다. 메모리 주소가 달라지면 PE 내부의 절대 주소 참조가 깨지기 때문에, 재배치(relocation) 테이블을 수동으로 처리해야 한다.
| 항목 | DLL Injection | PE Injection |
|---|---|---|
| 디스크 파일 | 필요 | 불필요 (완전 파일리스) |
| 로딩 방식 | LoadLibrary (Windows 로더) | 수동 메모리 기록 (로더 우회) |
| 모듈 목록 | PEB에 등록됨 (EDR 탐지 가능) | 등록 안 됨 (은닉) |
| 재배치 처리 | Windows가 자동 처리 | 공격자가 수동 처리 |
| 구현 난이도 | 낮음 | 높음 |
OpenProcess. 대상 프로세스의 핸들을 획득한다.
VirtualAllocEx. 대상 프로세스에 SizeOfImage만큼의 메모리를 PAGE_EXECUTE_READWRITE 권한으로 할당한다. DLL Injection은 DLL 경로 문자열만 기록하면 됐지만, PE Injection은 실행 파일 전체를 기록해야 하므로 더 큰 메모리가 필요하다.
재배치 처리. PE 파일은 특정 기본 주소(preferred base)에 로드될 것을 가정하고 컴파일된다. 실제 할당된 주소가 다르면 내부의 절대 주소 참조가 전부 틀어진다. .reloc 섹션의 재배치 테이블을 순회하면서 주소 차이(delta)를 보정한다. 이 과정에서 이중 중첩 루프가 실행되는데, 이것이 PE Injection의 행위적 지문이다.
WriteProcessMemory. 재배치가 완료된 PE 이미지를 대상 프로세스에 기록한다.
CreateRemoteThread. 기록된 PE의 엔트리포인트 주소로 원격 스레드를 생성한다. 이 순간 코드가 실행된다.
2024년 11월부터 2025년 2월까지, Lazarus는 한국 IT·금융·반도체·통신 기업 6곳을 공격했다. Kaspersky가 "Operation SyncHole"로 명명한 이 캠페인은 한국 언론 사이트를 워터링 홀로 활용했다.
공격의 핵심은 한국 보안 소프트웨어 Cross EX의 취약점 악용이었다. Cross EX의 서브프로세스를 통해 ThreatNeedle 백도어를 정상 프로세스 SyncHost.exe의 메모리에 인젝션했다. 또한 Agamemnon 다운로더에는 Tartarus-TpAllocInject라는 새로운 프로세스 인젝션 변종이 포함돼 있었다.
FIN7 후속 그룹 LUNAR SPIDER는 MSI 파일로 Brute Ratel C4를 전달한 뒤, Latrodectus 악성코드를 explorer.exe에 PE Injection으로 삽입했다. NtAllocateVirtualMemory를 CRC32 API 해싱과 PEB 워킹으로 호출해 탐지를 우회했다. 금융 부문이 표적이었다.
GreyEnergy는 자체 패커가 백도어를 복호화한 뒤, PE 헤더를 수동으로 파싱하고 Windows API를 런타임에 로드해 메모리에서만 실행한다. 임포트 테이블을 사용하지 않는 구조로, 파일시스템에 흔적을 남기지 않는다.
| 그룹 | 초기 접근 | 인젝션 대상 |
|---|---|---|
| Lazarus (SyncHole) | 한국 언론 워터링 홀 + Cross EX 취약점 | SyncHost.exe에 ThreatNeedle |
| LUNAR SPIDER (FIN7) | MSI 파일 + Brute Ratel C4 | explorer.exe에 Latrodectus |
| GreyEnergy | 스피어피싱 | 자체 패커로 인메모리 전용 실행 |
PE Injection은 PEB 모듈 목록에 나타나지 않지만, 메모리에 남기는 흔적은 피할 수 없다.
MEM_PRIVATE + MZ 헤더. 정상적인 실행 파일은 MEM_IMAGE 플래그가 붙는다. PE Injection으로 기록된 코드는 MEM_PRIVATE 영역에 존재하면서 PE 헤더(4D 5A)를 포함한다. Volatility의 malfind 플러그인이 이 패턴을 탐지한다.
RWX 메모리 할당. VirtualAllocEx로 PAGE_EXECUTE_READWRITE 권한을 가진 크로스 프로세스 메모리를 할당하는 것은 비정상이다. 정상 소프트웨어가 다른 프로세스에 RWX 메모리를 할당하는 경우는 드물다.
ETW-TI 커널 이벤트. ETW Threat Intelligence 프로바이더는 커널 수준에서 다음 이벤트를 기록한다. 사용자 모드 후크를 제거해도 우회할 수 없다.
| ETW-TI 이벤트 | 탐지 대상 |
|---|---|
| THREATINT_ALLOCVM_REMOTE | 크로스 프로세스 VirtualAllocEx |
| THREATINT_WRITEVM_REMOTE | 크로스 프로세스 WriteProcessMemory |
| THREATINT_PROTECTVM_REMOTE | 크로스 프로세스 VirtualProtectEx |
Sysmon Event ID 8. CreateRemoteThread 이벤트를 기록한다. 위 ETW-TI 이벤트와 상관 분석하면 PE Injection의 전체 시퀀스를 재구성할 수 있다.
Windows 11 24H2 보호. 2024년 10월 출시된 Windows 11 24H2는 로더 수준에서 MEM_IMAGE 플래그를 검증한다. 기존 PE Injection 방식은 이 검증에 걸린다. 공격자는 ZwCreateSection + ZwMapViewOfSection으로 우회하는 변종을 개발하고 있다.
AI 활용 안내 이 글은 AI(Claude)의 도움을 받아 작성되었습니다. 인용된 통계와 사례는 참고 자료에 명시된 출처에 근거하며, 설명을 위한 일부 표현은 각색되었습니다.
면책 조항 본 글은 보안 인식 제고를 위한 교육 목적으로 작성되었습니다. 언급된 공격 기법을 실제로 시도하는 행위는 「정보통신망법」, 「형법」 등에 따라 처벌받을 수 있으며, 본 블로그는 이에 대한 법적 책임을 지지 않습니다.