๐ŸŸฅ Code Red (2001) โ€” 'N 400๊ฐœ' ์š”์ฒญ ํ•˜๋‚˜๊ฐ€ IIS๋ฅผ ์‚ผํ‚ค๋‹ค

2026-09-19 ยท Malware Deep-Dive (Attack Chain)

1. ๋ฐฐ๊ฒฝ/์—ญ์‚ฌ โ€” ์–ธ์ œ, ๋ˆ„๊ฐ€, ์™œ ์œ ๋ช…ํ•œ๊ฐ€

2001๋…„ 7์›” 13์ผ ๋ฐฐํฌ๋˜๊ณ  7์›” 15์ผ ์ธํ„ฐ๋„ท์—์„œ ์ฒ˜์Œ ๊ด€์ธก๋œ Code Red๋Š” ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ IIS ์›น์„œ๋ฒ„๋งŒ์„ ๊ฒจ๋ˆˆ ์ž๊ธฐ๋ณต์ œ ์›œ์ด๋‹ค. Morris Worm(1988)์ด '์ธํ„ฐ๋„ท์„ ๋ฉˆ์ถ˜ ์ตœ์ดˆ์˜ ์›œ'์ด๋ผ๋ฉด, Code Red๋Š” "์„œ๋ฒ„๋ฅผ ๋Œ€๊ทœ๋ชจ๋กœ ์žฅ์•…ํ•˜๊ณ , ์Šค์Šค๋กœ ์›นํŽ˜์ด์ง€๋ฅผ ๋ฐ”๊พธ๊ณ , ํŠน์ • ๋Œ€์ƒ์„ ํ–ฅํ•ด DDoS๊นŒ์ง€ ์˜ˆ์•ฝํ•˜๋Š”" โ€” ์ฆ‰ ์ „ํŒŒ + ๋ณ€์กฐ + ๊ณต๊ฒฉ์„ ํ•œ ๋ฉ์–ด๋ฆฌ๋กœ ๋ฌถ์€ ์ตœ์ดˆ์˜ ๋Œ€๊ทœ๋ชจ ํ˜ผํ•ฉ ์œ„ํ˜‘(mixed-threat)์ด์—ˆ๋‹ค.

๋ฐœ๊ฒฌ์ž๋Š” eEye Digital Security์˜ Marc Maiffret๊ณผ Ryan Permeh, ์ทจ์•ฝ์  ์ž์ฒด๋ฅผ ์ฐพ์€ ์‚ฌ๋žŒ์€ ๊ฐ™์€ ํšŒ์‚ฌ์˜ Riley Hassell๋‹ค. ์ด๋ฆ„์˜ ์œ ๋ž˜๋Š” ๋‹ค์†Œ ์—‰๋šฑํ•˜๋‹ค โ€” ๋ฐœ๊ฒฌ ๋‹น์‹œ ๊ทธ๋“ค์ด ๋งˆ์‹œ๋˜ ๋งˆ์šดํ‹ด๋“€ 'Code Red'์—์„œ ๋”ฐ์™”๋‹ค. ์›œ์ด ์•…์šฉํ•œ ๊ฒฐํ•จ์€ ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ ๋ณด์•ˆ ๊ณต์ง€ MS01-033 / CVE-2001-0500, ์ฆ‰ IIS์— ๋”ธ๋ ค ์˜ค๋Š” Index Server ISAPI ํ™•์žฅ(idq.dll)์˜ ๊ธธ์ด ๊ฒ€์‚ฌ ์—†๋Š” ๋ฒ„ํผ ๋ณต์‚ฌ๋‹ค. ๊ฒฐ์ •์ ์ธ ์‚ฌ์‹ค ํ•˜๋‚˜ โ€” ํŒจ์น˜๋Š” ์›œ๋ณด๋‹ค ํ•œ ๋‹ฌ ๋จผ์ €, 2001๋…„ 6์›” 18์ผ์— ์ด๋ฏธ ๊ณต๊ฐœ๋ผ ์žˆ์—ˆ๋‹ค.

๊ทธ๋Ÿผ์—๋„ 2001๋…„ 7์›” 19์ผ ํ•˜๋ฃจ์—๋งŒ 359,000๋Œ€๊ฐ€ ๊ฐ์—ผ๋๋‹ค. ์‚ฌํ˜ ๋’ค CRv2(๋ณ€์ข…)๊ฐ€ 7์›” 31์ผ ๋‹ค์‹œ 300,000๋Œ€ ๊ทœ๋ชจ๋กœ ์žฌํ™•์‚ฐ๋˜๋ฉฐ "ํŒจ์น˜๋ฅผ ์•ˆ ํ•˜๋ฉด ๋ฌด์Šจ ์ผ์ด ๋ฒŒ์–ด์ง€๋Š”๊ฐ€"๋ฅผ ์ „ ์„ธ๊ณ„์— ์ฆ๋ช…ํ–ˆ๊ณ , ์ด ์›œ์˜ ํŠธ๋ž˜ํ”ฝ์ด ์ „ ์„ธ๊ณ„์—์„œ ๊ด€์ธก๋˜๋ฉด์„œ ๋Œ€๊ทœ๋ชจ ๊ฐ์—ผ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทผ๊ฑฐ๋กœ ํ•œ ์ตœ์ดˆ์˜ ์›œ ํ™•์‚ฐ ์—ฐ๊ตฌ(CAIDA)๊ฐ€ ๋‚˜์™”๋‹ค. ์›œ ์ž์ฒด๋ฅผ ๋ง‰๋Š” ๋ฐฉ๋ฒ•์„ ์ฒ˜์Œ ์•Œ์•„๋‚ธ Kenneth D. Eichman์€ ๊ทธ ๊ณต๋กœ๋กœ ๋ฐฑ์•…๊ด€์— ์ดˆ์ฒญ๋˜๊ธฐ๋„ ํ–ˆ๋‹ค.

