๋ฌธ์ : DreamHack โ [CodeEngn] Malware L07 ๋ถ๋ฅ: Reversing / Misc (์ ์ ์ ์ฑ์ฝ๋ ๋ถ์) ๋์ด๋: ๐ฅ Bronze 4 FLAG:
614400
๋ฐ์ด๋๋ฆฌ๋, ์๋ฒ๋ ์ฃผ์ง ์๋๋ค. ์ฃผ์ด์ง๋ ๊ฑด PDF ํ ์ฅ๋ฟ์ด๊ณ , ๊ทธ ์์ IDA Pro๊ฐ ๊ทธ๋ฆฐ ์ด๋ค ์ ์ฑ์ฝ๋์ control-flow ๊ทธ๋ํ๊ฐ ์บก์ณ๋ผ ์๋ค. ๋ฌธ์ ๋ "์ด ์ ์ฑ์ฝ๋๋ ํน์ ์ฌ์ดํธ ์ ์์ ์คํจํ๋ฉด ๋ช ms ๊ฐ๊ฒฉ์ผ๋ก ์ฌ์ ์ํ๋๊ฐ"๋ฅผ ๋ฌป๋๋ค. ๋ฐ์ด๋๋ฆฌ๋ฅผ ์์ ์ฅ๊ณ objdump๋ gdb๋ฅผ ๋๋ฆด ํ์๊ฐ ์๋ค โ ๊ทธ๋ํ ์์ ์ฌ์๋ ๋ฃจํ๋ง ๋ฐ๋ผ๊ฐ๋ฉด ๋ต์ด ๋ฐ๋ก ๋์จ๋ค.

๋ฌธ์ ๊ฐ์
| ํญ๋ชฉ | ๋ด์ฉ |
|---|---|
| ๋ฌธ์ ๋ช | [CodeEngn] Malware L07 |
| ๋์ด๋ | ๐ฅ Bronze 4 |
| ๋ถ๋ฅ | Reversing / Misc |
| ์ ๊ณต ํ์ผ | 07.pdf (IDA control-flow ๊ทธ๋ํ ์บก์ณ, ์คํ ํ์ผ ์์) |
| ํต์ฌ ์ทจ์ฝ์ / ๊ธฐ๋ฒ | ์ ์ ๋์ค์ด์ ๋ธ๋ฆฌ ํ๋ โ Sleep() ์ธ์ ํ๋๋ก ์ฌ์ ์ ์ฃผ๊ธฐ ์ญ์ฐ |
๋ฌธ์ ์ค๋ช ์ ํ ๋ฌธ๋จ์ด๋ค. "๋ค์์ ์ ์ฑ์ฝ๋ Flow์ ์ผ๋ถ๋ถ์ด๋ค. ๋ถ์๊ฒฐ๊ณผ ์ด ์ ์ฑ์ฝ๋๋ ํน์ ์ฌ์ดํธ์ ์ ์์ ์๋ ํ๊ณ ์๋๋ฐ ์ ์์ด ์๋ ๊ฒฝ์ฐ ๋ช์ด ๋จ์๋ก ์ฌ์ ์์ ํ๋ค. ๋ชms ๋จ์๋ก ์ฌ์ ์์ ํ๋๊ฐ." ๋ต์ด ๋ ์ซ์๋ ๊ทธ๋ํ ์ ์ด๋๊ฐ์ ์์ ํ๋๋ค.
๐งฉ ๋ฐฐ๊ฒฝ โ CodeEngn Malware ์๋ฆฌ์ฆ์ ์ ์ ๋ถ์
CodeEngn์ ๊ตญ๋ด์์ ์ค๋๋ ๋ฆฌ๋ฒ์ฑ ์คํฐ๋ ์ปค๋ฎค๋ํฐ๊ณ , Basic/Malware ์๋ฆฌ์ฆ๋ ์ค์ ์ ์ฑ์ฝ๋ ์ํ ๋์ IDA๋ก ๋ฌ ๋์ค์ด์ ๋ธ๋ฆฌยท๊ทธ๋ํ ์บก์ณ๋ง ์ ๊ณตํ๋ ๋ฌธ์ ์ ํ์ ์์ฃผ ๋ธ๋ค. ์ํ ์์ฒด๋ฅผ ๋ฐฐํฌํ์ง ์๋ ์ด์ ๋ ๋ช ํํ๋ค โ ์ค๋ฌผ ์ ์ฑ์ฝ๋๋ฅผ ์ ํฌํ์ง ์๊ณ ๋ "์ฝ๋๋ฅผ ์ฝ์ด ๋์์ ์ถ๋ก ํ๋" ๋ฆฌ๋ฒ์ฑ์ ํต์ฌ ํ๋ จ๋ง ๋ฝ์๋ผ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ฒ ๊ทธ๋ํ์ ๋์ค๋ ์ฝ๋๋ bagla_super_downloader_1000์ด๋ผ๋ ๋ฎคํ
์ค ์ด๋ฆ์ผ๋ก ์๊ธฐ ์์ ์ ์ค๋ณต ์คํ์ ๋ง๊ณ , ๋ ์ง์คํธ๋ฆฌ์ RegisterServiceProcess๋ฅผ ๋ฑ๋กํด ์์ ์ ์๋น์ค์ฒ๋ผ ์์ฅํ ๋ค, ์ค๋ ๋๋ฅผ ํ๋ ๋์ http://noshit.fateback.com/์ ์ฃผ๊ธฐ์ ์ผ๋ก ์ ์์ ์๋ํ๋ ์ ํ์ ์ธ ๋ค์ด๋ก๋ํ ์
์ฑ์ฝ๋๋ค. fateback.com์ ๊ณผ๊ฑฐ ๋ฌด๋ฃ ๋ค์ด๋๋ฏน DNS ์๋น์ค๋ก, ์ด๋ฐ ์ด๋ฆ์ C2(๋ช
๋ น์ ์ด) ์๋ฒ ์ฃผ์๋ฅผ ๊ฐ์ธ๊ฒ ๊ตด๋ฆฌ๋ 2000๋
๋ ์
์ฑ์ฝ๋์์ ํํ ๋ณด์ธ๋ค.
๐ฌ ์ ์ฐฐ โ ์ ๊ณต ํ์ผ ์ฝ๊ธฐ
๋ฌธ์ ํ์ผ์ 07.pdf ํ๋๋ฟ์ด๋ค. ์ด์ด๋ณด๋ฉด IDA์ ๊ทธ๋ํ ๋ทฐ๋ฅผ ๊ทธ๋๋ก ์บก์ณํ ์ด๋ฏธ์ง๊ณ , start ํจ์๋ถํฐ ๋ฎคํ
์ค ์์ฑ โ ์๋น์ค ๋ฑ๋ก โ ์ค๋ ๋ ์์ฑ๊น์ง ํ ํ๋ฉด์ ๋ค ๋ค์ด ์๋ค.

