๐Ÿ’ฅ Blaster / MSBlast (2003) โ€” 'RPC DCOM' ๊ฒฐํ•จ ํ•˜๋‚˜๋กœ ์ˆ˜์‹ญ๋งŒ ๋Œ€๋ฅผ ์žฌ๋ถ€ํŒ…์‹œํ‚จ ์ดˆ๊ณ ์† ์›œ

2026-10-13 ยท Malware Deep-Dive (Network Worm / MS03-026 ยท CVE-2003-0352 RPC DCOM Buffer Overflow / windowsupdate.com DDoS โ†’ Welchia)
๊ธฐ์ˆ  ์ •๋ณด
  • ์•…์„ฑ์ฝ”๋“œ๋ช…: Blaster (๋ณ„์นญ Lovsan / Lovesan / MSBlast, W32.Blaster.Worm ยท ๋ณธ์ฒด ํŒŒ์ผ๋ช… msblast.exe) โ€” 'A' ๋ณ€์ข… ์ž‘์„ฑ์ž๋Š” ๋๋‚ด ๋ฏธ์ƒ, 'B' ๋ณ€์ข…์€ ๋ฏธ๊ตญ ๋ฏธ๋„ค์†Œํƒ€์˜ Jeffrey Lee Parson(๋‹น์‹œ 18์„ธ)
  • ๋“ฑ์žฅ: 2003๋…„ 8์›” 11์ผ ์ตœ์ดˆ ๊ด€์ธก โ†’ ํ™•์‚ฐ ์ •์ ์€ 8์›” 13์ผ. 8์›” ์ค‘์ˆœ ์ดํ›„ ISP ํ•„ํ„ฐ๋ง๊ณผ ๋Œ€๋Œ€์  ํ™๋ณด๋กœ ์ง„์ •
  • ํ‘œ์ : Windows XP ยท Windows 2000 (Windows NT 4.0 / Server 2003 ๋“ฑ์€ ๋น„์ „ํŒŒ์ง€๋งŒ RPC ์„œ๋น„์Šค ๋ถˆ์•ˆ์ • ์œ ๋ฐœ)
  • ์ทจ์•ฝ์ : MS03-026 / CVE-2003-0352 โ€” DCOM RPC ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ž˜๋ชป๋œ ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ฉฐ ์ƒ๊ธฐ๋Š” ๋ฒ„ํผ ์˜ค๋ฒ„๋Ÿฐ(์› ๋ฐœ๊ฒฌ: ํด๋ž€๋“œ ์—ฐ๊ตฌํŒ€ Last Stage of Delirium). ์ดํ›„ MS03-039๋กœ ๋ฒ”์œ„ ํ™•๋Œ€
  • ์‚ฌ์šฉ ํฌํŠธ: TCP 135(RPC ์—”๋“œํฌ์ธํŠธ ๋งคํผ) โ€” ์ถ”๊ฐ€๋กœ 139/445/593 ๋ฐ ์ž„์˜ ๊ตฌ์„ฑ RPC ํฌํŠธ๋„ ์•…์šฉ ๊ฐ€๋Šฅ
  • ์ „ํŒŒ ๋ฐฉ์‹: ์ฒจ๋ถ€ํŒŒ์ผยท์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ ์—†์Œ. ๋ฌด์ž‘์œ„ IP๋กœ ์กฐ์ž‘๋œ RPC ์š”์ฒญ์„ ์˜์•„ ์ž๊ฐ€ ์ฆ์‹(์ „ํ˜•์  ๋„คํŠธ์›Œํฌ ์›œ). ์ฆ์‹ ์…ธ์ฝ”๋“œ๋Š” ํ”ผํ•ด์ž์— TCP 4444 ๋ฐฑ๋„์–ด๋ฅผ ์—ด์–ด ๋ณธ์ฒด๋ฅผ ๋ฐ€์–ด๋„ฃ์Œ
  • ํŽ˜์ด๋กœ๋“œ: โ‘  windowsupdate.com:80 ๋Œ€์ƒ SYN ํ”Œ๋Ÿฌ๋“œ(DDoS) โ€” ์‹œ์Šคํ…œ ๋‚ ์งœ๊ฐ€ 2003-08-16 ์ดํ›„ & 12-31 ์ด์ „, ๋˜๋Š” ๋งค์›” 15์ผ ์ดํ›„๋ฉด ์ž‘๋™ โ‘ก RPC ์„œ๋น„์Šค ๋ถ•๊ดด๋กœ ์ธํ•œ 60์ดˆ ์…ง๋‹ค์šด ์นด์šดํŠธ๋‹ค์šด โ‘ข ๋ณธ์ฒด์— ๋ฐ•ํžŒ ๋‘ ๊ฐœ์˜ ASCII ๋ฉ”์‹œ์ง€
  • ์ง€์†์„ฑ: %Windir%\System32\msblast.exe๋กœ ์ž๊ฐ€ ๋ณต์‚ฌ + ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ Run ํ‚ค "windows auto update" ๋“ฑ๋ก + ๋ฎคํ…์Šค BILLY๋กœ ์ค‘๋ณต ์‹คํ–‰ ๋ฐฉ์ง€
  • ํ”ผํ•ด ๊ทœ๋ชจ: CERT/CC ๊ธฐ์ค€ 8/12 3๋งŒ ๋Œ€ โ†’ 8/15 42๋งŒ 3์ฒœ ๋Œ€ ๊ฐ์—ผ ๋ณด๊ณ (๊ณ„์† ์ฆ๊ฐ€). ์ด ๊ฐ์—ผ ๊ทœ๋ชจ๋Š” ๊ธฐ๊ด€๋ณ„๋กœ ์ˆ˜์‹ญ๋งŒ~์ˆ˜๋ฐฑ๋งŒ ๋Œ€๋กœ ์ถ”์ •
  • ์ˆ˜์‚ฌยท์ฒ˜๋ฒŒ: ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ๊ฐ€ ์ž‘์„ฑ์ž ์ œ๋ณด์— ํ˜„์ƒ๊ธˆ 25๋งŒ ๋‹ฌ๋Ÿฌ(BlasterยทSobig ๊ฐ๊ฐ)๋ฅผ ๊ฑธ์—ˆ๊ณ , Parson์€ 2003-08-29 ์ฒดํฌ โ†’ 2005-01-28 18๊ฐœ์›” ์ˆ˜๊ฐ