๊ณ„๋ณด๋„ ๋šœ๋ ทํ•˜๋‹ค. ๋™์ผํ•œ ์ฃผ์ž… ๋ฒกํ„ฐ๋ฅผ ๊ทธ๋Œ€๋กœ ์“ฐ๋˜ ํŽ˜์ด๋กœ๋“œ๋ฅผ ์™„์ „ํžˆ ๋ฐ”๊พผ Code Red II(2001๋…„ 8์›” 4์ผ)๊ฐ€ 2์ฃผ ๋’ค ๋“ฑ์žฅํ•ด ์›น์„œ๋ฒ„์— ๋ฐฑ๋„์–ด๋ฅผ ์‹ฌ์—ˆ๊ณ , ๊ทธ๋กœ๋ถ€ํ„ฐ 6์ฃผ ๋’ค Nimda(2001๋…„ 9์›” 18์ผ)๊ฐ€ .ida ๋ฒกํ„ฐ๋ฅผ ํฌํ•จํ•œ ๋‹ค์ค‘ ๊ฐ์—ผ ๊ฒฝ๋กœ๋กœ ์ด์–ด์กŒ๋‹ค. ๊ด€๋ฆฌ์ž๋“ค์ด ์ด 3์—ฐํƒ€๋ฅผ ๊ฒช์œผ๋ฉฐ ํŒจ์น˜ ๊ด€๋ฆฌ(Patch Management)์™€ ์ทจ์•ฝ์  ๋…ธ์ถœ๋ฉด ์ถ•์†Œ๊ฐ€ ๋ณด์•ˆ์˜ ์ค‘์‹ฌ์œผ๋กœ ์ด๋™ํ–ˆ๋‹ค.

  • ์•…์„ฑ์ฝ”๋“œ๋ช…: Code Red (eEye ๋ช…์นญ CRv) ยท ๋ณ€์ข… CRvII / Code Red II(๋ณ„๋„ ์›œ์œผ๋กœ ๋ถ„์„)
  • ๋“ฑ์žฅ: 2001-07-13 ๋ฐฐํฌ โ†’ 2001-07-15 ์ธํ„ฐ๋„ท ๊ด€์ธก โ†’ 2001-07-19 ์ตœ๋Œ€ ํ™•์‚ฐ(359,000๋Œ€) ยท CRv2 2001-07-31 ์žฌํ™•์‚ฐ ยท Code Red II 2001-08-04 ยท Nimda 2001-09-18
  • ์ทจ์•ฝ์ : CVE-2001-0500 (MS01-033) โ€” IIS Index Server ISAPI ํ™•์žฅ(idq.dll)์˜ ๊ธธ์ด ๊ฒ€์‚ฌ ์—†๋Š” ๋ฒ„ํผ ๋ณต์‚ฌ. IIS 4.0(NT 4.0)ยทIIS 5.0(Windows 2000). ํŒจ์น˜๋Š” 2001-06-18, ์›œ๋ณด๋‹ค ํ•œ ๋‹ฌ ์•ž์„œ ๊ณต๊ฐœ
  • ์œ ํ˜•: ์„œ๋ฒ„ ๋Œ€์ƒ ์ž๊ธฐ๋ณต์ œ ์›œ(Server Jamming Worm) โ€” ์ „ํŒŒ + ์›นํŽ˜์ด์ง€ ๋ณ€์กฐ + ์˜ˆ์•ฝํ˜• DoS๋ฅผ ๊ฒธํ•œ ํ˜ผํ•ฉ ์œ„ํ˜‘
  • ํ•ต์‹ฌ ๊ธฐ๋ฒ•: ๋ฌด์ž‘์œ„ IPv4 ์Šค์บ”(100๊ฐœ ์Šค๋ ˆ๋“œ)๋กœ /default.ida?NNNโ€ฆ ์š”์ฒญ ์ „์†ก ยท ํŒŒ์ผ์„ ๋””์Šคํฌ์— ๋‚จ๊ธฐ์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ƒ์ฃผ(ํŒŒ์ผ๋ฆฌ์Šค) ์‹คํ–‰ ยท ๋‚ ์งœ(1~19 / 20~27 / 28~๋ง์ผ)์— ๋”ฐ๋ผ ํ–‰๋™์ด ๋ฐ”๋€Œ๋Š” ํ•˜๋“œ์ฝ”๋”ฉ ์Šค์ผ€์ค„๋Ÿฌ ยท ๋Œ€์ƒ์ด IIS์ธ์ง€์กฐ์ฐจ ํ™•์ธํ•˜์ง€ ์•Š๋Š” ๋ฌด์ฐจ๋ณ„ ์Šค์บ”
  • ๊ทœ๋ชจ(๊ณต๊ฐœ ์ˆ˜์น˜): 2001-07-19 ํ•˜๋ฃจ 359,000๋Œ€ ๊ฐ์—ผ(CAIDA ๊ด€์ธก) ยท CRv2๋Š” 2001-07-31 ์žฌํ™•์‚ฐ ยท ์ตœ์ข… ๋ˆ„์ ์€ ์ˆ˜์‹ญ๋งŒ~100๋งŒ ๋Œ€ ์ˆ˜์ค€์œผ๋กœ ์ถ”์ • ยท ํ”ผํ•ด ์ถ”์ •์น˜๋Š” ๊ธฐ๊ด€๋ณ„ ํŽธ์ฐจ๊ฐ€ ํฌ๋ฉฐ ์•ฝ 24์–ต ๋‹ฌ๋Ÿฌ๋ผ๋Š” ์ถ”์ •์ด ๋„๋ฆฌ ์ธ์šฉ๋œ๋‹ค
  • ์™œ ์œ ๋ช…ํ•œ๊ฐ€: ํŒจ์น˜๊ฐ€ ์ด๋ฏธ ๋‚˜์™€ ์žˆ์—ˆ๋Š”๋ฐ๋„ ํญ๋ฐœํ•œ ์ฒซ ๋Œ€๊ทœ๋ชจ ์„œ๋ฒ„ ์›œ. ํŒŒ์ผ๋ฆฌ์Šค ์•…์„ฑ์ฝ”๋“œ์™€ ๋‚ ์งœ ๊ธฐ๋ฐ˜ ์ž„๋ฌด ์Šค์ผ€์ค„๋ง์ด๋ผ๋Š” ํ›„๋Œ€ ์•…์„ฑ์ฝ”๋“œ์˜ ํ‘œ์ค€ ๋ฌธ๋ฒ•์„ 2001๋…„์— ๋จผ์ € ๋ณด์—ฌ์คฌ๊ณ , ์›œ ํŠธ๋ž˜ํ”ฝ์˜ ์ „ ์ง€๊ตฌ์  ๊ด€์ธก ๋ฐ์ดํ„ฐ๋Š” ์ธํ„ฐ๋„ท ๊ทœ๋ชจ ์ธก์ •ยท๋Œ€์‘ ์—ฐ๊ตฌ์˜ ์ถœ๋ฐœ์ ์ด ๋๋‹ค.

