๐Ÿฆ Zeus / Zbot (2007โ€“2014) โ€” '๋ธŒ๋ผ์šฐ์ € ์•ˆ์—์„œ' ์ˆ˜์ทจ ๊ณ„์ขŒ๋ฅผ ๋ฐ”๊พผ ๋ฑ…ํ‚น ํŠธ๋กœ์ด๋ชฉ๋งˆ

2026-09-29 ยท Malware Deep-Dive (Crimeware / Banking Trojan)

1. ๋ฐฐ๊ฒฝ/์—ญ์‚ฌ โ€” ์•…์„ฑ์ฝ”๋“œ๊ฐ€ '์ƒํ’ˆ'์ด ๋œ ์ˆœ๊ฐ„

Zeus(์ผ๋ช… Zbot)๋Š” 2007๋…„ 7์›”์— ์ฒ˜์Œ ๊ด€์ฐฐ๋œ ์œˆ๋„์šฐ์šฉ ํŠธ๋กœ์ด๋ชฉ๋งˆ ๊ณ„์—ด์ด๋‹ค. Reuters๋Š” 2007๋…„ 7์›” 17์ผ ๋ณด๋„์—์„œ ์ด ๊ณ„์—ด ์•…์„ฑ์ฝ”๋“œ๊ฐ€ ๋ฏธ๊ตญ ์ •๋ถ€ยท๊ธฐ์—… PC์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋นผ๋‚ด๊ณ  ์žˆ๋‹ค๊ณ  ์ „ํ–ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ Zeus๊ฐ€ ๋ณด์•ˆ์‚ฌ์˜ ๊ธฐ์–ต์— ๋‚จ๋Š” ์ด์œ ๋Š” ๊ธฐ์ˆ ์˜ ๋‚œ์ด๋„๊ฐ€ ์•„๋‹ˆ๋ผ ์œ ํ†ต ๋ฐฉ์‹์ด๋‹ค โ€” Zeus๋Š” ์• ์ดˆ์— '์™„์„ฑ๋œ ์•…์„ฑ์ฝ”๋“œ'๊ฐ€ ์•„๋‹ˆ๋ผ ํ‚คํŠธ(kit)๋กœ ํŒ”๋ ธ๋‹ค. ๊ตฌ๋งค์ž๋Š” ๊ด€๋ฆฌ ์ฝ˜์†”์—์„œ ์„ค์ •์„ ๋„ฃ๊ณ , ์›น์ธ์ ํŠธ(๋ณ€์กฐ ๊ทœ์น™)๋ฅผ ๋„ฃ๊ณ , ํ‘œ์  ์€ํ–‰ ๋ชฉ๋ก์„ ์ง€์ •ํ•ด ์ž๊ธฐ๋งŒ์˜ ๋ด‡๋„ท์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์—ˆ๋‹ค. Malware-as-a-Service(์•…์„ฑ์ฝ”๋“œ ๊ตฌ๋…ํ˜• ์„œ๋น„์Šค)์˜ ์›ํ˜•์ด๋ฉฐ, ์ดํ›„ EmotetยทQakbotยทLockBit ๊ณ„์—ด์ด ๋ฐ˜๋ณตํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋ชจ๋ธ์ด ์—ฌ๊ธฐ์„œ ์‹œ์ž‘๋๋‹ค.

Zeus์˜ ์ง„์งœ ๋ฌด๊ธฐ๋Š” ์‚ฌ์šฉ์ž๋ฅผ ์†์ด๋Š” ๋ฐฉ์‹์ด์—ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ •์ƒ HTTPS ์‚ฌ์ดํŠธ์— ์ ‘์†ํ•œ ์ƒํƒœ์—์„œ, ์•…์„ฑ์ฝ”๋“œ๊ฐ€ ๋ธŒ๋ผ์šฐ์ € ๋‚ด๋ถ€์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ํ™”๋ฉด์„ ๋ฐ”๊พผ๋‹ค. ์•”ํ˜ธํ™”๋œ ํ†ต์‹  ๊ตฌ๊ฐ„์€ ์•„๋ฌด ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค. ๊ณต๊ฒฉ ์ง€์ ์€ ์•”ํ˜ธ๊ฐ€ ํ’€๋ฆฐ ๋’ค์˜ ๋ฉ”๋ชจ๋ฆฌ๋‹ค. ์ด ๊ธฐ๋ฒ•์„ MitB(Man-in-the-Browser, ๋ธŒ๋ผ์šฐ์ € ๋‚ด๋ถ€์ž ๊ณต๊ฒฉ) ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

  • ๊ณ„์—ด๋ช…: Zeus / Zbot / Zeus 1.xยท2.x โ†’ Jabber Zeus โ†’ GameOver ZeuS(GOZ/Zeus3) โ†’ newGOZ
  • ๋“ฑ์žฅ: 2007๋…„ 7์›” (Microsoft Windows) ยท 2009๋…„ 3์›” ์ดํ›„ ๋Œ€๊ทœ๋ชจ ํ™•์‚ฐ
  • ๋ถ„๋ฅ˜: ๋ฑ…ํ‚น ํŠธ๋กœ์ด๋ชฉ๋งˆ + ๋ด‡๋„ท ๋นŒ๋”(ํ‚คํŠธ) โ€” MitB(Man-in-the-Browser) / ํผ ๊ทธ๋ž˜๋น™ / ์›น์ธ์ ํŠธ
  • ํ•ต์‹ฌ ๊ธฐ๋ฒ•: ์‚ฌ์šฉ์ž ๋ชจ๋“œ API ํ›„ํ‚น์œผ๋กœ ๋ธŒ๋ผ์šฐ์ € ๋ฉ”๋ชจ๋ฆฌ์˜ ํ‰๋ฌธ ํผ ๋ฐ์ดํ„ฐ ํƒˆ์ทจ + ์‘๋‹ต HTML ์‹ค์‹œ๊ฐ„ ๋ณ€์กฐ(์›น์ธ์ ํŠธ)
  • ์„ค์ • ํŒŒ์ผ: config.bin โ€” RC4๋กœ ์•”ํ˜ธํ™”๋˜์–ด ๋ฐฐํฌ, ํ‰๋ฌธ์€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ๋งŒ ์กด์žฌ
  • ์ฃผ์š” ์ธ๋ฌผ: Evgeniy Bogachev(๊ฒŒ์ž„์˜ค๋ฒ„ ZeuS, ๋ฏธ ๊ธฐ์†Œยทํ˜„์ƒ๊ธˆ $3M) ยท Hamza Bendelladj(SpyEye, 2013๋…„ ์ธ๋„๋„ค์‹œ์•„์„œ ์ฒดํฌยท๋ฏธ๊ตญ ์†กํ™˜)
  • ์—ฐ๊ณ„ ํŒŒ๊ดด: GOZ๋Š” CryptoLocker ๋žœ์„ฌ์›จ์–ด(2013)์˜ ์ฃผ ์œ ํฌ ๊ฒฝ๋กœ โ€” 20๋งŒ~25๋งŒ ๋Œ€๊ฐ€ ํ‘œ์ 
  • ํ”ผํ•ด ๊ทœ๋ชจ: GOZ ์€ํ–‰ ์‚ฌ๊ธฐ ํ”ผํ•ด ์•ฝ 1์–ต ๋‹ฌ๋Ÿฌ ยท ๋ฏธ๊ตญ ๊ฐ์—ผ ์ถ”์ • 360๋งŒ ๋Œ€(2009) ยท FTP ์ž๊ฒฉ์ฆ๋ช… 74,000๊ฑด(2009)
  • ์ข…๊ฒฐ: 2014-06 Operation Tovar(13๊ฐœ๊ตญ)๋กœ P2P ๋ด‡๋„ท ์ค‘๋‹จ โ€” ๋‹จ, ์†Œ์Šค ์œ ์ถœ๋กœ ๋ณ€์ข…์€ ๊ณ„์†