1. ๋ฐฐ๊ฒฝ/์—ญ์‚ฌ โ€” 'ํŒจ์น˜ ์•ˆ ํ•œ ์ธํ„ฐ๋„ท'์„ ์ •๋ฉด์œผ๋กœ ๋•Œ๋ฆฐ ์›œ

2003๋…„์€ ์ด๋ฏธ ์›œ์˜ ํ•ด์˜€๋‹ค. 1์›”์˜ SQL Slammer๊ฐ€ 376๋ฐ”์ดํŠธ ํŒจํ‚ท ํ•˜๋‚˜๋กœ ์ „ ์„ธ๊ณ„๋ฅผ 10๋ถ„ ๋งŒ์— ๋ฉˆ์ถฐ ์„ธ์šด ์ง€ ๋ฐ˜๋…„, 8์›”์— ๋“ฑ์žฅํ•œ Blaster๋Š” '์ฒจ๋ถ€ํŒŒ์ผ์„ ์—ฌ๋Š” ์‹ค์ˆ˜'์กฐ์ฐจ ํ•„์š” ์—†์—ˆ๋‹ค๋Š” ์ ์—์„œ ํ•œ ๋‹จ๊ณ„ ๋” ๋‚˜์•„๊ฐ”๋‹ค. ์กฐ๊ฑด์€ ๋‹จ ํ•˜๋‚˜ โ€” ํŒจ์น˜๋˜์ง€ ์•Š์€ ์ฑ„ ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์„ ๊ฒƒ.

์™œ ์œ ๋ช…ํ•œ๊ฐ€: Blaster๋Š” '์›œ์˜ ์„ธ๋Œ€ ๊ต์ฒด'๋ฅผ ์•Œ๋ฆฐ ์‚ฌ๊ฑด์ด์—ˆ๋‹ค. 2001๋…„ Code Red๊ฐ€ IIS ์›น์„œ๋ฒ„๋ฅผ ๋…ธ๋ ธ๋‹ค๋ฉด, Blaster๋Š” ๋ชจ๋“  ์œˆ๋„์šฐ ํด๋ผ์ด์–ธํŠธ์˜ ๊ธฐ๋ณธ ์„œ๋น„์Šค(RPC)๋ฅผ ๋…ธ๋ ธ๋‹ค. ์‚ฌ์šฉ์ž PC๊ฐ€ ๊ณง ๋ฌด๊ธฐ์˜€๊ณ , ๊ฐ์—ผ๋˜๋ฉด ์•„๋ฌด๊ฒƒ๋„ ์•ˆ ํ•ด๋„ 60์ดˆ ๋’ค ์žฌ๋ถ€ํŒ…๋๋‹ค. ์—ฌ๊ธฐ์— ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ๋ฅผ ํ–ฅํ•œ DDoS๋ผ๋Š” ์ƒ์ง•์  ํŽ˜์ด๋กœ๋“œ, ๊ทธ๋ฆฌ๊ณ  'msblast.exe'๋ผ๋Š” ์ด๋ฆ„์ด ์ „ ์„ธ๊ณ„ ํ—ฌํ”„๋ฐ์Šคํฌ์˜ ์œ ํ–‰์–ด๊ฐ€ ๋˜๋ฉด์„œ โ€” Blaster๋Š” ํŒจ์น˜ ๊ด€๋ฆฌ(patch management)๋ฅผ IT์˜ 1์ˆœ์œ„ ์˜์ œ๋กœ ๋Œ์–ด์˜ฌ๋ฆฐ ์‚ฌ๊ฑด์ด ๋๋‹ค.

2. ๊ฐ์—ผยท์ „ํŒŒ ๊ฒฝ๋กœ โ€” ๋ฉ”์ผ๋„, ํด๋ฆญ๋„ ์—†๋‹ค. ํฌํŠธ๋งŒ ์—ด๋ ค ์žˆ์œผ๋ฉด ๋

Blaster์˜ ์ „ํŒŒ๋Š” '์ŠคํŒธ ๋ฉ”์ผ โ†’ ์ฒจ๋ถ€ ์‹คํ–‰'์ด๋ผ๋Š” ์‚ฌ๋žŒ ์ค‘์‹ฌ ๊ฒฝ๋กœ๋ฅผ ์™„์ „ํžˆ ๊ฑด๋„ˆ๋›ด๋‹ค. ์ˆœ์ˆ˜ํ•˜๊ฒŒ ๋„คํŠธ์›Œํฌ ์Šคํƒ๋งŒ์œผ๋กœ ํผ์ง„๋‹ค.

ํŠน๊ธฐํ•  ์ : Windows Server 2003์€ ํ™•์‚ฐ๋˜์ง€ ์•Š์•˜๋‹ค. /GS ์ปดํŒŒ์ผ ์˜ต์…˜์œผ๋กœ ์Šคํƒ ์ฟ ํ‚ค(์นด๋‚˜๋ฆฌ)๊ฐ€ ์ผœ์ ธ ์žˆ์–ด ์˜ค๋ฒ„ํ”Œ๋กœ๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  RPCSS๋ฅผ ์ข…๋ฃŒ์‹œ์ผฐ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค โ€” '์ปดํŒŒ์ผ ํ•œ ์ค„'์ด ์›œ์„ ๋ง‰์€ ์‚ฌ๋ก€๋‹ค.