2. ๊ฐ์—ผยท์ „ํŒŒ ๊ฒฝ๋กœ โ€” '๋ฌธ์„ ๋‘๋“œ๋ ค ์—ด๋ฆฌ๋ฉด ๋“ค์–ด๊ฐ„๋‹ค'

Code Red๋Š” ์‚ฌ๋žŒ์„ ์†์ด๋Š” ์›œ์ด ์•„๋‹ˆ๋‹ค(Emotet์˜ ์Šคํ”ผ์–ดํ”ผ์‹ฑํ˜• ์ฒด์ธ๊ณผ ์ •๋ฐ˜๋Œ€๋‹ค). ์•„๋ฌด ๋‹จ๊ณ„๋„ ์‚ฌ๋žŒ ์†์„ ๊ฑฐ์น˜์ง€ ์•Š๋Š”๋‹ค. ํ•œ ๋Œ€๊ฐ€ ๊ฐ์—ผ๋˜๋Š” ์ˆœ๊ฐ„ ๊ทธ ํ˜ธ์ŠคํŠธ๊ฐ€ ์Šค์บ๋„ˆ๋กœ ๋ณ€ํ•ด ๋‹ค์Œ ๋Œ€์ƒ์„ ์ฐพ๋Š”๋‹ค.

3. ๋™์ž‘ ์›๋ฆฌ ์ƒ์„ธ ๋ถ„์„ โ€” ์ฝ”๋“œ/๊ตฌ์กฐ ๋ ˆ๋ฒจ

ํ•ต์‹ฌ์€ ๋‹จ ํ•˜๋‚˜์˜ ์ฝ”๋”ฉ ์‹ค์ˆ˜๋‹ค. IIS์˜ Index Server๋Š” .ida(๋˜๋Š” .idq) ์š”์ฒญ์ด ์˜ค๋ฉด ์งˆ์˜ ๋ฌธ์ž์—ด์„ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ, ๊ทธ ๊ณผ์ •์—์„œ ๊ณ ์ • ํฌ๊ธฐ ์Šคํƒ ๋ฒ„ํผ์— ๊ธธ์ด ๊ฒ€์‚ฌ ์—†์ด ๋ณต์‚ฌํ–ˆ๋‹ค. ์š”์ฒญ ํ•˜๋‚˜๋กœ ์Šคํƒ ํ”„๋ ˆ์ž„์ด ๋„˜์น˜๊ณ , ๋„˜์นœ ๋ฐ”์ดํŠธ๊ฐ€ ์ €์žฅ๋œ ๋ณต๊ท€ ์ฃผ์†Œ(Saved EIP)๋ฅผ ๋ฎ์–ด์จ ์‹คํ–‰ ํ๋ฆ„์ด ๊ณต๊ฒฉ์ž๊ฐ€ ์ง€์ •ํ•œ ๊ณณ์œผ๋กœ ์ ํ”„ํ•œ๋‹ค. ๊ทธ ๋’ค ๋ฌธ์ž์—ด(%u ํ˜•ํƒœ์˜ ์œ ๋‹ˆ์ฝ”๋“œ ์ธ์ฝ”๋”ฉ)์€ ๊ทธ๋Œ€๋กœ ๊ธฐ๊ณ„์–ด๋กœ ํ•ด์„๋˜์–ด ์›œ ์ฝ”๋“œ๊ฐ€ ๋œ๋‹ค โ€” ๊ต๊ณผ์„œ์ ์ธ ์Šคํƒ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ โ†’ ์ž„์˜ ์ฝ”๋“œ ์‹คํ–‰ โ†’ ์ž๊ธฐ๋ณต์ œ ์‚ฌ์Šฌ์ด๋‹ค.

๊ตฌ๋ถ„Code Red (CRv / CRv1)Code Red II (CRvII)
์ฃผ์ž… ๋ฒกํ„ฐGET /default.ida? + ๋ฐ˜๋ณต ๋ฌธ์ž๋กœ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ (๋™์ผ, CVE-2001-0500)
์˜ค๋ฒ„ํ”Œ๋กœ ์ฑ„์›€ ๋ฌธ์ž'N' ๋ฐ˜๋ณต'X' ๋ฐ˜๋ณต
๋””์Šคํฌ ํ”์ ์—†์Œ(๋ฉ”๋ชจ๋ฆฌ ์ƒ์ฃผ, ํŒŒ์ผ๋ฆฌ์Šค) โ€” ์žฌ๋ถ€ํŒ… ์‹œ ์†Œ๋ฉธํŒŒ์ผ ์„ค์น˜(explorer.exe ํŠธ๋กœ์ด์ž”) โ†’ ์žฌ๋ถ€ํŒ… ํ›„์—๋„ ๋ฐฑ๋„์–ด ์ž”์กด
ํŽ˜์ด๋กœ๋“œ์ „ํŒŒ + ์›นํŽ˜์ด์ง€ ๋ณ€์กฐ + ๋‚ ์งœ 20~27์ผ DoS๋ฐฑ๋„์–ด(TFTP โ†’ cmd.exe/root.exe, /MSADCยท/scripts ๊ฐ€์ƒ๊ฒฝ๋กœ), DoS ๊ธฐ๋Šฅ ์—†์Œ
๋ถ€๊ฐ€ ํ–‰์œ„๋ณ€์กฐ ๋ฌธ๊ตฌ "HELLO! Welcome to http://www.worm.com! Hacked By Chinese!"24~48์‹œ๊ฐ„ ํ›„ ์‹œ์Šคํ…œ ์žฌ๋ถ€ํŒ… ์‹œ๋„(์€๋‹‰ยท์ „ํŒŒ ๋ณด์กฐ)
์Šค์บ” ๋ถ„ํฌ์ฃผ์†Œ ๊ณต๊ฐ„ ์ „์ฒด์— ์‚ฌ์‹ค์ƒ ๋ฌด์ž‘์œ„๊ฐ™์€ /8 50% ยท ๊ฐ™์€ /16 37.5% ยท ๋ฌด์ž‘์œ„ 12.5% โ€” ๋‚ด๋ถ€๋ง ํŽธํ–ฅ