2. ๊ฐ์—ผยท์ „ํŒŒ ๊ฒฝ๋กœ โ€” '์‚ฌ๋žŒ'์„ ๋‚š๋Š” ์ •ํ†ต ํ”ผ์‹ฑ + ๋ด‡๋„ท ์ž๊ฐ€ ์œ ํฌ

Zeus๋Š” ์›œ์ด ์•„๋‹ˆ๋‹ค. ์Šค์Šค๋กœ ๋„คํŠธ์›Œํฌ๋ฅผ ๋Œ์•„๋‹ค๋‹ˆ์ง€ ์•Š๋Š”๋‹ค. ๋Œ€์‹  ์‚ฌ๋žŒ์„ ํด๋ฆญ์‹œํ‚ค๋Š” ๋ฐ ๋ชจ๋“  ์ž์›์„ ์“ด๋‹ค. ๊ทธ๋ž˜์„œ 20๋…„์ด ์ง€๋‚œ ์ง€๊ธˆ๋„ ๋˜‘๊ฐ™์€ ๊ฒฝ๋กœ๊ฐ€ ํ†ตํ•œ๋‹ค.

3. ๋™์ž‘ ์›๋ฆฌ ์ƒ์„ธ โ€” ์•”ํ˜ธํ™” ๊ตฌ๊ฐ„์€ ๋ฉ€์ฉกํ•œ๋ฐ ๊ณ„์ขŒ๊ฐ€ ๋ฐ”๋€Œ๋Š” ์ด์œ 

Zeus ๋ณธ์ฒด๋Š” ๋Œ€๋žต ๋‹ค์„ฏ ๊ฐœ์˜ ๋ถ€ํ’ˆ์œผ๋กœ ๋‚˜๋‰œ๋‹ค. ์„ค์ • ์ˆ˜์‹  โ†’ ํ›„ํ‚น ์„ค์น˜ โ†’ ํƒˆ์ทจยท๋ณ€์กฐ โ†’ ์—…๋กœ๋“œ โ†’ ๋ช…๋ น ํด๋ง. ์ˆœ์„œ๋Œ€๋กœ ๋ณด๋ฉด ์™œ '๋„คํŠธ์›Œํฌ ๋ณด์•ˆ'๋งŒ์œผ๋กœ๋Š” ๋ง‰์„ ์ˆ˜ ์—†๋Š”์ง€๊ฐ€ ๋ถ„๋ช…ํ•ด์ง„๋‹ค.

(1) ์„ค์ • ์ˆ˜์‹  โ€” config.bin. ๋ณธ์ฒด์˜ ์ฒซ ํ–‰๋™์€ url_config์—์„œ ์„ค์ • ํŒŒ์ผ์„ ๋‚ด๋ ค๋ฐ›์•„ RC4๋กœ ๋ณตํ˜ธํ™”ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์„ค์ •์—๋Š” ์ตœ์†Œ ๋„ค ๊ฐœ์˜ URL์ด ๋“ค์–ด ์žˆ๋‹ค.

url_config   : ์„ค์ • ์žฌ๋ฐฐํฌ ์ฃผ์†Œ (์ฃผ๊ธฐ์  ์žฌ์š”์ฒญ = ๋ด‡ ์ƒ์กด์‹ ํ˜ธ)
url_loader   : 2์ฐจ ํŽ˜์ด๋กœ๋“œ(๋กœ๋”/๋žœ์„ฌ์›จ์–ด) ๋ฐฐํฌ ์ฃผ์†Œ
url_server   : ํƒˆ์ทจ ๋ฐ์ดํ„ฐ ์—…๋กœ๋“œ + ๋ช…๋ น ํด๋ง (๊ฒŒ์ดํŠธ)
url_compip   : ๋‚ด๋ถ€ ๋ด‡ ์ถ”์ /ํ†ต๊ณ„์šฉ ์ฃผ์†Œ
filewebinject: ํ™”๋ฉด ๋ณ€์กฐ ๊ทœ์น™ ๋ชฉ๋ก (์•„๋ž˜ ์›น์ธ์ ํŠธ)

