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๋ ๋ฏฟ์ ์ ์๋ ๋ฌด๋ฃ ์ํ ์ถ์ฒ ์ฌ์ดํธ์ด๊ณ , ์๋ ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ ํด๋น ์ํ ๋ชฉ๋ก์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ 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)
๋ค์๊ณผ ๊ฐ์ด ์ฒ์ ๋์ค๋ 16์ง์ ๊ฐ๋ค(opcode)์ ๋น ๋ฅด๊ฒ ๋๋ชจ๋(mnemonic)์ผ๋ก ๋ณํํ ์ ์์ต๋๋ค(์ธํฐ๋ท์ ๋ค์ํ opcode ํ ์ด๋ธ์ด ์์ต๋๋ค).
- 0xFC: cld(clear direction flag). ๋ฌธ์์ด ์ฒ๋ฆฌ ์ ESI/EDI ๋ ์ง์คํฐ๊ฐ ์ฆ๊ฐํ ์ง ๊ฐ์ํ ์ง๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
- 0xE8: call
- 0x82: call ๋ช ๋ น์ ์ํด ํธ์ถ๋ ๋ฃจํด์ ์คํ์ ์ด๋ฉฐ ์ค์ ์ง์ ์ (entry point)์ ๋๋ค.
๊ฒ๋ณด๊ธฐ์ ์ ์ฉํ ๋ฌธ์์ด์ ์๊ณ ์ด ์์ฝ๋๋ ์ด 328๋ฐ์ดํธ๋ก ์งง์ต๋๋ค. IDA๋ก ์์ฝ๋๋ฅผ ์ด์ด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ ํ๋ฉด์ ํ์ธํ ์ ์์ต๋๋ค.
์ด๊ฑด PE ํฌ๋งท๋ ์๋๊ณ ์์ฝ๋์ด๊ธฐ ๋๋ฌธ์ ๋จ์ผ ์ต์ ๋ง ์์ต๋๋ค.
๋ ๊ฐ์ ๋์ค์ด์ ๋ธ๋ฆฌ ๋ชจ๋๊ฐ ์๋๋ฐ ์ ํฌ๋ 32๋นํธ๋ฅผ ์ ํํด์ผ ํฉ๋๋ค.
ํ์ผ์ IDA์์ ์ด๋ฉด ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ๋ณผ ์ ์์ต๋๋ค. ๋ณผ ์ ์๋ฏ์ด ์ด์ ๋ธ๋ฆฌ ๋ช ๋ น์ด๋ ์๊ณ ํ์ผ์ด ๋ฐ์ด๋๋ฆฌ ํ์ผ๋ก ๋ถ์๋์๊ธฐ ๋๋ฌธ์ IDA๋ ์ถ๊ฐ์ ์ธ ํด์์ ์ ๊ณตํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ค์ ๋จ๊ณ๋ ์ ํฌ๊ฐ ๊ฒฐ์ ํด์ผ ํฉ๋๋ค.
์ฒซ ๋ฒ์งธ ์์ ์ 0x00000000์ ์ฒซ ๋ฒ์งธ ๋ฐ์ดํธ๋ก ์ปค์๋ฅผ ์ด๋ํ ํ "C"๋ฅผ ๋๋ฌ ์ด๋ฅผ ์ฝ๋๋ก ๋ณํํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ผ ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๊ฐ ํ์๋ฉ๋๋ค.
๊ทธ๋ฌ๋ฉด ์ฆ์ ๋ ๊ฐ์ ๋ช ๋ น์ด๋ฅผ ํ์ธํ ์ ์๋๋ฐ ์ด๋ ์์ opcode๋ฅผ ๋์ฝ๋ฉํ๋ฉฐ ์์๋ธ ๋ด์ฉ๊ณผ ์ ํํ ์ผ์นํฉ๋๋ค. ์ฌ๊ธฐ์ call sub_88 ๋ช ๋ น์ด๋ฅผ ํ์ธํ ์ ์๋๋ฐ ์ด๋ ์คํ ํ๋ฆ์ด 0x88๋ก ์ ํํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ํ์ง๋ง ์ฌ๊ธฐ์๋ ๋ฐ๋์ ๊ธฐ์ตํด์ผํ ๋ฏธ๋ฌํ ํฌ์ธํธ๊ฐ ์์ต๋๋ค. call ๋ช ๋ น์ด๊ฐ ์คํ๋๋ฉด ๋ค์ ๋ช ๋ น์ด์ ์ฃผ์๊ฐ ์คํ์ ๋งจ ์์ ํธ์๋ฉ๋๋ค. ๋ถ์์ ๊ณ์ํด๋ณด๋ฉด ์ฃผ์ 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)์ ๋๋ฌํ ์ ์์ต๋๋ค.
์ฝ๋์์ 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)์์ ๋ค์๊ณผ ๊ฐ์ด ํ์ธํ ์ ์์ต๋๋ค.
๋ค์ ๋์๊ฐ๋ณด๋ฉด ์ด ์์ ์์ ๋ถ์์ ์ ์ ๋ฉ์ถ๊ณ EBP์ ์ ์ฅ๋ ๊ฐ์ ์ดํดํด์ผ ํฉ๋๋ค. ์ฃผ์ 0x88์ ๋ช ๋ น์ ํตํด ์ค์ ๋ ํ์ฌ EBP๋ ํจ์ ํฌ์ธํฐ๋ฅผ ๋ณด์ ํ๊ณ ์์ต๋๋ค. ์ด ์ฃผ์์ pop ebp ๋ช ๋ น์ด๊ฐ ์กด์ฌํ๋ฏ๋ก EBP ๊ฐ์ ์คํ ์ต์๋จ์์ ๊ฐ์ ธ์จ ๊ฒ์ ๋๋ค. Figure 06์์ ์ฃผ์ 0x06์๋ ์ผ๋ จ์ ๋ฐ์ดํธ๋ค์ด ์์๊ณ , ์ด๋ฅผ ์ฝ๋๋ก ๋ณํ(C ํค ๋๋ฅด๊ธฐ)ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ฒ ๋ฉ๋๋ค.
์ฌ๊ธฐ์ ์ ์ฉํ ๋ช ๋ น๋ค์ ํ์ธํ์ฌ ํจ์๋ผ๋ ๊ฒ(prologue์ ๋๋ค)์ ์ ์ ์์ต๋๋ค. ์์ง ํจ์๋ก ์ง์ ๋์ง ์์๊ธฐ ๋๋ฌธ์ ์ฃผ์๋ค์ด ๋นจ๊ฐ์์ ํ์๋๋๋ฐ P ํค๋ฅผ ๋๋ฌ ํจ์๋ก ์ ํํด์ค ์ ์์ต๋๋ค. P๋ฅผ ๋๋ฌ ํจ์๋ก ์ค์ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
์์ ํ ๋ง์กฑ์ค๋ฝ์ง ์์ง๋ง ์ฝ๋๊ฐ ์กฐ๊ธ ๋์์ ธ์ ์์ฝ๋ ํํ์ ์ ์ฌํด์ก์ต๋๋ค.๊ทธ๋ฐ๋ฐ ์ ์์ ํ ์์ฝ๋ ํํ๊ฐ ์๋๊น์? ์ด ์ฝ๋๋ 32๋นํธ์ด๊ณ ์ผ๋ฐ์ ์ผ๋ก ์ด๋ฐ ์ฝ๋์์๋ EBP ๊ธฐ๋ฐ ํ๋ ์์ ์ฌ์ฉํ๋ ๊ฑฐ์ด ์ผ๋ฐ์ ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. sub_6 ํจ์์ ์ปค์๋ฅผ ๋๊ณ ALT+P ํค๋ฅผ ๋๋ฌ ํด๋น ์ค์ ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ๋ํ ์์ ์ค๋ฅธ์ชฝ์ BP based frame ์ฒดํฌ๋ฐ์ค๋ฅผ ํตํด ํ์ฑํํ ์ ์์ต๋๋ค. ์ฒดํฌํ ํ OK๋ฅผ ๋๋ฅด๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
์กฐ๊ธ ๋ ๋์์ก์ง๋ง ์ฌ์ ํ ๊ฐ์ ํ ์ฌ์ง๊ฐ ๋จ์์์ต๋๋ค. ์ด ๋ฃจํด์ ์ด์ ์ ํ์๋์ง ์์๋ ์ธ์๋ฅผ ๋ฐ์ต๋๋ค. 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)์ ๋ํ ์ฐธ์กฐ๊ฐ ์์ต๋๋ค. ์๋์ ๊ฐ์ต๋๋ค.
fs:[0]๋ ๋ํ TIB (Thread Information Block)์ ํฌ์ธํฐ์ด์ง๋ง, ํฅ๋ฏธ๋ก์ด ๋ถ๋ถ์ ์๋๋๋ค. IDA์์ ์ ๊ณต๋ PEB ๊ตฌ์กฐ์ฒด๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
PEB ๊ตฌ์กฐ์ฒด๊ฐ ํจ์ฌ ํฌ์ง๋ง ์ง๊ธ ์ ํฌ ๋ชฉ์ ์๋ ์ด ์ ๋๋ฉด ์ถฉ๋ถํฉ๋๋ค. ์คํ์ 0xC(Figure 12์ ์คํ์ 0xF ์ฐธ์กฐ)์ PEB_LDR_DATA๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๊ฐ ์์ต๋๋ค. ํด๋น ๊ตฌ์กฐ์ฒด๋ ๋ค์๊ณผ ๊ฐ์ ํํ์ ๋๋ค.
์ด์ ์ค์ํ ์ฝ๋ ์กฐ๊ฐ์ด ๋ฑ์ฅํฉ๋๋ค. ์คํ์ 0x14(Figure 12์ ์คํ์ 0x12 ์ฐธ์กฐ)์๋ InMemoryOrderModuleList ํ๋๊ฐ ์์ต๋๋ค. ์ด ํ๋๋ LIST_ENTRY ๊ตฌ์กฐ์ฒด ํ์ ์ด๋ฉฐ ์๋์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๊ตฌ์ฑ๋ ์ด์ค ์ฐ๊ฒฐ(doubled-linked) ๊ตฌ์กฐ์ฒด๋ฅผ ๋ํ๋ ๋๋ค.
๋ฐ๋ผ์ InMemoryOrderModuleList ํ๋๋ ๋ค๋ฅธ _LIST_ENTRY๋ฅผ ๊ฐ๋ฆฌํค๋ *Flink ํฌ์ธํฐ๋ฅผ ํฌํจํ๊ณ ์์ต๋๋ค.
_LIST_ENTRY ๊ตฌ์กฐ์ฒด๋ ๊ตฌ์กฐํ๋ ์ฒด์ธ์ ์ดํดํ ์ ์๋๋ก ํด์ค๋๋ค. InMemoryOrderModuleList ํ๋์ ํฌ์ธํฐ(Flink์ Blink)๋ ์๋ค๋ก ๋ค๋ฅธ _LIST_ENTRY ๊ตฌ์กฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ฉฐ, ์ด๋ค ๋ค๋ฅธ ๊ตฌ์กฐ์ฒด์ ์ผ๋ถ์ผ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ์ฐ๋ฆฌ๊ฐ DLL ๋ชจ๋๋ค์ ๋ค๋ฃจ๊ณ ์์ผ๋ฏ๋ก ์ฐธ์กฐ๋๋ ๊ตฌ์กฐ์ฒด๋ LDR_DATA_TABLE_ENTRY์ด๋ฉฐ ์ด์ ์ ์ค๋ช ํ ๋์ผํ ์ ์ฐจ๋ฅผ ๋ฐ๋ผ IDA์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
์ฃผ์ 0x15์ ์ฝ๋๋ฅผ ๋ถ์ํด๋ณด๋ฉด mov esi, [edx+28h] ๋ช ๋ น์ด๊ฐ ์๋๋ฐ, ์คํ์ 0x28์ ์ฐธ์กฐํ๋ผ๋ ์๋ฏธ์ ๋๋ค. ํ์ง๋ง _LDR_DATA_TABLE_ENTRY ๊ตฌ์กฐ์ฒด๋ฅผ ์ดํด๋ณด๋ฉด ํด๋น ์คํ์ ์ ์กด์ฌํ์ง ์์ต๋๋ค. ์๋ํ๋ฉด ์ค์ ๋ก๋ ์ฝ๋๊ฐ ์คํ์ 0x24 + 0x4 ์์น์ ์ ๊ทผํ๊ณ ์๋๋ฐ ์ด๋ _UNICODE_STRING ๊ตฌ์กฐ์ฒด์ ๊ตฌ์ฑ ๋๋ฌธ์ ๋๋ค.
์ด ์ฝ๋๋ _UNICODE_STRING ๊ตฌ์กฐ์ฒด์ Buffer ํ๋์ ์ ๊ทผํ๊ณ ์์ต๋๋ค. ๋์ผํ ๋ฐฉ์์ผ๋ก ์ฃผ์ 0x18(mov esi, [edx+26h]) ๋ช ๋ น์ ๊ฐ์ _UNICODE_STRING ๊ตฌ์กฐ์ฒด์ MaximumLength ํ๋์ ์ ๊ทผํ๋ ๊ฒ์ ๋๋ค. ์ง๊ธ๊น์ง ์ฌ์ฉํ ๊ตฌ์กฐ์ฒด๋ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- _TEB
- _PEB
- _LDR_DATA
- _LDR_DATA_TABLE_ENTRY
- _UNICODE_STRING
์ด์ ์ด๋ค ๊ตฌ์กฐ์ฒด๋ค์ด ์ ๊ทผ๋๊ณ ์๋์ง ์๊ฒ ๋์์ผ๋ ์ด์ ์ ์ค๋ช ํ ์ ์ฐจ๋๋ก ์ด ๊ตฌ์กฐ์ฒด๋ค์ ์ถ๊ฐํ๊ณ , T ํค๋ฅผ ์ฌ์ฉํด ๊ฐ ํ๋์ ์ ์ ํ ํ์ ์ ์ง์ ํด์ฃผ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
๋ค์ ์ฝ๋๋ ์๋์ ๊ฐ์ต๋๋ค.
์ฃผ์(๋๋ ๋ผ์ธ) 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 ํ์ ์ ๋๋ค. ์๋ ๊ทธ๋ฆผ์ ๊ทธ ๊ตฌ์กฐ์ฒด๊ฐ ๋์์์ต๋๋ค.
์ ๊ทธ๋ฆผ์ ๋ถ์ํด๋ณด๋ฉด ๋์ ํ๋๋ SectionPointer์ด๋ฉฐ, ์ด๋ ๋ฐ์ด๋๋ฆฌ ์์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ์ ๋๋ค. ์ด ์ง์ ๋ถํฐ๋ PE ๊ตฌ์กฐ๋ฅผ ์ดํด๋ณด๊ฒ ๋ ๊ฒ์ ๋๋ค. ์ด์ ๊ธ๋ค์์ ์ํํ๋ ๋์ผํ ๋ฐฉ์์ผ๋ก ๊ตฌ์กฐ์ฒด๋ฅผ ์ ์ฉํ์ฌ ์งํํ๋ฉด ๋ฉ๋๋ค.
๋ชจ๋ ๊ตฌ์กฐ์ฒด๋ค์ ์๋์ ๊ฐ์ต๋๋ค.
๊ฐ๋จํ ๋งํด์ ์ด ์ฝ๋๋ address of names ๋ฐฐ์ด์ RVA์ DLL์ ๊ฐ์๋ฅผ ์ป๊ธฐ ์ํด ๋ฐ์ด๋๋ฆฌ๋ฅผ ํ์ฑํ๊ณ ์๋ ๊ฒ์ ๋๋ค.
Figure 20์ ๋ง์ง๋ง ์ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ ๋ช ๋ น์ด๋ค์ address of names์ ์ฃผ์๋ฅผ ํ์ฑํ๋๋ฐ ์ฌ์ฉ๋๊ณ , ๊ฐ๊ฐ์ 4๋ฐ์ดํธ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. ์ด๋ก์จ ํด๋น ๋จ๊ณ๊ฐ ์ข ๋ฃ๋๊ณ ๋ค์ ๋จ๊ณ๋ฅผ ๋ถ์ํ ์ฐจ๋ก์ ๋๋ค.
์ด ๋ถ๋ถ์ ์ด์ ๊ณผ ์ ์ฌํ์ง๋ง ์ด๋ฒ์๋ ํจ์ ์ด๋ฆ๊ณผ ์ฃผ์์ ๊ดํ ๊ฒ์ ๋๋ค.
- pop eax ๋ช
๋ น์ ์คํ์ ์ต์๋จ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ๋ฉฐ ์ด๋ IMAGE_DATA_DIRECTORY๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ์
๋๋ค.
- ๋ฐ์ด๋๋ฆฌ๋ AddressOfNameOrdinals ๋ฐฐ์ด์ ์ ๊ทผํ์ฌ ๊ฐ ํญ๋ชฉ์ ๊ฐ์ ธ์ต๋๋ค.
- ์ด๋ ๊ฒ ๊ฐ์ ธ์จ ์์๊ฐ์ ํตํด ํด๋น ํจ์์ ์ฃผ์๋ ํจ๊ป ๋ณต๊ตฌ๋ฉ๋๋ค.
- popa ๋ช
๋ น์ด๋ ์ด์ ์ pusha ๋ช
๋ น์ด๋ฅผ ๋๋๋ฆฌ๊ธฐ ์ ์ ๋์ฝ๋ฉ๋ ๋ฐ์ดํธ๋ฅผ ๊ฐ์ ธ์ค๊ณ , _LDR_DATA_TABLE_ENTRY๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ ๋ณต์๋ฉ๋๋ค.
- ์ด ์์ ์ดํ, ์ฌ๋ฐ๋ฅธ ํจ์๊ฐ ๋ฐ๊ฒฌ๋๋ฉด ํด๋น ํจ์๊ฐ ํธ์ถ๋๋ฉฐ ๊ทธ๋ ์ง ์์ผ๋ฉด ์ฝ๋๊ฐ ๊ณ์ ๊ฒ์์ ์ํํ์ฌ ์ฌ๋ฐ๋ฅธ ํจ์๋ฅผ ์ฐพ์ ๋๊น์ง ๋ฐ๋ณตํฉ๋๋ค.
์ผ๋ถ ์ธ๋ถ ๋ด์ฉ์ ์๋ตํ์ง๋ง ์ง๊ธ์ ์ด ์ ๋๋ฉด ์ถฉ๋ถํฉ๋๋ค. ์๋์ ํ์๋ ์ฝ๋๊ฐ ์ด์ด์ง๋๋ค.
์ค์ํ ์ ์ sub_6 ํจ์์ ์ฝ๋๋ DLL์ด๋ export ํจ์์์ ๋์จ ๋ชจ๋ ํด์๊ฐ์ ์ ์ฉ๋๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ๋ถ๋ถ์ ๋ก์ง์ ์ ์ฌํ์ง๋ง ๋์ผํ์ง๋ ์์ต๋๋ค. ์ด์ ์ฐ๋ฆฌ๋ ๋ค์ sub_88 ๋ฃจํด์์ ์ค๋จํ๋ ์ง์ ์ผ๋ก ๋์๊ฐ ๋ช ๊ฐ์ง ์ธ๋ถ ์ฌํญ์ ๋ถ์ํด์ผ ํฉ๋๋ค. ์ด์ ๊ณผ ๋น์ทํ ๋ฐฉ์์ผ๋ก ์ ๋ HashDB๋ฅผ ์ฌ์ฉํ์ฌ ํจ์ ํด์๋ฅผ ๊ฒ์ํ๊ณ ์ค์ ํจ์ ์ด๋ฆ์ผ๋ก ๊ต์ฒดํ ์์ ์ ๋๋ค.
WSASocketA ํจ์์ ํ๋กํ ํ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
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 ํจ์ ํธ์ถ์ด ํฌํจ๋์ด ์์ผ๋ฉฐ, ํด๋น ํจ์๋ ๋ค์๊ณผ ๊ฐ์ ํ๋กํ ํ์ ์ ๊ฐ์ง๋๋ค.
์ฝ๋ ๋ ๋ฒ์งธ ๋ถ๋ถ์ ๋ํ ๋ฏธํด๊ฒฐ ์ฌํญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- 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 ๊ตฌ์กฐ์ฒด๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ ๋ฒ์งธ ์ธ์ ๊ฐ์ 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 ํจ์์ ๋ค์ ๋ถ๋ถ์ ์ด์ ๋ถ๋ถ๋ณด๋ค ๋ถ์์ด ๋ ์ฝ๊ณ ๋ช ๊ฐ์ง๋ง ์ธ๊ธํด๋ณด๊ฒ ์ต๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ์ฌ์ค๋ค์ ์ ์ ์์ต๋๋ค.
- ์๋ฒ ์ธก ์ฐ๊ฒฐ์๋ ์์๋๋ ๋ชจ๋ ํจ์๊ฐ ํฌํจ๋์ด ์๊ณ , ์ ์ผํ ๋ณ๊ฒฝ ์ฌํญ์ ๋ง์ง๋ง ๋ถ๋ถ์์ recv/send ํจ์๊ฐ ํธ์ถ๋์ง ์๊ณ ๋์ CreateProcessA๊ฐ ํธ์ถ๋๋ค๋ ๊ฒ์
๋๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์ฐ๊ฒฐ๋์๋ง์ ๋ช
๋ น ํ๋กฌํํธ๊ฐ ์คํ๋ฉ๋๋ค(์ฃผ์ 0xEB์์ "cmd" ํ์ธ).
- WaitForSingleObject๋ ๊ฐ์ฒด(ํ๋ก์ธ์ค)๊ฐ ์ ํธ๋ฅผ ๋ฐ์ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค(finished).
- ๋ง์ง๋ง์ผ๋ก ํ๋ก์ธ์ค์ ๊ด๋ จ๋ ์ค๋ ๋๊ฐ ์ข ๋ฃ๋ฉ๋๋ค.
์ด ์ฒซ ๋ฒ์งธ ์์ฝ๋๋ ๋ถ์ํ๊ธฐ ์ด๋ ค์ด ๊ฒ์ ์๋์์ง๋ง, ๋ค์ํ ๊ฐ๋ ๊ณผ ๊ด์ ์ ์ ๊ณตํฉ๋๋ค. ๋ถ๋ช ํ ๋ง์ ์ธ๋ถ ์ฌํญ์ ๋ถ์์์ ์๋ตํ์ง๋ง, ์ ์๋ ๋ด์ฉ์ ๋ค๋ฅธ ์์ฝ๋ ๋ถ์์์๋ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค.
โ Example 02
์ด๋ฒ ์๊ฐ์๋ ์ด ์ํ์ ๋ถ์ํด๋ณด๊ฒ ์ต๋๋ค: d26d5e9e0b05f94be8b86dc7410604cac85557a8f7bdf709beb95ee8cbb98c60.
HxD๋ก ํ์ธํด๋ณด๊ฒ ์ต๋๋ค.
์ด ์ํ์ PE ์คํ ํ์ผ์ ๋๋ค. IDA๋ก ์ด์ด์ ์ ์ฒด ๋ฐ์ด๋๋ฆฌ๋ฅผ ๋์ปดํ์ผํฉ๋๋ค: File → Produce File → Create C File.
์ฌ๊ธฐ์ ๋ช ๊ฐ์ง ์ค์ํ ์ฃผ์์ฌํญ์ด ์์ต๋๋ค.
- IDA Pro์์ ์ฒ์ ํ์๋๋ ๋ฃจํด์ main์ ๋๋ค.
- ๊ทธ๋ฌ๋ ์ด๊ฒ์ ์ด ๋ฐ์ด๋๋ฆฌ์ ์ง์ ์ (entry point)์ด ์๋๋๋ค.
- .tls์ ๊ฐ์ ๋ค๋ฅธ ์น์ ๋ค์ด ๊ฒฐ๊ตญ ์ค์ํ ์ ์์ต๋๋ค.
์ง์ ์ ๋ชฉ๋ก์ CTRL+E๋ฅผ ๋๋ฌ ํ์ธํ ์ ์์ต๋๋ค.
๋ณด์๋ค์ํผ ๋ ๊ฐ์ TLS ์ฝ๋ฐฑ์ด ์๊ณ ์์ ๋ฃจํด์ด ์ฃผ์ ์ง์ ์ ์ด ํ์๋์ด ์์ต๋๋ค.
CTRL+S๋ฅผ ์ฌ์ฉํ์ฌ ์น์ ์ ๋์ดํ ์ ์์ต๋๋ค.
์ค์ ๋ก TLS ์น์ ์ด ์์์ต๋๋ค.
์์ ๋ฃจํด์ ์กฐ์ฌํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
start → sub_401180 → sub_4020F0 → sub_0x401EB0 ์์๋ก ํจ์ ํธ์ถ์ ๋ฐ๋ผ๊ฐ๋ณด๋ฉด, ์ด ํจ์์์ VirtualProtect๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ ๊ถํ์ผ๋ก RWX๋ก ๋ณ๊ฒฝํ๋ ค๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
์ง๊ธ์ผ๋ก์๋ ์ด RWX ์์ญ์ ๋ชฉ์ ์ ์ ์ ์์ง๋ง(์ฌ์ค ์์ ๋ชจ๋ฅด๋ ๊ฑด ์๋๋๋ค), ์ด๋ TlsCallback_0 ํธ์ถ(invocation) ์งํ์ ๋ํ๋ฉ๋๋ค. TlsCallback_0 ๋ฐ TlsCallback_1์ ๋ํด์๋ ๋ฐ์ด๋๋ฆฌ ๋ด์ ์กด์ฌํ ์ ์๋ ์์ฝ๋๋ฅผ ์ฐพ๊ณ ์ดํดํ๋ ๊ฒ์ด ์ฐ๋ฆฌ์ ์ฃผ์ ๋ชฉํ์ด๋ฏ๋ก ๋ถ์ํ์ง ์๊ฒ ์ง๋ง, ์ง์ ์ ์ผ๋ก ์ง์ ๋ ํจ์๋ค์ ์๊ธฐ์น ์์ ์ํฉ์ ํผํ๊ธฐ ์ํด ํญ์ ํ์ธํ๊ณ ๋ถ์ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
์ด์ main ํจ์๋ก ์ด์ ์ ์ฎ๊ฒจ๋ณด๋ฉด(Figure 33), sub_401840(์ฃผ์ 0x402CEE) ํธ์ถ์ด ์์ผ๋ฉฐ ๊ทธ ๋ด์ฉ์ ์๋์ ๊ฐ์ต๋๋ค.
์ ์ฝ๋์์ ๋ช ๊ฐ์ง ์ค์ํ ์ฌํญ์ด ์์ต๋๋ค.
- ๋ฌธ์์ด \\.\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 ๋ฃจํด์ ํ์ธํ๋ ๊ฒ์ ๋๋ค.
byte_403014 ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
SHIFT+E๋ฅผ ๋๋ฌ ์ด ๋ด์ฉ์ ์ถ์ถํ๊ณ raw ๋ฐ์ด๋๋ฆฌ๋ก ์ ์ฅํ์ธ์.
ํ์ผ์ ๊ธฐ๋ณธ์ ์ธ ์ ๋ณด๋ฅผ ํ์ธํด๊ฒ ์ต๋๋ค.
IDA Pro๋ก ์ด์ด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ด๋ฌํ ๋์์ ์ ์ฝ๋๊ฐ ์ธ์ฝ๋ฉ๋์ด ์๋ค๋ ๋ช ํํ ์ ํธ์ด๊ธฐ ๋๋ฌธ์ ๋จผ์ ์ด๋ฅผ ๋์ฝ๋ฉํด์ผ ํฉ๋๋ค.
์๋์ ๋ฐ์ด๋๋ฆฌ๋ก ๋์๊ฐ์ ํนํ Figure 39์์๋ sub_401648 ํธ์ถ์ด ์์ผ๋ฉฐ ๊ทธ ๋ด์ฉ์ ์๋์ ๊ฐ์ต๋๋ค.
์ด ํจ์๋ ๋ช ๋ช ๋ ํ์ดํ(named pipe)๋ฅผ ์์ฑํ๊ณ , ํด๋น ํ์ดํ์ ์ฐ๊ฒฐํ ๋ค ๋ฒํผ์ ๋ด์ฉ์ ์ ์ฅํ๋๋ฐ, ์ด ๋ฒํผ ๋ด์ฉ์ด ๋ฐ๋ก ์ฐ๋ฆฌ๊ฐ ์ถ์ถํ (๊ทธ๋ฆฌ๊ณ ์ธ์ฝ๋ฉํ) ๋ฐ์ดํฐ์ ๋๋ค.
Figure 38 (sub_401840)๋ก ๋ค์ ๋์๊ฐ๋ณด๋ฉด ์ฃผ์ 0x004018F5์์ jmp sub_4017E2 ๋ช ๋ น์ด๊ฐ ์์ผ๋ฉฐ ๊ทธ ๋ด์ฉ์ ์๋์ ๋์์์ต๋๋ค.
sub_401732 ๋ฃจํด(์ฃผ์ 0x401815)์ ๊ธฐ๋ณธ์ ์ผ๋ก ReadFile๊ณผ WriteFile ํจ์ ํธ์ถ ์์ ํฌํจํ๊ณ ์์ต๋๋ค. ์ด ๋ฃจํด์ NumberOfBytesToRead์ lpBuffer๋ฅผ ์ธ์๋ก ๋ฐ๊ณ , ์ด ๋ฒํผ(lpBuffer)๋ Figure 40์์ ์ถ์ถ๋ ์ธ์ฝ๋ฉ๋ ๋ฐ์ดํธ๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
๊ทธ ๋ค์ ํจ์์ธ sub_40158E์๋ ๋ฐ์ดํฐ์ ํฌ๊ธฐ, unk_403008์์ ๊ฐ์ ธ์จ ์ผ๋ถ ๋ฐ์ดํธ๋ค, ๊ทธ๋ฆฌ๊ณ ๋์ผํ ๋ฒํผ๊ฐ ์ธ์๋ก ์ ๋ฌ๋ฉ๋๋ค. ์ด๋ ์ ํ์ ์ธ ๋ณตํธํ ๋ฃจํด์ ๋์ ๋ฐฉ์์ด๊ณ , ์ธ์๋ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ์ฑ๋ฉ๋๋ค.
- ๋์ฝ๋ฉํ ๋ฒํผ (ebx)
- ๋์ฝ๋ฉํ ๋ฐ์ดํฐ์ ํฌ๊ธฐ (dwSize)
- ํค (unk_403008)
Figure 40์์๋ ํ์ธํ๋ ํค๋ ์๋์ ๋ค์ ๋ณผ ์ ์์ต๋๋ค.
sub_40158E ๋ฃจํด์ ์ดํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ ํ์ธํ ์ ์์ต๋๋ค.
๊ฐ์กฐ๋ ์ฝ๋ ๋ถ๋ถ์ด ์ค์ ๋ณตํธํ๊ฐ ์ด๋ฃจ์ด์ง๋ ๊ณณ์ด๋ฉฐ ์ด๋ฅผ ๋์ปดํ์ผ๋ฌ๋ก ๋ณด๋ฉด ๋ ๋ช ํํ๊ฒ ์ดํดํ ์ ์์ต๋๋ค.
์ด์ ์ด๋ค ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ํ์คํ ์ ์ ์์ผ๋ฉฐ ์์ ์ถ์ถํ ์ฝ๋๊ฐ ์์๋๋ก ์ธ์ฝ๋ฉ๋์ด ์์๋ค๋ ๊ฒ์ด ๋๋ฌ๋ฌ์ต๋๋ค. ์ดํด๋ฅผ ๋ ์ฝ๊ฒ ํ๊ธฐ ์ํด ์ผ๋ถ ์์ ํ ์ฝ๋๋ ์๋์ ๊ฐ์ต๋๋ค.
์ฌ๊ธฐ ๋ช ๊ฐ์ง ์ฃผ๋ชฉํ ์ฌํญ์ด ์์ต๋๋ค.
- dwSzie๋ 836๋ฐ์ดํธ๋ก ์ง์ ๋์ด ์์ง๋ง(.data:00403004์์ ํ์ธ), ์ค์ ์ถ์ถ๋ ์ฝ๋๋ 1016๋ฐ์ดํธ์
๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ ์๋์ผ๋ก ์ฒ๋ฆฌ๋๋ฏ๋ก ์ง๊ธ์ ๋น์ฅ ๊ฑฑ์ ํ์ง ์์๋ ๋ฉ๋๋ค.
- ํค๋ ๋จ์ผ ๋ฐ์ดํธ๊ฐ ์๋๋ผ 4๋ฐ์ดํธ์
๋๋ค.
- ๋ณตํธํ ๊ณผ์ ์ Figure 49์ line 13์ด ํต์ฌ์ ๋๋ค.
์ด์ ํด์ผํ ์ผ์ ์์ ์ถ์ถํ ์ธ์ฝ๋ฉ๋ ์ฝ๋๋ฅผ ์ฝ๊ณ ๋ณตํธํํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์๋ก์ด ํ์ผ๋ก ์ ์ฅํ๋ ํ์ด์ฌ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋๋ค. ๋ฌผ๋ก ์ํ๋ ์ธ์ด๋ก ๊ตฌํํด๋ ๊ด์ฐฎ์ต๋๋ค.
์คํฌ๋ฆฝํธ์๋ ์ ์ ํ ์ฃผ์์ด ํฌํจ๋์ด ์๊ณ ๋ค์๊ณผ ๊ฐ์ ์ ํจํ ์ฌํญ๋ค์ด ์์ต๋๋ค.
- ํค๋ line 24์ ์
๋ ฅํ์์ต๋๋ค(Figure 46์์ ํค๋ฅผ ํ์ธํ์ธ์).
- ๋์ปดํ์ผ๋ ์ฝ๋์ ๋ณ์ ์ด๋ฆ์ ๊ฑฐ์ ๊ทธ๋๋ก ์ฌ์ฉํ์ง๋ง ์ด๋ฆ ptr_mem์ decoded๋ก ๋ณ๊ฒฝํ์์ต๋๋ค.
IDA Python์ผ๋ก ๋์ผํ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํด ๋์ฝ๋ฉํ ๋ฐ์ดํธ์ ํค๋ฅผ ์๋์ผ๋ก ์ถ์ถํ ์ ์์ง๋ง, ๋ค๋ฅธ ์ํ์ ์ฌ์ฌ์ฉํ ๊ฐ๋ฅ์ฑ์ด ๋ฎ๊ธฐ ๋๋ฌธ์ ์๊ฐ ๋ญ๋น์ผ ์ ์์ต๋๋ค.
์ ์๋ํ์ต๋๋ค! ๋ฌผ๋ก ์ ๋๋ก ๋ณตํธํ๋์๋์ง๋ IDA Pro์์ ๊ฒํ ํด๋ด์ผ ๋์ง๋ง, User-Agent์ IP ์ฃผ์๊ฐ ์ค๊ฐ์ ์ด์ํ ๋ฌธ์ ์์ด ํ๋ฌธ์ผ๋ก ๋ณด์ธ๋ค๋ ๊ฒ์ ๋ณตํธํ ์คํฌ๋ฆฝํธ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ์์ ๋ณด์ฌ์ฃผ๋ ์ข์ ์ ํธ์ ๋๋ค. ๋ค์ ์น์ ์์๋ ์ถ์ถ๋ ์ฝ๋๋ฅผ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ๊ฒํ ํ์ฌ ์ค์ ๋ก ์์ฝ๋์ธ์ง ํ์ธํ ๊ฒ์ ๋๋ค.
๋ฐ๋ผ์ ์๋์ ๊ฐ์ด IDA Pro์์ decoded_shellcode.bin์ ์ด์ด๋ณด๊ฒ ์ต๋๋ค.
์๋ฒฝํ๊ฒ ๋ณตํธํ๋์์ต๋๋ค! ๋ชจ๋ ๋จ๊ณ๋ฅผ ๋ณด์ฌ์ฃผ์ง ์์์ง๋ง ๋ค์ ์์ ๋ค์ด ์ํ๋์์ต๋๋ค.
- ํ์ผ์ ๋ฐ์ด๋๋ฆฌ(32๋นํธ)์
๋๋ค.
- ์ฒซ ๋ฒ์งธ ๋ฐ์ดํธ๊ฐ ์ฝ๋๋ก ๋ณํ๋์์ต๋๋ค(C ๋จ์ถํค).
- ์ฒซ ๋ฒ์งธ ๋ช ๋ น์ด์์ P ํค๋ฅผ ๋๋ฌ ์ ํจ์๋ฅผ ์์ฑํ์์ต๋๋ค.
์ด ์์ ์ดํ๋ก๋ ์ฒซ ๋ฒ์งธ ์์ ์์ ์ฌ์ฉํ ๋์ผํ ์ ๊ทผ ๋ฐฉ์๊ณผ ๊ธฐ์ ์ ๋ฐ๋ณตํ ์ ์๊ณ ๋ชจ๋ ๊ฒ์ด ์ ์๋ํด์ผ ํฉ๋๋ค.
IDA Pro์์ ์์ฝ๋๋ฅผ ๋ถ์ํ๋ ๊ฒ์ ํญ์ ๊ฐ๋ฅํ์ง๋ง ์ฌ๋ฌ ๊ฒฝ์ฐ์ ๋ฐ์ด๋๋ฆฌ๊ฐ ์ค๋น๋์ด ๋ถ์๋ ์ ์๋๋ก ์ฌ์ ์์ ์ด ํ์ํ ์ ์์ต๋๋ค.
[Emulation]
์์ฝ๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ฉด, ๊ทธ ์คํ์ ์๋ฎฌ๋ ์ด์ ํ์ฌ ๋ฌด์์ ํ๊ณ ์์คํ ๊ณผ ์ด๋ป๊ฒ ์ํธ์์ฉํ๋์ง ์ ์ ์์ต๋๋ค. ์ฌ๋ฌ ์์ฝ๋ ์๋ฎฌ๋ ์ดํฐ๊ฐ ์์ง๋ง ์ ์๋ ค์ง ๋ ๊ฐ์ง๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- scdbg: https://sandsprite.com/blogs/index.php/index.php?uid=7&pid=152
- speakeasy: https://github.com/mandiant/speakeasy
๋ ๊ฐ์ง ๋ชจ๋ ์์ฝ๋ ์๋ฎฌ๋ ์ด์ ์ ํจ์จ์ ์ด์ง๋ง, Speakeasy๋ ํจ์ฌ ๋ ๋ง์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ , ์๋ฅผ ๋ค์ด Cobalt Strike ๋น์ฝ๊ณผ ๊ฐ์ ๋๊ตฌ๋ฅผ ๊ด๋ฆฌํ๋๋ฐ ๋งค์ฐ ์ ํฉํฉ๋๋ค.
example 02์์ ์ถ์ถํ ์์ฝ๋๋ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ ์ฝ๊ฒ ์๋ฎฌ๋ ์ด์ ํ ์ ์์ต๋๋ค(์ฌ์ง์ด Wine์ ํตํด Linux์์๋ ๊ฐ๋ฅํฉ๋๋ค).
์ ๋ช ๋ น์ด๋ ๊ฐ๋จํ๋ ๋ชจ๋ ๋ช ๋ น์ด๊ฐ ์คํ๋๋ ๊ณผ์ ์ ๋ณด์ฌ์ค ์ ์๋๋ก ๋จ๊ณ(/s ์ต์ )๋ฅผ ๋ณ๊ฒฝํ์ต๋๋ค. IP ์ฃผ์์ ๋ํ ์ ๋ณด๋ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ ์์งํ ์ ์์ต๋๋ค.
speakeasy๋ฅผ ์ฌ์ฉํด๋ ๋ค๋ฅด์ง ์๊ณ ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์์ฝ๋ ์ํ์ ์๋ฎฌ๋ ์ด์ ํ ์ ์์ต๋๋ค.
๋ค๋ฅธ ์๋ก๋ Cobalt Strike ๋น์ฝ๊ณผ ๊ฐ์ ์ฝ๊ฐ ๋ค๋ฅธ ์ ํ์ ์์ฝ๋๋ฅผ ๋ถ์ํ๋ ๊ฒ์ ๋๋ค. ์ด ์์ฝ๋๋ ์ด์ ์์ฝ๋์ ๋์ผํ ํ์๋ฅผ ํ์ง๋ง ์ถ๊ฐ์ ์ธ ์งํ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- shellcode_03.bin: f067744430110ffc62618ceac48f764d4be90ee44f3bd6bcf8c5d1ba0a8d046e
ํ์ธํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ด ์ฝ๋๊ฐ ์์ฝ๋๋ผ๋ ๊ฐ๋ ฅํ ๋จ์๊ฐ ์์ต๋๋ค. IDA Pro์์ ๋ถ์ํ๋ ๋์ (์ ์ฐจ๋ ์ด์ ๊ณผ ๋์ผํ๋ฏ๋ก), ์ด๋ฒ์๋ speakeasy๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ์๋ฎฌ๋ ์ด์ ํ๊ฒ ์ต๋๋ค.
์๋ฎฌ๋ ์ด์ ๊ฒฐ๊ณผ๋ก ์์ฑ๋ report.json์ ๋ง์ง๋ง ์ค์ ํ์ธํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
IP ์ฃผ์๋ฅผ ํตํด ์์งํ ์ ๋ณด์ ๋๋ค.
memory_dump.zip ํ์ผ์ ๋ณ๋์ ๋๋ ํ ๋ฆฌ์ ๋ณต์ฌํ๊ณ ๊ทธ๊ณณ์์ ์์ถ์ ํด์ ํ์ธ์. ์์ถ์ ํด์ ํ๋ฉด ์ฌ๋ฌ ํ์ผ์ด ์์ฑ๋๋๋ฐ ์๋ฎฌ๋ ์ด์ ๋ณด๊ณ ์(Figure 58)์ ๋ฐ๋ฅด๋ฉด ์ค์ ๋ก ์ค์ํ ์ฝ๋ ์ธ๊ทธ๋จผํธ๋ api.VirtualAlloc.0x50000์ด๊ณ , ์ด ์ธ๊ทธ๋จผํธ๋ ์๋ฎฌ๋ ์ด์ ๋ ์์ฝ๋์ ๋ด์ฉ์ ํฌํจํ๊ณ ์์ต๋๋ค.
[Conclusion]
์ด ๊ธ์์๋ ์์ฝ๋ ๋ถ์์ ๋ํ ์ ๋ฌธ ๋ด์ฉ์ ์ ๊ณตํ์ต๋๋ค. ๋ ๋ง์ ์์ ๋ฅผ ๋ค๋ฃฐ ์๋ ์์ง๋ง ์ด๋ฏธ ์ ์๋ ์์ ๋ค๊ณผ ์๋นํ ์ ์ฌํ๋ฏ๋ก ๋ ๊ฐ๋ง ๋ค๋ค๋ดค์ต๋๋ค.
Keep learning, reversing, and exploiting everything, and I will see you next time!
'Malware > malware analysis series' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Malware Analysis Series (MAS) โ Article 7 (0) | 2025.04.29 |
---|---|
Malware Analysis Series (MAS) โ Article 6 (0) | 2025.04.25 |
Malware Analysis Series (MAS) โ Article 5 (0) | 2025.03.25 |
Malware Analysis Series (MAS) โ Article 4 (1) | 2025.03.06 |
Malware Analysis Series (MAS) โ Article 3 (0) | 2025.02.17 |