Malware/malware analysis series

Malware Analysis Series (MAS) – Article 9

์œค์ •_ 2025. 5. 2. 16:22

Alexandre Borges์˜ ๋ธ”๋กœ๊ทธ Exploit Reversing์˜ ์•…์„ฑ์ฝ”๋“œ ๋ถ„์„ ์‹œ๋ฆฌ์ฆˆ 'Malware Analysis Series(MAS)'๋ฅผ ๋ฒˆ์—ญํ•˜์—ฌ ๊ณต๋ถ€ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. MacOS/iOS ๋‚ด์šฉ์˜ ์•„ํ‹ฐํด 8์€ ์ž ์‹œ ๋ฏธ๋ค„๋‘๊ณ  9๋ฒˆ์งธ ์•„ํ‹ฐํด๋ถ€ํ„ฐ ๊ณต๋ถ€ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

[Introduction]

์•…์„ฑ์ฝ”๋“œ ๋ถ„์„ ์‹œ๋ฆฌ์ฆˆ(MAS)์˜ 9๋ฒˆ์งธ ์•„ํ‹ฐํด์— ์˜ค์‹  ๊ฒƒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ์•„ํ‹ฐํด์—์„œ๋Š” ์œˆ๋„์šฐ ์‹คํ–‰ ํŒŒ์ผ๋กœ ๋Œ์•„์™€์„œ PE ํฌ๋งท๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ผ๋ฐ˜์ ์ธ ์‰˜์ฝ”๋“œ(shellcode)๋ฅผ ๋‹ค๋ค„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์š”์ฆ˜์€ Sliver, Brute Ratel, Havoc, Covenant, Empire, Cobalt Strike ๊ฐ™์€ ์ˆ˜์‹ญ ๊ฐ€์ง€์˜ C2 ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Cobalt Strike๋Š” ์‹ค์ œ red team operation์—์„œ ์‚ฌ์šฉ๋˜์—ˆ์ง€๋งŒ ์•ˆํƒ€๊น๊ฒŒ๋„ ์œ ์ถœ๋œ ๋ณต์‚ฌ๋ณธ์ด ๋‹ค์–‘ํ•œ ๋žœ์„ฌ์›จ์–ด ๊ทธ๋ฃน์— ์˜ํ•ด ์•…์šฉ๋˜๊ธฐ๋„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ์‰˜์ฝ”๋“œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋ถ„์„ํ•  ๋•Œ์˜ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋Š” ๋ฌธ์ œ๋ฅผ ๋‹ค๋ฅธ ๊ด€์ ์—์„œ ์ดํ•ดํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„ ์ €ํฌ๋Š” PE, ELF, Mach-O ๊ฐ™์€ ํฌ๋งท์˜ ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ  ๋ถ„์„ํ•˜๋Š”๋ฐ ์ต์ˆ™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜์Œ์—๋Š” ๋‹ค์†Œ ์ƒ์†Œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์‰˜์ฝ”๋“œ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์ด ๋” ์–ด๋ ค์šด ์ด์œ ๋Š” ์ƒํ™ฉ์„ ์ดํ•ดํ•˜๋Š”๋ฐ ๋„์›€์ด ๋˜๋Š” ํ‘œ์ค€ ํฌ๋งท์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ์‰˜์ฝ”๋“œ๋ฅผ ์ž๋™์œผ๋กœ ๋กœ๋”ฉํ•˜๊ณ , ๋””์Šค์–ด์…ˆ๋ธ”ํ•˜๊ณ , ์ „์ฒด ์ฝ”๋“œ๋ฅผ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ๋กœ๋” ๋ชจ๋“ˆ์ด๋‚˜ ํ”„๋กœ์„ธ์„œ ๋ชจ๋“ˆ๋„ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋Ÿฐ ๋กœ๋”๋‚˜ ํ”„๋กœ์„ธ์„œ ๋ชจ๋“ˆ์˜ ๋„์›€์ด ์—†๋Š” ์ƒํƒœ์—์„œ, ๋ชจ๋“  ๊ฒƒ์ด ๋‹จ์ˆœํ•œ ๋ฐ”์ดํŠธ ์ง‘ํ•ฉ ์š”์•ฝ๋ณธ์„ ์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ ๋ถ„์„ํ•˜์—ฌ ์˜๋ฏธ ์žˆ๋Š” ๊ฒฐ๊ณผ์™€ ํ•ด์„์„ ๋„์ถœํ•ด๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ตญ PE ๋ฐ”์ด๋„ˆ๋ฆฌ์™€ ์‰˜์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜๋Š” ๊ฒƒ์€ ๋ชฉํ‘œ ๋ฉด์—์„œ๋Š” ์œ ์‚ฌํ•œ ์ž‘์—…์ด์ง€๋งŒ ๊ทธ ๋ชฉํ‘œ์— ๋„๋‹ฌํ•˜๋Š” ๊ฒฝ๋กœ๋Š” ์•ฝ๊ฐ„ ๋‹ค๋ฅด๋ฉฐ, ์ด๋“ค ๋ชจ๋‘๋Š” ์‹œ์Šคํ…œ์„ ์šฐํšŒํ•˜๊ณ  ์นจํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์œˆ๋„์šฐ ๊ตฌ์กฐ๋ฅผ ์กฐ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” ์‰˜์ฝ”๋“œ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์‚ฌ์‹ค๊ณผ ๊ธฐ๋ณธ ๊ฐœ๋…, ๊ฐ„๋‹จํ•œ ๋ฆฌ๋ฒ„์Šค ์—”์ง€๋‹ˆ์–ด๋ง๊ณผ ๋ถ„์„ ๊ธฐ๋ฒ•์— ๋Œ€ํ•ด ๋‹ค๋ค„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

 

[Basic Information]

Malwoverview ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ์‹  ์‰˜์ฝ”๋“œ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ƒ˜ํ”Œ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋„๊ตฌ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ๊ณผ ์˜ต์…˜ ์ค‘, Malware Bazaar๋Š” ๋ฏฟ์„ ์ˆ˜ ์žˆ๋Š” ๋ฌด๋ฃŒ ์ƒ˜ํ”Œ ์ถœ์ฒ˜ ์‚ฌ์ดํŠธ์ด๊ณ , ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํ•ด๋‹น ์ƒ˜ํ”Œ ๋ชฉ๋ก์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[Figure 01] Malware Bazaar์˜ ์‰˜์ฝ”๋“œ ์ƒ˜ํ”Œ ๋ชฉ๋ก

 

๊ฐ™์€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Metasploit, Cobalt Strike, Sliver ๋“ฑ ํŠน์ • ํŽ˜์ด๋กœ๋“œ๋ฅผ ์ง์ ‘์ ์œผ๋กœ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒƒ๋„ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

  • malwoverview -b 2 -B metasploit -o 0 | grep sha256_hash
  • malwoverview -b 2 -B cobaltstrike -o 0 | grep sha256_hash

 

๋‚˜์—ด๋œ ์ƒ˜ํ”Œ ์ค‘ ํ•˜๋‚˜๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

  • malwoverview -b 5 -B <hash> 

 

๋ชจ๋“  ํŽ˜์ด๋กœ๋“œ๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ 'infected'๋กœ ์•”ํ˜ธ ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ˜ํ”Œ์„ ์••์ถ• ํ•ด์ œํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์„ธ์š”: 7z -e <sample> -pinfected.

 

 

 

[Reversing]

์ €๋Š” ๋ช‡ ๊ฐ€์ง€ ์ƒ˜ํ”Œ๋กœ ๊ธฐ์ˆ ๋“ค์— ๋Œ€ํ•œ ํ•„์ˆ˜ ๊ฐœ๋…์„ ์„ค๋ช…ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์‰˜์ฝ”๋“œ ๋ถ„์„์€ ๊นŒ๋‹ค๋กญ์ง€๋งŒ ์ œ ์ด์ „ ๊ธ€์„ ์ฝ์€ ๋ถ„๋“ค์ด๋ผ๋ฉด ์ „ํ˜€ ๋ฌธ์ œ๊ฐ€ ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ตณ์ด ์–ธ๊ธ‰ํ•  ํ•„์š”๋Š” ์—†๊ฒ ์ง€๋งŒ ์•„๋ž˜ ์‰˜์ฝ”๋“œ ์ƒ˜ํ”Œ์€ ์œˆ๋„์šฐ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋˜๋„๋ก ์„ค๊ณ„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

โ— Example 01

์ฒซ ๋ฒˆ์งธ ์˜ˆ์ œ๋Š” ์ˆœ์ˆ˜(raw) ์‰˜์ฝ”๋“œ์ด๋ฉฐ ์ €๋Š” ์ด๋ฅผ shellcode_01.bin์ด๋ผ๊ณ  ๋ช…๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์„ 16์ง„์ˆ˜ ํŽธ์ง‘๊ธฐ(ex. HxD)๋กœ ์—ด์–ด ์ „์ฒด ๋‚ด์šฉ์„ ๋น ๋ฅด๊ฒŒ ํ™•์ธํ•ด๋ณด์„ธ์š”. (SHA256: 23ad215b73830b2478c19b3dda9bef3db2a53f016efdabeb535fc94e54c91ea7)

[Figure 02] raw ์‰˜์ฝ”๋“œ์˜ ํ—ฅ์‚ฌ ํ‘œํ˜„

 

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฒ˜์Œ ๋‚˜์˜ค๋Š” 16์ง„์ˆ˜ ๊ฐ’๋“ค(opcode)์„ ๋น ๋ฅด๊ฒŒ ๋‹ˆ๋ชจ๋‹‰(mnemonic)์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ธํ„ฐ๋„ท์— ๋‹ค์–‘ํ•œ opcode ํ…Œ์ด๋ธ”์ด ์žˆ์Šต๋‹ˆ๋‹ค).

  • 0xFC: cld(clear direction flag). ๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ ์‹œ ESI/EDI ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ์ฆ๊ฐ€ํ• ์ง€ ๊ฐ์†Œํ• ์ง€๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
  • 0xE8: call
  • 0x82: call ๋ช…๋ น์— ์˜ํ•ด ํ˜ธ์ถœ๋  ๋ฃจํ‹ด์˜ ์˜คํ”„์…‹์ด๋ฉฐ ์‹ค์ œ ์ง„์ž…์ (entry point)์ž…๋‹ˆ๋‹ค.

 