๊ตฌ์กฐ๋ฅผ ๊ตฌ์„ฑ์š”์†Œ ๋‹จ์œ„๋กœ ๋œฏ์–ด๋ณด๋ฉด ์ด๋ ‡๋‹ค.

4. ํ”ผํ•ด ๊ทœ๋ชจ/์˜ํ–ฅ โ€” ์ˆซ์ž์™€ ์‹ค์ œ ์‚ฌ๋ก€

5. PoC โ€” ๊ต์œก์šฉ ๋ชจ์˜ ์žฌํ˜„ (๋กœ์ปฌ ๊ฐ€์ƒ ํ™˜๊ฒฝ ์ „์šฉ)

โš ๏ธ ์•ˆ์ „ ๊ทœ์น™ ์ค€์ˆ˜: ์•„๋ž˜ ์ฝ”๋“œ๋Š” ์‹ค์ œ ์•…์„ฑ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๋ฉฐ Code Red/Code Red II์˜ ์‹ค์ œ ์ƒ˜ํ”Œยท์…ธ์ฝ”๋“œยท์ต์Šคํ”Œ๋กœ์ž‡ ๋ฐ”์ดํŠธ๋ฅผ ๋ณต์‚ฌํ•˜์ง€ ์•Š์•˜๋‹ค. Code Red์˜ ์š”์ฒญ ๋ฌธ์ž์—ด์„ ๊ตฌ์„ฑํ•˜๋Š” %uโ€ฆ ์ธ์ฝ”๋”ฉ๋œ ๊ธฐ๊ณ„์–ด ํŽ˜์ด๋กœ๋“œ๋Š” ์˜๋„์ ์œผ๋กœ ๋‹ค๋ฃจ์ง€ ์•Š์œผ๋ฉฐ, ์—ฌ๊ธฐ์„œ ์žฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ โ‘  ๊ธธ์ด ๊ฒ€์‚ฌ ์—†๋Š” ๋ฒ„ํผ ๋ณต์‚ฌ๊ฐ€ ์ œ์–ด ํ๋ฆ„์„ ๋ฎ์–ด์“ฐ๋Š” ๊ตฌ์กฐ(๊ฐ€์ƒ ์Šคํƒ ๊ฐ์ฒด), โ‘ก ๋‚ ์งœ ๊ธฐ๋ฐ˜ 3๋‹จ๊ณ„ ์ƒํƒœ ๊ธฐ๊ณ„, โ‘ข ๊ด€์ธก๋œ ํ™•์‚ฐ ๊ณก์„ ์˜ ์ˆ˜ํ•™์  ๋ชจ๋ธ, โ‘ฃ ์ •์  ์‹œ๊ทธ๋‹ˆ์ฒ˜์˜ ํšŒํ”ผ ๊ฐ€๋Šฅ์„ฑ๋ฟ์ด๋‹ค. ๋ชจ๋“  ์—ฐ์‚ฐ์€ ๋กœ์ปฌ ํ”„๋กœ์„ธ์Šค ์•ˆ์—์„œ ๋๋‚˜๋ฉฐ ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์€ 0๊ฑด์ด๊ณ , ์–ด๋–ค ์„œ๋ฒ„์—๋„ ์š”์ฒญ์„ ๋ณด๋‚ด์ง€ ์•Š๋Š”๋‹ค. ์‹ค์Šต์€ ์ธํ„ฐ๋„ท๊ณผ ๋ถ„๋ฆฌ๋œ ๊ฐ€์ƒ ๋กœ์ปฌ ๋žฉ VM์„ ์ „์ œ๋กœ ํ•˜๋ฉฐ, ์‹ค์ œ ํ™˜๊ฒฝ์—์„œ์˜ ์‹คํ–‰ยท๋ณ€ํ˜•ยท๋ฐฐํฌ๋ฅผ ๊ธˆ์ง€ํ•œ๋‹ค.

PoC 1 โ€” '๊ธธ์ด ๊ฒ€์‚ฌ ์—†๋Š” ๋ณต์‚ฌ' ํ•˜๋‚˜๊ฐ€ ์ œ์–ด ํ๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๊ตฌ์กฐ (๊ฐ€์ƒ ์Šคํƒ ๊ฐ์ฒด)

์‹ค์ œ ์ทจ์•ฝ์ ์„ ์žฌํ˜„ํ•˜์ง€ ์•Š๊ณ , ๋ฒ„ํผ ํฌ๊ธฐ๋ฅผ ๋„˜๊ฒจ ์“ฐ๋Š” ์ˆœ๊ฐ„ ๋ณต๊ท€ ์ฃผ์†Œ๊ฐ€ ๋ฎ์ด๋Š” ๊ตฌ์กฐ๋งŒ ํŒŒ์ด์ฌ ๊ฐ์ฒด๋กœ ๋ชจ์‚ฌํ–ˆ๋‹ค. ๊ณต๊ฒฉ ์š”์ฒญ์— ์“ฐ์ธ 4๋ฐ”์ดํŠธ๋Š” ๋žฉ์—์„œ ๋งŒ๋“  ์ž„์˜ ์ฃผ์†Œ๋‹ค.

# codered_lab_poc.py (๋ฐœ์ทŒ) โ€” ๊ฐ€์ƒ ์Šคํƒ ํ”„๋ ˆ์ž„, ๋„คํŠธ์›Œํฌ ์†ก์ˆ˜์‹  0๊ฑด
class FakeStackFrame:
    BUF_SIZE  = 32                 # ๋ชจ์‚ฌ์šฉ ๊ณ ์ • ๋ฒ„ํผ ํฌ๊ธฐ(๋ฐ”์ดํŠธ)
    RET_LEGIT = 0x00401000         # ์ •์ƒ ๋ณต๊ท€ ์ฃผ์†Œ (๊ฐ€์ƒ)

    def copy_query_into_buffer(self, query: bytes):
        """์ทจ์•ฝ์ ์˜ ๋ณธ์งˆ: ๊ธธ์ด ๊ฒ€์‚ฌ ์—†์ด(=bounds check ์—†์Œ) ๋ณต์‚ฌ."""
        for i, b in enumerate(query):      # <-- ๊ธธ์ด ๊ฒ€์‚ฌ๊ฐ€ ์—†๋‹ค
            if i < self.BUF_SIZE:
                self.buffer[i] = b
            else:                          # ๋ฒ„ํผ๋ฅผ ๋„˜์–ด '๋ณต๊ท€ ์ฃผ์†Œ'๋ฅผ ๋ฎ๋Š”๋‹ค
                off = i - self.BUF_SIZE
                if off < 4:
                    self.saved_ret = (self.saved_ret & ~(0xFF << (8 * off))) | (b << (8 * off))

