Windows ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ํ•˜์ด๋ธŒ ์ต์Šคํ”Œ๋กœ์ž‡ ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ

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

ํ•˜์ด๋ธŒ ์†์ƒ์ด ํŠน๋ณ„ํ•œ ์ด์œ 

Windows registry hives๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋งตํ•‘๋œ .regf ํŒŒ์ผ๋กœ, ์ปค์Šคํ…€ ํ• ๋‹น์ž(HvAllocateCell, HvReallocateCell, HvFreeCell)์— ์˜ํ•ด ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ์ด ํ• ๋‹น์ž๋Š”:

  • ํ• ๋‹น์„ ๋ฌด์ž‘์œ„ํ™”ํ•˜์ง€ ์•Š์Œ โ€“ ์…€ ๋ฐฐ์น˜๋Š” ์ด์ „ registry API ํ˜ธ์ถœ์˜ ์ˆœ์„œ/ํฌ๊ธฐ์—๋งŒ ์˜์กดํ•˜๋ฏ€๋กœ ๋ ˆ์ด์•„์›ƒ์„ ํ˜ธ์ŠคํŠธ ๊ฐ„์— ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์‚ฌ ๋ถ€์กฑ โ€“ ์ˆ˜๋™์œผ๋กœ ๋ณ€๊ฒฝ๋œ ํ—ค๋”/๋ฐ์ดํ„ฐ ํ•„๋“œ๋Š” ์ปค๋„ ์†Œ๋น„์ž(Cmp* routines)์™€ Registry ํ”„๋กœ์„ธ์Šค ์ž์ฒด์—์„œ ์‹ ๋ขฐ๋ฉ๋‹ˆ๋‹ค.
  • ๊ถŒํ•œ ์žˆ๋Š” ํ•˜์ด๋ธŒ์™€ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๊ณต์œ ํ•จ โ€“ ๋งŽ์€ ๊ฒฝ์šฐ ๊ณต๊ฒฉ์ž๊ฐ€ ์ œ์–ดํ•˜๋Š” ํ•˜์ด๋ธŒ๊ฐ€ HKLM/HKU ํ•˜์ด๋ธŒ์™€ ๋™์ผํ•œ ์œ ์ € ๋ชจ๋“œ ์ฃผ์†Œ ๋ฒ”์œ„์— ๋งคํ•‘๋˜์–ด inter-hive overflow๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋กœ ์ธํ•ด ํ•˜์ด๋ธŒ ๊ธฐ๋ฐ˜ ๋ฉ”๋ชจ๋ฆฌ ์†์ƒ ๋ฒ„๊ทธ(์˜ˆ: CVE-2023-23420 / CVE-2023-23423)๋Š” LPE์— ๋Œ€ํ•ด ์œ ๋… ์‹ ๋ขฐ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.

registry APIs๋กœ ๊ฒฐ์ •๋ก ์  ๋ ˆ์ด์•„์›ƒ ์ •๋ฆฌ