๊ฒ‰๋ณด๊ธฐ์— ์œ ์šฉํ•œ ๋ฌธ์ž์—ด์€ ์—†๊ณ  ์ด ์‰˜์ฝ”๋“œ๋Š” ์ด 328๋ฐ”์ดํŠธ๋กœ ์งง์Šต๋‹ˆ๋‹ค. IDA๋กœ ์‰˜์ฝ”๋“œ๋ฅผ ์—ด์–ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ™”๋ฉด์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[Figure 03] IDA Pro๋กœ ์—ด์–ด๋ณธ raw ์‰˜์ฝ”๋“œ

 

์ด๊ฑด PE ํฌ๋งท๋„ ์•„๋‹ˆ๊ณ  ์‰˜์ฝ”๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ์ผ ์˜ต์…˜๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค.

[Figure 04] ๋””์Šค์–ด์…ˆ๋ธ”๋ฆฌ ๋ชจ๋“œ

 

๋‘ ๊ฐœ์˜ ๋””์Šค์–ด์…ˆ๋ธ”๋ฆฌ ๋ชจ๋“œ๊ฐ€ ์žˆ๋Š”๋ฐ ์ €ํฌ๋Š” 32๋น„ํŠธ๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

[Figure 05] ์ฒซ ๋ฒˆ์งธ ๋””์Šค์–ด์…ˆ๋ธ”๋œ ์ฝ”๋“œ ๋ผ์ธ๋“ค

ํŒŒ์ผ์„ IDA์—์„œ ์—ด๋ฉด ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์€ ์ด๋ฏธ์ง€๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ์–ด์…ˆ๋ธ”๋ฆฌ ๋ช…๋ น์–ด๋Š” ์—†๊ณ  ํŒŒ์ผ์ด ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ๋กœ ๋ถ„์„๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— IDA๋Š” ์ถ”๊ฐ€์ ์ธ ํ•ด์„์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค์Œ ๋‹จ๊ณ„๋Š” ์ €ํฌ๊ฐ€ ๊ฒฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ์ž‘์—…์€ 0x00000000์˜ ์ฒซ ๋ฒˆ์งธ ๋ฐ”์ดํŠธ๋กœ ์ปค์„œ๋ฅผ ์ด๋™ํ•œ ํ›„ "C"๋ฅผ ๋ˆŒ๋Ÿฌ ์ด๋ฅผ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

[Figure 06] ์‹ค์ œ ๋ช…๋ น์˜ ์ฒซ ๋ฒˆ์งธ ์ฝ”๋“œ ๋ผ์ธ

 

๊ทธ๋Ÿฌ๋ฉด ์ฆ‰์‹œ ๋‘ ๊ฐœ์˜ ๋ช…๋ น์–ด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๋Š” ์•ž์„œ opcode๋ฅผ ๋””์ฝ”๋”ฉํ•˜๋ฉฐ ์•Œ์•„๋‚ธ ๋‚ด์šฉ๊ณผ ์ •ํ™•ํžˆ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ call sub_88 ๋ช…๋ น์–ด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๋Š” ์‹คํ–‰ ํ๋ฆ„์ด 0x88๋กœ ์ ํ”„ํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์—๋Š” ๋ฐ˜๋“œ์‹œ ๊ธฐ์–ตํ•ด์•ผํ•  ๋ฏธ๋ฌ˜ํ•œ ํฌ์ธํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. call ๋ช…๋ น์–ด๊ฐ€ ์‹คํ–‰๋˜๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด์˜ ์ฃผ์†Œ๊ฐ€ ์Šคํƒ์˜ ๋งจ ์œ„์— ํ‘ธ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋ถ„์„์„ ๊ณ„์†ํ•ด๋ณด๋ฉด ์ฃผ์†Œ 0x88์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช…๋ น์–ด๋“ค์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[Figure 07] ์ฃผ์†Œ 0x88์˜ ๋ช…๋ น์–ด

 

์ด ์ง€์ ๋ถ€ํ„ฐ ๋ถ„์„์ด ํฅ๋ฏธ๋กœ์›Œ์ง€๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด์ „ ๊ทธ๋ฆผ๋“ค์— ๋‚˜์˜จ ๋ช…๋ น์–ด๋“ค์€ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์›Œ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์„ค๋ช…๋“ค์„ ๋ณด๋ฉด ์ดํ•ดํ•˜๋Š”๋ฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • 0x00000088: EBP๋Š” ์Šคํƒ์—์„œ ๊บผ๋‚ธ ๊ฐ’์œผ๋กœ ์„ค์ •๋˜๋ฉฐ, ์ด๋Š” ์•ž์„  call ๋ช…๋ น์–ด์— ์˜ํ•ด ํ‘ธ์‹œ๋œ ๊ฐ’์œผ๋กœ ์ดํ›„ ํ˜ธ์ถœ๋  ๋ฃจํ‹ด์˜ ์ฃผ์†Œ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ๋ถ€๋ถ„์€ ๊ณง ๋‹ค์‹œ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

  • 0x00000089: ๋ถ€๋ถ„ ๋ฌธ์ž์—ด(substring)์„ ์Šคํƒ์— ํ‘ธ์‹œํ•˜๊ณ  ์žˆ๊ณ  ์ด๋Š” ํ•จ์ˆ˜ ์ธ์ž์˜ ์ผ๋ถ€๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ’์„ ๋ฌธ์ž์—ด๋กœ ๋ณด๋ ค๋ฉด "R" ํ‚ค๋ฅผ ๋ˆ„๋ฅด์„ธ์š”.

  • 0x0000008E: ๋˜ ๋‹ค๋ฅธ substring์„ ์Šคํƒ์— ํ‘ธ์‹œํ•˜๊ณ  ์žˆ๊ณ , ์ด๊ฒƒ๋„ ์ธ์ž์˜ ์ผ๋ถ€๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์—ญ์‹œ "R" ํ‚ค๋ฅผ ๋ˆ„๋ฅด๋ฉด ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • 0x00000093: ํ˜„์žฌ ์Šคํƒ ํฌ์ธํ„ฐ์ธ ESP ๊ฐ’์ด ์Šคํƒ์— ํ‘ธ์‹œ๋˜๋Š”๋ฐ ์‚ด์ง ์ด์ƒํ•ด๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ์‚ฌ์‹ค ์ฃผ์†Œ 0x00000094์— ์žˆ๋Š” ํ•จ์ˆ˜์˜ ์ธ์ž(์ฃผ์†Œ 0x8E์™€ 0x89์˜ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด๋“ค๋กœ ๊ตฌ์„ฑ๋œ ๋ฌธ์ž์—ด)์˜ ํฌ์ธํ„ฐ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • 0x00000094: ์ด 16์ง„์ˆ˜ ๊ฐ’์€ ์‹ค์ œ๋กœ ํ˜ธ์ถœ๋  ํ•จ์ˆ˜(call ebp, ์ฃผ์†Œ 0x99)์˜ ์ฒซ ๋ฒˆ์งธ ์ธ์ž์ž…๋‹ˆ๋‹ค. ์•ž์„  ์ฃผ์†Œ๋“ค(0x89, 0x8E)๊ณผ ๋‹ฌ๋ฆฌ ์ด ๊ฐ’์€ ๋ฌธ์ž์—ด์ด ์•„๋‹ˆ๋ผ ํ•ด์‹œ์ž…๋‹ˆ๋‹ค. ์ด์ „ ๊ธ€์—์„œ ๋ฐฐ์šด ๊ฒƒ์ฒ˜๋Ÿผ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”๋ฐ ๊ทธ ์ค‘ ํ•˜๋‚˜๊ฐ€ HashDB๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ด์ „ ๊ธ€์„ ์ฐธ์กฐํ•˜์„ธ์š”).
    • ํ•ด๋‹น ๊ฐ’์„ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ ํด๋ฆญํ•œ ํ›„, HashDB Hunting Algorithm๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    • ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ "metasploit"๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    • 16์ง„์ˆ˜ ๊ฐ’์—์„œ ๋‹ค์‹œ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ํด๋ฆญ ํ›„ HashDB Lookup์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    • ์„ ํƒ๋œ ๋ชจ๋“ˆ์ด ํƒ€๋‹นํ•œ์ง€ ํ™•์ธํ•œ ํ›„ Import๋ฅผ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.

  • 0x00000095: call ebp ๋ช…๋ น์€ ์‹คํ–‰ ํ๋ฆ„์„ ์–ด๋”˜๊ฐ€๋กœ ์ „ํ™˜ํ•˜๊ณ  ๋‹ค์Œ ๋ช…๋ น์–ด ์ฃผ์†Œ์ธ 0x9B๋ฅผ ์Šคํƒ์— ๋ฆฌํ„ด ์ฃผ์†Œ๋กœ ํ‘ธ์‹œํ•ฉ๋‹ˆ๋‹ค.

 

๋™์ผํ•œ ๋ถ„์„์„ ๋ฐ˜๋ณตํ•˜๋ฉด ๋‹ค์Œ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋‹ค์Œ ๋ช…๋ น(์ฃผ์†Œ 0xAD)์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[Figure 08] ๊ฐœ์„ ๋œ sub_88 ๋ฃจํ‹ด

 