start ๋ธ๋ก์ "bagla_super_downloader_1000" ์ด๋ฆ์ผ๋ก ๋ฎคํ
์ค๋ฅผ ๋ง๋ค๊ณ , ์ด๋ฏธ ๋ ์์ผ๋ฉด(GetLastError๊ฐ 0xB7, ์ฆ ERROR_ALREADY_EXISTS) ์กฐ์ฉํ ์ข
๋ฃํ๋ค. ์ฒ์ ์คํ์ด๋ฉด loc_4018D5๋ก ๊ฐ์ RegisterServiceProcess๋ฅผ GetProcAddress๋ก ์ฐพ์ ์์ ์ ์๋น์ค ํ๋ก์ธ์ค๋ก ๋ฑ๋กํ๋ ค ์๋ํ๊ณ , ์ฑ๊ณต ์ฌ๋ถ์ ๋ฌด๊ดํ๊ฒ loc_401911๋ก ๋์ด๊ฐ๋ค.
loc_401911์ด ์ง์ง ๋ชธํต์ด๋ค. CreateThread๋ก ์์ปค ์ค๋ ๋๋ฅผ ํ๋ ๋์ฐ๊ณ , "smtp_bagla_100" ๋ฎคํ
์ค๋ฅผ ๋ ํ๋ ๋ง๋ ๋ค์, sub_4013A1์ ํธ์ถํด "http://noshit.fateback.com/"์ ์ ์์ ์๋ํ๋ค. ์ฌ๊ธฐ์๋ถํฐ๊ฐ ๋ฌธ์ ๊ฐ ๋ฌป๋ ์ฌ์๋ ๋ก์ง์ด๋ค.
๐ฃ ํต์ฌ โ ์ฌ์๋ ๋ฃจํ์ Sleep ์ธ์
sub_4013A1 ํธ์ถ ๋ค cmp eax, 29Ah(= 666)๋ก ๋ฐํ๊ฐ์ ๊ฒ์ฌํ๋ค. ๊ฐ์ด 666์ด ์๋๋ฉด(jnz) ์ ์ ์ข
๋ฃ ๊ฒฝ๋ก์ธ loc_401973๋ก ๋น ์ ธ ๋ฎคํ
์ค๋ฅผ ์ ๋ฆฌํ๊ณ ExitProcess๋ฅผ ๋ถ๋ฅธ๋ค. ๋ฐ๋ฉด 666๊ณผ ๊ฐ์ผ๋ฉด โ ์ฆ ์ ์์ ์คํจํ๋ค๋ ์ ํธ๋ก ๋ณด์ด๋ฉด โ fall-through๋ก 00401966 ๋ธ๋ก์ ๋จ์ด์ง๋ค.
00401966:
push 96000h ; duMilliseconds
call ds:Sleep
jmp short loc_401950 ; sub_4013A1 ์ฌํธ์ถ โ cmp 29Ah ์ฌ๊ฒ์ฌloc_401950์ loc_401911๊ณผ ๋๊ฐ์ด sub_4013A1("http://noshit.fateback.com/")์ ๋ค์ ๋ถ๋ฅด๊ณ ๊ฐ์ cmp eax, 29Ah ๋น๊ต๋ฅผ ๋ฐ๋ณตํ๋ค. ์ฆ ์ด ์ธ ๋ธ๋ก(sub_4013A1 ํธ์ถ โ cmp 29Ah โ ์คํจ ์ Sleep โ ์ฌํธ์ถ)์ด ์ ์์ด ์ฑ๊ณตํ ๋๊น์ง ๋๋ ์ฌ์๋ ๋ฃจํ๋ค.