ํ•˜์ด๋ธŒ ํ• ๋‹น์ด ๊ฒฐ์ •๋ก ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— Win32 APIs๋งŒ์œผ๋กœ ์…€ ๋ฐฐ์น˜๋ฅผ ๊ทธ๋ฃจ๋ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์›Œํฌํ”Œ๋กœ๋Š”:

  1. ๋Œ€์ƒ ํ‚ค๋ฅผ ๋ฆฌ์…‹(์‚ญ์ œ/์žฌ์ƒ์„ฑ)ํ•˜์—ฌ ํ•˜์ด๋ธŒ ๋นˆ์— ์•Œ๋ ค์ง„ ์…€๋งŒ ๋‚จ๊ธฐ๊ธฐ.
  2. ์ •์˜ˆ(์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ) ์…€ ์—ฐ์†์„ ํ• ๋‹นํ•˜๋ ค๋ฉด ํฌ๊ธฐ๋ฅผ ์‹ ์ค‘ํžˆ ์„ ํƒํ•ด ๊ฐ’์„ ์ƒ์„ฑ:
  • Key/value ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์…€์€ 8๋ฐ”์ดํŠธ์˜ ๋ฐฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • 0x3FD8-๋ฐ”์ดํŠธ ๊ฐ’์„ ์“ฐ๋ฉด ์ƒˆ 0x4000-๋ฐ”์ดํŠธ ๋นˆ์ด ๊ฐ•์ œ๋ฉ๋‹ˆ๋‹ค(0x3FD8 ๋ฐ์ดํ„ฐ + _HBIN ํ—ค๋”/ํŒจ๋”ฉ), ์ดํ›„ ๋นˆ์„ ์ƒํ˜ธ ๊ต์ฐจ(interleaving)ํ•˜๊ธฐ์— ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค.
  1. ํฌ๊ธฐ ์กฐ์ •์— ์นœํ™”์ ์ธ ํƒ€์ž… ์‚ฌ์šฉ(์˜ˆ: REG_BINARY) โ€” RegSetValueEx์— ๋‹ค๋ฅธ ๊ธธ์ด๋กœ ํ˜ธ์ถœํ•˜๊ธฐ๋งŒ ํ•ด๋„ ๊ฐœ๋ณ„ ์…€์„ ํ•ด์ œ/ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ์ž‘์—… ์ˆœ์„œ๋ฅผ ๊ธฐ๋ก(์ƒ์„ฑ/์‚ญ์ œ/ํฌ๊ธฐ๋ณ€๊ฒฝ). ์ด๋ฅผ ์žฌ์ƒํ•˜๋ฉด ํ• ๋‹น์ž์— ๋ฌด์ž‘์œ„์„ฑ์ด ์—†์œผ๋ฏ€๋กœ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์—์„œ๋„ ๋™์ผํ•œ ๋ ˆ์ด์•„์›ƒ์„ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Example layout shaper (simplified C) ```c void MakeBin(HKEY base, const wchar_t *name, size_t bytes) { std::vector buf(bytes, 0x41); RegSetKeyValueW(base, NULL, name, REG_BINARY, buf.data(), (DWORD)buf.size()); }

void Groom(HKEY hive) { for (int i = 0; i < 0x20; ++i) { wchar_t value[32]; swprintf(value, Lโ€œbin_%02dโ€œ, i); MakeBin(hive, value, 0x3FD8); RegDeleteKeyValueW(hive, NULL, value); // leaves holes for victim cells } }

</details>

Once a corruption primitive (overwrite/fill) is available, the groom guarantees that the **target cell resides next to the sprayed holes**, enabling precise overwrites without heap spraying.

## ์ž˜๋ชป ๊ตฌ์„ฑ๋œ ํ•˜์œ„ ํ‚ค๋ฅผ ํ†ตํ•œ API-only ์ ‘๊ทผ์œผ๋กœ privileged hives์— ์•ก์„ธ์Šค

Windows๋Š” ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๊ฒฝ๋กœ์˜ ๋งˆ์ง€๋ง‰ ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•œ **ACL on the final component**๋งŒ ํ‰๊ฐ€ํ•œ๋‹ค. HKLM/HKU ์•„๋ž˜์˜ ์–ด๋–ค ํ•˜์œ„ ํ•ญ๋ชฉ์ด๋“  `KEY_SET_VALUE`, `KEY_CREATE_SUB_KEY`, ๋˜๋Š” `WRITE_DAC`๋ฅผ ์ €๊ถŒํ•œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ถ€์—ฌํ•˜๋ฉด, ์ƒ์œ„ ํ‚ค๋“ค์ด ๋ชจ๋‘ ์ž ๊ฒจ ์žˆ์–ด๋„ ํ•ด๋‹น ํ•˜์œ„ ํ•ญ๋ชฉ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. Project Zero๋Š” **>1000 such writable keys in HKLM on Windows 11**๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์œผ๋ฉฐ, ์—ฌ๊ธฐ์—๋Š” `HKLM\SOFTWARE\Microsoft\DRM` ๊ฐ™์€ ์žฅ๊ธฐ ํ•ญ๋ชฉ๊ณผ ์—ฌ๋Ÿฌ `HKLM\SYSTEM` ๋ถ„๊ธฐ๊ฐ€ ํฌํ•จ๋œ๋‹ค.

Practical enumeration strategy:

1. ๊ถŒํ•œ ์ƒ์Šน๋œ ์ปจํ…์ŠคํŠธ์—์„œ `\Registry\Machine`๊ณผ `\Registry\User`๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ๊ฐ ํ‚ค์˜ security descriptor๋ฅผ ๋คํ”„ํ•œ๋‹ค. DACL์ด unprivileged SIDs๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ํ•ญ๋ชฉ์„ ์ €์žฅํ•œ๋‹ค.
2. ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๋กœ์„œ ๊ธฐ๋กํ•œ ๊ฒฝ๋กœ์— ๋Œ€ํ•ด `RegOpenKeyEx`๋ฅผ `KEY_SET_VALUE|KEY_CREATE_SUB_KEY` ๊ถŒํ•œ์œผ๋กœ ์‹œ๋„ํ•œ๋‹ค. ์„ฑ๊ณต์ ์œผ๋กœ ์—ด๋ฆฐ ํ‚ค๋Š” ์‹œ์Šคํ…œ hives์— attacker-controlled data๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š” hive corruption bugs์˜ ์œ ํšจํ•œ ํƒ€๊นƒ์ด๋‹ค.
3. PoCs๊ฐ€ ์†์ƒ๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋„๋ก **stable writable locations**์— ๋Œ€ํ•œ ์—ด๋ฆฐ ํ•ธ๋“ค์˜ ์บ์‹œ๋ฅผ ์œ ์ง€ํ•œ๋‹ค.
```powershell
$targets = Get-ChildItem Registry::HKEY_LOCAL_MACHINE -Recurse |
Where-Object { (Get-Acl $_.PsPath).Access.IdentityReference -match 'S-1-5-32-545' } |
Select-Object -ExpandProperty PsPath