์ฝ”๋“œ์—์„œ LoadLibrary ํ•จ์ˆ˜์™€ ws2_32(Winsock2 DLL)๊ฐ€ ๋ช…ํ™•ํžˆ ์–ธ๊ธ‰๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ WSAStartup ํ•จ์ˆ˜๋„ ์–ธ๊ธ‰๋˜๋Š”๋ฐ ์ด๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ Winsock DLL์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ค€๋น„ํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ์™ธ์—๋„ ํฅ๋ฏธ๋กœ์šด ์„ธ๋ถ€ ์‚ฌํ•ญ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • 400(0x190) ๊ฐ’์ด EAX ๋ ˆ์ง€์Šคํ„ฐ๋กœ ์ด๋™๋˜๊ณ  ์ด ๊ฐ’์ด ESP์—์„œ ์ฐจ๊ฐ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์Šคํƒ์— ๊ณต๊ฐ„์„ ํ™•๋ณดํ•˜๋Š” ๋™์ž‘์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „ ์Šคํƒ์„ ์ค€๋น„ํ•  ๋•Œ ์ผ๋ฐ˜์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค.

  • push ๋ช…๋ น์–ด๋Š” ์ฃผ์†Œ 0x00000093์—์„œ ์„ค๋ช…ํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๋ฉฐ WSAStartup ํ•จ์ˆ˜์˜ ์ถœ๋ ฅ ๊ฒฐ๊ณผ๊ฐ€ ์ €์žฅ๋  ์Šคํƒ ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ์ž…๋‹ˆ๋‹ค.

  • ๋™์ผํ•œ ๊ฐ’(400)์ด WSAStartup ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ์„œ ์Šคํƒ์— ํ‘ธ์‹œ๋˜๋ฉฐ ์ด๋Š” 0xA9 ์ฃผ์†Œ์—์„œ ํ˜ธ์ถœ๋˜๋Š” ๋ฃจํ‹ด์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ์‚ฌ์šฉ๋˜๋Š” EBP ๊ฐ’์€ 0x88 ์ฃผ์†Œ์—์„œ ์„ค์ •๋œ ๊ฒƒ๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

  • ๋งˆ์ง€๋ง‰์œผ๋กœ call ebp ๋ช…๋ น์–ด๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

 

๋ถ„์„์„ ๊ณ„์†ํ•˜๊ธฐ ์ „์— ์‰˜์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜๊ธฐ ์œ„ํ•ด(์‚ฌ์šฉ์ž์˜์—ญ ๊ธฐ์ค€์œผ๋กœ) ์•„๋ž˜์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๊ตฌ์กฐ์ฒด๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

  • View > Open subviews > Type Libraries > ntapi ๋˜๋Š” ntapi_win7 ์„ ํƒ

  • View > Open subviews > Local Types > INS > Import standard structure
    • _PEB
    • _IMAGE_DOS_HEADER
    • _IMAGE_NT_HEADERS
    • _IMAGE_FILE_HEADER (์ž๋™์œผ๋กœ _IMAGE_NT_HEADERS์— ์˜ํ•ด ๊ฐ€์ ธ์™€์ง)
    • _IMAGE_OPTIONAL_HEADERS (์ž๋™์œผ๋กœ _IMAGE_NT_HEADERS์— ์˜ํ•ด ๊ฐ€์ ธ์™€์ง)
    • _IMAGE_DATA_DIRECTORY (์ž๋™์œผ๋กœ _IMAGE_NT_HEADERS์— ์˜ํ•ด ๊ฐ€์ ธ์™€์ง)
    • _IMAGE_EXPORT_DIRECTORY

 

 

import๋œ ๋ชจ๋“  ๊ตฌ์กฐ์ฒด๋Š” Local Types ๋ทฐ(SHIFT + F1)์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[Figure 09] import๋œ ํ‘œ์ค€ ๊ตฌ์กฐ์ฒด๋“ค

 

๋‹ค์‹œ ๋Œ์•„๊ฐ€๋ณด๋ฉด ์ด ์‹œ์ ์—์„œ ๋ถ„์„์„ ์ž ์‹œ ๋ฉˆ์ถ”๊ณ  EBP์— ์ €์žฅ๋œ ๊ฐ’์„ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์†Œ 0x88์˜ ๋ช…๋ น์„ ํ†ตํ•ด ์„ค์ •๋œ ํ˜„์žฌ EBP๋Š” ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ฃผ์†Œ์— pop ebp ๋ช…๋ น์–ด๊ฐ€ ์กด์žฌํ•˜๋ฏ€๋กœ EBP ๊ฐ’์€ ์Šคํƒ ์ตœ์ƒ๋‹จ์—์„œ ๊ฐ€์ ธ์˜จ ๊ฒƒ์ž…๋‹ˆ๋‹ค. Figure 06์—์„œ ์ฃผ์†Œ 0x06์—๋Š” ์ผ๋ จ์˜ ๋ฐ”์ดํŠธ๋“ค์ด ์žˆ์—ˆ๊ณ , ์ด๋ฅผ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜(C ํ‚ค ๋ˆ„๋ฅด๊ธฐ)ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

[Figure 10] 0x06 ์ฃผ์†Œ์˜ ์–ด์…ˆ๋ธ”๋ฆฌ

 

์—ฌ๊ธฐ์„œ ์œ ์šฉํ•œ ๋ช…๋ น๋“ค์„ ํ™•์ธํ•˜์—ฌ ํ•จ์ˆ˜๋ผ๋Š” ๊ฒƒ(prologue์ž…๋‹ˆ๋‹ค)์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„์ง ํ•จ์ˆ˜๋กœ ์ง€์ •๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์†Œ๋“ค์ด ๋นจ๊ฐ„์ƒ‰์„ ํ‘œ์‹œ๋˜๋Š”๋ฐ P ํ‚ค๋ฅผ ๋ˆŒ๋Ÿฌ ํ•จ์ˆ˜๋กœ ์ „ํ™˜ํ•ด์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. P๋ฅผ ๋ˆŒ๋Ÿฌ ํ•จ์ˆ˜๋กœ ์„ค์ •ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[Figure 11] 0x06 ์ฃผ์†Œ์˜ ๋ช…๋ น ์ผ๋ถ€

 

์™„์ „ํžˆ ๋งŒ์กฑ์Šค๋Ÿฝ์ง„ ์•Š์ง€๋งŒ ์ฝ”๋“œ๊ฐ€ ์กฐ๊ธˆ ๋‚˜์•„์ ธ์„œ ์‰˜์ฝ”๋“œ ํ˜•ํƒœ์™€ ์œ ์‚ฌํ•ด์กŒ์Šต๋‹ˆ๋‹ค.๊ทธ๋Ÿฐ๋ฐ ์™œ ์™„์ „ํ•œ ์‰˜์ฝ”๋“œ ํ˜•ํƒœ๊ฐ€ ์•„๋‹๊นŒ์š”? ์ด ์ฝ”๋“œ๋Š” 32๋น„ํŠธ์ด๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋Ÿฐ ์ฝ”๋“œ์—์„œ๋Š” EBP ๊ธฐ๋ฐ˜ ํ”„๋ ˆ์ž„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฑฐ์ด ์ผ๋ฐ˜์ ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. sub_6 ํ•จ์ˆ˜์— ์ปค์„œ๋ฅผ ๋†“๊ณ  ALT+P ํ‚ค๋ฅผ ๋ˆŒ๋Ÿฌ ํ•ด๋‹น ์„ค์ •์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€ํ™” ์ƒ์ž ์˜ค๋ฅธ์ชฝ์— BP based frame ์ฒดํฌ๋ฐ•์Šค๋ฅผ ํ†ตํ•ด ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒดํฌํ•œ ํ›„ OK๋ฅผ ๋ˆ„๋ฅด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[Figure 12] ๊ฐœ์„ ๋œ 0x06 ์ฃผ์†Œ์˜ ๋ช…๋ น

 

์กฐ๊ธˆ ๋” ๋‚˜์•„์กŒ์ง€๋งŒ ์—ฌ์ „ํžˆ ๊ฐœ์„ ํ•  ์—ฌ์ง€๊ฐ€ ๋‚จ์•„์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฃจํ‹ด์€ ์ด์ „์— ํ‘œ์‹œ๋˜์ง€ ์•Š์•˜๋˜ ์ธ์ž๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. sub_88 ๋ฃจํ‹ด์—์„œ๋Š” ์—ฌ๋Ÿฌ ๋ฒˆ์˜ call ebp ๋ช…๋ น์–ด๊ฐ€ ์žˆ์—ˆ๊ณ  EBP ๊ฐ’์€ ์ฃผ์†Œ 0x88์˜ ์ฒซ ๋ฒˆ์งธ ๋ช…๋ น์–ด์ธ pop ebp๋ฅผ ํ†ตํ•ด ์Šคํƒ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ์— ์žˆ๋Š” ๊ฐ’์€ sub_6 ๋ฃจํ‹ด์˜ ์ฃผ์†Œ์˜€๊ณ  ์ด๋Š” ์ด์ „์˜ call ๋ช…๋ น์–ด(0x01)๊ฐ€ ํ•ด๋‹น ์ฃผ์†Œ๋ฅผ ์Šคํƒ์— ํ‘ธ์‹œํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๋ฒˆ์˜ call ebp ๋ช…๋ น์–ด๋Š” ํ•˜๋‚˜์˜ ์ธ์ž๋งŒ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๊ทธ ์ธ์ž๋Š” ํ•จ์ˆ˜ ํฌ์ธํ„ฐ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋Š” ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜์— ํ•„์š”ํ•œ ๊ฐ๊ฐ์˜ ์ธ์ž๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

์‰˜์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜๋‹ค๋ณด๋ฉด ๋ชจ๋“  ๊ฒƒ์ด Windows ๊ตฌ์กฐ์™€ ๊ด€๋ จ๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ๋  ํ…๋ฐ, ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋ถ„์„์„ ์ง„ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์•Œ์•„์•ผ ํ•  ๊ฐœ๋…๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. pusha ๋ช…๋ น์–ด๋Š” ๋ชจ๋“  ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’์„ ์Šคํƒ์— ์ €์žฅํ•˜๋ฉฐ ๋‚˜์ค‘์— popa ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๋ณต์›๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์†Œ 0x0B์— fs:[eax+ 30h]๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ fs:[0]๋Š” Threat Environment Block (_TEB)๋ฅผ ์ฐธ์กฐํ•˜๊ณ , 0x30 ์˜คํ”„์…‹์—์„œ๋Š” Process Environment Block (_PEB)์— ๋Œ€ํ•œ ์ฐธ์กฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

[Figure 13] TEB ๊ตฌ์กฐ์ฒด (์ผ๋ถ€)

 

fs:[0]๋Š” ๋˜ํ•œ TIB (Thread Information Block)์˜ ํฌ์ธํ„ฐ์ด์ง€๋งŒ, ํฅ๋ฏธ๋กœ์šด ๋ถ€๋ถ„์€ ์•„๋‹™๋‹ˆ๋‹ค. IDA์—์„œ ์ œ๊ณต๋œ PEB ๊ตฌ์กฐ์ฒด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

[Figure 14] _PEB ๊ตฌ์กฐ์ฒด (์ผ๋ถ€)

 