Sleep()์ ์ธ์๋ ๋ฐ๋ฆฌ์ด ๋จ์ ์ ์๋ค. push 96000h๋ IDA ํ๊ธฐ๋ผ 16์ง์์ด๋ฏ๋ก, 10์ง์๋ก ํ์ฐํด์ผ ๋ฌธ์ ๊ฐ ์๊ตฌํ๋ "๋ช ms"์ ๋ํ ๋ต์ด ๋๋ค.
# 07.pdf loc_401966 ๋ธ๋ก์ ์ฌ์ ์ ์ฌ๋ฆฝ ๊ฐ ํด์
#
# 00401966:
# push 96000h ; duMilliseconds
# call ds:Sleep
# jmp short loc_401950
#
# Sleep()์ ์ธ์๋ ๋ฆฌํ์๋์ push ์์์ ๋ฌด๊ดํ๊ฒ ๊ทธ ์์ฒด๋ก ms ๋จ์ ์ ์๋ค.
# ๊ทธ๋ํ์ ๋ฆฌํฐ๋ด์ 16์ง์ ํ๊ธฐ(h ์ ๋ฏธ์ฌ)์ด๋ฏ๋ก 10์ง์๋ก ๋ณํํ๋ฉด ๋ต์ด ๋์จ๋ค.
sleep_param_hex = 0x96000
print(f"push 96000h -> Sleep({sleep_param_hex} ms)")
print(f"0x96000 = {sleep_param_hex} (decimal ms)")
print(f"{sleep_param_hex} ms = {sleep_param_hex / 1000:.1f} sec")
print(f"ANSWER(flag) = {sleep_param_hex}")
0x96000์ 614400์ด๋ค. ์ด ๋จ์๋ก๋ 614.4์ด, ๋๋ต 10๋ถ 14์ด๋ง๋ค ์ฌ์ ์์ ์๋ํ๋ ์
์ด๋ค. ์งง์ ํด๋ง์ผ๋ก ํ์ง๋ฅผ ์์ดํ์ง ์์ผ๋ฉด์๋, ๋ฐฉ์ด์ ์
์ฅ์์ "10๋ถ ์ฃผ๊ธฐ๋ก ๋ฐ๋ณต๋๋ ๋์ผ ๋ชฉ์ ์ง ์ ์"์ด๋ผ๋ ๋๋ ทํ ํจํด์ ๋จ๊ธฐ๋ ๊ฐ์ด๋ค.
๐ ํ์ธ โ flag ์ ์ถ
614400์ ๊ทธ๋๋ก ์ ์ถํ๋ฉด ์ ๋ต ์ฒ๋ฆฌ๋๋ค. ๋๋ฆผํต UI๊ฐ ์ฒซ ์๋ต์์ ๊ฐํ์ ์ผ๋ก ์ค๋ต ๋ฐฐ์ง๋ฅผ ๋์ฐ๋ ๊ฒฝ์ฐ๊ฐ ์์ด(์ ์๋ ค์ง ํ๋ก ํธ ํ์ด๋ฐ ์ด์), ๊ฐ์ ๊ฐ์ผ๋ก ํ ๋ฒ ๋ ๋๋ฌ ์ ๋ต์ ํ์ ํ๋ค.
python3 dreamhack.py wg 374 --flag 614400
๋ฌธ์ ํ์ด์ง์์๋ "๋๋จํด์! ์ ๋ต์ ๋งํ์ จ๋ค์"๋ก ํ์ธ๋๋ค.