foreach ($path in $targets) {
try { Get-Item -Path $path -ErrorAction Stop | Out-Null }
catch {}
}

์ผ๋‹จ ๊ทธ๋Ÿฌํ•œ ๊ฒฝ๋กœ๋ฅผ ์•Œ๊ฒŒ ๋˜๋ฉด, ์ต์Šคํ”Œ๋กœ์ž‡์€ ์˜คํ”„๋ผ์ธ์—์„œ ํ•˜์ด๋ธŒ๋ฅผ ์กฐ์ž‘ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐโ€”ํ‘œ์ค€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ APIs๋งŒ์œผ๋กœ๋„ SYSTEM ์„œ๋น„์Šค๊ฐ€ ์ ‘๊ทผํ•˜๋Š” ๊ถŒํ•œ ์žˆ๋Š” ํ•˜์ด๋ธŒ ์•ˆ์— ์†์ƒ๋œ ์…€์„ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

HKCU\Software\Microsoft\Input\TypingInsights๋ฅผ ํ†ตํ•œ ๊ต์ฐจ ์‚ฌ์šฉ์ž ํ•˜์ด๋ธŒ ์•…์šฉ

๋ชจ๋“  ์‚ฌ์šฉ์ž ํ•˜์ด๋ธŒ์—๋Š” HKCU\Software\Microsoft\Input\TypingInsights๊ฐ€ ๋“ค์–ด ์žˆ์œผ๋ฉฐ, ํ•ด๋‹น ACL์€ KEY_ALL_ACCESS๋ฅผ Everyone (S-1-1-0). ์—๊ฒŒ ๋ถ€์—ฌํ•œ๋‹ค. Microsoft๊ฐ€ ์ด๋ฅผ ๊ฐ•ํ™”ํ•  ๋•Œ๊นŒ์ง€, ๋ชจ๋“  ์‚ฌ์šฉ์ž๋Š” ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค:

  • ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ ํ•˜์ด๋ธŒ๋ฅผ 2โ€ฏGiB ํ•œ๋„๊นŒ์ง€ ์ฑ„์›Œ ๋กœ๊ทธ์˜จ ์‹คํŒจ๋ฅผ ์œ ๋ฐœํ•˜๊ฑฐ๋‚˜ ํ•˜์ด๋ธŒ ์ ˆ๋‹จ์„ ๊ฐ•์ œํ•  ์ˆ˜ ์žˆ๋‹ค(allocator ๋™์ž‘์„ ์œ ๋„ํ•˜๊ฑฐ๋‚˜ DoS์— ์œ ์šฉ).
  • ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ NTUSER.DAT์— ์†์ƒ๋œ ์…€์„ ์‚ฝ์ž…ํ•ด ํ”ผํ•ด์ž ํ”„๋กœ์„ธ์Šค๊ฐ€ ์†์ƒ๋œ ํ‚ค๋ฅผ ์ฝ์„ ๋•Œ ํŠธ๋ฆฌ๊ฑฐ๋˜๋Š” ์ธก๋ฉด ์ด๋™ ์ต์Šคํ”Œ๋กœ์ž‡์„ ์ค€๋น„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์‚ฌ์šฉ์ž๋ณ„ ์˜ค๋ฒ„๋ ˆ์ด ํ•˜์ด๋ธŒ์— ์˜์กดํ•˜๋Š” ์ƒŒ๋“œ๋ฐ•์Šค ์•ฑ์˜ differencing hives๋ฅผ ์ˆ˜์ •ํ•ด ์•…์„ฑ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ฐ•์ œํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋กœ ์ธํ•ด ํ•˜์ด๋ธŒ ์†์ƒ ์ทจ์•ฝ์ ์€ ๋™์ผ ๊ณ„์ • ๋‚ด ๊ถŒํ•œ ์ƒ์Šน๋ฟ ์•„๋‹ˆ๋ผ lateral movement์—๋„ ์ ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.

๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์†์ƒ์„ paged pool overflows๋กœ ์ „ํ™˜

๋Œ€ํ˜• ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๊ฐ’์€ _CM_BIG_DATA ๋ ˆ์ฝ”๋“œ์— ์ €์žฅ๋œ๋‹ค:

  • _CM_KEY_VALUE.DataLength๋Š” ๋…ผ๋ฆฌ์  ํฌ๊ธฐ๋ฅผ ์ €์žฅํ•œ๋‹ค. ์ƒ์œ„ ๋น„ํŠธ๋Š” ํŽ˜์ด๋กœ๋“œ๊ฐ€ ์…€ ๋‚ด๋ถ€์— ์žˆ๋Š”์ง€ ์•„๋‹ˆ๋ฉด big-data ์ €์žฅ์†Œ์— ์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • _CM_BIG_DATA.Count๋Š” ์ฒญํฌ ํ…Œ์ด๋ธ”์„ ํ†ตํ•ด ์ฐธ์กฐ๋˜๋Š” 16โ€ฏKiB ์ฒญํฌ(๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ œ์™ธ 16384 ๋ฐ”์ดํŠธ)๋ฅผ ์นด์šดํŠธํ•œ๋‹ค.

์–ด๋–ค ์ปดํฌ๋„ŒํŠธ๊ฐ€ CmpGetValueData๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด:

  1. ์ปค๋„์€ DataLength์— ๋”ฐ๋ผ ์—„๊ฒฉํžˆ ํฌ๊ธฐ๊ฐ€ ์ •ํ•ด์ง„ paged pool buffer๋ฅผ ํ• ๋‹นํ•œ๋‹ค.
  2. ํ•˜์ด๋ธŒ ์ €์žฅ์†Œ์—์„œ Count * 0x4000 ๋ฐ”์ดํŠธ๋ฅผ ํ•ด๋‹น ๋ฒ„ํผ๋กœ ๋ณต์‚ฌํ•œ๋‹ค.

