- ์
์ฑ์ฝ๋๋ช
: 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๋ '์ฒจ๋ถํ์ผ์ ์ฌ๋ ์ค์'์กฐ์ฐจ ํ์ ์์๋ค๋ ์ ์์ ํ ๋จ๊ณ ๋ ๋์๊ฐ๋ค. ์กฐ๊ฑด์ ๋จ ํ๋ โ ํจ์น๋์ง ์์ ์ฑ ๋คํธ์ํฌ์ ์ฐ๊ฒฐ๋์ด ์์ ๊ฒ.
- 2003-07-16: ๋ง์ดํฌ๋ก์ํํธ๊ฐ MS03-026 ํจ์น๋ฅผ ๋ฐฐํฌ. DCOM RPC์ ๋ฒํผ ์ค๋ฒ๋ฐ์ ๊ณ ์น๋ ๊ธด๊ธ ํจ์น์์ง๋ง, ๋น์ '์๋ ์ ๋ฐ์ดํธ'๋ ๊ธฐ๋ณธ๊ฐ์ด ์๋๋ผ ์๋์ผ๋ก ๋๋ฌ์ผ ํ๋ ํญ๋ชฉ์ด์๋ค.
- 2003-07-25: ์ค๊ตญ ๋ณด์๊ทธ๋ฃน xFocus๊ฐ ํด๋น RPC ๋ฒ๊ทธ์ ์ต์คํ๋ก์ ๋ฐฉ๋ฒ์ ๊ณต๊ฐ. "์ทจ์ฝํ๋ค"๋ ์ฌ์ค์ด "์ด๋ป๊ฒ ๋ซ๋๊ฐ"๋ก ๋ฐ๋์๋ค.
- 2003-08-11: Blaster 'A' ๋ณ์ข ์ด ์ธํฐ๋ท์ ๋ํ๋จ. 8์ 13์ผ ๊ฐ์ผ์ด ์ ์ ์ ๋ฌํ๋ค.
- 2003-08-18: ๊ฐ์ ๊ฒฐํจ์ ์ฐ์ง๋ง Blaster๋ฅผ ์ ๊ฑฐํ๊ณ ์๋๋ฅผ ํจ์นํ๋ ค ๋๋ ์ Welchia(NachI)๊น์ง ๋ฑ์ฅ โ '์ฐฉํ ์'์ด๋ผ๋ ์ญ์ค์ ๋ณ๋ช ์ ์ป์์ผ๋, ๊ทธ ์์ฒด๋ก ๋คํธ์ํฌ ํญ์ฃผ์ ๋ฆฌ๋ถํ ์ ์ ๋ฐํ๋ค.
์ ์ ๋ช ํ๊ฐ: Blaster๋ '์์ ์ธ๋ ๊ต์ฒด'๋ฅผ ์๋ฆฐ ์ฌ๊ฑด์ด์๋ค. 2001๋ Code Red๊ฐ IIS ์น์๋ฒ๋ฅผ ๋ ธ๋ ธ๋ค๋ฉด, Blaster๋ ๋ชจ๋ ์๋์ฐ ํด๋ผ์ด์ธํธ์ ๊ธฐ๋ณธ ์๋น์ค(RPC)๋ฅผ ๋ ธ๋ ธ๋ค. ์ฌ์ฉ์ PC๊ฐ ๊ณง ๋ฌด๊ธฐ์๊ณ , ๊ฐ์ผ๋๋ฉด ์๋ฌด๊ฒ๋ ์ ํด๋ 60์ด ๋ค ์ฌ๋ถํ ๋๋ค. ์ฌ๊ธฐ์ ๋ง์ดํฌ๋ก์ํํธ๋ฅผ ํฅํ DDoS๋ผ๋ ์์ง์ ํ์ด๋ก๋, ๊ทธ๋ฆฌ๊ณ 'msblast.exe'๋ผ๋ ์ด๋ฆ์ด ์ ์ธ๊ณ ํฌํ๋ฐ์คํฌ์ ์ ํ์ด๊ฐ ๋๋ฉด์ โ Blaster๋ ํจ์น ๊ด๋ฆฌ(patch management)๋ฅผ IT์ 1์์ ์์ ๋ก ๋์ด์ฌ๋ฆฐ ์ฌ๊ฑด์ด ๋๋ค.
2. ๊ฐ์ผยท์ ํ ๊ฒฝ๋ก โ ๋ฉ์ผ๋, ํด๋ฆญ๋ ์๋ค. ํฌํธ๋ง ์ด๋ ค ์์ผ๋ฉด ๋
Blaster์ ์ ํ๋ '์คํธ ๋ฉ์ผ โ ์ฒจ๋ถ ์คํ'์ด๋ผ๋ ์ฌ๋ ์ค์ฌ ๊ฒฝ๋ก๋ฅผ ์์ ํ ๊ฑด๋๋ด๋ค. ์์ํ๊ฒ ๋คํธ์ํฌ ์คํ๋ง์ผ๋ก ํผ์ง๋ค.
- 1๋จ๊ณ โ ๋ฌด์์ IP ์ค์บ: ๊ฐ์ผ๋ ํธ์คํธ๋ โ ๊ฐ์ (Bํด๋์ค) ์๋ธ๋ท์ ๋จผ์ ํ๊ณ โก ์ ์ธ๊ณ ๋ฌด์์ IP๋ฅผ ์์ฑํด TCP 135 ์ฐ๊ฒฐ์ ์๋ํ๋ค. ๋ด๋ถ๋ง์์๋ ๋ฐฉํ๋ฒฝ์ด ๋ด๋ถ ๋ ๋ด๋ถ 135๋ฅผ ๋ง์ง ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์, ์ผ๋จ ํ๋๊ฐ ๋ซ๋ฆฌ๋ฉด ๊ทธ๋ฌผ์ฒ๋ผ ๋ฒ์ก๋ค.
- 2๋จ๊ณ โ ์ต์คํ๋ก์ ์ ์ก: ์ทจ์ฝํ DCOM RPC ์ธํฐํ์ด์ค(ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ๋ณด๋ด๋ ๊ฐ์ฒด ํ์ฑํ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์ฝ๋)์ ๋น์ ์์ ์ผ๋ก ๊ธด ํ๋๋ฅผ ๋ด์ ์์ฒญ์ ๋ณด๋ธ๋ค. ๊ฒ์ฆ ์์ด ๋ณต์ฌ๋๋ฉด์ ์คํ ๋ฒํผ๋ฅผ ๋์ณ ๋ฐํ ์ฃผ์๋ฅผ ๋ฎ๊ณ , ์ด์ด ์ ธ์ฝ๋๊ฐ ์คํ๋๋ค.
- 3๋จ๊ณ โ ๋ค์ด๋ก๋(์
ธ์ฝ๋): ๋์ณ ํ๋ฅธ ์ฝ๋๋ ํผํด์ ์์คํ
์ TCP 4444์ ๋ฐฑ๋์ด ์
ธ์ ์ฐ๋ค. ๊ฐ์ผ์ ์ผ์ผํจ ์ชฝ์ ๊ทธ ํฌํธ๋ก ์ ์ํด
TFTP์ ์ ์ฌํ ์์ฒด ํ๋กํ ์ฝ๋ก
msblast.exe๋ณธ์ฒด๋ฅผ ์ ์กยท์คํ์ํจ๋ค. ์ฆ ์์ '์ต์คํ๋ก์ ๋ถ๋ถ'๊ณผ '์ ํ ๋ถ๋ถ'์ด ๋ถ๋ฆฌ๋ผ ์๋ค. - 4๋จ๊ณ โ ๋ก์ปฌ ์ง์์ฑ: ๋ณธ์ฒด๋
System32\msblast.exe๋ก ๋ณต์ฌ๋๊ณ , ๋ ์ง์คํธ๋ฆฌRunํค์"windows auto update"๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ฑ๋ก๋ผ ์ฌ๋ถํ ๋๋ง๋ค ์๋ ์คํ๋๋ค. ๋ฎคํ ์คBILLY๊ฐ ์์ผ๋ฉด ์ค๋ณต ์คํ์ ๊ฑด๋๋ด๋ค. - 5๋จ๊ณ โ ๋ถ์์ฉ(์ฆ์): ์ค๋ฒํ๋ก ๊ณผ์ ์์ RPC ์๋น์ค(RPCSS)๊ฐ ๋ถ๊ดดํ๊ณ , ์๋์ฐ๊ฐ "RPC ์๋น์ค๊ฐ ์๊ธฐ์น ์๊ฒ ์ข ๋ฃ๋์์ต๋๋ค"๋ผ๋ ์ ง๋ค์ด ์นด์ดํธ๋ค์ด(๋ณดํต 60์ด)์ ๋์ด ๋ค ์ค์ค๋ก ์ฌ๋ถํ ํ๋ค. ๋ง์ ์ฌ์ฉ์๊ฐ ์ ์ฑ์ฝ๋ ๊ฐ์ผ์ด ์๋๋ผ '์๋์ฐ ๊ณ ์ฅ'์ผ๋ก ์ค์ธํ๋ ์ด์ ๋ค.
ํน๊ธฐํ ์ : Windows Server 2003์ ํ์ฐ๋์ง ์์๋ค. /GS ์ปดํ์ผ ์ต์
์ผ๋ก ์คํ ์ฟ ํค(์นด๋๋ฆฌ)๊ฐ ์ผ์ ธ ์์ด ์ค๋ฒํ๋ก๋ฅผ ๊ฐ์งํ๊ณ RPCSS๋ฅผ ์ข
๋ฃ์์ผฐ๊ธฐ ๋๋ฌธ์ด๋ค โ '์ปดํ์ผ ํ ์ค'์ด ์์ ๋ง์ ์ฌ๋ก๋ค.
/tmp/lab)์ ์ ์ ๋ก '๋์ ์๋ฆฌ'๋ง ์ฌํํ๋
๋ชจ์ ์ฝ๋์
๋๋ค. ์ค์ ์ต์คํ๋ก์ยท์ค์ ์
ธ์ฝ๋ยท์ค์ ๋คํธ์ํฌ ์ค์บยท์ค์ DDoS๋ ํฌํจํ์ง ์์ต๋๋ค.
์ค์ ์์คํ
์ด๋ ํ์ธ์ ๋คํธ์ํฌ๋ฅผ ๋์์ผ๋ก ํ ์ทจ์ฝ์ ์
์ฉยท์๋น์ค ๊ฑฐ๋ถ ๊ณต๊ฒฉ์ ๊ทธ ์์ฒด๋ก ๋ถ๋ฒ์
๋๋ค.
3. ๋์ ์๋ฆฌ ์์ธ ๋ถ์ โ '๊ธธ์ด ๊ฒ์ฌ ์๋ ๋ณต์ฌ' ํ๋์์ ์์๋ ์ฐ์
Blaster์ ์ฌ์ฅ์ ํ๋ คํ์ง ์๋ค. ์คํ ๋ฒํผ ์ค๋ฒํ๋ก๋ผ๋, ์ง๊ธ๋ ๊ต๊ณผ์ ์ฒซ ์ฅ์ ๋์ค๋ ์ทจ์ฝ์ ํ๋๋ค. ์ค์ํ ๊ฑด ๊ทธ ํ๋๊ฐ ์๊ฐ ์ฆ์ยท์ง์์ฑยทDDoS๋ก ์ผ๋ง๋ ์์ฐ์ค๋ฝ๊ฒ ์ด์ด์ง๋๊ฐ๋ค.
- ์ทจ์ฝ์ ์ ๋ณธ์ง: DCOM์ด ํด๋ผ์ด์ธํธ์ ๊ฐ์ฒด ํ์ฑํ ์์ฒญ์ ์ฒ๋ฆฌํ ๋, ์์ฒญ์ ๋ด๊ธด ์ฌ์ฉ์ ์ ๊ณต ๊ธธ์ด๋ฅผ ๊ฒ์ฆํ์ง ์๊ณ ๊ณ ์ ํฌ๊ธฐ ์คํ ๋ฒํผ๋ก ๋ณต์ฌํ๋ค. ๊ธธ์ด๋ฅผ ๋๊ฒจ ๋ณด๋ด๋ฉด ๋ฒํผ๋ฅผ ๋์ณ ์ ์ฅ๋ ํ๋ ์ ํฌ์ธํฐ์ ๋ฐํ ์ฃผ์๊ฐ ๋ฎ์ธ๋ค.
- ์ต์คํ๋ก์์ ํ์ค ๊ตฌ์กฐ:
[๋ฒํผ ์ฑ์ฐ๊ธฐ] + [์ ์ฅ EBP] + [๋ฐํ ์ฃผ์ = 'jmp esp' ๊ฐ์ ฏ ์ฃผ์] + [์ ธ์ฝ๋]. ์๋น์ค๊ฐretํ๋ ์๊ฐ ๊ฐ์ ฏ์ผ๋ก ์ ํ โ ๋ค์ ์คํ์ผ๋ก ์ ํ โ ์ ธ์ฝ๋ ์คํ์ผ๋ก ์ด์ด์ง๋ค. 2003๋ ์๋ ASLR์ด ์ฌ์ค์ ์์๊ธฐ์,jmp esp๋ช ๋ น์ด ์๋ DLL ์ฃผ์๋ฅผ ๋ฏธ๋ฆฌ ๊ณ์ฐํด ํ๋์ฝ๋ฉํ ์ ์์๋ค. - ๊ถํ: RPCSS๋ Local System์ผ๋ก ๋์ํ๋ค. ์ฆ ์ต์คํ๋ก์์ ์ฑ๊ณตํ๋ฉด ์์คํ ์ต๊ณ ๊ถํ์ ๊ทธ๋๋ก ์ป๋๋ค.
- ์ฆ์ ๋ฃจํ: ๋ณธ์ฒด๋ ๋งค์ฐ ๋จ์ํ๊ฒ ๋ฐ๋ณตํ๋ค โ ๋ฎคํ
์ค
BILLYํ์ธ โ ๋ก์ปฌ ์๋ธ๋ท ์ค์บ โ ๋ฌด์์ IP ์ค์บ โ 135 ํ๋ก๋ธ โ ์ต์คํ๋ก์ ์ ์ก โ (4444๋ก) ๋ณธ์ฒด ์ ๋ก๋. ์ฌ๋์ ๊ฐ์ ์ด 0์ด๋ฏ๋ก, ํ ๋๊ฐ ๋ซ๋ฆฌ๋ฉด ๋ค์ ํ ๋๊ฐ ์ ์ด ์์ ๋ซ๋ฆฐ๋ค. - DDoS ํธ๋ฆฌ๊ฑฐ(์ํํญํ): ์์คํ ๋ ์ง๊ฐ 2003-08-16 ์ดํ ~ 2003-12-31 ์ด์ , ๋๋ ๋งค์ 15์ผ ์ดํ๋ฉด windowsupdate.com์ 80 ํฌํธ๋ก SYN ํ๋ฌ๋๋ฅผ ์์ํ๋ค. ๋์์ด ์ค์ ์ฌ์ดํธ์ ๋ฆฌ๋ค์ด๋ ํธ ์ฃผ์์๋ ๋์ ์คํจ๋ ์ ํ์ ์ด์์ง๋ง, ๋ง์ดํฌ๋ก์ํํธ๋ ํด๋น ๋๋ฉ์ธ์ ์์๋ก ๋ด๋ ค ๋์ํ๋ค.
- ๋ ๊ฐ์ ๋ฉ์์ง(์์ฑ์์ ํ์ ): ๋ณธ์ฒด
msblast.exe์์๋"I just want to say LOVE YOU SAN!!"์"billy gates why do you make this possible ? Stop making money and fix your software!!"๊ฐ ๋ค์ด ์๋ค. ์ ๋ฌธ์ฅ์ด 'Lovesan'์ด๋ผ๋ ์ด๋ฆ์ ๋ณ์๊ณ , ๋ค ๋ฌธ์ฅ์ ๋น ๊ฒ์ด์ธ ๋ฅผ ๊ฒจ๋ฅํ ์ ์น์ ๋ฉ์์ง์๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก 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) โ ์ต์ด์ ์๊ธฐ๋ณต์ ์์์ ์์๋ ๊ณ๋ณด