PEB ๊ตฌ์กฐ์ฒด๊ฐ€ ํ›จ์”ฌ ํฌ์ง€๋งŒ ์ง€๊ธˆ ์ €ํฌ ๋ชฉ์ ์—๋Š” ์ด ์ •๋„๋ฉด ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์˜คํ”„์…‹ 0xC(Figure 12์˜ ์˜คํ”„์…‹ 0xF ์ฐธ์กฐ)์— PEB_LDR_DATA๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ๊ตฌ์กฐ์ฒด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.

[Figure 15] PEB_LDR_DATA ๊ตฌ์กฐ์ฒด

 

 

์ด์ œ ์ค‘์š”ํ•œ ์ฝ”๋“œ ์กฐ๊ฐ์ด ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค. ์˜คํ”„์…‹ 0x14(Figure 12์˜ ์˜คํ”„์…‹ 0x12 ์ฐธ์กฐ)์—๋Š” InMemoryOrderModuleList ํ•„๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ•„๋“œ๋Š” LIST_ENTRY ๊ตฌ์กฐ์ฒด ํƒ€์ž…์ด๋ฉฐ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์„ฑ๋œ ์ด์ค‘ ์—ฐ๊ฒฐ(doubled-linked) ๊ตฌ์กฐ์ฒด๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

[Figure 16] _LIST_ENTRY ๊ตฌ์กฐ์ฒด

 

๋”ฐ๋ผ์„œ InMemoryOrderModuleList ํ•„๋“œ๋Š” ๋‹ค๋ฅธ _LIST_ENTRY๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” *Flink ํฌ์ธํ„ฐ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

_LIST_ENTRY ๊ตฌ์กฐ์ฒด๋Š” ๊ตฌ์กฐํ™”๋œ ์ฒด์ธ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค๋‹ˆ๋‹ค. InMemoryOrderModuleList ํ•„๋“œ์˜ ํฌ์ธํ„ฐ(Flink์™€ Blink)๋Š” ์•ž๋’ค๋กœ ๋‹ค๋ฅธ _LIST_ENTRY ๊ตฌ์กฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฉฐ, ์–ด๋–ค ๋‹ค๋ฅธ ๊ตฌ์กฐ์ฒด์˜ ์ผ๋ถ€์ผ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์šฐ๋ฆฌ๊ฐ€ DLL ๋ชจ๋“ˆ๋“ค์„ ๋‹ค๋ฃจ๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ฐธ์กฐ๋˜๋Š” ๊ตฌ์กฐ์ฒด๋Š” LDR_DATA_TABLE_ENTRY์ด๋ฉฐ ์ด์ „์— ์„ค๋ช…ํ•œ ๋™์ผํ•œ ์ ˆ์ฐจ๋ฅผ ๋”ฐ๋ผ IDA์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

[Figure 17] _LDR_DATA_TABLE_ENTRY ๊ตฌ์กฐ์ฒด

 

์ฃผ์†Œ 0x15์˜ ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•ด๋ณด๋ฉด mov esi, [edx+28h] ๋ช…๋ น์–ด๊ฐ€ ์žˆ๋Š”๋ฐ, ์˜คํ”„์…‹ 0x28์„ ์ฐธ์กฐํ•˜๋ผ๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ _LDR_DATA_TABLE_ENTRY ๊ตฌ์กฐ์ฒด๋ฅผ ์‚ดํŽด๋ณด๋ฉด ํ•ด๋‹น ์˜คํ”„์…‹์€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์‹ค์ œ๋กœ๋Š” ์ฝ”๋“œ๊ฐ€ ์˜คํ”„์…‹ 0x24 + 0x4 ์œ„์น˜์— ์ ‘๊ทผํ•˜๊ณ  ์žˆ๋Š”๋ฐ ์ด๋Š” _UNICODE_STRING ๊ตฌ์กฐ์ฒด์˜ ๊ตฌ์„ฑ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

[Figure 18] _UNICODE_STRING ๊ตฌ์กฐ์ฒด

 

์ด ์ฝ”๋“œ๋Š” _UNICODE_STRING ๊ตฌ์กฐ์ฒด์˜ Buffer ํ•„๋“œ์— ์ ‘๊ทผํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์ฃผ์†Œ 0x18(mov esi, [edx+26h]) ๋ช…๋ น์€ ๊ฐ™์€ _UNICODE_STRING ๊ตฌ์กฐ์ฒด์˜ MaximumLength ํ•„๋“œ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ์‚ฌ์šฉํ•œ ๊ตฌ์กฐ์ฒด๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • _TEB
  • _PEB
  • _LDR_DATA
  • _LDR_DATA_TABLE_ENTRY
  • _UNICODE_STRING

 

์ด์ œ ์–ด๋–ค ๊ตฌ์กฐ์ฒด๋“ค์ด ์ ‘๊ทผ๋˜๊ณ  ์žˆ๋Š”์ง€ ์•Œ๊ฒŒ ๋˜์—ˆ์œผ๋‹ˆ ์ด์ „์— ์„ค๋ช…ํ•œ ์ ˆ์ฐจ๋Œ€๋กœ ์ด ๊ตฌ์กฐ์ฒด๋“ค์„ ์ถ”๊ฐ€ํ•˜๊ณ , T ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ ํ•„๋“œ์— ์ ์ ˆํ•œ ํƒ€์ž…์„ ์ง€์ •ํ•ด์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

[Figure 19] ํ•„์š”ํ•œ ๊ตฌ์กฐ์ฒด ์ถ”๊ฐ€ ๋ฐ ๊ฐ ํƒ€์ž… ์ ์šฉ ํ›„ ์ฝ”๋“œ

 

 

๋‹ค์Œ ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

[Figure 20] sub_6 ๋ฃจํ‹ด์˜ ๋‘ ๋ฒˆ์งธ ํŒŒํŠธ

 

์ฃผ์†Œ(๋˜๋Š” ๋ผ์ธ) 0x1E๋ถ€ํ„ฐ 0x23๊นŒ์ง€๋Š” ๋น„๊ต์  ๋ช…ํ™•ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ๋Š” ์ „๋‹ฌ๋ฐ›์€ ๋ฌธ์ž์—ด์ด ์†Œ๋ฌธ์ž์ธ์ง€ ๋Œ€๋ฌธ์ž์ธ์ง€๋ฅผ ํ™•์ธํ•˜๊ณ  ๋งŒ์•ฝ ์†Œ๋ฌธ์ž๋ผ๋ฉด ๋Œ€๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” 0x23 ์ฃผ์†Œ์— ์žˆ๋Š” sub al, 20h ๋ช…๋ น์–ด ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. loadsb ๋ช…๋ น์–ด (line 0x1E)๋Š” ์†Œ์Šค ๋ฌธ์ž์—ด(line 0x15์—์„œ ESI๊ฐ€ ๊ฐ€๋ฆฌํ‚ด)์—์„œ ํ•œ ๋ฐ”์ดํŠธ๋ฅผ AL ๋ ˆ์ง€์Šคํ„ฐ๋กœ ๋ถˆ๋Ÿฌ์˜ค๋ฉฐ, ๋งค loadsb ๋ช…๋ น ์‹คํ–‰ ํ›„ ESI๋Š” ์ฆ๊ฐ€ํ•˜์—ฌ ๋‹ค์Œ ๋ฐ”์ดํŠธ๋กœ ๋„˜์–ด๊ฐ‘๋‹ˆ๋‹ค. ํฅ๋ฏธ๋กœ์šด ๋ถ€๋ถ„์€ ์ฃผ์†Œ 0x25๋ถ€ํ„ฐ 0x2A๊นŒ์ง€๊ฐ€ ROR-13์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋””์ฝ”๋”ฉ ๋ฃจํ‹ด์ด๋ผ๋Š” ๊ฒƒ์ด๊ณ , ์ด ๋ฐฉ์‹์€ metasploit ์ธ์ฝ”๋”ฉ์œผ๋กœ ์ž˜ ์•Œ๋ ค์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์†Œ 0x2C์™€ 0x2D์—๋Š” ๊ฐ๊ฐ push edx์™€ push edi ๋ช…๋ น์–ด๊ฐ€ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ๊ฐ๊ฐ ํ˜„์žฌ์˜ _LDR_DATA_TABLE_ENTRY ๊ตฌ์กฐ์ฒด(์ฆ‰, ํ˜„์žฌ DLL ๊ตฌ์กฐ์ฒด)๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ์™€ ๋ฌธ์ž์—ด ๋ฐฐ์—ด์˜ ํ˜„์žฌ ์Šฌ๋ก์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋ฅผ ์Šคํƒ์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„์ง ํ™•์ธํ•˜์ง€ ๋ชปํ–ˆ๋‹ค๋ฉด ์ฃผ์†Œ 0x12์™€ 0x28์„ ์ฐธ๊ณ ํ•˜์„ธ์š”. ๊ทธ๋ฆฌ๊ณ  0x2E ์ฃผ์†Œ์— ์žˆ๋Š” mov edx, [edx+10h] ๋ช…๋ น์–ด๋Š” Figure 17์— ๋”ฐ๋ฅด๋ฉด InInitializationOrderLinks ํ•„๋“œ๋ฅผ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค. ์ด ํ•„๋“œ ์—ญ์‹œ _LDR_DATA_TABLE_ENTRY ๊ตฌ์กฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฉฐ ์˜คํ”„์…‹ 0x3C๋Š” union ํƒ€์ž…์ž…๋‹ˆ๋‹ค. ์•„๋ž˜ ๊ทธ๋ฆผ์— ๊ทธ ๊ตฌ์กฐ์ฒด๊ฐ€ ๋‚˜์™€์žˆ์Šต๋‹ˆ๋‹ค.

[Figure 21] _LDR_DATA_TABLE_ENTRY ๋ฐ ์—ฐ๊ด€๋œ union๋“ค

์œ„ ๊ทธ๋ฆผ์„ ๋ถ„์„ํ•ด๋ณด๋ฉด ๋Œ€์ƒ ํ•„๋“œ๋Š” SectionPointer์ด๋ฉฐ, ์ด๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ์ž์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ์ž…๋‹ˆ๋‹ค. ์ด ์ง€์ ๋ถ€ํ„ฐ๋Š” PE ๊ตฌ์กฐ๋ฅผ ์‚ดํŽด๋ณด๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์ „ ๊ธ€๋“ค์—์„œ ์ˆ˜ํ–‰ํ–ˆ๋˜ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์กฐ์ฒด๋ฅผ ์ ์šฉํ•˜์—ฌ ์ง„ํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