์‹คํ–‰ ๊ฒฐ๊ณผ(์‹ค์ œ ์ถœ๋ ฅ):

[PoC 1] '.ida ์š”์ฒญ ํ•œ ์ค„'์ด ์ œ์–ด ํ๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๊ตฌ์กฐ (์‹คํ–‰ ๊ฒฐ๊ณผ)
  - ์ •์ƒ ์š”์ฒญ: /default.ida?NNNN (์งง์€ ์งˆ์˜)
  [์ •์ƒ] ์š”์ฒญ ๊ธธ์ด   30B
      ๋ฒ„ํผ ์•ž 16B : b'GET /default.ida'
      ์ €์žฅ ๋ณต๊ท€์ฃผ์†Œ: 0x00401000  (์ •์ƒ 0x00401000)
      ์ œ์–ด ํ๋ฆ„ ํƒˆ์ทจ: ์•„๋‹ˆ์˜ค (์ •์ƒ ๋ฐ˜ํ™˜)
  - ๊ณต๊ฒฉ ์š”์ฒญ: ๋ฒ„ํผ(32B)๋ณด๋‹ค ๊ธด ์งˆ์˜ โ†’ ๋ณต๊ท€ ์ฃผ์†Œ 4๋ฐ”์ดํŠธ๊ฐ€ ๋ฎ์ธ๋‹ค
  [๊ณต๊ฒฉ] ์š”์ฒญ ๊ธธ์ด   40B
      ๋ฒ„ํผ ์•ž 16B : b'AAAAAAAAAAAAAAAA'
      ์ €์žฅ ๋ณต๊ท€์ฃผ์†Œ: 0x7801c4b1  (์ •์ƒ 0x00401000)
      ์ œ์–ด ํ๋ฆ„ ํƒˆ์ทจ: ์˜ˆ  โš ๏ธ  -> ๊ณต๊ฒฉ์ž ์ฝ”๋“œ๋กœ ์ ํ”„
  * ์œ„ 4๋ฐ”์ดํŠธ๋Š” ๋žฉ์—์„œ ๋งŒ๋“  ์ž„์˜ ์ฃผ์†Œ๋‹ค. ์‹ค์ œ Code Red๊ฐ€ ์“ฐ๋Š” ๊ฐ’์„ ์˜ฎ๊ธฐ์ง€ ์•Š์•˜๋‹ค.
  * ๊ฒฐ๊ณผ ์š”์•ฝ: ์ ๊ฒ€ํ•œ 2๊ฑด ์ค‘ ํƒˆ์ทจ ์„ฑ๋ฆฝ 1๊ฑด โ€” ๋ฐฉ์–ด์˜ ๊ทผ๊ฑฐ๋Š” '๊ธธ์ด ๊ฒ€์‚ฌ ๋ถ€์žฌ' ํ•˜๋‚˜๋‹ค.

์ฝ๋Š” ๋ฒ•: 30๋ฐ”์ดํŠธ ์š”์ฒญ์€ ๋ฒ„ํผ(32B) ์•ˆ์—์„œ ๋๋‚˜ ๋ณต๊ท€ ์ฃผ์†Œ๊ฐ€ ๊ทธ๋Œ€๋กœ์ง€๋งŒ, 40๋ฐ”์ดํŠธ ์š”์ฒญ์€ ๋ฒ„ํผ๋ฅผ 8๋ฐ”์ดํŠธ ๋„˜๊ฒจ ๋ณต๊ท€ ์ฃผ์†Œ 4๋ฐ”์ดํŠธ๊ฐ€ ํ†ต์งธ๋กœ ๊ต์ฒด๋œ๋‹ค. ์‹ค์ œ ์›œ์ด ํ•˜๋Š” ์ผ์€ ์—ฌ๊ธฐ์— '๋ฎ๋Š” ๊ฐ’'๊ณผ '๊ทธ ๋’ค์— ์˜ค๋Š” ๊ธฐ๊ณ„์–ด'๋ฅผ ์ •๊ตํ•˜๊ฒŒ ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒƒ๋ฟ์ด๋‹ค โ€” ์ทจ์•ฝ์  ์ž์ฒด๋Š” ์ด 8๋ฐ”์ดํŠธ ์˜ค๋ฒ„ํ”Œ๋กœ ํ•˜๋‚˜๋‹ค.

PoC 2 โ€” ๋‚ ์งœ์— ๋”ฐ๋ผ ํ–‰๋™์ด ๋ฐ”๋€Œ๋Š” 3๋‹จ๊ณ„ ์ƒํƒœ ๊ธฐ๊ณ„

Code Red์˜ ๊ฐ€์žฅ ๋…ํŠนํ•œ ์„ค๊ณ„๋‹ค. ์„œ๋ฒ„์—์„œ ๋ช…๋ น์„ ๋ฐ›๋Š” C2๊ฐ€ ์—†์–ด๋„, ๋‚ ์งœ ํ•˜๋‚˜๋กœ ์ „ํŒŒยท๊ณต๊ฒฉยทํœด๋ฉด์ด ๊ฐˆ๋ฆฐ๋‹ค.

# codered_lab_poc.py (๋ฐœ์ทŒ) โ€” ๋‚ ์งœ๋งŒ ๋ณด๊ณ  ํ–‰๋™์„ ๊ฒฐ์ • (์™ธ๋ถ€ ํ†ต์‹  ์—†์Œ)
def codered_phase(day_of_month: int, year_ok=True):
    if day_of_month <= 19:
        return "PHASE-1 (์ „ํŒŒ)", "100๊ฐœ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฌด์ž‘์œ„ IP๋ฅผ ํ–ฅํ•ด ๋™์‹œ ์Šค์บ”"
    if day_of_month <= 27:
        return "PHASE-2 (ํ”Œ๋Ÿฌ๋“œ)", "๊ณ ์ • IP(๋ฐฑ์•…๊ด€ ์„œ๋ฒ„)๋กœ ๋Œ€๋Ÿ‰ ์š”์ฒญ ํญ์ฃผ"
    return "PHASE-3 (ํœด๋ฉด)", "์ „ํŒŒยท๊ณต๊ฒฉ ๋ชจ๋‘ ์ค‘๋‹จ, ๋ฉ”๋ชจ๋ฆฌ์—๋งŒ ๋Œ€๊ธฐ(์žฌ๋ถ€ํŒ… ์‹œ ์†Œ๋ฉธ)"