์„ค์ •์„ ์„œ๋ฒ„์—์„œ ๋‚ด๋ ค๋ฐ›๊ฒŒ ๋งŒ๋“  ๊ฒƒ์ด ๊ฒฐ์ •์ ์ด์—ˆ๋‹ค. ๊ณต๊ฒฉ์ž๋Š” ๋ด‡์„ ๋‹ค์‹œ ๊ฐ์—ผ์‹œํ‚ค์ง€ ์•Š๊ณ ๋„ ํ‘œ์  ์€ํ–‰์„ ๋ฐ”๊พธ๊ณ , ์›น์ธ์ ํŠธ ๊ทœ์น™์„ ๊ฐฑ์‹ ํ•˜๊ณ , ํŽ˜์ด๋กœ๋“œ๋ฅผ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ด‡๋„ท์€ '์‚ด์•„ ์žˆ๋Š” ์„œ๋น„์Šค'๊ฐ€ ๋œ๋‹ค.

(2) ํ›„ํ‚น ์„ค์น˜ โ€” ํ‰๋ฌธ์„ ํ›”์น˜๋Š” ์ˆœ๊ฐ„. Zeus๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์‹œ์Šคํ…œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ง€์ (์ฃผ๋กœ IAT/ํ•จ์ˆ˜ ํฌ์ธํ„ฐ)์„ ์ž๊ธฐ ํ•จ์ˆ˜๋กœ ๊ฐˆ์•„๋ผ์šด๋‹ค. ์ดํ›„ ๋ธŒ๋ผ์šฐ์ €๋Š” ์›๋ž˜ ์ฝ”๋“œ๋ฅผ ๊ทธ๋Œ€๋กœ ์‹คํ–‰ํ•˜์ง€๋งŒ, ๊ทธ ๋ฐ์ดํ„ฐ๋Š” ์ด๋ฏธ ๊ณต๊ฒฉ์ž์˜ ํ•จ์ˆ˜๋ฅผ ํ•œ ๋ฒˆ ํ†ต๊ณผํ•œ๋‹ค. ๋ฌธ์„œํ™”๋œ ๋Œ€ํ‘œ ํ›„ํ‚น ๋Œ€์ƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

๋ชจ๋“ˆํ›„ํ‚น ๋Œ€์ƒ(์˜ˆ)์–ป๋Š” ๊ฒƒ
wininet.dllHttpSendRequestW/A, InternetReadFile, InternetWriteFile์ „์†ก ์ง์ „์˜ HTTP ๋ณธ๋ฌธยท์‘๋‹ต HTML (ํ‰๋ฌธ)
ws2_32.dllsend / recv / WSASend / WSARecv / closesocket์†Œ์ผ“ ๋ ˆ๋ฒจ ํ‰๋ฌธ, ๋น„-HTTP ํŠธ๋ž˜ํ”ฝ
crypt32.dllCryptUnprotectData, PFXImportCertStore๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅ๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณตํ˜ธํ™”
user32.dll์œˆ๋„์šฐยทํ‚ค๋ณด๋“œ ๊ด€๋ จ API์ž…๋ ฅ ์บก์ฒ˜, ์ฐฝ ๋‹จ์œ„ ํผ ๊ทธ๋ž˜๋น™
nspr4/NSS(nss3)PR_Read / PR_WriteํŒŒ์ด์–ดํญ์Šค ํŠธ๋ž˜ํ”ฝ ํ‰๋ฌธ

ํ•ต์‹ฌ: ํ‚ค๋กœ๊น…์€ "๋ฌด์—‡์„ ์ž…๋ ฅํ–ˆ๋Š”์ง€"๋ฅผ ํ›”์นœ๋‹ค. ํผ ๊ทธ๋ž˜๋น™์€ "HTTPS๊ฐ€ ๋งŒ๋“  ํ‰๋ฌธ ํ•„๋“œ"๋ฅผ ํ†ต์งธ๋กœ ํ›”์นœ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ํ™”๋ฉด์—์„œ ๋ณธ ๊ฐ’๊ณผ ์„œ๋ฒ„๋กœ ๊ฐ„ ๊ฐ’์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป์ด๋ฉฐ, ์ด๋Š” ์ „์†ก ๊ตฌ๊ฐ„ ์•”ํ˜ธํ™”(TLS)๋กœ ๋ง‰์„ ์ˆ˜ ์—†๋‹ค.

(3) ์›น์ธ์ ํŠธ โ€” ํ™”๋ฉด๋งŒ ๋ฐ”๊พผ๋‹ค. ์„œ๋ฒ„ ์‘๋‹ต HTML์ด ๋ธŒ๋ผ์šฐ์ €์— ์ „๋‹ฌ๋˜๊ธฐ ์ง์ „์— ๊ทœ์น™์— ๋”ฐ๋ผ ๋ฌธ์ž์—ด์„ ์น˜ํ™˜ํ•œ๋‹ค. ๊ทœ์น™ ๋ฌธ๋ฒ•์€ ๋‹จ์ˆœํ•˜๋‹ค.