โš ๏ธ ๊ต์œก์šฉ ์ฃผ์˜: ์•„๋ž˜ PoC๋Š” ์ธํ„ฐ๋„ท๊ณผ ๋ถ„๋ฆฌ๋œ ๋กœ์ปฌ ๊ฒฉ๋ฆฌ ๋žฉ(๊ฐ€์ƒ ๋””๋ ‰ํ„ฐ๋ฆฌ /tmp/lab)์„ ์ „์ œ๋กœ '๋™์ž‘ ์›๋ฆฌ'๋งŒ ์žฌํ˜„ํ•˜๋Š” ๋ชจ์˜ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ ์ต์Šคํ”Œ๋กœ์ž‡ยท์‹ค์ œ ์…ธ์ฝ”๋“œยท์‹ค์ œ ๋„คํŠธ์›Œํฌ ์Šค์บ”ยท์‹ค์ œ DDoS๋Š” ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‹ค์ œ ์‹œ์Šคํ…œ์ด๋‚˜ ํƒ€์ธ์˜ ๋„คํŠธ์›Œํฌ๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•œ ์ทจ์•ฝ์  ์•…์šฉยท์„œ๋น„์Šค ๊ฑฐ๋ถ€ ๊ณต๊ฒฉ์€ ๊ทธ ์ž์ฒด๋กœ ๋ถˆ๋ฒ•์ž…๋‹ˆ๋‹ค.

3. ๋™์ž‘ ์›๋ฆฌ ์ƒ์„ธ ๋ถ„์„ โ€” '๊ธธ์ด ๊ฒ€์‚ฌ ์—†๋Š” ๋ณต์‚ฌ' ํ•˜๋‚˜์—์„œ ์‹œ์ž‘๋œ ์—ฐ์‡„

Blaster์˜ ์‹ฌ์žฅ์€ ํ™”๋ คํ•˜์ง€ ์•Š๋‹ค. ์Šคํƒ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ๋ผ๋Š”, ์ง€๊ธˆ๋„ ๊ต๊ณผ์„œ ์ฒซ ์žฅ์— ๋‚˜์˜ค๋Š” ์ทจ์•ฝ์  ํ•˜๋‚˜๋‹ค. ์ค‘์š”ํ•œ ๊ฑด ๊ทธ ํ•˜๋‚˜๊ฐ€ ์ž๊ฐ€ ์ฆ์‹ยท์ง€์†์„ฑยทDDoS๋กœ ์–ผ๋งˆ๋‚˜ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ด์–ด์ง€๋Š”๊ฐ€๋‹ค.

๊ฒฐ๋ก ์ ์œผ๋กœ Blaster๋Š” '์ทจ์•ฝ์  ๊ธฐ์ˆ '๋ณด๋‹ค '์ „ํŒŒ ๊ณตํ•™'์ด ๋” ์œ„ํ—˜ํ•œ ์ž์‚ฐ'์ž„์„ ๋ณด์—ฌ์ค€๋‹ค. ์ฝ”๋“œ๋Š” ์งง๊ณ  ์กฐ์žกํ–ˆ์ง€๋งŒ, ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ์„ ์ œ๊ฑฐํ•œ ์ˆœ๊ฐ„ ํ”ผํ•ด ๊ทœ๋ชจ๋Š” ์‚ฌ๋žŒ์ด ์•„๋‹ˆ๋ผ ๋„คํŠธ์›Œํฌ์˜ ์—ฐ๊ฒฐ๋„๋กœ ๊ฒฐ์ •๋๋‹ค.