[Figure 22] ์‹ฌ๋ณผ ๋ฐ ์ด๋ฆ„์ด ์ ์šฉ๋œ sub_6 ๋ฃจํ‹ด์˜ ๋‘ ๋ฒˆ์จฐ ํŒŒํŠธ

 

 

๋ชจ๋“  ๊ตฌ์กฐ์ฒด๋“ค์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

[Figure 23] ์ด๋ฆ„ ๋ฆฌ์กธ๋น™์— ๊ด€์—ฌํ•˜๋Š” ๊ตฌ์กฐ์ฒด๋“ค

 

๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ ์ด ์ฝ”๋“œ๋Š” address of names ๋ฐฐ์—ด์˜ RVA์™€ DLL์˜ ๊ฐœ์ˆ˜๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ํŒŒ์‹ฑํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Figure 20์˜ ๋งˆ์ง€๋ง‰ ์ค„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

[Figure 24] Figure 20 ์ฝ”๋“œ์˜ ๋งˆ์ง€๋ง‰ ์ค„

 

์œ„ ๋ช…๋ น์–ด๋“ค์€ address of names์˜ ์ฃผ์†Œ๋ฅผ ํŒŒ์‹ฑํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๊ณ , ๊ฐ๊ฐ์€ 4๋ฐ”์ดํŠธ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ์จ ํ•ด๋‹น ๋‹จ๊ณ„๊ฐ€ ์ข…๋ฃŒ๋˜๊ณ  ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋ถ„์„ํ•  ์ฐจ๋ก€์ž…๋‹ˆ๋‹ค.

 

 

[Figure 25] sub_6 ๋ฃจํ‹ด์˜ ์„ธ ๋ฒˆ์งธ ํŒŒํŠธ

์ด ๋ถ€๋ถ„์€ ์ด์ „๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ ์ด๋ฒˆ์—๋Š” ํ•จ์ˆ˜ ์ด๋ฆ„๊ณผ ์ฃผ์†Œ์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • pop eax ๋ช…๋ น์€ ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต๊ตฌํ•˜๋ฉฐ ์ด๋Š” IMAGE_DATA_DIRECTORY๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ์ž…๋‹ˆ๋‹ค.

  • ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” AddressOfNameOrdinals ๋ฐฐ์—ด์— ์ ‘๊ทผํ•˜์—ฌ ๊ฐ ํ•ญ๋ชฉ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

  • ์ด๋ ‡๊ฒŒ ๊ฐ€์ ธ์˜จ ์ˆœ์„œ๊ฐ’์„ ํ†ตํ•ด ํ•ด๋‹น ํ•จ์ˆ˜์˜ ์ฃผ์†Œ๋„ ํ•จ๊ป˜ ๋ณต๊ตฌ๋ฉ๋‹ˆ๋‹ค.

  • popa ๋ช…๋ น์–ด๋Š” ์ด์ „์˜ pusha ๋ช…๋ น์–ด๋ฅผ ๋˜๋Œ๋ฆฌ๊ธฐ ์ „์— ๋””์ฝ”๋”ฉ๋œ ๋ฐ”์ดํŠธ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , _LDR_DATA_TABLE_ENTRY๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋„ ๋ณต์›๋ฉ๋‹ˆ๋‹ค.

  • ์ด ์‹œ์  ์ดํ›„, ์˜ฌ๋ฐ”๋ฅธ ํ•จ์ˆ˜๊ฐ€ ๋ฐœ๊ฒฌ๋˜๋ฉด ํ•ด๋‹น ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉฐ ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ฝ”๋“œ๊ฐ€ ๊ณ„์† ๊ฒ€์ƒ‰์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ์˜ฌ๋ฐ”๋ฅธ ํ•จ์ˆ˜๋ฅผ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

 

์ผ๋ถ€ ์„ธ๋ถ€ ๋‚ด์šฉ์€ ์ƒ๋žตํ–ˆ์ง€๋งŒ ์ง€๊ธˆ์€ ์ด ์ •๋„๋ฉด ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜์— ํ‘œ์‹œ๋œ ์ฝ”๋“œ๊ฐ€ ์ด์–ด์ง‘๋‹ˆ๋‹ค.

[Figure 26] ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ‘œ์‹œํ•œ sub_6์˜ ๋‘ ๋ฒˆ์งธ ํŒŒํŠธ

 

 

์ค‘์š”ํ•œ ์ ์€ sub_6 ํ•จ์ˆ˜์˜ ์ฝ”๋“œ๋Š” DLL์ด๋‚˜ export ํ•จ์ˆ˜์—์„œ ๋‚˜์˜จ ๋ชจ๋“  ํ•ด์‹œ๊ฐ’์— ์ ์šฉ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‘ ๋ถ€๋ถ„์˜ ๋กœ์ง์€ ์œ ์‚ฌํ•˜์ง€๋งŒ ๋™์ผํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์ด์ œ ์šฐ๋ฆฌ๋Š” ๋‹ค์‹œ sub_88 ๋ฃจํ‹ด์—์„œ ์ค‘๋‹จํ–ˆ๋˜ ์ง€์ ์œผ๋กœ ๋Œ์•„๊ฐ€ ๋ช‡ ๊ฐ€์ง€ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ๋ถ„์„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด์ „๊ณผ ๋น„์Šทํ•œ ๋ฐฉ์‹์œผ๋กœ ์ €๋Š” HashDB๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•จ์ˆ˜ ํ•ด์‹œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์‹ค์ œ ํ•จ์ˆ˜ ์ด๋ฆ„์œผ๋กœ ๊ต์ฒดํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

[Figure 27] sub_88 ๋ฃจํ‹ด์˜ ๋‘ ๋ฒˆ์งธ ํŒŒํŠธ (์ฒซ ๋ฒˆ์งธ ํŒŒํŠธ: Figure 08)

 

 

WSASocketA ํ•จ์ˆ˜์˜ ํ”„๋กœํ† ํƒ€์ž…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

[Figure 28] WSAScocketA ํ•จ์ˆ˜ ํ”„๋กœํ† ํƒ€์ž… (์ถœ์ฒ˜: Microsoft Learn)

 

 

WSASocketA ํ•จ์ˆ˜๋Š” ์ƒ์„ฑ๋œ ์†Œ์ผ“์„ ์ฐธ์กฐํ•˜๋Š” ๋””์Šคํฌ๋ฆฝํ„ฐ(descriptor)๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. Figure 28์— ํ‘œ์‹œ๋œ ์ฝ”๋“œ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํฅ๋ฏธ๋กœ์šด ๋‚ด์šฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • WSAStartup ํ•จ์ˆ˜๋กœ๋ถ€ํ„ฐ ๋ฐ˜ํ™˜๋œ ๊ฐ’์€ 0์ด๊ณ  ์ด๋Š” ์„ฑ๊ณต์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

  • ECX ๋ ˆ์ง€์Šคํ„ฐ๋Š” 8๋กœ ์„ค์ •๋˜๊ณ  ์ด๋Š” ๋ฃจํ”„ ๋ช…๋ น์–ด์—์„œ ๋ฐ˜๋ณต ํšŸ์ˆ˜๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • EAX๊ฐ€ 0์ธ ๊ฐ’์ด ์—ฌ๋Ÿฌ ๋ฒˆ ์Šคํƒ์— push๋˜๋Š”๋ฐ ์ด๋Š” do/while ๊ตฌ์กฐ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

  • ์ถ”๊ฐ€์ ์œผ๋กœ ๋‘ ๋ฒˆ์˜ push๊ฐ€ ์žˆ์œผ๋ฉฐ ์ด ๊ฐ’๋“ค์€ ์ˆœ์ฐจ์ ์œผ๋กœ 1์”ฉ ์ฆ๊ฐ€ํ•ฉ๋‹.

  • ๊ฒฐ๊ณผ์ ์œผ๋กœ WSA_Socket ํ•จ์ˆ˜์˜ ์ฒซ ๋ฒˆ์งธ ์ธ์ž๋Š” 2(AF_INET), ๋‘ ๋ฒˆ์งธ ์ธ์ž๋Š” 1(SOCK_STREAM)์œผ๋กœ TCP ํ†ต์‹ ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • ์„ธ ๋ฒˆ์จฐ ์ธ์ž๋Š” 0์œผ๋กœ ํ”„๋กœํ† ์ฝœ์€ ์ž๋™์œผ๋กœ ์„ ํƒ๋ฉ๋‹ˆ๋‹ค(๋ฌผ๋ก  TCP์ž…๋‹ˆ๋‹ค).

  • ๋‚˜๋จธ์ง€ ์ธ์ž๋“ค์€ ๋ชจ๋‘ 0์ž…๋‹ˆ๋‹ค.

 

์ฝ”๋“œ์˜ ๋‘ ๋ฒˆ์งธ ๋ถ€๋ถ„์—๋Š” bind ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ, ํ•ด๋‹น ํ•จ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ”„๋กœํ† ํƒ€์ž…์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

[Figure 29] bind ํ•จ์ˆ˜ ํ”„๋กœํ† ํƒ€์ž… (์ถœ์ฒ˜: Microsoft Learn)

 

์ฝ”๋“œ ๋‘ ๋ฒˆ์งธ ๋ถ€๋ถ„์— ๋Œ€ํ•œ ๋ฏธํ•ด๊ฒฐ ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • WSASocketA ํ•จ์ˆ˜์—์„œ ๋ฐ˜ํ™˜๋œ ๋””์Šคํฌ๋ฆฝํ„ฐ๋Š” EAX์— ์ €์žฅ๋œ ํ›„ EDI๋กœ ๊ต์ฒด๋˜์–ด bind ํ•จ์ˆ˜์˜ ์ฒซ ๋ฒˆ์งธ ์ธ์ž๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค(line 0xC7 ์ฐธ๊ณ ).

  • ๋‘ ๋ฒˆ์งธ ์ธ์ž๋Š” ๊นŒ๋‹ค๋กœ์šด๋ฐ 0x0F270002 ๊ฐ’์ด ์Šคํƒ์— ํ‘ธ์‹œ๋˜๊ณ (line 0xBD), ์ด ๊ฐ’์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๊ฐ€ ESI์— ์ €์žฅ๋˜์–ด(line 0xC2), bind ํ•จ์ˆ˜์˜ ๋‘ ๋ฒˆ์งธ ์ธ์ž๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • ๋‘ ๋ฒˆ์งธ ์ธ์ž์˜ ์‹ค์ œ ํƒ€์ž…์€ sockaddr_in์ด๊ณ , ์ด๋Š” ๊ณง ๋‹ค๋ฃฐ ํŠน์ • ์ •์˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์„ธ ๋ฒˆ์งธ ์ธ์ž๋Š” addr(๋‘๋ฒˆ์งธ ์ธ์ž)๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’์˜ ๊ธธ์ด๋กœ, ๊ทธ ๊ฐ’์€ 0x10(16)์ด๊ณ  ๊ฐ’(immediate value)์œผ๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

 