<webinject>
  <url>*/online/*/transfer.php</url>          <!-- ํ‘œ์  URL ๋งˆ์Šคํฌ -->
  <data_before>accountid" value="</data_before>
  <data_after>"</data_after>
  <data_inject>999000111</data_inject>      <!-- ๋ผ์›Œ ๋„ฃ์„ ๊ฐ’(๋ฎฌ ๊ณ„์ขŒ) -->
  <data_end>__END__</data_end>
</webinject>

์‚ฌ์šฉ์ž๋Š” ์ž๊ธฐ ๊ณ„์ขŒ 11122233344455๊ฐ€ ํ™”๋ฉด์— ์ฐํžŒ ๊ฒƒ์„ ํ™•์ธํ•˜๊ณ  ์ด์ฒด ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ๋‹ค๊ณ  ๋ฏฟ๋Š”๋‹ค. ์‹ค์ œ๋กœ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ณด๋‚ธ ๊ฐ’์€ ๊ณต๊ฒฉ์ž ๊ณ„์ขŒ 999000111 ์ด๋‹ค. ์ธ์ฆ์„œ๋„ ์ •์ƒ, URL๋„ ์ •์ƒ, ๊ฒฝ๊ณ ๋„ ์—†๋‹ค.

์›น์ธ์ ํŠธ๋Š” ์—ฌ๊ธฐ์„œ ๋๋‚˜์ง€ ์•Š๋Š”๋‹ค. ์ž”๊ณ ๋ฅผ ํฌ๊ฒŒ ๋ณด์ด๊ฒŒ ํ•˜๊ณ (์‚ฌํ›„ ์ธ์ง€ ์ง€์—ฐ), ์ถ”๊ฐ€ ์ธ์ฆ ์ž…๋ ฅ์ฐฝ์„ ๋ผ์›Œ ๋„ฃ๊ณ (OTP ํƒˆ์ทจ), ๊ฑฐ๋ž˜๋‚ด์—ญ ๋ชฉ๋ก์—์„œ ๊ณต๊ฒฉ์ž ์ด์ฒด๋ฅผ ์ง€์šฐ๋Š” ๊ฒƒ๊นŒ์ง€ ๊ฐ™์€ ๋ฌธ๋ฒ•์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค. ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์ด๋Š” '์‚ฌ์‹ค' ์ž์ฒด๊ฐ€ ๊ณต๊ฒฉ์ž์˜ ์ถœ๋ ฅ๋ฌผ์ด ๋œ๋‹ค.

(4) C2 ํ†ต์‹ ๊ณผ ์€๋‹‰. ํƒˆ์ทจ ๋ฐ์ดํ„ฐ๋Š” ์ •์ƒ ์›น ํŠธ๋ž˜ํ”ฝ์— ์„ž์ธ HTTP POST ๊ฒŒ์ดํŠธ๋กœ ๋‚˜๊ฐ„๋‹ค. ํ†ต์‹  ๋ณดํ˜ธ๋ฅผ ์œ„ํ•ด DGA(๋„๋ฉ”์ธ ์ƒ์„ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜)ยทfast flux๋กœ ์ฃผ์†Œ๋ฅผ ํšŒ์ „์‹œ์ผฐ๊ณ , GOZ๋Š” ์—ฌ๊ธฐ์— P2P + ์•”ํ˜ธํ™”๋ฅผ ์–น์–ด "ํ…Œ์ดํฌ๋‹ค์šด ๋ถˆ๊ฐ€๋Šฅ์— ๊ฐ€๊นŒ์šด" ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค. ํ˜ธ์ŠคํŠธ์—์„œ๋Š” ์ •์ƒ ํ”„๋กœ์„ธ์Šค(svchost.exe ๋“ฑ)์— ์ฝ”๋“œ๋ฅผ ์ฃผ์ž…ํ•˜๊ณ , ๋ฃจํŠธํ‚ทยท๋ฐฉํ™”๋ฒฝ ์˜ˆ์™ธ ๋“ฑ๋ก์œผ๋กœ ํ”์ ์„ ๊ฐ์ท„๋‹ค.

(5) ์กฐ์ง ๋ถ„์—… โ€” ๋ฒ”์ฃ„์˜ ๊ณต๊ธ‰๋ง. Zeus ์ƒํƒœ๊ณ„๋Š” ์—ญํ• ์ด ์ชผ๊ฐœ์ ธ ์žˆ์—ˆ๋‹ค. ํ‚คํŠธ ํŒ๋งค์ž โ†’ ๋ด‡๋„ท ์šด์˜์ž โ†’ ์›น์ธ์ ํŠธ ํŒ๋งค์ž โ†’ ๋ฎฌ(ํ˜„๊ธˆํ™”) ์กฐ์ง โ†’ (GOZ) ๋žœ์„ฌ์›จ์–ด ์šด์˜์ž. ํ•œ ๋‹จ๊ณ„๊ฐ€ ์ ๋ฐœ๋ผ๋„ ์ „์ฒด๊ฐ€ ๋ฉˆ์ถ”์ง€ ์•Š๋Š”๋‹ค. 2013๋…„ GOZ๊ฐ€ CryptoLocker ๋žœ์„ฌ์›จ์–ด๋ฅผ ์œ ํฌํ•œ ๊ฒƒ์ด ์ด ๊ตฌ์กฐ์˜ ์™„์„ฑํ˜•์ด๋‹ค โ€” ๋ฑ…ํ‚น ๋ด‡๋„ท์ด ๋žœ์„ฌ์›จ์–ด ์œ ํ†ต๋ง์œผ๋กœ ์ „ํ™˜๋๊ณ , ์ดํ›„ ๋žœ์„ฌ์›จ์–ด ์ƒํƒœ๊ณ„์˜ ํ‘œ์ค€ ๊ฒฝ๋กœ๊ฐ€ ๋๋‹ค.

4. ํ”ผํ•ด ๊ทœ๋ชจ/์˜ํ–ฅ โ€” ์ˆซ์ž๋กœ ๋ณด๋Š” 2007โ€“2014

โš ๏ธ ์•„๋ž˜ PoC๋Š” ๋ชจ๋‘ '๋™์ž‘ ์›๋ฆฌ ์žฌํ˜„'์„ ์œ„ํ•œ ๊ต์œก์šฉ ๋ชจ์˜ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ Zeus ๋ฐ”์ด๋„ˆ๋ฆฌยท์‹ค์ œ config.binยท์‹ค์ œ ์›น์ธ์ ํŠธ ๋ฌธ์ž์—ดยท์‹ค์ œ C2/์œ ํฌ ๋„๋ฉ”์ธยท์‹ค์ œ ํƒˆ์ทจ ๋ฐ์ดํ„ฐ๋Š” ์ผ์ ˆ ํฌํ•จํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋Œ€์ƒ์€ 127.0.0.1๊ณผ ๋ฌธ์„œ์šฉ ์˜ˆ์•ฝ ๋„๋ฉ”์ธ(*.lab.local)์ด๋ฉฐ, ์ธํ„ฐ๋„ท๊ณผ ๋ถ„๋ฆฌ๋œ ๊ฒฉ๋ฆฌ ๋žฉ VM์—์„œ๋งŒ ์‹คํ–‰์„ ์ „์ œ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ ์‹œ์Šคํ…œยทํƒ€์ธ ์ž์‚ฐยท์‹ค์ œ ๊ธˆ์œต ์‚ฌ์ดํŠธ์— ๋Œ€ํ•œ ์‹คํ–‰์€ ๋ถˆ๋ฒ•์ž…๋‹ˆ๋‹ค.

5. PoC โ€” ๊ต์œก์šฉ ๋ชจ์˜ ์ฝ”๋“œ 4์ข… (๋กœ์ปฌ ์‹ค์Šต ์ „์ œ)

Zeus์˜ 4๋Œ€ ๊ตฌ์„ฑ ์š”์†Œ โ€” โ‘  ์•”ํ˜ธํ™”๋œ ์„ค์ • ํŒŒ์ผ, โ‘ก ์›น์ธ์ ํŠธ ํ™”๋ฉด ๋ณ€์กฐ, โ‘ข API ํ›„ํ‚น(ํผ ๊ทธ๋ž˜๋น™), โ‘ฃ ๋กœ๊ทธ ์ƒ๊ด€๋ถ„์„ ํƒ์ง€ โ€” ๋ฅผ ๊ฐ๊ฐ ์ตœ์†Œ ํ˜•ํƒœ๋กœ ์žฌํ˜„ํ–ˆ๋‹ค. ์•„๋ž˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๋Š” ์ด ๊ธ€์„ ์“ฐ๋ฉฐ ์‹ค์ œ๋กœ ์‹คํ–‰ํ•œ ์ถœ๋ ฅ์ด๋‹ค (๋žฉ VM, Python 3 / gcc, ๋ชจ๋“  ๋Œ€์ƒ 127.0.0.1).

PoC โ‘  config.bin ๊ตฌ์กฐ ์žฌํ˜„ โ€” RC4 ๋ณตํ˜ธํ™” + ์„ค์ •/์›น์ธ์ ํŠธ ํŒŒ์‹ฑ

# zeus_poc.py (๋ฐœ์ทŒ) โ€” ์‹ค์ œ ์•…์„ฑ์ฝ”๋“œ ์•„๋‹˜. ์„ค์ • ํŒŒ์ผ '๊ตฌ์กฐ'๋งŒ ์žฌํ˜„ํ•œ๋‹ค.
def rc4(key: bytes, data: bytes) -> bytes:
    S = list(range(256)); j = 0
    for i in range(256):
        j = (j + S[i] + key[i % len(key)]) & 0xFF
        S[i], S[j] = S[j], S[i]
    out = bytearray(); i = j = 0
    for ch in data:
        i = (i + 1) & 0xFF; j = (j + S[i]) & 0xFF
        S[i], S[j] = S[j], S[i]
        out.append(ch ^ S[(S[i] + S[j]) & 0xFF])
    return bytes(out)

MOCK_CONFIG = b"""<config>
  <url_config>https://127.0.0.1:8443/cfg/gen1.bin</url_config>
  <url_loader>https://drop.bank-lab.local/pay/calc.png</url_loader>
  <url_server>https://c2.lab.local:8443/gate.php</url_server>
  <filewebinject>
    <webinject>
      <url>*/online/*/login.php</url>
      <data_before>accountid" value="</data_before>
      <data_after>"</data_after>
      <data_inject>999000111</data_inject>
    </webinject>
  </filewebinject>
</config>"""

key_val = b"lab-only-rc4-key-0001"
config_bin = base64.b64encode(rc4(key_val, MOCK_CONFIG))   # ๋””์Šคํฌ์— ๋‚จ๋Š” '์•”ํ˜ธ๋ฌธ'
plain = rc4(key_val, base64.b64decode(config_bin))         # ์‹คํ–‰ ์‹œ ๋ฉ”๋ชจ๋ฆฌ์—์„œ๋งŒ ๋ณตํ˜ธํ™”
urls = dict(re.findall(r"<(url_\w+)>([^<]+)</", plain.decode()))

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

[โ‘ ] config.bin(๋ชจ์˜) ํฌ๊ธฐ: 724 ๋ฐ”์ดํŠธ  (ํ‰๋ฌธ 541 ๋ฐ”์ดํŠธ)
[โ‘ ] ๋ณตํ˜ธํ™” ์„ฑ๊ณต โ€” ์„ค์ • ํ•ญ๋ชฉ 4๊ฐœ
      url_config   -> https://127.0.0.1:8443/cfg/gen1.bin
      url_loader   -> https://drop.bank-lab.local/pay/calc.png
      url_server   -> https://c2.lab.local:8443/gate.php
      url_compip   -> https://127.0.0.1:8443/comp.php
[โ‘ ] ์›น์ธ์ ํŠธ ๊ทœ์น™: url=*/online/*/login.php   data_before='accountid" value="' data_inject=999000111
      โ€ป url_config = ์„ค์ • ์žฌ๋ฐฐํฌ, url_loader = 2์ฐจ ํŽ˜์ด๋กœ๋“œ, url_server = ํƒˆ์ทจ ๋ฐ์ดํ„ฐ ์—…๋กœ๋“œ/๋ช…๋ น ํด๋ง

๊ตํ›ˆ: ์„ค์ •์ด ์„œ๋ฒ„์—์„œ ๋‚ด๋ ค์˜จ๋‹ค๋Š” ์ ์ด Zeus๋ฅผ '์ง€์† ๊ฐ€๋Šฅํ•œ ์„œ๋น„์Šค'๋กœ ๋งŒ๋“ค์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํƒ์ง€๋„ ํŒŒ์ผ์ด ์•„๋‹ˆ๋ผ ํ–‰๋™(์„ค์ • ํŒŒ์ผ์˜ ์ •๊ธฐ์  ์žฌ์š”์ฒญ, ํŠน์ • ๊ฒฝ๋กœ์˜ ๋ฐ˜๋ณต POST)์„ ๋ด์•ผ ํ•œ๋‹ค.

PoC โ‘ก Man-in-the-Browser โ€” ์‘๋‹ต HTML์„ ๋ธŒ๋ผ์šฐ์ €์— ๋„˜๊ธฐ๊ธฐ ์ „์— ์น˜ํ™˜

LOCAL_BANK_PAGE = """<form action="https://bank-lab.local/online/transfer.php" method="POST">
<input name="accountid" value="11122233344455">   <!-- ์ •์ƒ ์ˆ˜์ทจ ๊ณ„์ขŒ(๋ณธ์ธ) -->
<input name="amount" value="10000000"></form>"""

def webinject(page, url, rule):
    """์›น์ธ์ ํŠธ: URL ๋งˆ์Šคํฌ ๋งค์นญ โ†’ ์„œ๋ฒ„ ์‘๋‹ต์„ 'ํ‘œ์‹œ๋˜๊ธฐ ์ „'์— ์น˜ํ™˜ํ•œ๋‹ค."""
    if not re.search(rule["url"].replace("*", ".*"), url):
        return page                       # ํ‘œ์ ์ด ์•„๋‹ˆ๋ฉด ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š๋Š”๋‹ค (= ์€๋‹‰)
    pat = re.escape(rule["data_before"]) + r"(.*?)" + re.escape(rule["data_after"])
    return re.sub(pat, rule["data_before"] + rule["data_inject"] + rule["data_after"], page)

tampered = webinject(LOCAL_BANK_PAGE, "https://bank-lab.local/online/transfer.php", rule)

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

[โ‘ก] ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๋Š” ํ™”๋ฉด์˜ ์ˆ˜์ทจ ๊ณ„์ขŒ ํ•„๋“œ:
      ๋ณ€์กฐ ์ „: 11122233344455 (๋ณธ์ธ ๊ณ„์ขŒ)
      ๋ณ€์กฐ ํ›„: 999000111 (๋ฎฌ/๊ณต๊ฒฉ์ž ๊ณ„์ขŒ)  โ† ์‚ฌ์šฉ์ž๋Š” 11122233344455 ๋ฅผ ๋ดค๋‹ค๊ณ  ๋ฏฟ์Œ
      โ€ป ํ•ต์‹ฌ: ๊ณ„์ขŒ๋ฒˆํ˜ธ๋Š” '์‚ฌ์šฉ์ž์˜ ๋ˆˆ'์—์„œ๋งŒ ๋ฐ”๋€๋‹ค. ์„œ๋ฒ„ยท๋„คํŠธ์›Œํฌ ํ๋ฆ„์€ ์ •์ƒ HTTPS.

์ด 3์ค„์ด Zeus์˜ ์ „๋ถ€๋ผ๊ณ  ํ•ด๋„ ๊ณผ์–ธ์ด ์•„๋‹ˆ๋‹ค. TLS ์ธ์ฆ์„œยท์ž๋ฌผ์‡  ํ‘œ์‹œยทURL ํ‘œ์‹œ๋Š” ๋ชจ๋‘ '์ •์ƒ'์ด๋‹ค. ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‚จ์€ ์œ ์ผํ•œ ๊ฒ€์ฆ ์ˆ˜๋‹จ์€ ๋ธŒ๋ผ์šฐ์ €์™€ ๋‹ค๋ฅธ ์ฑ„๋„(๋ชจ๋ฐ”์ผ ์•ฑ ์•Œ๋ฆผ, ๋ฌธ์ž, ํ†ตํ™”, ์•„์˜ˆ ๋‹ค๋ฅธ ๊ธฐ๊ธฐ)๋กœ ์ตœ์ข… ์ด์ฒด ๋‚ด์—ญ์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

PoC โ‘ข API ํ›„ํ‚น ์›๋ฆฌ โ€” ํผ ๊ทธ๋ž˜๋น™์ด ์„ฑ๋ฆฝํ•˜๋Š” ์ด์œ  (C)

ํ›„ํ‚น ๋Œ€์ƒ์€ ์ด ํŒŒ์ผ ์•ˆ์—์„œ ์ง์ ‘ ๋งŒ๋“  ๋ชจ์˜ API๋ฟ์ด๋‹ค. ์‹ค์ œ Win32 API๋‚˜ ์‹ค์ œ ๋ธŒ๋ผ์šฐ์ €๋Š” ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค. '๋ธŒ๋ผ์šฐ์ € โ†’ IAT ์Šฌ๋กฏ โ†’ ๋„คํŠธ์›Œํฌ' ๊ตฌ์กฐ๋งŒ ํ‰๋‚ด ๋‚ธ๋‹ค.

/* zeus_hook.c โ€” ๊ต์œก์šฉ ๋ชจ์˜ ์ฝ”๋“œ */
typedef int (*http_send_t)(const char *host, const char *body);
int mock_HttpSendRequest(const char *host, const char *body) { /* ์‹ค์ œ ์ „์†ก ์ง€์  */ return 200; }