4. ํ”ผํ•ด ๊ทœ๋ชจ/์˜ํ–ฅ โ€” ํ—ฌํ”„๋ฐ์Šคํฌ์˜ ์—ฌ๋ฆ„, ๊ทธ๋ฆฌ๊ณ  'ํŒจ์น˜ ๊ทœ์œจ'์˜ ํƒ„์ƒ

  • ๊ฐ์—ผ ๊ณก์„ (CERT/CC): 8์›” 12์ผ 3๋งŒ ๋Œ€ โ†’ 8์›” 15์ผ 42๋งŒ 3์ฒœ ๋Œ€. ์ดํ›„๋กœ๋„ ๊ณ„์† ๋Š˜์–ด ์ด ๊ฐ์—ผ์€ ์ˆ˜์‹ญ๋งŒ~์ˆ˜๋ฐฑ๋งŒ ๋Œ€๋กœ ์ถ”์ •๋๋‹ค(์ง‘๊ณ„ ๊ธฐ๊ด€๋ณ„ ํŽธ์ฐจ ํผ).
  • ํŒŒ๊ดด์˜ ํ˜•ํƒœ: ๊ฐœ์ธ์ •๋ณด๋ฅผ ํ›”์น˜๊ฑฐ๋‚˜ ํŒŒ์ผ์„ ์•”ํ˜ธํ™”ํ•˜์ง€ ์•Š์•˜๋‹ค. ๋Œ€์‹  ์ง‘๋‹จ ๋ฆฌ๋ถ€ํŒ…ยท๋„คํŠธ์›Œํฌ ๋งˆ๋น„๋ฅผ ์ผ์œผ์ผฐ๋‹ค. ๋Œ€ํ•™ยท๊ธฐ์—…ยท๊ณต๊ณต๊ธฐ๊ด€์—์„œ PC๊ฐ€ ์ˆ˜ ๋ถ„ ๊ฐ„๊ฒฉ์œผ๋กœ ๊บผ์กŒ๋‹ค ์ผœ์ง€๋ฉฐ ์—…๋ฌด๊ฐ€ ๋ฉˆ์ท„๊ณ , DDoS๋กœ MS ์‚ฌ์ดํŠธ ์ ‘์†์ด ๋งˆ๋น„๋๋‹ค.
  • ์›ฐ์น˜์•„(Welchia/NachI) ์†Œ๋™: 8์›” 18์ผ ๋“ฑ์žฅํ•œ ์ด ์›œ์€ Blaster๋ฅผ ์ง€์šฐ๊ณ  MS ํŒจ์น˜๋ฅผ ์Šค์Šค๋กœ ์„ค์น˜ํ•˜๋ ค ์‹œ๋„ํ–ˆ๋‹ค. ์˜๋„๋Š” '์„ '์ด์—ˆ์ง€๋งŒ ๋Œ€๊ทœ๋ชจ ์Šค์บ” ํŠธ๋ž˜ํ”ฝ์œผ๋กœ ๋„คํŠธ์›Œํฌ๋ฅผ ๋‹ค์‹œ ๋งˆ๋น„์‹œ์ผฐ๊ณ , 2004-01-01์— ์Šค์Šค๋กœ ์‚ญ์ œ๋๋‹ค โ€” '์„ ์˜์˜ ์›œ'๋„ ์žฌ์•™์ด ๋  ์ˆ˜ ์žˆ์Œ์„ ๋‚จ๊ฒผ๋‹ค.
  • ๊ฒฝ์ œ์  ํ”ผํ•ด: ์‚ฌํ›„ ์ž๋ฃŒ์—์„œ ๋‹ค์ˆ˜ ๊ธฐ๊ด€์ด ์ˆ˜์‹ญ์–ต ๋‹ฌ๋Ÿฌ ๊ทœ๋ชจ๋กœ ์ถ”์ •ํ–ˆ์œผ๋ฉฐ, ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ๋Š” ํ•ด๋‹น ๊ธฐ๊ฐ„ ๋Œ€์‘์— ๋ง‰๋Œ€ํ•œ ์ž์›์„ ํˆฌ์ž…ํ–ˆ๋‹ค.
  • ์ˆ˜์‚ฌ์™€ ์ฒ˜๋ฒŒ: ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ๋Š” 2003๋…„ 11์›” BlasterยทSobig ์ž‘์„ฑ์ž ์ œ๋ณด์— ๊ฐ 25๋งŒ ๋‹ฌ๋Ÿฌ(์ด 50๋งŒ ๋‹ฌ๋Ÿฌ) ํ˜„์ƒ๊ธˆ์„ ๊ฑธ์—ˆ๋‹ค. 2003-08-29 'B(teekids) ๋ณ€์ข…' ์ œ์ž‘์ž Jeffrey Lee Parson์ด ์ฒดํฌ๋๊ณ , ๋ฏธ ๋ฒ•๋ฌด๋ถ€ ์ง‘๊ณ„๋กœ ๊ทธ์˜ ๋ณ€์ข…์€ ์•ฝ 4๋งŒ 8์ฒœ ๋Œ€ ์ด์ƒ์„ ๊ฐ์—ผ์‹œ์ผฐ๋‹ค. 2005-01-28 ๊ทธ๋Š” 18๊ฐœ์›” ์ˆ˜๊ฐ + ๋ณดํ˜ธ๊ด€์ฐฐ 3๋…„ + ์‚ฌํšŒ๋ด‰์‚ฌ 100์‹œ๊ฐ„์„ ์„ ๊ณ ๋ฐ›์•˜๋‹ค(ํŒ์‚ฌ๋Š” "๊ธฐ์ˆ ์˜ ํ† ๋Œ€๋ฅผ ํ”๋“ค์—ˆ๋‹ค"๊ณ  ์งˆํƒ€). ๋‹จ, ์›์กฐ 'A' ๋ณ€์ข…์˜ ์ž‘์„ฑ์ž๋Š” ์ง€๊ธˆ๋„ ๋ฏธ์ƒ์ด๋‹ค.
  • ์‚ฐ์—…์  ์˜ํ–ฅ: BlasterยทWelchiaยทSasser๋กœ ์ด์–ด์ง„ 2003~2004๋…„์˜ ์—ฐ์‡„๋Š” โ‘  ์ž๋™ ์—…๋ฐ์ดํŠธ์˜ ๊ธฐ๋ณธํ™” โ‘ก ๊ฒฝ๊ณ„ ๋ฐฉํ™”๋ฒฝ์˜ ๋‚ด๋ถ€ ๊ตฌ๊ฐ„(segment) ์ ์šฉ โ‘ข 'ํŒจ์น˜ ๊ด€๋ฆฌ' ํ”„๋กœ์„ธ์Šค์˜ ์ œ๋„ํ™”๋ฅผ ์•ž๋‹น๊ฒผ๋‹ค. ์˜ค๋Š˜๋‚  ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๋ณด์•ˆ์˜ ๊ธฐ๋ณธ๊ฐ’ ์ƒ๋‹น์ˆ˜๊ฐ€ ์ด ์—ฌ๋ฆ„์˜ ํ›„์œ ์ฆ์ด๋‹ค.

5. ๊ต์œก์šฉ PoC 4์ข… โ€” ์›๋ฆฌ๋งŒ ์žฌํ˜„ํ•˜๋Š” ๋ชจ์˜ ์ฝ”๋“œ

์•„๋ž˜ ์Šค๋‹ˆํŽซ์€ ๊ณต๊ฐœ๋œ ๋ถ„์„์„ ๋ฐ”ํƒ•์œผ๋กœ ํ•œ ์žฌ๊ตฌ์„ฑ์ด๋ฉฐ, ๊ฐ€์ƒ์˜ ๋กœ์ปฌ ์‹ค์Šต ํ™˜๊ฒฝ์—์„œ๋งŒ ๋™์ž‘ํ•˜๋„๋ก ๋งŒ๋“  ๊ต์œก์šฉ ๋ชจ์˜ ์ฝ”๋“œ๋‹ค. ์‹ค์ œ ์ต์Šคํ”Œ๋กœ์ž‡ ๋ฐ”์ดํŠธ, ์‹ค์ œ ์…ธ์ฝ”๋“œ, ์‹ค์ œ ์Šค์บ”/ํ”Œ๋Ÿฌ๋“œ ์ฝ”๋“œ๋Š” ์—†๋‹ค. ๊ฐ ์Šค๋‹ˆํŽซ์˜ ๋ชฉ์ ์€ "๊ทธ ๊ตฌ์กฐ๊ฐ€ ๋ฌด์—‡์„ ํ•˜๋Š”๊ฐ€"๋ฅผ ๋ˆˆ์œผ๋กœ ํ™•์ธํ•˜๋Š” ๊ฒƒ๋ฟ์ด๋‹ค.