์…€์„ ์†์ƒ์‹œ์ผœ DataLength < 16344 * (Count - 1)๊ฐ€ ๋˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด, ๋ณต์‚ฌ๋Š” ์ธ์ ‘ํ•œ paged-pool ๊ฐ์ฒด๋กœ ์„ ํ˜•์ ์œผ๋กœ ๋ชฉ์ ์ง€๋ฅผ ์ดˆ๊ณผ(overrun) ํ•œ๋‹ค. ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ต์Šคํ”Œ๋กœ์ž‡ ์ฒด์ธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค:

  1. ๊ฒฐ์ •๋ก ์  groom์„ ์‚ฌ์šฉํ•ด ์ทจ์•ฝํ•œ _CM_KEY_VALUE๋ฅผ ์ œ์–ด ๊ฐ€๋Šฅํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ทผ์ฒ˜์— ๋ฐฐ์น˜ํ•œ๋‹ค.
  2. _CM_BIG_DATA.Count๋Š” ๊ทธ๋Œ€๋กœ ๋‘” ์ฑ„ DataLength๋ฅผ ์ž‘์€ ๊ฐ’(์˜ˆ: 0x100)์œผ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.
  3. ํŒŒ์ดํ”„, ALPC ํฌํŠธ, section ๊ฐ์ฒด ๋“ฑ ์‚ฌ์šฉ์ž ๋ชจ๋“œ์—์„œ pool-groom์„ ์ˆ˜ํ–‰ํ•ด ์„ ํƒํ•œ ๊ฐ์ฒด(์˜ˆ: EPROCESS->Token ์†Œ์œ ์ž ๋˜๋Š” SRVNET_BUFFER)๊ฐ€ 1๋‹จ๊ณ„์—์„œ ํ• ๋‹น๋œ ๋‹ค์Œ ์ฒญํฌ๋ฅผ ์ฐจ์ง€ํ•˜๋„๋ก ํ•œ๋‹ค.
  4. ์ฝ๊ธฐ ํŠธ๋ฆฌ๊ฑฐ(์˜ˆ: RegQueryValueEx, NtQueryValueKey)๋ฅผ ์œ ๋ฐœํ•ด CmpGetValueData๊ฐ€ ๋ชจ๋“  ์ฒญํฌ๋ฅผ ๋ณต์‚ฌํ•˜๋„๋ก ํ•˜๊ณ  ํ•˜์ด๋ธŒ์˜ ๊ณต๊ฒฉ์ž ์ œ์–ด ๋ฐ์ดํ„ฐ๋กœ ์ด์›ƒ์˜ ํ•„๋“œ๋ฅผ ๋ฎ์–ด์“ฐ๊ธฐ(overwrite) ํ•œ๋‹ค.
  5. ์†์ƒ๋œ ์ปค๋„ ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด ์ž„์˜ ์ฝ๊ธฐ/์“ฐ๊ธฐ ๊ถŒํ•œ์œผ๋กœ ํ”ผ๋ฒ—ํ•˜๊ฑฐ๋‚˜ ์ง์ ‘ SYSTEM ํ† ํฐ์„ ํƒˆ์ทจํ•œ๋‹ค.

์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ๊ธธ์ด๊ฐ€ (Count * 0x4000) - DataLength์™€ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์—, **์ •ํ™•ํ•œ ๋ฐ”์ดํŠธ ์˜ˆ์‚ฐ(precise byte budget)**๊ณผ ๊ธฐ๋ก๋˜๋Š” ๋ฐ”์ดํŠธ์— ๋Œ€ํ•œ ์™„์ „ํ•œ ์ œ์–ด๋ฅผ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ์–ด ๋งŽ์€ ๋“œ๋ผ์ด๋ฒ„ ๊ธฐ๋ฐ˜ ํ’€ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋ณด๋‹ค ์šฐ์ˆ˜ํ•˜๋‹ค.

๋นฝ๋นฝํ•˜๊ฒŒ ํŒจํ‚น๋œ HBIN์„ ํ†ตํ•œ ์ธํ„ฐ-ํ•˜์ด๋ธŒ ์„ ํ˜• ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ

Registry ํ”„๋กœ์„ธ์Šค์— ์˜ํ•ด ๋งˆ์šดํŠธ๋œ ํ•˜์ด๋ธŒ๋Š” 2โ€ฏMiB-aligned views๋กœ ๋งคํ•‘๋˜๋ฉฐ **๊ฐ€๋“œ ๊ฐญ(guard gaps)**์ด ์—†๋‹ค. ๋‘ ๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ํ•˜์ด๋ธŒ๋ฅผ ๋™์‹œ์— ์„ฑ์žฅ์‹œ์ผœ ๊ทธ๋“ค์˜ _HBIN ๋ฒ”์œ„๊ฐ€ ๋งž๋‹ฟ์„ ๋•Œ๊นŒ์ง€ ๊ฐ•์ œํ•  ์ˆ˜ ์žˆ๋‹ค:

  1. ๊ณต๊ฒฉ์ž๊ฐ€ ์“ธ ์ˆ˜ ์žˆ๋Š” ํ•˜์ด๋ธŒ(์•ฑ ํ•˜์ด๋ธŒ ๋˜๋Š” ์‚ฌ์šฉ์ž ํ•˜์ด๋ธŒ)์™€ ๊ถŒํ•œ ์žˆ๋Š” ๋Œ€์ƒ(์˜ˆ: HKLM\SOFTWARE)์„ ์„ ํƒํ•œ๋‹ค.
  2. ๋‘ ํ•˜์ด๋ธŒ ๋ชจ๋‘์—์„œ 0x3FD8-๋ฐ”์ดํŠธ ๊ฐ’์„ ์ง€์†์ ์œผ๋กœ ์ƒ์„ฑ/์‚ญ์ œํ•œ๋‹ค. ๊ฐ ํ• ๋‹น์€ 0x4000-๋ฐ”์ดํŠธ bin์„ ์ถ”๊ฐ€ํ•˜๋ฏ€๋กœ, ๋‘ ์ž‘์„ฑ๊ธฐ๋ฅผ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•˜๋ฉด ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๊ทธ๋“ค์˜ bin์ด ๊ต์ฐจ(interleave)ํ•˜๊ฒŒ ๋œ๋‹ค( !process Registry + !vad๋กœ ๊ด€์ฐฐ ๊ฐ€๋Šฅ).
  3. ๊ณต๊ฒฉ์ž ํ•˜์ด๋ธŒ์˜ ๋งˆ์ง€๋ง‰ bin์ด HKLM์— ์†ํ•œ HBIN ๋ฐ”๋กœ ์•ž์— ์œ„์น˜ํ•˜๊ฒŒ ๋˜๋ฉด, ํ•˜์ด๋ธŒ ์†์ƒ ๋ฒ„๊ทธ๋ฅผ ์ด์šฉํ•ด ๊ณต๊ฒฉ์ž ํ•˜์ด๋ธŒ๋ฅผ ๋„˜์ณ(overflow out of the attacker hive) HKLM ๋‚ด๋ถ€์˜ HBIN ํ—ค๋”๋‚˜ ์…€์„ ํŒŒ๊ดดํ•œ๋‹ค.
  4. HKLM ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ œ์–ดํ•˜๊ฒŒ ๋˜๋ฉด ๋‹ค์Œ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค:
  • ๊ถŒํ•œ ์žˆ๋Š” ํ•˜์ด๋ธŒ์— ์ง์ ‘ big-data ๋ถˆ์ผ์น˜ ์›์‹œ(primitive)๋ฅผ ์ค€๋น„ํ•œ๋‹ค.
  • ์ปค๋„์„ ๋ฒ—์–ด๋‚˜๊ธฐ ์ „์— SYSTEM ์„œ๋น„์Šค๊ฐ€ ์†Œ๋น„ํ•˜๋Š” ๊ตฌ์„ฑ ๋ฐ์ดํ„ฐ๋ฅผ ์†์ƒ์‹œํ‚จ๋‹ค.

๊ฐ€๋“œ ํŽ˜์ด์ง€๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ถŒํ•œ ์—†๋Š” ํ•˜์ด๋ธŒ์—์„œ์˜ ์„ ํ˜• ๋ฎ์–ด์“ฐ๊ธฐ๋Š” ์ง์ ‘์ ์œผ๋กœ SYSTEM ์†Œ์œ ์˜ ํ•˜์ด๋ธŒ ๊ตฌ์กฐ๋ฅผ ์†์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ๋ฐ์ดํ„ฐ ์ „์šฉ ๊ณต๊ฒฉ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ฑฐ๋‚˜ ์œ„์—์„œ ์„ค๋ช…ํ•œ pool overflow๋ฅผ HKLM/HKU ๋‚ด๋ถ€์— ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

์šด์˜ ํŒ

  • ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๊ธฐ ์ „์— ์ธ์ ‘์„ฑ์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด !vad(์œ ์ € ๋ชจ๋“œ)์™€ !reg view / !pool(์ปค๋„)์„ ์‚ฌ์šฉํ•ด ํ•˜์ด๋ธŒ ๋ฐฐ์น˜๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•œ๋‹ค.
  • ์—ด๊ฑฐ ์ค‘ ๋ฐœ๊ฒฌํ•œ ์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•œ HKLM ๊ฒฝ๋กœ๋ฅผ ์บ์‹œํ•ด ์žฌ๋ถ€ํŒ… ํ›„์—๋„ ์†์ƒ ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ๋ฅผ ๋น ๋ฅด๊ฒŒ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
  • hive grooming์„ ํ‘œ์ค€ pool feng shui(ํŒŒ์ดํ”„ ํŽ˜์–ด freelists, NtAllocateVirtualMemory on Registry process)์™€ ๊ฒฐํ•ฉํ•ด ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ์ดํ›„์˜ ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ๋ฅผ ์•ˆ์ •ํ™”ํ•œ๋‹ค.

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