typedef struct { const char *name; http_send_t fn; } api_slot_t;
api_slot_t g_iat[] = { {"HttpSendRequest", mock_HttpSendRequest} };  /* ๋กœ๋”๊ฐ€ ์ฑ„์šฐ๋Š” IAT ํ‰๋‚ด */

static http_send_t g_orig = NULL;
static int hooked_HttpSendRequest(const char *host, const char *body) {
    if (strstr(body, "accountid=") || strstr(body, "password="))
        printf("   [GRAB] ํ‰๋ฌธ ํผ ํ•„๋“œ ํƒˆ์ทจ: host=%s  %s\n", host, body);
    return g_orig(host, body);      /* ์›๋ณธ์„ ๊ทธ๋Œ€๋กœ ํ˜ธ์ถœ โ†’ ๋ธŒ๋ผ์šฐ์ €๋Š” ์ •์ƒ ๋™์ž‘ */
}

/* ์•…์„ฑ ํ–‰์œ„๋Š” ๋”ฑ ํ•œ ์ค„: ์Šฌ๋กฏ 1๊ฐœ ๋ฎ์–ด์“ฐ๊ธฐ (์›๋ณธ ์ฃผ์†Œ๋Š” ๋ฐฑ์—…) */
g_orig = g_iat[0].fn;  g_iat[0].fn = hooked_HttpSendRequest;