PoC 1 โ€” '๊ธธ์ด ๊ฒ€์‚ฌ ์—†๋Š” ๋ณต์‚ฌ'์˜ ์›๋ฆฌ(์ทจ์•ฝ ํŒŒ์„œ ๋ชจ์˜). ์‹ค์ œ ์ฝ”๋“œ์—๋Š” ์—†๋˜ ๊ธธ์ด ๊ฒ€์ฆ ํ•œ ์ค„์ด ๋ฌด์—‡์„ ๋ง‰๋Š”์ง€ ๋ณด์—ฌ์ค€๋‹ค.

# PoC 1: DCOM/RPC 'ํ™œ์„ฑํ™” ์š”์ฒญ' ํŒŒ์„œ๋ฅผ ํ‰๋‚ด ๋‚ธ ๋ชจ์˜ ์ฝ”๋“œ โ€” ๋ฒ„ํผ ๊ธธ์ด ๊ฒ€์‚ฌ์˜ ์—ญํ• 
# ์‹ค์ œ ์ต์Šคํ”Œ๋กœ์ž‡/์…ธ์ฝ”๋“œ/๋„คํŠธ์›Œํฌ ์ „์†ก์€ ์—†๋‹ค. ๋กœ์ปฌ์—์„œ print๋งŒ ํ•œ๋‹ค.
FIXED_BUF_SIZE = 32          # ์‹ค์ œ rpcrt4.dll์˜ ๊ณ ์ • ๋ฒ„ํผ์— ๋Œ€์‘ํ•˜๋Š” ์ƒ์ง•๊ฐ’

def vulnerable_parser(field_len, field_data):
    """์„œ๋ฒ„๊ฐ€ ์š”์ฒญ ํ•„๋“œ๋ฅผ '๊ทธ๋Œ€๋กœ' ๊ณ ์ • ๋ฒ„ํผ์— ๋ณต์‚ฌํ•˜๋Š” ์ทจ์•ฝํ•œ ๋ชจ์Šต."""
    buf = bytearray(FIXED_BUF_SIZE)
    if field_len > FIXED_BUF_SIZE:     # โ† ์‹ค์ œ ์ทจ์•ฝ ์ฝ”๋“œ์—๋Š” ์ด ๊ฒ€์‚ฌ๊ฐ€ '์—†์—ˆ๋‹ค'
        overflow = field_len - FIXED_BUF_SIZE
        print(f"[!] ๋ฒ„ํผ {FIXED_BUF_SIZE}B๋ฅผ {overflow}B ์ดˆ๊ณผ โ†’ "
              f"'์ €์žฅ EBPยท๋ฐ˜ํ™˜ ์ฃผ์†Œ' ์˜์—ญ์„ ๋ฎ๋Š”๋‹ค(์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ)")
        return False
    buf[:field_len] = field_data[:field_len]
    print("[+] ์š”์ฒญ ์ •์ƒ ์ฒ˜๋ฆฌ")
    return True

if __name__ == "__main__":
    vulnerable_parser(20, b"A" * 20)              # ์ •์ƒ ์š”์ฒญ
    vulnerable_parser(96, b"A" * 96)              # ์กฐ์ž‘๋œ '๊ธด' ์š”์ฒญ(๋ชจ์˜)

PoC 2 โ€” ๋ฌด์ž‘์œ„ IP ์Šค์บ” ์ฆ์‹ ๋กœ์ง(๋ฉ”๋ชจ๋ฆฌ ์‹œ๋ฎฌ๋ ˆ์ด์…˜). ์‹ค์ œ ์†Œ์ผ“์„ ์—ด์ง€ ์•Š๊ณ , ๊ฐ€์งœ ํ˜ธ์ŠคํŠธ ์‚ฌ์ „ ์•ˆ์—์„œ๋งŒ '์ „ํŒŒ ๊ณก์„ '์„ ์žฌํ˜„ํ•œ๋‹ค.

# PoC 2: ๋ฌด์ž‘์œ„ IP ์Šค์บ” โ†’ '์ทจ์•ฝ ํฌํŠธ 135' ํ”„๋กœ๋ธŒ ์ฆ์‹์„ ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์—์„œ๋งŒ ํ‰๋‚ด ๋‚ธ๋‹ค.
# ์‹ค์ œ ์†Œ์ผ“ ์ƒ์„ฑ / ์‹ค์ œ ์Šค์บ” / ์‹ค์ œ ์ต์Šคํ”Œ๋กœ์ž‡ ์ „์†ก์€ ์ „ํ˜€ ์—†๋‹ค.
import random

def simulate_spread(population=5000, vulnerable_ratio=0.35, seeds=3, generations=6):
    random.seed(135)  # TCP 135 ๊ธฐ๋…(์žฌํ˜„์„ฑ์šฉ ์‹œ๋“œ)
    hosts = [(random.random() < vulnerable_ratio) for _ in range(population)]
    infected = set(range(seeds))                      # ์ตœ์ดˆ ๊ฐ์—ผ 3๋Œ€
    for g in range(1, generations + 1):
        new = set()
        for _ in infected:                            # ๊ฐ์—ผ ํ˜ธ์ŠคํŠธ๋งˆ๋‹ค ์Šค์บ”
            for _ in range(200):                      # 1์„ธ๋Œ€๋‹น ์Šค์บ” ์‹œ๋„ 200ํšŒ(๋ชจ์˜)
                t = random.randrange(population)      # ๋ฌด์ž‘์œ„ IP
                if t not in infected and hosts[t]:    # ์ทจ์•ฝ ํฌํŠธ(135)๊ฐ€ ์—ด๋ ค ์žˆ์œผ๋ฉด ๊ฐ์—ผ
                    new.add(t)
        infected |= new
        print(f"์„ธ๋Œ€ {g}: ์‹ ๊ทœ ๊ฐ์—ผ {len(new):4d} โ†’ ๋ˆ„์  {len(infected):5d} / ๋ชจ์ง‘๋‹จ {population}")
    print("์ตœ์ข… ๊ฐ์—ผ๋ฅ : %.1f%%  (์‚ฌ์šฉ์ž ํด๋ฆญ ์—†์ด '์—ฐ๊ฒฐ'๋งŒ์œผ๋กœ ํ™•์‚ฐ๋จ์„ ๋ณด์—ฌ์คŒ)"
          % (100 * len(infected) / population))