์‹คํ–‰ ๊ฒฐ๊ณผ(์‹ค์ œ ์ถœ๋ ฅ):

[PoC 2] ๋‚ ์งœ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๋Š” 3๋‹จ๊ณ„ ์ƒํƒœ ๊ธฐ๊ณ„ (์‹คํ–‰ ๊ฒฐ๊ณผ)
  7์›”  1์ผ -> PHASE-1 (์ „ํŒŒ)
              ํ–‰๋™: 100๊ฐœ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฌด์ž‘์œ„ IP๋ฅผ ํ–ฅํ•ด ๋™์‹œ ์Šค์บ”
  7์›” 13์ผ -> PHASE-1 (์ „ํŒŒ)
              ํ–‰๋™: 100๊ฐœ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฌด์ž‘์œ„ IP๋ฅผ ํ–ฅํ•ด ๋™์‹œ ์Šค์บ”
  7์›” 19์ผ -> PHASE-1 (์ „ํŒŒ)
              ํ–‰๋™: 100๊ฐœ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฌด์ž‘์œ„ IP๋ฅผ ํ–ฅํ•ด ๋™์‹œ ์Šค์บ”
  7์›” 20์ผ -> PHASE-2 (ํ”Œ๋Ÿฌ๋“œ)
              ํ–‰๋™: ๊ณ ์ • IP(๋ฐฑ์•…๊ด€ ์„œ๋ฒ„)๋กœ ๋Œ€๋Ÿ‰ ์š”์ฒญ ํญ์ฃผ
  7์›” 24์ผ -> PHASE-2 (ํ”Œ๋Ÿฌ๋“œ)
              ํ–‰๋™: ๊ณ ์ • IP(๋ฐฑ์•…๊ด€ ์„œ๋ฒ„)๋กœ ๋Œ€๋Ÿ‰ ์š”์ฒญ ํญ์ฃผ
  7์›” 27์ผ -> PHASE-2 (ํ”Œ๋Ÿฌ๋“œ)
              ํ–‰๋™: ๊ณ ์ • IP(๋ฐฑ์•…๊ด€ ์„œ๋ฒ„)๋กœ ๋Œ€๋Ÿ‰ ์š”์ฒญ ํญ์ฃผ
  7์›” 28์ผ -> PHASE-3 (ํœด๋ฉด)
              ํ–‰๋™: ์ „ํŒŒยท๊ณต๊ฒฉ ๋ชจ๋‘ ์ค‘๋‹จ, ๋ฉ”๋ชจ๋ฆฌ์—๋งŒ ๋Œ€๊ธฐ(์žฌ๋ถ€ํŒ… ์‹œ ์†Œ๋ฉธ)
  7์›” 31์ผ -> PHASE-3 (ํœด๋ฉด)
              ํ–‰๋™: ์ „ํŒŒยท๊ณต๊ฒฉ ๋ชจ๋‘ ์ค‘๋‹จ, ๋ฉ”๋ชจ๋ฆฌ์—๋งŒ ๋Œ€๊ธฐ(์žฌ๋ถ€ํŒ… ์‹œ ์†Œ๋ฉธ)

ํฌ์ธํŠธ: 7์›” 19์ผ์ด ํญ๋ฐœ ์ง€์ ์ธ ์ด์œ ๋„, 8์›” 1์ผ์ด ๋˜๋ฉด ๋‹ค์‹œ 30๋งŒ ๋Œ€๊ฐ€ ๊ฐ์—ผ๋œ ์ด์œ ๋„ ์ด ํ•œ ํ•จ์ˆ˜์— ์žˆ๋‹ค. C2 ์ธํ”„๋ผ ์—†์ด๋„ '์˜ˆ์•ฝ๋œ ์ž‘์ „'์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์‚ฌ์‹ค์ด Code Red ์ดํ›„ ์•…์„ฑ์ฝ”๋“œ ์„ค๊ณ„์˜ ๊ธฐ๋ณธ๊ฐ’์ด ๋๋‹ค.

PoC 3 โ€” '14์‹œ๊ฐ„ 359,000๋Œ€' ํ™•์‚ฐ ๊ณก์„ ์˜ ๋ชจ๋ธ ์žฌํ˜„

๊ด€์ธก๋œ ํญ๋ฐœ ์†๋„๋ฅผ ๋กœ์ง€์Šคํ‹ฑ ํ™•์‚ฐ ๋ชจ๋ธ๋กœ ์žฌํ˜„ํ•œ๋‹ค(๊ต์œก์šฉ ๋ชจ๋ธ์ด๋ฉฐ ์‹ค์ œ ๊ฐ์—ผ ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹ˆ๋‹ค). ์›œ์€ ์ดˆ๊ธฐ ๊ฐ์—ผ ๋Œ€์ˆ˜์—์„œ ์ถœ๋ฐœํ•ด ์‹œ๊ฐ„๋‹น ๊ณ ์ • ๋น„์œจ๋กœ ๋Š˜๊ณ , 11์‹œ๊ฐ„์งธ๋ถ€ํ„ฐ ํŒจ์น˜ยท์ฐจ๋‹จยท์žฌ๋ถ€ํŒ…์ด ์œ ์ž…๋˜๋ฉฐ ์ฆ๊ฐ€์„ธ๊ฐ€ ๊บพ์ธ๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ๋‹ค.

# codered_lab_poc.py (๋ฐœ์ทŒ) โ€” ๋ชจ๋ธ ์ƒ์ˆ˜์™€ ๊ณก์„ 
def model_hosts(hours, host_pool=2_000_000, r0=0.62, n0=1000):
    n = n0
    for h in range(1, int(hours) + 1):
        slowdown = 1.0 / (1.0 + max(0.0, h - 11.0) * 0.75)   # ๋Œ€์‘ ์œ ์ž…
        n += r0 * n * (1 - n / host_pool) * slowdown
        yield h, int(n)