์‹คํ–‰ ๊ฒฐ๊ณผ(์ด๋ฒˆ ์‹คํ–‰ ์‹ค์ œ ์ถœ๋ ฅ, gcc -O0 -o zeus_hook zeus_hook.c):

[โ‘ข] ํ›„ํ‚น ์ „ โ€” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ง์ ‘ ์ „์†ก
   [NET] POST https://bank-lab.local/online/transfer.php  body=accountid=11122233344455&amount=10000000

[โ‘ข] ์•…์„ฑ ๋ชจ๋“ˆ์ด IAT ์Šฌ๋กฏ์„ ๊ต์ฒด (์›๋ณธ ์ฃผ์†Œ๋Š” ๋ฐฑ์—…)
[โ‘ข] ํ›„ํ‚น ํ›„ โ€” ๊ฐ™์€ ๋ธŒ๋ผ์šฐ์ € ์ฝ”๋“œ๊ฐ€ ๊ทธ๋Œ€๋กœ ์‹คํ–‰๋จ
   [GRAB] ํ‰๋ฌธ ํผ ํ•„๋“œ ํƒˆ์ทจ: host=bank-lab.local/online/transfer.php  accountid=11122233344455&amount=10000000   <-- ์‚ฌ์šฉ์ž๋Š” HTTPS๋ผ๊ณ  ๋ฏฟ๋Š”๋‹ค
   [NET] POST https://bank-lab.local/online/transfer.php  body=accountid=11122233344455&amount=10000000