์ง„ํ–‰ํ•˜๊ธฐ ์ „์— ๋‘ ๋ฒˆ์งธ ์ธ์ž์˜ ๊ตฌ์กฐ์ฒด๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณต์Šตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Microsoft Learn ์›น์‚ฌ์ดํŠธ์—์„œ ์–ธ๊ธ‰๋œ ์„ธ๋ถ€ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

"SOCKADDR_IN ๊ตฌ์กฐ์ฒด์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š”, ๋„คํŠธ์›Œํฌ ๋ฐ”์ดํŠธ ์ˆœ์„œ(๋น… ์—”๋””์•ˆ)๋กœ ์ง€์ •๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."

sockaddr_in ๊ตฌ์กฐ์ฒด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

[Figure 30] sockaddr_in ๊ตฌ์กฐ์ฒด (์ถœ์ฒ˜: Microsoft Learn)

 

๋‘ ๋ฒˆ์งธ ์ธ์ž ๊ฐ’์€ 0x0F270002์ด๊ณ , ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • sin_family = 0200: AF_NET
  • sin_port = 270F (9999): ์†Œ์ผ“์€ ํ•ด๋‹น ํฌํŠธ์— ๋ฐ”์ธ๋”ฉ๋ฉ๋‹ˆ๋‹ค.
  • in_addr = 0.0.0.0: ์„œ๋ฒ„๋Š” ๋ชจ๋“  IP ์ฃผ์†Œ์— ๋ฐ”์ธ๋”ฉ๋ฉ๋‹ˆ๋‹ค.

 

์ด์ „ ์•„ํ‹ฐํด๋“ค์—์„œ ์†Œ์ผ“ ํ†ต์‹ ์„ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ˆœ์„œ์— ๋Œ€ํ•ด ์ด๋ฏธ ์–ธ๊ธ‰ํ–ˆ์ง€๋งŒ, ๋‹ค์‹œ ํ•œ ๋ฒˆ ์„ค๋ช…ํ•ด๋„ ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ ์ธก ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•œ ์ˆœ์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    • WSAStartup
    • socket
    • connect
    • send | recv

  • ์„œ๋ฒ„ ์ธก ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•œ ์ˆœ์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    • WSAStartup
    • socket
    • bind
    • listen
    • accept
    • recv | send

 

์ด ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ์—์„œ์˜ ๊ตฌ์„ฑ์€ ์„œ๋ฒ„ ์ธก์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ด ์‰˜์ฝ”๋“œ๋Š” ๊ธฐ๋ณธ ๋„คํŠธ์›Œํฌ ์–ด๋Œ‘ํ„ฐ(๋ฉ”์ธ IP์ฃผ์†Œ)์™€ ํฌํŠธ 9999์— ๋ฐ”์ธ๋”ฉ๋œ ์†Œ์ผ“์„ ์œ ์ง€ํ•˜๋ฉฐ, TCP๋ฅผ ์ „์†ก ํ”„๋กœํ† ์ฝœ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. sub_88 ํ•จ์ˆ˜์˜ ๋‹ค์Œ ๋ถ€๋ถ„์€ ์ด์ „ ๋ถ€๋ถ„๋ณด๋‹ค ๋ถ„์„์ด ๋” ์‰ฝ๊ณ  ๋ช‡ ๊ฐ€์ง€๋งŒ ์–ธ๊ธ‰ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

[Figure 30] sub_88 ๋ฃจํ‹ด์˜ ์„ธ ๋ฒˆ์งธ ํŒŒํŠธ

๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‚ฌ์‹ค๋“ค์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์„œ๋ฒ„ ์ธก ์—ฐ๊ฒฐ์—๋Š” ์˜ˆ์ƒ๋˜๋Š” ๋ชจ๋“  ํ•จ์ˆ˜๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๊ณ , ์œ ์ผํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„์—์„œ recv/send ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜์ง€ ์•Š๊ณ  ๋Œ€์‹  CreateProcessA๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์—ฐ๊ฒฐ๋˜์ž๋งˆ์ž ๋ช…๋ น ํ”„๋กฌํ”„ํŠธ๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค(์ฃผ์†Œ 0xEB์—์„œ "cmd" ํ™•์ธ).

  • WaitForSingleObject๋Š” ๊ฐ์ฒด(ํ”„๋กœ์„ธ์Šค)๊ฐ€ ์‹ ํ˜ธ๋ฅผ ๋ฐ›์„ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค(finished).

  • ๋งˆ์ง€๋ง‰์œผ๋กœ ํ”„๋กœ์„ธ์Šค์™€ ๊ด€๋ จ๋œ ์Šค๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

 

์ด ์ฒซ ๋ฒˆ์งธ ์‰˜์ฝ”๋“œ๋Š” ๋ถ„์„ํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒƒ์€ ์•„๋‹ˆ์—ˆ์ง€๋งŒ, ๋‹ค์–‘ํ•œ ๊ฐœ๋…๊ณผ ๊ด€์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ถ„๋ช…ํžˆ ๋งŽ์€ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ๋ถ„์„์—์„œ ์ƒ๋žตํ–ˆ์ง€๋งŒ, ์ œ์‹œ๋œ ๋‚ด์šฉ์€ ๋‹ค๋ฅธ ์‰˜์ฝ”๋“œ ๋ถ„์„์—์„œ๋„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

โ— Example 02

์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” ์ด ์ƒ˜ํ”Œ์„ ๋ถ„์„ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค: d26d5e9e0b05f94be8b86dc7410604cac85557a8f7bdf709beb95ee8cbb98c60.

HxD๋กœ ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

[Figure 32] HxD๋กœ ๋ณธ shellcode_02.bin

 

์ด ์ƒ˜ํ”Œ์€ PE ์‹คํ–‰ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. IDA๋กœ ์—ด์–ด์„œ ์ „์ฒด ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋””์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค: File → Produce File → Create C File.

[Figure 33] IDA Pro๋กœ ๋ณธ shellcode_02.bin

 

์—ฌ๊ธฐ์„œ ๋ช‡ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ์ฃผ์˜์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • IDA Pro์—์„œ ์ฒ˜์Œ ํ‘œ์‹œ๋˜๋Š” ๋ฃจํ‹ด์€ main์ž…๋‹ˆ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ์ด ๋ฐ”์ด๋„ˆ๋ฆฌ์˜ ์ง„์ž…์ (entry point)์ด ์•„๋‹™๋‹ˆ๋‹ค.
  • .tls์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์„น์…˜๋“ค์ด ๊ฒฐ๊ตญ ์ค‘์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ง„์ž…์  ๋ชฉ๋ก์€ CTRL+E๋ฅผ ๋ˆŒ๋Ÿฌ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[Figure 34] ์ง„์ž…์  ๋ชฉ๋ก

 

๋ณด์‹œ๋‹ค์‹œํ”ผ ๋‘ ๊ฐœ์˜ TLS ์ฝœ๋ฐฑ์ด ์žˆ๊ณ  ์‹œ์ž‘ ๋ฃจํ‹ด์ด ์ฃผ์š” ์ง„์ž…์ ์ด ํ‘œ์‹œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

CTRL+S๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„น์…˜์„ ๋‚˜์—ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[Figure 35] ์„น์…˜ ๋ชฉ๋ก

์‹ค์ œ๋กœ TLS ์„น์…˜์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์‹œ์ž‘ ๋ฃจํ‹ด์„ ์กฐ์‚ฌํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

[Figure 36] ์‹œ์ž‘ ๋ฃจํ‹ด

 

 

start → sub_401180 → sub_4020F0 → sub_0x401EB0 ์ˆœ์„œ๋กœ ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ๋”ฐ๋ผ๊ฐ€๋ณด๋ฉด, ์ด ํ•จ์ˆ˜์—์„œ VirtualProtect๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ ๊ถŒํ•œ์œผ๋กœ RWX๋กœ ๋ณ€๊ฒฝํ•˜๋ ค๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[Figure 37] sub_401EB0

 

์ง€๊ธˆ์œผ๋กœ์„œ๋Š” ์ด RWX ์˜์—ญ์˜ ๋ชฉ์ ์„ ์•Œ ์ˆ˜ ์—†์ง€๋งŒ(์‚ฌ์‹ค ์™„์ „ ๋ชจ๋ฅด๋Š” ๊ฑด ์•„๋‹™๋‹ˆ๋‹ค), ์ด๋Š” TlsCallback_0 ํ˜ธ์ถœ(invocation) ์งํ›„์— ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. TlsCallback_0 ๋ฐ TlsCallback_1์— ๋Œ€ํ•ด์„œ๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ๋‚ด์— ์กด์žฌํ•  ์ˆ˜ ์žˆ๋Š” ์‰˜์ฝ”๋“œ๋ฅผ ์ฐพ๊ณ  ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์šฐ๋ฆฌ์˜ ์ฃผ์š” ๋ชฉํ‘œ์ด๋ฏ€๋กœ ๋ถ„์„ํ•˜์ง€ ์•Š๊ฒ ์ง€๋งŒ, ์ง„์ž…์ ์œผ๋กœ ์ง€์ •๋œ ํ•จ์ˆ˜๋“ค์€ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์ƒํ™ฉ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ํ•ญ์ƒ ํ™•์ธํ•˜๊ณ  ๋ถ„์„ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ main ํ•จ์ˆ˜๋กœ ์ดˆ์ ์„ ์˜ฎ๊ฒจ๋ณด๋ฉด(Figure 33), sub_401840(์ฃผ์†Œ 0x402CEE) ํ˜ธ์ถœ์ด ์žˆ์œผ๋ฉฐ ๊ทธ ๋‚ด์šฉ์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