์‹คํ–‰ ๊ฒฐ๊ณผ(์‹ค์ œ ์ถœ๋ ฅ):

[PoC 3] '14์‹œ๊ฐ„ ๋งŒ์— 359,000๋Œ€'์˜ ๋ชจ๋ธ ์žฌํ˜„ (์‹คํ–‰ ๊ฒฐ๊ณผ)
   ๊ฒฝ๊ณผ์‹œ๊ฐ„ | ๊ฐ์—ผ ์ถ”์ • ๋Œ€์ˆ˜ | ๋Œ€์กฐ (CAIDAยทeEye ๊ด€์ธก, 2001-07-19)
    1์‹œ๊ฐ„    |        1,619๋Œ€ |
    2์‹œ๊ฐ„    |        2,623๋Œ€ |
    3์‹œ๊ฐ„    |        4,247๋Œ€ |
    4์‹œ๊ฐ„    |        6,874๋Œ€ |
    5์‹œ๊ฐ„    |       11,122๋Œ€ |
    6์‹œ๊ฐ„    |       17,980๋Œ€ |
    7์‹œ๊ฐ„    |       29,028๋Œ€ |
    8์‹œ๊ฐ„    |       46,764๋Œ€ |
    9์‹œ๊ฐ„    |       75,080๋Œ€ |
   10์‹œ๊ฐ„    |      119,883๋Œ€ |
   11์‹œ๊ฐ„    |      189,755๋Œ€ |
   12์‹œ๊ฐ„    |      250,605๋Œ€ |
   13์‹œ๊ฐ„    |      304,967๋Œ€ |
   14์‹œ๊ฐ„    |      354,274๋Œ€ |  <- ๊ด€์ธก์น˜ 359,000๋Œ€(14์‹œ๊ฐ„ ๋งŒ์— ๋„๋‹ฌ)
   15์‹œ๊ฐ„    |      399,460๋Œ€ |
   16์‹œ๊ฐ„    |      441,186๋Œ€ |  <- ์ฆ๊ฐ€์„ธ ๋‘”ํ™”(ํŒจ์น˜ยท์ฐจ๋‹จยท์žฌ๋ถ€ํŒ… ์œ ์ž…)
  * ๊ด€์ธก ๋Œ€์กฐ: ์‹ค์ œ 2001-07-19 ํ•˜๋ฃจ ๊ฐ์—ผ์€ 359,000๋Œ€(CAIDA) โ€” ๋ชจ๋ธ์€ 14์‹œ๊ฐ„ ์ง€์  354,274๋Œ€ (์˜ค์ฐจ 1.3%)

ํ•ด์„: ์ง€์ˆ˜ ์„ฑ์žฅ ๊ตฌ๊ฐ„์—์„œ๋Š” 3์‹œ๊ฐ„๋งˆ๋‹ค ๊ฐ์—ผ ๊ทœ๋ชจ๊ฐ€ 4๋ฐฐ์”ฉ ๋›ด๋‹ค. ์ฆ‰ "1๋งŒ ๋Œ€๋ฅผ ์žก์„ ๋•Œ"์™€ "30๋งŒ ๋Œ€๋ฅผ ์žก์„ ๋•Œ"๋Š” ๋Œ€์‘ ๋‚œ์ด๋„๊ฐ€ ์™„์ „ํžˆ ๋‹ค๋ฅด๋‹ค โ€” ์›œ ๋Œ€์‘์˜ ์Šน๋ถ€๋Š” ๊ณก์„ ์˜ ์•ž๋ถ€๋ถ„์—์„œ ๊ฒฐ์ •๋œ๋‹ค. ๊ทธ๋ž˜์„œ ์˜ค๋Š˜๋‚ ์˜ ๋Œ€์‘ ์›์น™๋„ 'ํƒ์ง€ ์ฆ‰์‹œ ๊ฒฉ๋ฆฌ(๋„คํŠธ์›Œํฌ ์ฐจ๋‹จ ์šฐ์„ )'๋‹ค.

PoC 4 โ€” ์ •์  ์‹œ๊ทธ๋‹ˆ์ฒ˜๋Š” 'ํ•œ ๊ธ€์ž'๋งŒ ๋ฐ”๊ฟ”๋„ ๋ฌด๋ ฅํ™”๋œ๋‹ค

2001๋…„์˜ ํ”ํ•œ ๋Œ€์‘์€ HTTP ์š”์ฒญ ๋ฌธ์ž์—ด ๋งค์นญ์ด์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ HTTP๋Š” ๋Œ€์†Œ๋ฌธ์ž์™€ ํผ์„ผํŠธ ์ธ์ฝ”๋”ฉ์„ ํ—ˆ์šฉํ•˜๋ฏ€๋กœ, ๋ฌธ์ž์—ด ํ•˜๋‚˜๋ฅผ ๊ทธ๋Œ€๋กœ ๋งค์นญํ•˜๋Š” ๊ทœ์น™์€ ์‰ฝ๊ฒŒ ์šฐํšŒ๋œ๋‹ค.

# codered_lab_poc.py (๋ฐœ์ทŒ) โ€” ์ •๊ทœํ™” ์—†๋Š” ์‹œ๊ทธ๋‹ˆ์ฒ˜ vs ์ •๊ทœํ™” ์‹œ๊ทธ๋‹ˆ์ฒ˜
SIG = b"/default.ida?"        # ํ”ํžˆ ์“ฐ๋˜ ์ •์  ์‹œ๊ทธ๋‹ˆ์ฒ˜(๊ต์œก์šฉ ์˜ˆ์‹œ)
def naive_block(req): return SIG in req                     # ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ + ์ •๊ทœํ™” ์—†์Œ
def normalize(req): return urllib.parse.unquote(req.decode("latin-1")).lower().encode()
def norm_block(req):  return SIG in normalize(req)

์‹คํ–‰ ๊ฒฐ๊ณผ(์‹ค์ œ ์ถœ๋ ฅ):