๐ ๊ฒฐ๋ก
๋ฐ์ด๋๋ฆฌ๊ฐ ์์ด๋ ๋ฆฌ๋ฒ์ฑ์ ์ฑ๋ฆฝํ๋ค.
์ด ๋ฌธ์ ์ ๋๋ ค๋ณผ ์คํ ํ์ผ์ด ์๋ค. ์๋ ๊ฑด IDA๊ฐ ๋ฌ ๊ทธ๋ํ ์บก์ณ ํ ์ฅ๋ฟ์ด๊ณ , ๊ทธ๊ฒ๋ง์ผ๋ก๋ ๋ฎคํ ์ค ์ด๋ฆยท์๋น์ค ์์ฅยทC2 ์ฃผ์ยท์ฌ์๋ ๊ฐ๊ฒฉ๊น์ง ํ๋ก๊ทธ๋จ์ ๋์์ ์ ๋ถ ์ฌ๊ตฌ์ฑํ ์ ์์๋ค. ๊ฒฐ๊ตญ ๋ฆฌ๋ฒ์ฑ์์ ์ง์ง ํ์ํ ๊ฑด ๋์ค์ด์ ๋ธ๋ฌ ํ๋ฉด ์์ฒด๊ฐ ์๋๋ผ ๊ทธ ํ๋ฉด์ ์ฐํ ์ด์ ๋ธ๋ฆฌ๋ฅผ ์ฝ์ด๋ด๋ ๋ฅ๋ ฅ์ด๋ค.
์ฌ์๋ ๊ฐ๊ฒฉ์ ๋ฐฉ์ด์์๊ฒ ๋จ๋ ์ง๋ฌธ์ด๋ค.
๊ณต๊ฒฉ์ ์ ์ฅ์์ ์์ฐ์ค๋ฌ์ด ํด๋ง ์ฃผ๊ธฐ์ง๋ง, ๋ฐฉ์ด์ ์ ์ฅ์์ "๋์ผ ๋ชฉ์ ์ง์ ์ ํํ 614.4์ด ๊ฐ๊ฒฉ์ผ๋ก ๋ฐ๋ณต๋๋ ์ฐ๊ฒฐ ์๋"๊ฐ ๊ณง IOC(์นจํด ์งํ)๋ค. ๋ฐฉํ๋ฒฝยทํ๋ก์ ๋ก๊ทธ์์ ์ด๋ฐ ๊ณ ์ ์ฃผ๊ธฐ ํจํด์ ์ฐพ์๋ด๋ ๊ฒ๋ง์ผ๋ก๋ C2 ํต์ ์ ์ก์๋ผ ์ ์๊ณ , ์ค์ ๋ก ๋ค์์ EDRยทNDR ์ ํ์ด "๋น์ ์์ ์ผ๋ก ๊ท์น์ ์ธ ์ ์ ๊ฐ๊ฒฉ"์ ํด๋ฆฌ์คํฑ์ผ๋ก ์ฌ์ฉํ๋ค. ์ ์ฑ์ฝ๋๊ฐ ํ๋์ฝ๋ฉํ ์ซ์ ํ๋๊ฐ ๊ณง ํ์ง ์๊ทธ๋์ฒ๊ฐ ๋๋ ์ ์ด๋ค.
Comments
๋๊ธ
๋๊ธ์ ๋จ๊ธฐ๋ ค๋ฉด ๋ก๊ทธ์ธ์ด ํ์ํด์. (๋ค์ด๋ฒ ยท ๊ตฌ๊ธ ๊ณ์ )
๋๊ธ ๋ถ๋ฌ์ค๋ ์คโฆ