if __name__ == "__main__":
    simulate_spread()

PoC 3 โ€” ๋ฎคํ…์Šค 'BILLY' + ์ž๊ฐ€ ๋ณต์‚ฌ + 'Run' ํ‚ค ์ง€์†์„ฑ. ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋‚˜ ์‹œ์Šคํ…œ ๋ณ€๊ฒฝ ์—†์ด /tmp/lab์—์„œ๋งŒ ์žฌํ˜„ํ•œ๋‹ค.

# PoC 3: ๋ฎคํ…์Šค 'BILLY' + ์ž๊ฐ€ ๋ณต์‚ฌ + Run ํ‚ค ๋“ฑ๋ก(์ง€์†์„ฑ)์„ ๋กœ์ปฌ ์‹ค์Šต ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ๋งŒ ์žฌํ˜„
# ์‹œ์Šคํ…œ ํŒŒ์ผ/์‹ค์ œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋Š” ์ ˆ๋Œ€ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.
import os, shutil

LAB   = "/tmp/lab"
MUTEX = os.path.join(LAB, "BILLY.mutex")                    # ์‹ค์ œ๋กœ๋Š” CreateMutex("BILLY")
RUNKEY= os.path.join(LAB, "windows auto update.reg.txt")    # Run ํ‚ค ๋“ฑ๋ก์„ ํ‰๋‚ด ๋‚ธ ํŒŒ์ผ

def persist_demo():
    os.makedirs(LAB, exist_ok=True)
    if os.path.exists(MUTEX):
        print("[=] ๋ฎคํ…์Šค ์กด์žฌ โ†’ ์ด๋ฏธ ์‹คํ–‰ ์ค‘์ด๋ผ ํŒ๋‹จ, ์ค‘๋ณต ์‹คํ–‰ ๋ฐฉ์ง€(์žฌ๊ฐ์—ผ ํšŒํ”ผ)")
        return
    open(MUTEX, "w").write("hmm\n")
    try:                                                    # ์ž๊ฐ€ ๋ณต์‚ฌ(๋ชจ์˜)
        shutil.copyfile(__file__, os.path.join(LAB, "msblast.mock.py"))
    except NameError:
        open(os.path.join(LAB, "msblast.mock.py"), "w").write("# self-copy demo\n")
    open(RUNKEY, "w").write(
        r'Run: "windows auto update" = %Windir%\System32\msblast.exe')
    print("[+] ์ตœ์ดˆ ์‹คํ–‰: ๋ฎคํ…์Šค ์ƒ์„ฑ + System32๋กœ ์ž๊ฐ€ ๋ณต์‚ฌ + Run ํ‚ค ๋“ฑ๋ก(๋ชจ์˜)")

if __name__ == "__main__":
    persist_demo()

PoC 4 โ€” ๋ฐฉ์–ด ๊ฒ€์ฆ(ํƒ์ง€ยท์กฐ๊ฑด ํ™•์ธยท๋Œ€์‘). '๊ฐ์—ผ ํ”์  ์ฐพ๊ธฐ'์™€ 'DDoS ํŠธ๋ฆฌ๊ฑฐ ์กฐ๊ฑด ํ™•์ธ'์„ ํ•œ ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ฌถ๋Š”๋‹ค.

# PoC 4: ๋ฐฉ์–ด โ€” ์•„ํ‹ฐํŒฉํŠธ ํƒ์ง€ + DDoS ํŠธ๋ฆฌ๊ฑฐ ์กฐ๊ฑด ๋กœ๊น… + ์…ง๋‹ค์šด ์นด์šดํŠธ๋‹ค์šด ๋Œ€์‘ ์•ˆ๋‚ด
import os, datetime

ARTIFACTS = ["/tmp/lab/msblast.mock.py", "/tmp/lab/windows auto update.reg.txt"]

def scan_artifacts():
    hits = [p for p in ARTIFACTS if os.path.exists(p)]
    print("[ํƒ์ง€]", ("์•„ํ‹ฐํŒฉํŠธ ๋ฐœ๊ฒฌ: " + ", ".join(hits)) if hits else "๊นจ๋—ํ•จ")
    return hits

def ddos_trigger_active(now=None):
    now = now or datetime.date.today()
    # Blaster ์กฐ๊ฑด: 8/16 ์ดํ›„ ~ 12/31 ์ด์ „, ๋˜๋Š” ๋งค์›” 15์ผ ์ดํ›„
    active = (datetime.date(now.year, 8, 16) <= now <= datetime.date(now.year, 12, 31)) \
             or (now.day > 15)
    print("[DDoS ํŠธ๋ฆฌ๊ฑฐ ์กฐ๊ฑด]", "ํ™œ์„ฑ โ€” ํ”Œ๋Ÿฌ๋“œ ์‹œ์ž‘ ์กฐ๊ฑด ์ถฉ์กฑ(๋ชจ์˜)" if active else "๋น„ํ™œ์„ฑ")
    return active

if __name__ == "__main__":
    scan_artifacts()
    ddos_trigger_active()
    print("[๋Œ€์‘] ์…ง๋‹ค์šด ์นด์šดํŠธ๋‹ค์šด์ด ๋œจ๋ฉด ์ฆ‰์‹œ 'shutdown /a' ๋กœ ์ค‘๋‹จ โ†’ "
          "๋„คํŠธ์›Œํฌ ๋ถ„๋ฆฌ โ†’ 135/139/445 ์ฐจ๋‹จ โ†’ MS03-026/MS03-039 ํŒจ์น˜")