[PoC 4] ์ •์  ์‹œ๊ทธ๋‹ˆ์ฒ˜๋Š” 'ํ•œ ๊ธ€์ž'๋งŒ ๋ฐ”๊ฟ”๋„ ๋ฌด๋ ฅํ™”๋œ๋‹ค (์‹คํ–‰ ๊ฒฐ๊ณผ)
   GET /default.ida?NNNN HTTP/1.0           ๋‹จ์ˆœ์‹œ๊ทธ๋‹ˆ์ฒ˜=True  ์ •๊ทœํ™”์‹œ๊ทธ๋‹ˆ์ฒ˜=True
   GET /Default.Ida?NNNN HTTP/1.0           ๋‹จ์ˆœ์‹œ๊ทธ๋‹ˆ์ฒ˜=False ์ •๊ทœํ™”์‹œ๊ทธ๋‹ˆ์ฒ˜=True
   GET /default%2Eida?NNNN HTTP/1.0         ๋‹จ์ˆœ์‹œ๊ทธ๋‹ˆ์ฒ˜=False ์ •๊ทœํ™”์‹œ๊ทธ๋‹ˆ์ฒ˜=True
   GET /default.ida%3fNNNN HTTP/1.0         ๋‹จ์ˆœ์‹œ๊ทธ๋‹ˆ์ฒ˜=False ์ •๊ทœํ™”์‹œ๊ทธ๋‹ˆ์ฒ˜=True
   * Code Red II๋Š” ๋‹ค๋ฅธ ์ธ์ฝ”๋”ฉยท๋‹ค๋ฅธ ๋ฒ„ํผ ๊ตฌ์กฐ๋ฅผ ์ผ๋‹ค โ†’ ์‹œ๊ทธ๋‹ˆ์ฒ˜ 1๊ฐœ๋กœ๋Š” ๋ถ€์กฑํ•˜๋‹ค.
   * ๊ฒฐ๋ก : ํŒจ์น˜(๊ทผ๋ณธ)๊ฐ€ 1์ˆœ์œ„, ์‹œ๊ทธ๋‹ˆ์ฒ˜๋Š” ๋ณด์กฐ. ํŒจ์น˜์œจ์ด ๋‚ฎ์œผ๋ฉด ์‹œ๊ทธ๋‹ˆ์ฒ˜๋งŒ์œผ๋กœ๋Š” ๋ชป ๋ง‰๋Š”๋‹ค.

ํ•ต์‹ฌ: ๋‹จ์ˆœ ๋งค์นญ์€ 4๊ฑด ์ค‘ 1๊ฑด๋งŒ ์žก์•˜๊ณ , URL ๋””์ฝ”๋”ฉ + ์†Œ๋ฌธ์ž ์ •๊ทœํ™”๋ฅผ ๊ฑฐ์น˜์ž 4๊ฑด ๋ชจ๋‘ ์žกํ˜”๋‹ค. ๊ทธ๋Ÿฐ๋ฐ๋„ ์ด๊ฒƒ์€ '์ด๋ฏธ ์•Œ๋ ค์ง„ ํ˜•ํƒœ'๋ฅผ ์žก๋Š” ๋ฐ ๊ทธ์นœ๋‹ค โ€” SQL Slammer์ฒ˜๋Ÿผ ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ์™„์ „ํžˆ ๋‹ค๋ฅธ ๋ฒกํ„ฐ๊ฐ€ ๋‚˜์˜ค๋ฉด ์‹œ๊ทธ๋‹ˆ์ฒ˜๋Š” ๋ฌด์˜๋ฏธํ•ด์ง„๋‹ค. ๊ทธ๋ž˜์„œ ์ˆœ์„œ๋Š” ์–ธ์ œ๋‚˜ โ‘  ํŒจ์น˜ยท๋…ธ์ถœ๋ฉด ์ œ๊ฑฐ โ†’ โ‘ก ํ–‰์œ„ยท์ด์ƒ ์ง•ํ›„ ํƒ์ง€ โ†’ โ‘ข ์‹œ๊ทธ๋‹ˆ์ฒ˜๋‹ค.

6. ๋ฐฉ์–ด ๋ฐฉ๋ฒ•/๊ตํ›ˆ โ€” ์–ด๋–ป๊ฒŒ ๋ง‰์•˜๊ณ , ๋ฌด์—‡์„ ๋ฐฐ์šฐ๋‚˜

์ถœ์ฒ˜

โ€ป ๋ณธ๋ฌธ์˜ PoC ์ฝ”๋“œ๋Š” ๊ตฌ์กฐ ์ดํ•ด ๋ชฉ์ ์˜ ๊ต์œก์šฉ ๋ชจ์˜ ์ฝ”๋“œ์ด๋ฉฐ, ์‹ค์ œ Code Red/Code Red II ์ƒ˜ํ”Œยท์…ธ์ฝ”๋“œยท ์ต์Šคํ”Œ๋กœ์ž‡ ๋ฌธ์ž์—ด(%u ์ธ์ฝ”๋”ฉ ํŽ˜์ด๋กœ๋“œ ํฌํ•จ)๊ณผ ์‹ค์ œ ๊ณต๊ฒฉ ๋Œ€์ƒ ์ •๋ณด๋Š” ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์‹ค์Šต์€ ์ธํ„ฐ๋„ท๊ณผ ๋ถ„๋ฆฌ๋œ ๊ฒฉ๋ฆฌ ๋žฉ VM์„ ์ „์ œ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

ํ•จ๊ป˜ ์ฝ๊ธฐ: ๐Ÿ› Morris Worm (1988) โ€” ์ตœ์ดˆ์˜ ์ž๊ธฐ๋ณต์ œ ์›œ ยท ๐ŸŒ SQL Slammer (2003) โ€” 376๋ฐ”์ดํŠธ ํŒจํ‚ท ํ•˜๋‚˜๋กœ 10๋ถ„ ยท ๐Ÿชฑ Conficker (2008) โ€” ์ž๊ฐ€ ๋ฐฉ์–ดํ˜• ์›œ์˜ ์ง„ํ™” ยท ๐Ÿ’€ WannaCry (2017) โ€” EternalBlue๋กœ ๋˜์‚ด์•„๋‚œ ์ž๊ธฐ์ „ํŒŒํ˜• ๊ณต๊ฒฉ ยท ๐Ÿฆ  Mirai (2016) โ€” IoT๋ฅผ ๋ฌด๊ธฐ๋กœ ๋ฐ”๊พผ ๋ด‡๋„ท

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