[Figure 38] sub_401840

์œ„ ์ฝ”๋“œ์—์„œ ๋ช‡ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ฌธ์ž์—ด \\.\pipe\MSSE-<value>-server๊ฐ€ ์Šคํƒ์— ์ƒ์„ฑ๋˜๋ฉฐ ์—ฌ๊ธฐ์„œ value๋Š” TickCount % 9898์˜ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ด๋Š” ์ „ํ˜•์ ์ธ Cobalt Strike ์•„ํ‹ฐํŒฉํŠธ์ž…๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์—ฌ๊ธฐ์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: https://www.cobaltstrike.com/blog/learn-pipe-fitting-for-all-of-your-offense-projects.

  • CreateThread ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜์–ด ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ ์‹คํ–‰์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ์—๊ฒŒ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ธ์ž๋Š” ์„ธ ๋ฒˆ์งธ ์ธ์ž(lpStartAddress)์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ ๋‹จ๊ณ„๋Š” ์Šค๋ ˆ๋“œ๋กœ ์‹œ์ž‘๋˜๋Š” sub_401713 ๋ฃจํ‹ด์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

 

๋‹ค์Œ ๋‹จ๊ณ„๋Š” ์Šค๋ ˆ๋“œ๋กœ ์‹œ์ž‘๋˜๋Š” sub_401713 ๋ฃจํ‹ด์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

[Figure 39] sub_401713

 

byte_403014 ๋‚ด์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

[Figure 40] byte_403014

 

 

SHIFT+E๋ฅผ ๋ˆŒ๋Ÿฌ ์ด ๋‚ด์šฉ์„ ์ถ”์ถœํ•˜๊ณ  raw ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ์ €์žฅํ•˜์„ธ์š”.

[Figure 41] ๋ฐ์ดํ„ฐ ์ถ”์ถœ

 

ํŒŒ์ผ์˜ ๊ธฐ๋ณธ์ ์ธ ์ •๋ณด๋ฅผ ํ™•์ธํ•ด๊ฒ ์Šต๋‹ˆ๋‹ค.

[Figure 42] ์ถ”์ถœ๋œ ํŒŒ์ผ์˜ ๊ธฐ๋ณธ์ ์ธ ์ •๋ณด ํ™•์ธ

 

IDA Pro๋กœ ์—ด์–ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

[Figure 43] IDA Pro๋กœ ๋ณธ ์ถ”์ถœ๋œ ํŒŒ์ผ: ์ด์ƒํ•œ ๋ช…๋ น๋“ค

 

์ด๋Ÿฌํ•œ ๋™์ž‘์€ ์œ„ ์ฝ”๋“œ๊ฐ€ ์ธ์ฝ”๋”ฉ๋˜์–ด ์žˆ๋‹ค๋Š” ๋ช…ํ™•ํ•œ ์‹ ํ˜ธ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋จผ์ € ์ด๋ฅผ ๋””์ฝ”๋”ฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์›๋ž˜์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ๋Œ์•„๊ฐ€์„œ ํŠนํžˆ Figure 39์—์„œ๋Š” sub_401648 ํ˜ธ์ถœ์ด ์žˆ์œผ๋ฉฐ ๊ทธ ๋‚ด์šฉ์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

[Figure 44] sub_401648

 

์ด ํ•จ์ˆ˜๋Š” ๋ช…๋ช…๋œ ํŒŒ์ดํ”„(named pipe)๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ํ•ด๋‹น ํŒŒ์ดํ”„์— ์—ฐ๊ฒฐํ•œ ๋’ค ๋ฒ„ํผ์˜ ๋‚ด์šฉ์„ ์ €์žฅํ•˜๋Š”๋ฐ, ์ด ๋ฒ„ํผ ๋‚ด์šฉ์ด ๋ฐ”๋กœ ์šฐ๋ฆฌ๊ฐ€ ์ถ”์ถœํ•œ (๊ทธ๋ฆฌ๊ณ  ์ธ์ฝ”๋”ฉํ•œ) ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.

Figure 38 (sub_401840)๋กœ ๋‹ค์‹œ ๋Œ์•„๊ฐ€๋ณด๋ฉด ์ฃผ์†Œ 0x004018F5์—์„œ jmp sub_4017E2 ๋ช…๋ น์–ด๊ฐ€ ์žˆ์œผ๋ฉฐ ๊ทธ ๋‚ด์šฉ์€ ์•„๋ž˜์— ๋‚˜์™€์žˆ์Šต๋‹ˆ๋‹ค.

[Figure 45] sub_4017E2

 

sub_401732 ๋ฃจํ‹ด(์ฃผ์†Œ 0x401815)์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ReadFile๊ณผ WriteFile ํ•จ์ˆ˜ ํ˜ธ์ถœ ์Œ์„ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฃจํ‹ด์€ NumberOfBytesToRead์™€ lpBuffer๋ฅผ ์ธ์ž๋กœ ๋ฐ›๊ณ , ์ด ๋ฒ„ํผ(lpBuffer)๋Š” Figure 40์—์„œ ์ถ”์ถœ๋œ ์ธ์ฝ”๋”ฉ๋œ ๋ฐ”์ดํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.

๊ทธ ๋‹ค์Œ ํ•จ์ˆ˜์ธ sub_40158E์—๋Š” ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ, unk_403008์—์„œ ๊ฐ€์ ธ์˜จ ์ผ๋ถ€ ๋ฐ”์ดํŠธ๋“ค, ๊ทธ๋ฆฌ๊ณ  ๋™์ผํ•œ ๋ฒ„ํผ๊ฐ€ ์ธ์ž๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ „ํ˜•์ ์ธ ๋ณตํ˜ธํ™” ๋ฃจํ‹ด์˜ ๋™์ž‘ ๋ฐฉ์‹์ด๊ณ , ์ธ์ž๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  • ๋””์ฝ”๋”ฉํ•  ๋ฒ„ํผ (ebx)
  • ๋””์ฝ”๋”ฉํ•  ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ (dwSize)
  • ํ‚ค (unk_403008)

 

Figure 40์—์„œ๋„ ํ™•์ธํ–ˆ๋˜ ํ‚ค๋Š” ์•„๋ž˜์— ๋‹ค์‹œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[Figure 46] unk_403008

 

 

sub_40158E ๋ฃจํ‹ด์„ ์‚ดํŽด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[Figure 47] sub_40158E

 

๊ฐ•์กฐ๋œ ์ฝ”๋“œ ๋ถ€๋ถ„์ด ์‹ค์ œ ๋ณตํ˜ธํ™”๊ฐ€ ์ด๋ฃจ์–ด์ง€๋Š” ๊ณณ์ด๋ฉฐ ์ด๋ฅผ ๋””์ปดํŒŒ์ผ๋Ÿฌ๋กœ ๋ณด๋ฉด ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[Figure 48] sub_40158E (๋””์ปดํŒŒ์ผ๋จ)

 

์ด์ œ ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์‹คํžˆ ์•Œ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์•ž์„œ ์ถ”์ถœํ•œ ์ฝ”๋“œ๊ฐ€ ์˜ˆ์ƒ๋Œ€๋กœ ์ธ์ฝ”๋”ฉ๋˜์–ด ์žˆ์—ˆ๋‹ค๋Š” ๊ฒƒ์ด ๋“œ๋Ÿฌ๋‚ฌ์Šต๋‹ˆ๋‹ค. ์ดํ•ด๋ฅผ ๋” ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋ถ€ ์ˆ˜์ •ํ•œ ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

[Figure 49] sub_40158E (๋””์ปดํŒŒ์ผ ๋ฐ ์žฌ๋ช…๋ช…๋œ ์ฝ”๋“œ)

์—ฌ๊ธฐ ๋ช‡ ๊ฐ€์ง€ ์ฃผ๋ชฉํ•  ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • dwSzie๋Š” 836๋ฐ”์ดํŠธ๋กœ ์ง€์ •๋˜์–ด ์žˆ์ง€๋งŒ(.data:00403004์—์„œ ํ™•์ธ), ์‹ค์ œ ์ถ”์ถœ๋œ ์ฝ”๋“œ๋Š” 1016๋ฐ”์ดํŠธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Š” ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋ฏ€๋กœ ์ง€๊ธˆ์€ ๋‹น์žฅ ๊ฑฑ์ •ํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

  • ํ‚ค๋Š” ๋‹จ์ผ ๋ฐ”์ดํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ 4๋ฐ”์ดํŠธ์ž…๋‹ˆ๋‹ค.

  • ๋ณตํ˜ธํ™” ๊ณผ์ •์€ Figure 49์˜ line 13์ด ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.

 

์ด์ œ ํ•ด์•ผํ•  ์ผ์€ ์•ž์„œ ์ถ”์ถœํ•œ ์ธ์ฝ”๋”ฉ๋œ ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ  ๋ณตํ˜ธํ™”ํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์ƒˆ๋กœ์šด ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๋Š” ํŒŒ์ด์ฌ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์›ํ•˜๋Š” ์–ธ์–ด๋กœ ๊ตฌํ˜„ํ•ด๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

[Figure 50] decryptor_final.py

์Šคํฌ๋ฆฝํŠธ์—๋Š” ์ ์ ˆํ•œ ์ฃผ์„์ด ํฌํ•จ๋˜์–ด ์žˆ๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์œ ํšจํ•œ ์‚ฌํ•ญ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ‚ค๋Š” line 24์— ์ž…๋ ฅํ•˜์˜€์Šต๋‹ˆ๋‹ค(Figure 46์—์„œ ํ‚ค๋ฅผ ํ™•์ธํ•˜์„ธ์š”).

  • ๋””์ปดํŒŒ์ผ๋œ ์ฝ”๋“œ์˜ ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ๊ฑฐ์˜ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜์ง€๋งŒ ์ด๋ฆ„ ptr_mem์€ decoded๋กœ ๋ณ€๊ฒฝํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