6. ๋ฐฉ์–ด ๋ฐฉ๋ฒ•/๊ตํ›ˆ โ€” '์—ฐ๊ฒฐ๋œ ๋ฏธํŒจ์น˜ ํ˜ธ์ŠคํŠธ'๊ฐ€ ๊ณง ๊ณต๊ฒฉ๋ฉด์ด๋‹ค

  • ํŒจ์น˜๊ฐ€ ๊ณง ๋ฐฉ์–ด๋‹ค: Blaster๋Š” ํŒจ์น˜๊ฐ€ ์กด์žฌํ–ˆ๋Š”๋ฐ๋„ ํผ์กŒ๋‹ค. MS03-026(2003-07-16)์„ ์ ์šฉํ–ˆ๋‹ค๋ฉด ๊ฐ์—ผ๋˜์ง€ ์•Š์•˜๋‹ค. ์ž๋™ ์—…๋ฐ์ดํŠธ ์ผœ๊ธฐ + ํŒจ์น˜ ์ ์šฉ๋ฅ  ์ธก์ •์ด ๊ฐ€์žฅ ๊ทผ๋ณธ์ ์ธ ๋Œ€์‘์ด๋‹ค.
  • ๊ฒฝ๊ณ„ ์ฐจ๋‹จ: TCP 135/139/445/593์„ ์ธํ„ฐ๋„ท ๊ฒฝ๊ณ„์—์„œ ์ฐจ๋‹จํ•œ๋‹ค(CERT/CC๊ฐ€ 2003-07-17๋ถ€ํ„ฐ ๊ถŒ๊ณ ). 2003๋…„์—” ์ด ํ•œ ์ค„์ด ํ™•์‚ฐ์„ ํฌ๊ฒŒ ์ค„์˜€๋‹ค.
  • ๋‚ด๋ถ€๋„ ์‹ ๋ขฐํ•˜์ง€ ๋ง ๊ฒƒ(์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜): Blaster๋Š” ๋‚ด๋ถ€๋ง์—์„œ ๋” ๋นจ๋ฆฌ ํผ์กŒ๋‹ค โ€” ๊ฒฝ๊ณ„ ๋ฐฉํ™”๋ฒฝ์€ ๋‚ด๋ถ€ ๋Œ€ ๋‚ด๋ถ€ 135๋ฅผ ๋ง‰์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํ˜ธ์ŠคํŠธ ๋ฐฉํ™”๋ฒฝ ๊ธฐ๋ณธ ์ฐจ๋‹จ(์ธ๋ฐ”์šด๋“œ)๊ณผ ๋ง ๋ถ„ํ• ์ด ํ•„์ˆ˜๋‹ค. '๊ฒฝ๊ณ„ ๋ฐฉ์–ด'๋ผ๋Š” ๊ฐœ๋… ์ž์ฒด๋ฅผ ํ”๋“  ์‚ฌ๊ฑด์ด์—ˆ๋‹ค.
  • ํ–‰์œ„ ๊ธฐ๋ฐ˜ ํƒ์ง€: โ‘  ํ•œ ํ˜ธ์ŠคํŠธ๊ฐ€ ์งง์€ ์‹œ๊ฐ„์— ๋‹ค์ˆ˜ IP์˜ 135๋กœ ์—ฐ๊ฒฐ ์‹œ๋„ โ‘ก System32\msblast.exeยทRun ํ‚ค "windows auto update" ์•„ํ‹ฐํŒฉํŠธ โ‘ข RPCSS ํฌ๋ž˜์‹œ์™€ ์…ง๋‹ค์šด ์นด์šดํŠธ๋‹ค์šด ๋ฐ˜๋ณต โ‘ฃ ์•„์›ƒ๋ฐ”์šด๋“œ TCP 4444 โ€” ์ด ๋„ค ๊ฐ€์ง€๋Š” ๊ฐ•๋ ฅํ•œ ํƒ์ง€ ์‹ ํ˜ธ๋‹ค. ํ”„๋กœ์„ธ์Šค ์ด๋ฆ„์ด ์•„๋‹ˆ๋ผ ํ–‰์œ„๋ฅผ ๋ณธ๋‹ค(PoC 4).
  • ์นจํ•ด ๋Œ€์‘(IR): ์…ง๋‹ค์šด ์นด์šดํŠธ๋‹ค์šด์ด ๋œจ๋ฉด shutdown /a๋กœ ์ฆ‰์‹œ ์ค‘๋‹จํ•˜๊ณ (Windows), ๊ณง๋ฐ”๋กœ ๋„คํŠธ์›Œํฌ์—์„œ ๋ถ„๋ฆฌํ•œ ๋’ค ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ์˜ MSBlast ์ œ๊ฑฐ ๋„๊ตฌ(2004-01-13 ๋ฐฐํฌ)๋กœ ์ฒญ์†Œํ•˜๊ณ  ํŒจ์น˜๋ฅผ ์ ์šฉํ•œ๋‹ค. '์žฌ๋ถ€ํŒ… ๋ฐ˜๋ณต = ํ•˜๋“œ์›จ์–ด ๊ณ ์žฅ'์œผ๋กœ ์˜ค์ง„ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ฒซ ๋‹จ๊ณ„๋‹ค.
  • ์›ฐ์น˜์•„์˜ ๊ตํ›ˆ: ์„ ์˜์˜ ์ž๋™ ์›œ๋„ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๋ฉด ์žฌ์•™์ด๋‹ค. ์ž๋™ํ™”๋œ '์น˜๋ฃŒ'๋Š” ํ†ต์ œ๋œ ๊ด€๋ฆฌ ๋„๊ตฌ๋กœ๋งŒ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค.
  • ์ดํ‰: Blaster๋Š” '์‚ฌ์šฉ์ž ์‹ค์ˆ˜'๋ฅผ ๋จน๊ณ  ์‚ฌ๋Š” ๊ณต๊ฒฉ๊ณผ '์„ค์ •ยทํŒจ์น˜ ์‹ค์ˆ˜'๋ฅผ ๋จน๊ณ  ์‚ฌ๋Š” ๊ณต๊ฒฉ์ด ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒƒ์„ ๋ช…ํ™•ํžˆ ๋ณด์—ฌ์คฌ๋‹ค. ํด๋ฆญ์„ ์กฐ์‹ฌํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ๋ง‰์„ ์ˆ˜ ์—†๊ณ , ํŒจ์น˜ยท์ฐจ๋‹จยท๋ถ„ํ• ยทํƒ์ง€๋ผ๋Š” ์‹œ์Šคํ…œ์  ๊ทœ์œจ์ด ํ•„์š”ํ•˜๋‹ค. ๊ทธ ๊ทœ์œจ์ด ์˜ค๋Š˜๋‚ ์˜ ๊ธฐ๋ณธ๊ฐ’์ด ๋œ ๊ฒƒ์€, ์ด ์—ฌ๋ฆ„์˜ ๊ฐ’๋น„์‹ผ ์ฒญ๊ตฌ์„œ ๋•๋ถ„์ด๋‹ค.