[โ‘ข] ๋ฌด๊ฒฐ์„ฑ ์ ๊ฒ€: ์Šฌ๋กฏ์ด ์›๋ณธ ์ฃผ์†Œ์ธ๊ฐ€? ๋ณ€์กฐ๋จ โ†’ ์ฆ‰์‹œ ๊ฒฝ๋ณด ๋Œ€์ƒ

์ฃผ๋ชฉํ•  ์ ์€ ๋งˆ์ง€๋ง‰ ์ค„์ด๋‹ค. ํ›„ํ‚น์€ '๋™์ž‘์„ ๋ฐ”๊พธ์ง€ ์•Š๋Š”๋‹ค' โ€” ๋ธŒ๋ผ์šฐ์ €๋„ ์‚ฌ์šฉ์ž๋„ ์•„๋ฌด ์ด์ƒ์„ ๋ชป ๋А๋‚€๋‹ค. ๊ทธ๋ž˜์„œ ํƒ์ง€์˜ ์œ ์ผํ•œ ๋‹จ์„œ๋Š” "ํ”„๋กœ์„ธ์Šค ๋ฉ”๋ชจ๋ฆฌ์˜ ํ•จ์ˆ˜ ํฌ์ธํ„ฐ/์ฝ”๋“œ๊ฐ€ ์›๋ณธ๊ณผ ๋‹ฌ๋ผ์กŒ๋‹ค"๋Š” ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์‚ฌ์™€ "๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์•„๋‹Œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ธˆ์œต ํผ ํ•„๋“œ๋ฅผ ์ „์†กํ–ˆ๋‹ค"๋Š” ํ–‰๋™ ์ด์ƒ์ด๋‹ค(PoC โ‘ฃ).

PoC โ‘ฃ ํƒ์ง€ โ€” ๋กœ๊ทธ ์ƒ๊ด€๋ถ„์„์œผ๋กœ 'ํผ ํƒˆ์ทจ' ์žก์•„๋‚ด๊ธฐ

BROWSERS   = {"chrome.exe", "msedge.exe", "firefox.exe"}
FORM_KEYS  = ("accountid", "amount", "acc", "amt", "card", "ssn", "password")

def correlate(logs):
    """์ถ• 1: ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์•„๋‹Œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ธˆ์œต ํผ ํ•„๋“œ๋ฅผ ์ „์†ก
       ์ถ• 2: ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์„ค์ • ํŒŒ์ผ์„ ๊ทœ์น™์ ์ธ ์ฃผ๊ธฐ๋กœ ์žฌ์š”์ฒญ(= ๋ด‡ ์ƒ์กด์‹ ํ˜ธ)"""
    for e in logs:
        blob = (e.get("body","") + "&" + e.get("query","")).lower()
        if any(k + "=" in blob for k in FORM_KEYS) and e["proc"] not in BROWSERS:
            alerts.append("[form_grab] %s ๊ฐ€ %s ๋กœ ๊ธˆ์œต ํผ ํ•„๋“œ ์ „์†ก" % (e["proc"], e["path"]))
        if "cfg" in e.get("path",""):
            cfg_beat[e["proc"]].append(e["ts"])
    # ์„ค์ •ํŒŒ์ผ ์žฌ์š”์ฒญ ๊ฐ„๊ฒฉ์ด ์ผ์ •ํ•˜๋ฉด ์‚ฌ๋žŒ์ด ์•„๋‹ˆ๋ผ '๋ด‡'์ด๋‹ค

์‹คํ–‰ ๊ฒฐ๊ณผ(์ด๋ฒˆ ์‹คํ–‰ ์‹ค์ œ ์ถœ๋ ฅ, ๋ชจ์˜ ์›๊ฒฉ์ธก์ • 7๊ฑด):

