Vectored Overloading PE Injection
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
๊ธฐ์ ๊ฐ์
Vectored Overloading๋ ์ ํต์ ์ธ Module Overloading๊ณผ Vectored Exception Handlers (VEHs), hardware breakpoints๋ฅผ ๊ฒฐํฉํ Windows PE ์ธ์ ์ ๊ธฐ๋ฒ์ ๋๋ค. LoadLibrary๋ฅผ ํจ์นํ๊ฑฐ๋ ์์ฒด ๋ก๋๋ฅผ ์์ฑํ๋ ๋์ , ๊ณต๊ฒฉ์๋:
- ์ ์ DLL(์: wmp.dll)์ ๊ธฐ๋ฐํ SEC_IMAGE ์น์ ์ ์์ฑํ๋ค.
- ๋งคํ๋ ๋ทฐ๋ฅผ ์์ ํ ์ฌ๋ฐฐ์น๋ ์ ์ฑ PE๋ก ๋ฎ์ด์ฐ๋ ์น์ ์ค๋ธ์ ํธ๋ ๋์คํฌ์ ์ ์ ์ด๋ฏธ์ง(wmp.dll)๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ์ ์งํ๋ค.
- VEH๋ฅผ ๋ฑ๋กํ๊ณ ๋๋ฒ๊ทธ ๋ ์ง์คํฐ๋ฅผ ํ๋ก๊ทธ๋๋ฐํ์ฌ NtOpenSection, NtMapViewOfSection, ํ์์ NtClose์ ๋ํ ๋ชจ๋ ํธ์ถ๋ง๋ค ์ฌ์ฉ์ ๋ชจ๋ ๋ธ๋ ์ดํฌํฌ์ธํธ๊ฐ ๋ฐ์ํ๋๋ก ํ๋ค.
- LoadLibrary(โamsi.dllโ)(๋๋ ๋ค๋ฅธ ์ ์ ๋์)๋ฅผ ํธ์ถํ๋ค. Windows ๋ก๋๊ฐ ํด๋น syscall๋ค์ ํธ์ถํ ๋ VEH๊ฐ ์ปค๋ ์ ํ์ ๊ฑด๋๋ฐ๊ณ ์ค๋น๋ ์ ์ฑ ์ด๋ฏธ์ง์ ํธ๋ค๊ณผ ๋ฒ ์ด์ค ์ฃผ์๋ฅผ ๋ฐํํ๋ค.
๋ก๋๋ ์ฌ์ ํ ์์ฒญํ DLL์ ๋งคํํ๋ค๊ณ ๋ฏฟ๊ธฐ ๋๋ฌธ์, ์น์ ์ backing ํ์ผ๋ง ํ์ธํ๋ ํด์ ๋ฉ๋ชจ๋ฆฌ์ ๊ณต๊ฒฉ์์ ํ์ด๋ก๋๊ฐ ๋ค์ด ์์์๋ wmp.dll์ ๋ณด๊ฒ ๋ฉ๋๋ค. ํํธ imports/TLS callbacks๋ ์ง์ง ๋ก๋์ ์ํด ์ฌ์ ํ ํด๊ฒฐ๋๋ฏ๋ก ๊ณต๊ฒฉ์๊ฐ ์ ์งํด์ผ ํ๋ ์ปค์คํ PE ํ์ฑ ๋ก์ง์ ์์ด ํฌ๊ฒ ์ค์ด๋ญ๋๋ค.
Stage 1 โ Build the disguised section
- Create and map a section for the decoy DLL
NtCreateSection(&DecoySection, SECTION_ALL_ACCESS, NULL,
0, PAGE_READWRITE, SEC_IMAGE, L"\??\C:\\Windows\\System32\\wmp.dll");
NtMapViewOfSection(DecoySection, GetCurrentProcess(), &DecoyView, 0, 0,
NULL, &DecoySize, ViewShare, 0, PAGE_READWRITE);
- ํด๋น ๋ทฐ์ ์น์ ๋จ์๋ก ์ ์ฑ PE๋ฅผ ๋ณต์ฌํ๋ SizeOfRawData/VirtualSize๋ฅผ ์ค์ํ๊ณ ์ดํ ๋ณดํธ ์์ฑ(PAGE_EXECUTE_READ, PAGE_READWRITE ๋ฑ)์ ์ ๋ฐ์ดํธํ๋ค.
- ๋ฐ์ฌ ๋ก๋(reflective loader)๊ฐ ํ๋ ๊ฒ์ฒ๋ผ ์ ํํ ์ฌ๋ฐฐ์น(relocations)์ ์ํฌํธ ํด๊ฒฐ(imports)์ ์ ์ฉํ๋ค. ๋ทฐ๊ฐ ์ด๋ฏธ SEC_IMAGE๋ก ๋งคํ๋์ด ์์ผ๋ฏ๋ก ์น์ ์ ๋ ฌ๊ณผ ๊ฐ๋ ํ์ด์ง๋ ์ดํ Windows ๋ก๋๊ฐ ์์ํ๋ ๊ฒ๊ณผ ์ผ์นํ๋ค.
- PE ํค๋ ์ ๊ทํ:
- ํ์ด๋ก๋๊ฐ EXE์ธ ๊ฒฝ์ฐ, IMAGE_FILE_HEADER.Characteristics |= IMAGE_FILE_DLL์ ์ค์ ํ๊ณ ์ํธ๋ฆฌ ํฌ์ธํธ๋ฅผ 0์ผ๋ก ๋ง๋ค์ด LdrpCallTlsInitializers๊ฐ EXE ์ ์ฉ ์คํ ์ผ๋ก ์ ํํ๋ ๊ฒ์ ๋ง๋๋ค.
- DLL ํ์ด๋ก๋๋ ํค๋๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ๊ทธ๋๋ก ๋ ์ ์๋ค.
์ด ์์ ์์ ํ๋ก์ธ์ค๋ backing object๊ฐ ์ฌ์ ํ wmp.dll์ธ RWX ๊ถํ์ ๋ทฐ๋ฅผ ์์ ํ์ง๋ง, ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํธ๋ ๊ณต๊ฒฉ์๊ฐ ์ ์ดํฉ๋๋ค.
Stage 2 โ Hijack the loader with VEHs
- VEH๋ฅผ ๋ฑ๋กํ๊ณ hardware breakpoints๋ฅผ ์ค์ : ntldl!NtOpenSection์ ์ฃผ์๋ก Dr0(๋๋ ๋ค๋ฅธ ๋๋ฒ๊ทธ ๋ ์ง์คํฐ)๋ฅผ ํ๋ก๊ทธ๋๋ฐํ๊ณ DR7์ ์ค์ ํ์ฌ ์คํ ์๋ง๋ค STATUS_SINGLE_STEP๊ฐ ๋ฐ์ํ๊ฒ ํ๋ค. ์ดํ NtMapViewOfSection๊ณผ ํ์์ NtClose์ ๋ํด์๋ ๋์ผํ๊ฒ ๋ฐ๋ณตํ๋ค.
- LoadLibrary(โamsi.dllโ)๋ก DLL ๋ก๋ฉ์ ํธ๋ฆฌ๊ฑฐํ๋ค. LdrLoadDll์ ๊ฒฐ๊ตญ NtOpenSection์ ํธ์ถํ์ฌ ์ค์ ์น์ ํธ๋ค์ ์ป๋๋ค.
- NtOpenSection์ ๋ํ VEH ํ :
- [out] PHANDLE SectionHandle ์ธ์์ ์คํ ์ฌ๋กฏ์ ์ฐพ๋๋ค.
- ์ด์ ์ ์์ฑํ DecoySection ํธ๋ค์ ํด๋น ์ฌ๋กฏ์ ์ด๋ค.
- RIP/EIP๋ฅผ ret ๋ช ๋ น์ผ๋ก ์ด๋์์ผ ์ปค๋ ํธ์ถ์ด ๋ฐ์ํ์ง ์๊ฒ ํ๋ค.
- ๋ค์์ผ๋ก NtMapViewOfSection์ ๊ฐ์ํ๋๋ก ํ๋์จ์ด ๋ธ๋ ์ดํฌํฌ์ธํธ๋ฅผ ์ฌ์ค์ ํ๋ค.
- NtMapViewOfSection์ ๋ํ VEH ํ :
- [out] PVOID *BaseAddress(๋ฐ ํฌ๊ธฐ/๋ณดํธ ์ถ๋ ฅ๊ฐ)๋ฅผ ์ด๋ฏธ ๋งคํ๋ ์ ์ฑ ๋ทฐ์ ์ฃผ์๋ก ๋ฎ์ด์ด๋ค.
- ์์์ ๊ฐ์ด syscall ๋ณธ๋ฌธ์ ๊ฑด๋๋ด๋ค.
- (์ ํ์ ) NtClose์ ๋ํ VEH ํ ์ ๊ฐ์ง ์น์ ํธ๋ค์ด ์ ๋ฆฌ๋์๋์ง ํ์ธํ์ฌ resource leaks๋ฅผ ๋ฐฉ์งํ๊ณ ์ต์ข ์ ์ธ ์ ์์ฑ ๊ฒ์ฌ๋ฅผ ์ ๊ณตํ๋ค.
syscall์ด ์ ํ ์คํ๋์ง ์๊ธฐ ๋๋ฌธ์ ์ปค๋ ์ฝ๋ฐฑ(ETWti, minifilter ๋ฑ)์ ์์ฌ์ค๋ฌ์ด NtOpenSection/NtMapViewOfSection ์ด๋ฒคํธ๋ฅผ ๊ด์ฐฐํ์ง ๋ชปํด telemetry๊ฐ ํฌ๊ฒ ๋ฎ์์ง๋๋ค. ๋ก๋ ๊ด์ ์์๋ ๋ชจ๋ ๊ฒ์ด ์ฑ๊ณตํ๊ณ amsi.dll์ด ๋ฉ๋ชจ๋ฆฌ์ ์์ผ๋ฏ๋ก, ๋ก๋๋ ๊ณต๊ฒฉ์์ ๋ฐ์ดํธ์ ๋ํด import/TLS ํด๊ฒฐ์ ๊ณ์ ์งํํฉ๋๋ค.
Stage 3 โ Execute the payload
- EXE ํ์ด๋ก๋: ์ฌ๋ฐฐ์น๊ฐ ์๋ฃ๋๋ฉด ์ธ์ ํฐ๋ ์๋ ์ํธ๋ฆฌ ํฌ์ธํธ๋ก ๋จ์ํ ์ ํํ๋ค. ๋ก๋๊ฐ DllMain์ ํธ์ถํ๋ค๊ณ ์๊ฐํ ๋, ์ปค์คํ ์ฝ๋๋ ๋์ EXE ์คํ์ผ ์ํธ๋ฆฌ๋ฅผ ์คํํ๋ค.
- DLL ํ์ด๋ก๋ / Node.js addon: ์๋๋ ์ต์คํฌํธ๋ฅผ ํด๊ฒฐํ๊ณ ํธ์ถํ๋ค(Kidkadi๋ JavaScript์ ์ด๋ฆ์ด ์ง์ ๋ ํจ์๋ฅผ ๋ ธ์ถํจ). ๋ชจ๋์ด ์ด๋ฏธ LdrpModuleBaseAddressIndex์ ๋ฑ๋ก๋์ด ์์ผ๋ฏ๋ก ์ดํ์ ์กฐํ๋ ๊ทธ๊ฒ์ ์ ์ DLL๋ก ์ธ์ํ๋ค.
Node.js ๋ค์ดํฐ๋ธ ์ ๋์จ(.node ํ์ผ)๊ณผ ๊ฒฐํฉํ๋ฉด Windows ๋ด๋ถ ๋์์ ๋ํ ๋ฌด๊ฑฐ์ด ์์ ์ JavaScript ๋ ์ด์ด ๋ฐ์ ๋จ๊ฒ ๋์ด, ์ํ ํ์์๋ ๋ค์ํ ๋๋ ํ๋ Node ๋ํผ์ ํจ๊ป ๋์ผํ ๋ก๋๋ฅผ ๋ฐฐํฌํ ์ ์์ต๋๋ค.
References
- Check Point Research โ GachiLoader: Defeating Node.js Malware with API Tracing
- VectoredOverloading โ PoC implementation
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