7. ์ถœ์ฒ˜

  • CERT/CC โ€” CERT Advisory CA-2003-20: W32/Blaster worm (2003-08-14, ๊ฐ์—ผ ์ถ”์ดยทํฌํŠธ ์ฐจ๋‹จ ๊ถŒ๊ณ ยท๋ณ€์ข…) โ€” sei.cmu.edu (CERT 2003 Advisories)
  • Microsoft โ€” MS03-026: Buffer Overrun In RPC Interface Could Allow Code Execution (823980) (2003-07-16) โ€” learn.microsoft.com/ms03-026
  • Microsoft โ€” MS03-039 (RPCSS ์ทจ์•ฝ์  ๋ฒ”์œ„ ํ™•๋Œ€) โ€” learn.microsoft.com/ms03-039
  • NIST NVD โ€” CVE-2003-0352 (DCOM RPC ๋ฒ„ํผ ์˜ค๋ฒ„๋Ÿฐ) โ€” nvd.nist.gov/CVE-2003-0352
  • Microsoft โ€” Worm:Win32/Msblast (์•„ํ‹ฐํŒฉํŠธยทํŽ˜์ด๋กœ๋“œยทDDoS ํŠธ๋ฆฌ๊ฑฐ ์กฐ๊ฑด) โ€” microsoft.com/wdsi
  • U.S. DOJ โ€” Minnesota Man Sentenced to 18 Months in Prison for Creating and Unleashing a Variant of the MS Blaster Computer Worm (2005-01-28) โ€” justice.gov
  • Wikipedia โ€” Blaster (computer worm) (ํƒ€์ž„๋ผ์ธยท๋ณ„์นญยท๋ฉ”์‹œ์ง€ยทDDoS ๋Œ€์ƒยทWelchia ๊ฒฝ์œ„) โ€” en.wikipedia.org/wiki/Blaster_(computer_worm)

โ€ป ๋ณธ๋ฌธ์˜ PoC ์ฝ”๋“œ๋Š” ๊ตฌ์กฐ ์ดํ•ด ๋ชฉ์ ์˜ ๊ต์œก์šฉ ๋ชจ์˜ ์ฝ”๋“œ์ด๋ฉฐ, ์‹ค์ œ ์ต์Šคํ”Œ๋กœ์ž‡ ๋ฐ”์ดํŠธยท์…ธ์ฝ”๋“œยท๋„คํŠธ์›Œํฌ ์Šค์บ”ยทDDoS ์ฝ”๋“œ๋Š” ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์‹ค์Šต์€ ์ธํ„ฐ๋„ท๊ณผ ๋ถ„๋ฆฌ๋œ ๊ฒฉ๋ฆฌ ๋žฉ(๊ฐ€์ƒ ๋””๋ ‰ํ„ฐ๋ฆฌ /tmp/lab)์„ ์ „์ œ๋กœ ํ•˜๋ฉฐ, ์‹ค์ œ ์‹œ์Šคํ…œ์ด๋‚˜ ํƒ€์ธ์˜ ๋„คํŠธ์›Œํฌ๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•œ ์‹คํ–‰์€ ๋ถˆ๋ฒ•์ž…๋‹ˆ๋‹ค.

ํ•จ๊ป˜ ์ฝ๊ธฐ: ๐ŸŸฅ Code Red (2001) โ€” 'IIS ์›น์„œ๋ฒ„'๋ฅผ ์‚ผํ‚จ ํŒŒ์ผ๋ฆฌ์Šค ๋ฉ”๋ชจ๋ฆฌ ์›œ ยท ๐ŸŒ SQL Slammer (2003) โ€” 376๋ฐ”์ดํŠธ ํŒจํ‚ท์œผ๋กœ 10๋ถ„ ๋งŒ์— ์ „ ์„ธ๊ณ„๋ฅผ ๋ฉˆ์ถ˜ ๊ฐ™์€ ํ•ด์˜ ์›œ ยท ๐Ÿชฑ Conficker (2008) โ€” Blaster์˜ ๊ณ„๋ณด๋ฅผ ์ด์–ด '์ž๊ฐ€ ๋ฐฉ์–ดํ˜• ์›œ'์˜ ์ •์ ์„ ์ฐ์€ ์‚ฌ๊ฑด ยท ๐Ÿ’€ WannaCry (2017) โ€” ๋ฏธํŒจ์น˜ ์ทจ์•ฝ์ (EternalBlue)์ด ๋‹ค์‹œ ์„ธ์ƒ์„ ๋ฉˆ์ถ”๊ฒŒ ํ•œ ์›œ ยท ๐Ÿ› Morris Worm (1988) โ€” ์ตœ์ดˆ์˜ ์ž๊ธฐ๋ณต์ œ ์›œ์—์„œ ์‹œ์ž‘๋œ ๊ณ„๋ณด

๋ชฉ๋ก์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