[โ‘ฃ] ๋กœ๊ทธ 7๊ฑด ์ƒ๊ด€๋ถ„์„ ๊ฒฐ๊ณผ:
      โš ๏ธ [form_grab] ๋น„๋ธŒ๋ผ์šฐ์ € ํ”„๋กœ์„ธ์Šค svch0st.exe ๊ฐ€ ๊ธˆ์œต ํผ ํ•„๋“œ(acc,amt)๋ฅผ ์ „์†ก โ€” /gate.php 10:01:09
      โš ๏ธ [config_beat] svch0st.exe ๊ฐ€ ์„ค์ •ํŒŒ์ผ์„ ๊ทœ์น™์ ์œผ๋กœ ์žฌ์š”์ฒญ ['10:02:12', '10:06:40', '10:11:29'] (์ฃผ๊ธฐ โ‰ˆ 278s) โ€” ๋ด‡ ์ƒ์กด์‹ ํ˜ธ
      โ€ป ์ •์ƒ ๋ธŒ๋ผ์šฐ์ €(chrome.exe)์˜ ํผ ์ „์†ก์€ ์ œ์™ธํ•˜๊ณ , 'ํ”„๋กœ์„ธ์Šค ์ด๋ฆ„ โ‰  ๋ธŒ๋ผ์šฐ์ €์ธ๋ฐ
        ๊ธˆ์œต ํผ ํ‚ค๊ฐ€ ๋‚˜๊ฐ€๋Š”' ์กฐํ•ฉ๊ณผ '์„ค์ •ํŒŒ์ผ ์ •๊ธฐ ์žฌ์š”์ฒญ' ๋‘ ์ถ•์„ ๋ฌถ์–ด ํŒ์ •ํ•œ๋‹ค.

๋„ค ์กฐ๊ฐ์„ ํ•ฉ์นœ ๊ฒฐ๋ก ์€ ์ด๋ ‡๋‹ค โ€” Zeus๋Š” โ‘  ์„œ๋ฒ„์—์„œ ์„ค์ •์„ ๋ฐ›์•„ โ‘ก ๋ธŒ๋ผ์šฐ์ € ๋‚ด๋ถ€๋ฅผ ํ›„ํ‚นํ•ด ํ‰๋ฌธ์„ ํ›”์น˜๊ณ  โ‘ข ์‚ฌ์šฉ์ž ํ™”๋ฉด์„ ์กฐ์ž‘ํ•˜๋ฉฐ โ‘ฃ ์ •์ƒ HTTPS๋กœ ์กฐ์šฉํžˆ ๋‚˜๊ฐ„๋‹ค. ๊ฐ ๋ถ€ํ’ˆ์€ '์ •์ƒ ๊ธฐ๋Šฅ'๊ณผ ๊ตฌ๋ถ„๋˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ž˜์„œ ๋ฐฉ์–ด๋„ ๋ถ€ํ’ˆ๋งˆ๋‹ค, ๊ทธ๋ฆฌ๊ณ  ์ฑ„๋„๋งˆ๋‹ค ํ•„์š”ํ•˜๋‹ค.

6. ๋ฐฉ์–ด ๋ฐฉ๋ฒ•/๊ตํ›ˆ

7. ์ถœ์ฒ˜

โ€ป ๋ณธ๋ฌธ์˜ PoC ์ฝ”๋“œ๋Š” ๊ตฌ์กฐ ์ดํ•ด ๋ชฉ์ ์˜ ๊ต์œก์šฉ ๋ชจ์˜ ์ฝ”๋“œ์ด๋ฉฐ, ์‹ค์ œ Zeus ๋ฐ”์ด๋„ˆ๋ฆฌยท์‹ค์ œ config.binยท์‹ค์ œ ์›น์ธ์ ํŠธ ๋ฌธ์ž์—ดยท์‹ค์ œ C2/์œ ํฌ ๋„๋ฉ”์ธ/IOCยท์‹ค์ œ ํƒˆ์ทจ ๋ฐ์ดํ„ฐ๋Š” ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์‹ค์Šต์€ ์ธํ„ฐ๋„ท๊ณผ ๋ถ„๋ฆฌ๋œ ๊ฒฉ๋ฆฌ ๋žฉ VM์„ ์ „์ œ๋กœ ํ•˜๋ฉฐ, ์‹ค์ œ ๊ธˆ์œต ์‚ฌ์ดํŠธยทํƒ€์ธ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ์‹คํ–‰์€ ๋ถˆ๋ฒ•์ž…๋‹ˆ๋‹ค.

ํ•จ๊ป˜ ์ฝ๊ธฐ: ๐Ÿ’ฅ Emotet (2014โ€“2021) โ€” ๋ด‡๋„ท์ด '๋žœ์„ฌ์›จ์–ด ์œ ํ†ต ํ”Œ๋žซํผ'์ด ๋˜๋Š” ๊ธธ ยท ๐Ÿฆ Bangladesh Bank SWIFT Heist (2016) โ€” ์ •์ƒ ์ž๊ฒฉ์ฆ๋ช…ยท์ •์ƒ ๊ฑฐ๋ž˜๋กœ ์œ„์žฅํ•œ ์€ํ–‰ ํƒˆ์ทจ ยท ๐Ÿชฑ Conficker (2008) โ€” P2PยทDGA๋กœ ํ…Œ์ดํฌ๋‹ค์šด์„ ๋ฌด๋ ฅํ™”ํ•œ ์›œ ยท ๐Ÿฆ… SolarWinds SUNBURST (2020) โ€” ์‹ ๋ขฐ ์ฑ„๋„์˜ ๋ถ•๊ดด ยท โ˜ ๏ธ NotPetya (2017) โ€” ๊ฐ์—ผ ๋Œ€์‹  ํŒŒ๊ดด๋ฅผ ํƒํ•œ ์ง„ํ™”

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