IDA Python์œผ๋กœ ๋™์ผํ•œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•ด ๋””์ฝ”๋”ฉํ•  ๋ฐ”์ดํŠธ์™€ ํ‚ค๋ฅผ ์ž๋™์œผ๋กœ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋‹ค๋ฅธ ์ƒ˜ํ”Œ์— ์žฌ์‚ฌ์šฉํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋‚ฎ๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„ ๋‚ญ๋น„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[Figure 51] ๋ณตํ˜ธํ™” ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰

 

์ž˜ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค! ๋ฌผ๋ก  ์ œ๋Œ€๋กœ ๋ณตํ˜ธํ™”๋˜์—ˆ๋Š”์ง€๋Š” IDA Pro์—์„œ ๊ฒ€ํ† ํ•ด๋ด์•ผ ๋˜์ง€๋งŒ, User-Agent์™€ IP ์ฃผ์†Œ๊ฐ€ ์ค‘๊ฐ„์— ์ด์ƒํ•œ ๋ฌธ์ž ์—†์ด ํ‰๋ฌธ์œผ๋กœ ๋ณด์ธ๋‹ค๋Š” ๊ฒƒ์€ ๋ณตํ˜ธํ™” ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ–ˆ์Œ์„ ๋ณด์—ฌ์ฃผ๋Š” ์ข‹์€ ์‹ ํ˜ธ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ ์„น์…˜์—์„œ๋Š” ์ถ”์ถœ๋œ ์ฝ”๋“œ๋ฅผ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฒ€ํ† ํ•˜์—ฌ ์‹ค์ œ๋กœ ์‰˜์ฝ”๋“œ์ธ์ง€ ํ™•์ธํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์•„๋ž˜์™€ ๊ฐ™์ด IDA Pro์—์„œ decoded_shellcode.bin์„ ์—ด์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

[Figure 52] ๋ณตํ˜ธํ™”๋œ ์‰˜์ฝ”๋“œ

 

์™„๋ฒฝํ•˜๊ฒŒ ๋ณตํ˜ธํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค! ๋ชจ๋“  ๋‹จ๊ณ„๋ฅผ ๋ณด์—ฌ์ฃผ์ง€ ์•Š์•˜์ง€๋งŒ ๋‹ค์Œ ์ž‘์—…๋“ค์ด ์ˆ˜ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • ํŒŒ์ผ์€ ๋ฐ”์ด๋„ˆ๋ฆฌ(32๋น„ํŠธ)์ž…๋‹ˆ๋‹ค.

  • ์ฒซ ๋ฒˆ์งธ ๋ฐ”์ดํŠธ๊ฐ€ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค(C ๋‹จ์ถ•ํ‚ค).

  • ์ฒซ ๋ฒˆ์งธ ๋ช…๋ น์–ด์—์„œ P ํ‚ค๋ฅผ ๋ˆŒ๋Ÿฌ ์ƒˆ ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

์ด ์‹œ์  ์ดํ›„๋กœ๋Š” ์ฒซ ๋ฒˆ์งธ ์˜ˆ์ œ์—์„œ ์‚ฌ์šฉํ•œ ๋™์ผํ•œ ์ ‘๊ทผ ๋ฐฉ์‹๊ณผ ๊ธฐ์ˆ ์„ ๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ๊ณ  ๋ชจ๋“  ๊ฒƒ์ด ์ž˜ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

IDA Pro์—์„œ ์‰˜์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜๋Š” ๊ฒƒ์€ ํ•ญ์ƒ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ ๊ฒฝ์šฐ์— ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ์ค€๋น„๋˜์–ด ๋ถ„์„๋  ์ˆ˜ ์žˆ๋„๋ก ์‚ฌ์ „ ์ž‘์—…์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

[Emulation]

์‰˜์ฝ”๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด, ๊ทธ ์‹คํ–‰์„ ์—๋ฎฌ๋ ˆ์ด์…˜ํ•˜์—ฌ ๋ฌด์—‡์„ ํ•˜๊ณ  ์‹œ์Šคํ…œ๊ณผ ์–ด๋–ป๊ฒŒ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์‰˜์ฝ”๋“œ ์—๋ฎฌ๋ ˆ์ดํ„ฐ๊ฐ€ ์žˆ์ง€๋งŒ ์ž˜ ์•Œ๋ ค์ง„ ๋‘ ๊ฐ€์ง€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

๋‘ ๊ฐ€์ง€ ๋ชจ๋‘ ์‰˜์ฝ”๋“œ ์—๋ฎฌ๋ ˆ์ด์…˜์— ํšจ์œจ์ ์ด์ง€๋งŒ, Speakeasy๋Š” ํ›จ์”ฌ ๋” ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ , ์˜ˆ๋ฅผ ๋“ค์–ด Cobalt Strike ๋น„์ฝ˜๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ ๋งค์šฐ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

example 02์—์„œ ์ถ”์ถœํ•œ ์‰˜์ฝ”๋“œ๋Š” ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์‰ฝ๊ฒŒ ์—๋ฎฌ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์‹ฌ์ง€์–ด Wine์„ ํ†ตํ•ด Linux์—์„œ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค).

[Figure 53] scdbg๋ฅผ ํ†ตํ•œ ์‰˜์ฝ”๋“œ ์—๋ฎฌ๋ ˆ์ด์…˜

 

์œ„ ๋ช…๋ น์–ด๋Š” ๊ฐ„๋‹จํ•˜๋‹ˆ ๋ชจ๋“  ๋ช…๋ น์–ด๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ณผ์ •์„ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋„๋ก ๋‹จ๊ณ„(/s ์˜ต์…˜)๋ฅผ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค. IP ์ฃผ์†Œ์— ๋Œ€ํ•œ ์ •๋ณด๋Š” ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ˆ˜์ง‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[Figure 54] IP ์ฃผ์†Œ ์ •๋ณด

 

speakeasy๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋‹ค๋ฅด์ง€ ์•Š๊ณ  ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‰˜์ฝ”๋“œ ์ƒ˜ํ”Œ์„ ์—๋ฎฌ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[Figure 55] speakeasy๋ฅผ ํ†ตํ•œ ์‰˜์ฝ”๋“œ ์—๋ฎฌ๋ ˆ์ด์…˜

 

 

๋‹ค๋ฅธ ์˜ˆ๋กœ๋Š” Cobalt Strike ๋น„์ฝ˜๊ณผ ๊ฐ™์€ ์•ฝ๊ฐ„ ๋‹ค๋ฅธ ์œ ํ˜•์˜ ์‰˜์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์‰˜์ฝ”๋“œ๋Š” ์ด์ „ ์‰˜์ฝ”๋“œ์™€ ๋™์ผํ•œ ํ–‰์œ„๋ฅผ ํ•˜์ง€๋งŒ ์ถ”๊ฐ€์ ์ธ ์ง€ํ‘œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • shellcode_03.bin: f067744430110ffc62618ceac48f764d4be90ee44f3bd6bcf8c5d1ba0a8d046e

 

ํ™•์ธํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

[Figure 56] shellcode_03.bin ๋‚ด์šฉ

 

์ด ์ฝ”๋“œ๊ฐ€ ์‰˜์ฝ”๋“œ๋ผ๋Š” ๊ฐ•๋ ฅํ•œ ๋‹จ์„œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. IDA Pro์—์„œ ๋ถ„์„ํ•˜๋Š” ๋Œ€์‹ (์ ˆ์ฐจ๋Š” ์ด์ „๊ณผ ๋™์ผํ•˜๋ฏ€๋กœ), ์ด๋ฒˆ์—๋Š” speakeasy๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฅผ ์—๋ฎฌ๋ ˆ์ด์…˜ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

[Figure 57] speakeay๋ฅผ ํ†ตํ•œ shellcode_03.bin ์—๋ฎฌ๋ ˆ์ด์…˜

 

์—๋ฎฌ๋ ˆ์ด์…˜ ๊ฒฐ๊ณผ๋กœ ์ƒ์„ฑ๋œ report.json์˜ ๋งˆ์ง€๋ง‰ ์ค„์„ ํ™•์ธํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

[Figure 58] report.json

 

IP ์ฃผ์†Œ๋ฅผ ํ†ตํ•ด ์ˆ˜์ง‘ํ•œ ์ •๋ณด์ž…๋‹ˆ๋‹ค.

[Figure 59] IP ์ฃผ์†Œ ์ •๋ณด

 

memory_dump.zip ํŒŒ์ผ์„ ๋ณ„๋„์˜ ๋””๋ ‰ํ† ๋ฆฌ์— ๋ณต์‚ฌํ•˜๊ณ  ๊ทธ๊ณณ์—์„œ ์••์ถ•์„ ํ•ด์ œํ•˜์„ธ์š”. ์••์ถ•์„ ํ•ด์ œํ•˜๋ฉด ์—ฌ๋Ÿฌ ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜๋Š”๋ฐ ์—๋ฎฌ๋ ˆ์ด์…˜ ๋ณด๊ณ ์„œ(Figure 58)์— ๋”ฐ๋ฅด๋ฉด ์‹ค์ œ๋กœ ์ค‘์š”ํ•œ ์ฝ”๋“œ ์„ธ๊ทธ๋จผํŠธ๋Š” api.VirtualAlloc.0x50000์ด๊ณ , ์ด ์„ธ๊ทธ๋จผํŠธ๋Š” ์—๋ฎฌ๋ ˆ์ด์…˜๋œ ์‰˜์ฝ”๋“œ์˜ ๋‚ด์šฉ์„ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

[Figure 60] ๋™์  ์ฝ”๋“œ ์„ธ๊ทธ๋จผํŠธ์˜ ๋‚ด์šฉ

 

 

 

[Conclusion]

์ด ๊ธ€์—์„œ๋Š” ์‰˜์ฝ”๋“œ ๋ถ„์„์— ๋Œ€ํ•œ ์ž…๋ฌธ ๋‚ด์šฉ์„ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค. ๋” ๋งŽ์€ ์˜ˆ์ œ๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์ด๋ฏธ ์ œ์‹œ๋œ ์˜ˆ์ œ๋“ค๊ณผ ์ƒ๋‹นํžˆ ์œ ์‚ฌํ•˜๋ฏ€๋กœ ๋‘ ๊ฐœ๋งŒ ๋‹ค๋ค„๋ดค์Šต๋‹ˆ๋‹ค.

Keep learning, reversing, and exploiting everything, and I will see you next time!