๋ฌธ์ : DreamHack โ smart_device ๋ถ๋ฅ: Misc ๋์ด๋: ๐ฅ Bronze 2 FLAG:
acsc{binwalkisgod!}
๋ฌธ์ ์ค๋ช
์ ์งง๋ค. "Get API Key from smart device :D". ์ ๊ณต ํ์ผ๋ smart_firmware.img ํ๋๋ฟ์ด๋ค. IoT ํ์จ์ด ๋ถ์์ ์ ์์ ํ์ผ์ ์ด์ด๋ณด๊ธฐ ์ ์ ์ ๋ง๋ก ๊ทธ ํ์ฅ์๊ฐ ๋ง๋์ง๋ถํฐ ์์ฌํ๋ ๊ฒ์ด๋ค.

๋ฌธ์ ๊ฐ์
| ํญ๋ชฉ | ๋ด์ฉ |
|---|---|
| ๋ฌธ์ ๋ช | smart_device |
| ๋์ด๋ | ๐ฅ Bronze 2 |
| ๋ถ๋ฅ | Misc (ACSC CTF ์ถ์ ) |
| ์ ๊ณต | smart_firmware.img (683๋ฐ์ดํธ) |
| ํต์ฌ ๊ธฐ๋ฒ | ํ์ฅ์ ๋์ ๋งค์ง๋ฐ์ดํธ๋ก ์ค์ ํฌ๋งท์ ํ๋ณํด ์๋ฒ ๋๋ ๋ฃจํธ ํ์ผ์์คํ ์ ํ๊ณ , ์ค์ ํ์ผ ์ ํ๋์ฝ๋ฉ๋ ํค๋ฅผ ์ฝ๋๋ค |
๐งฉ ๋ฐฐ๊ฒฝ โ ์๋ฒ ๋๋ ํ์จ์ด๋ ๋๊ฐ ๊ทธ๋ฅ ์์ถ๋ ๋ฃจํธ ํ์ผ์์คํ
IoT ๊ธฐ๊ธฐ์ฉ ํ์จ์ด ์ด๋ฏธ์ง๋ ๊ฒ๋ณด๊ธฐ์ ์ ์ ์๋ ๋ฐ์ด๋๋ฆฌ ๋ฉ์ด๋ฆฌ ๊ฐ์ง๋ง, ์์ ์ด์ด๋ณด๋ฉด ์์ธ๋ก ํ๋ฒํ๋ค. ๋๋ถ๋ถ ๋ฆฌ๋
์ค ๋ฃจํธ ํ์ผ์์คํ
(/bin, /etc, /usr ...)์ ๊ทธ๋๋ก tar๋ cpio ๊ฐ์ ์์นด์ด๋ธ๋ก ๋ฌถ๊ณ , ์ฉ๋์ ์๋ผ๋ ค๊ณ gzip์ด๋ LZMA๋ก ํ ๋ฒ ๋ ์์ถํ ๊ฒ๋ฟ์ด๋ค. ๊ทธ๋์ ํ์จ์ด ๋ถ์์ ์ฒซ ๋จ๊ณ๋ ๊ฑฐ์ ํญ์ "์ด ํ์ผ์ด ์ค์ ๋ก ์ด๋ค ํฌ๋งท์ผ๋ก ์์ถยท์์นด์ด๋ธ๋ผ ์๋๊ฐ"๋ฅผ ํ์ผ ์๋ถ๋ถ์ ๋งค์ง๋ฐ์ดํธ(magic bytes) ๋ก ํ์ธํ๋ ๊ฒ์ด๋ค. ํ์ฅ์(.img, .bin ๋ฑ)๋ ์ ์์ฌ๊ฐ ๋ง์๋๋ก ๋ถ์ธ ์ด๋ฆํ์ผ ๋ฟ, ์ง์ง ํฌ๋งท์ ํ์ผ ํค๋๊ฐ ๋งํด์ค๋ค.
binwalk ๊ฐ์ ๋๊ตฌ๊ฐ ๋ฐ๋ก ์ด ๋งค์ง๋ฐ์ดํธ ์ค์บ๊ณผ ์๋ ์ถ์ถ์ ๋์ ํด์ฃผ๋ ํ์ค ๋๊ตฌ๋ค โ ์ฌ์ค ์ด ๋ฌธ์ ์ flag ์์ฒด๊ฐ ๊ทธ ๋๊ตฌ ์ด๋ฆ์ ๋ด ๋๋ด์ด๋ค.
๐ฌ ์ ์ฐฐ โ ํ์ฅ์๋ฅผ ๋ฏฟ์ง ์๊ธฐ
file smart_firmware.img.gz
xxd smart_firmware.img.gz | head -3
file ๋ช
๋ น์ด ๋ฐ๋ก ์ ์ฒด๋ฅผ ์๋ ค์ค๋ค. .img ํ์ฅ์์ ๋ฌด๊ดํ๊ฒ gzip compressed data๋ค. ํฅ์ค๋คํ ๋งจ ์์ 1f 8b 08์ด gzip์ ํ์ค ๋งค์ง๋ฐ์ดํธ๋ค.
์ด๋ด ๋ ๊ฐ์ฅ ๋จผ์ ์์ด ๊ฐ๋ ๋๊ตฌ๋ binwalk๋ค โ ํ์ผ ์์ ์๋ช
์ด ๋จ์์๋ ๋ชจ๋ ์๋ ค์ง ํฌ๋งท(gzip, tar, ZIP, ํ์ผ์์คํ
๋ฑ)์ ์ค์บํ๊ณ ํ์ํ๋ฉด ์๋์ผ๋ก ์๋ผ ์ถ์ถ๊น์ง ํด์ค๋ค.
binwalk smart_firmware.img.gzโถ๐ ์ฝ์ง โ binwalk๊ฐ ์ค์ ๋ก ์ ๋์๊ฐ๋ค(ํ๊ฒฝ ํจํค์ง ์ถฉ๋)
์ผ์ฌ์ฐจ๊ฒ binwalk๋ฅผ ๋๋ ธ๋๋ ๋ช
๋ น์ด๊ฐ ์์ํ์๋ง์ ํ์ด์ฌ ํธ๋ ์ด์ค๋ฐฑ์ ๋ฑ์ผ๋ฉฐ ์ฃฝ์ด๋ฒ๋ ธ๋ค.

์์ธ์ binwalk(2.4.3, apt๋ก ์ค์น๋ ๋ฒ์ )๊ฐ ๋ด๋ถ์ ์ผ๋ก ๋์ค์ด์
๋ธ ๊ธฐ๋ฅ์ ์ํด capstone.CS_ARCH_ARM64๋ฅผ ์ฐธ์กฐํ๋๋ฐ, ์ด ํ๊ฒฝ์ pip๋ก ๊น๋ฆฐ capstone์ด 6.0.0 ์ํ ๋ฒ์ ์ด๋ผ ๊ทธ ์์ ์์ฒด๊ฐ ์์ด์ ธ ์์๋ค. binwalk๋ --extract์ฒ๋ผ ๋์ค์ด์
๋ธ๊ณผ ๋ฌด๊ดํ ์ต์
์ ์ค๋ ๋ชจ๋ ์ํฌํธ ์์ ์ ์ด ํด๋์ค๋ฅผ ๋ก๋ํ๋ ค๋ค ์ฃฝ๊ธฐ ๋๋ฌธ์, ์ด๋ค ๋ฐฉ์์ผ๋ก ์คํํด๋ ์ฐํํ ์ ์์๋ค.
์์คํ
ํ์ด์ฌ์ ์ง์ ๊ฑด๋๋ฆฌ๋ฉด ๋ค๋ฅธ ์ธ์
์ ์ํฅ์ ์ค ์ ์์ผ๋, ๊ฒฉ๋ฆฌ๋ venv์ ๊ตฌ๋ฒ์ capstone์ ๊น์์ ์ ๋๋ก ๊ณ ์ณ๋ณด๊ธฐ๋ก ํ๋ค.
python3 -m venv /tmp/binwalkvenv
/tmp/binwalkvenv/bin/pip install 'capstone<5' 'setuptools<81' binwalk
/tmp/binwalkvenv/bin/binwalk smart_firmware.img.gz
capstone์ ์ ํํ ๊ณ ์ณค๋๋ฐ(capstone 4.0.2 OK), ์ด๋ฒ์ PyPI์ ์ฌ๋ผ์จ binwalk ํจํค์ง ์์ฒด๊ฐ ๋ฌธ์ ์๋ค โ binwalk.core ์๋ธ๋ชจ๋์ด ์์ ๋น ์ง ๋ถ์์ ํ ๋ฐฐํฌํ์ด๋ผ, capstone ๋ฌธ์ ์ ๋ฌด๊ดํ๊ฒ ์ํฌํธ ๋จ๊ณ์์ ๋ ์ฃฝ๋๋ค. apt๋ก ์ค์น๋๋ binwalk(์์ค ๋น๋ ๋ฐฉ์)์ pip install binwalk(PyPI ๋ฐฐํฌํ)๊ฐ ์๋ก ๋ค๋ฅธ, ํธํ๋์ง ์๋ ํจํค์ง๋ผ๋ ๊ฑธ ์ด ์ฝ์ง์ ํตํด ์๊ฒ ๋๋ค. ๊ฒฐ๊ตญ ๋ ๊ฒน์ ๋ฌธ์ (capstone ๋ฒ์ ์ถฉ๋ + PyPI ๋ฐฐํฌํ ๋ถ์์ )๋ฅผ ๋ค ํด๊ฒฐํ๋ ค๋ฉด ์ ์ GitHub ์์ค์์ ๋น๋ํด์ผ ํ๋๋ฐ, ์ด ๋ฌธ์ ํ๋ ํ์๊ณ ๊ฑฐ๊ธฐ๊น์ง ๊ฐ ์ด์ ๋ ์์๋ค โ binwalk๊ฐ ์๋ ์๋์ผ๋ก ํด์ฃผ๋ ์ผ(๋งค์ง๋ฐ์ดํธ ์ค์บ โ ์์ถ ํด์ โ ์์นด์ด๋ธ ์ถ์ถ)์ ๊ทธ๋ฅ ์์ผ๋ก ์ฌํํ๊ธฐ๋ก ํ๋ค. ์ด์ฐจํผ ์ด ํ์ผ์ gzip ํ๋๋ฟ์ด๋ผ gunzip + tar๋ง์ผ๋ก ์ถฉ๋ถํ๋ค.
๐ฃ ํต์ฌ โ ์๋์ผ๋ก ๊ฐ์ ๊ฑธ ํ๋ค: gunzip โ tar โ ์ค์ ํ์ผ
gunzip -k smart_firmware.img.gz -c > /tmp/fw.tar
file /tmp/fw.tar
tar -tvf /tmp/fw.tar
์์ถ์ ํ๊ณ ๋๋ ์์๋๋ก GNU tar ์์นด์ด๋ธ์๊ณ , ๊ทธ ์์๋ /bin, /etc, /etc/init.d, /var/log ๊ฐ์ ๋ฏ์ต์ ๋ฆฌ๋
์ค ๋ฃจํธ ํ์ผ์์คํ
๊ตฌ์กฐ๊ฐ ๊ทธ๋๋ก ๋ค์ด์๋ค. /etc/device.conf๋ผ๋ ์ด๋ฆ์ด ํนํ ๋์ ๋๋ค โ ์ค์ ํ์ผ์๋ ํํ ์ธ์ฆ ์ ๋ณด๊ฐ ํ๋์ฝ๋ฉ๋ผ ์๋ค.

tar -xf /tmp/fw.tar -C tar_extracted
cat tar_extracted/etc/device.conf
[SECURITY] ์น์
์ AUTH_KEY์ flag๊ฐ ๊ทธ๋๋ก ํ๋ฌธ์ผ๋ก ๋ฐํ ์๋ค. # Do not edit manually.๋ผ๋ ์ฃผ์์ด ๋ถ์ด ์๋ ๊ฑธ ๋ณด๋ฉด, ์ด ํ์ผ์ ๋น๋ ์์คํ
์ด ์๋ ์์ฑํ ๋ค ์ด๋ฏธ์ง์ ๊ทธ๋๋ก ๊ตฌ์ ๋ฃ์ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค โ ์ฆ ๋๊ตฌ๋ ์ด ํ์จ์ด ํ์ผ ํ๋๋ง ๋ค์ด๋ก๋ํ๋ฉด(๊ตฌ๋งคํ ๊ธฐ๊ธฐ๋ฅผ ๋ถํดํ์ง ์๊ณ ๋) API ํค๋ฅผ ์ป์ ์ ์๋ค๋ ๋ป์ด๋ค.
flag๋ง ๋ฝ๊ณ ๋๋ด๊ธฐ ์ ์, ์ด rootfs์ ๋ค๋ฅธ ํฅ๋ฏธ๋ก์ด ๊ฒ ๋ ์๋์ง ์ ์ฒด ๊ตฌ์กฐ๋ฅผ ํ ๋ฒ ํ์ด๋ดค๋ค.
find tar_extracted -type f | sort
cat tar_extracted/etc/init.d/rcS
cat tar_extracted/etc/passwd
์ ์ฒด ๊ตฌ์ฑ์ 5๊ฐ ํ์ผ๋ฟ์ธ ๋ฏธ๋๋ฉํ ๋๋ฏธ rootfs๋ค. /etc/init.d/rcS๋ ๋ถํ
์ /bin/check_status๋ฅผ ์คํํด "Device Status: OK"๋ฅผ ์ฐ๋ ๊ฒ ์ ๋ถ๊ณ , /etc/passwd์๋ root์ admin ๋ ๊ณ์ ๋ง ์๋ค(๋ ๋ค ํจ์ค์๋ ํด์ ํ๋๊ฐ x๋ผ ๋ณ๋ /etc/shadow ์์ด๋ ๋ก๊ทธ์ธ ์ ๋ณด๊ฐ ์๋ค โ ์ด ๋ฌธ์ ์์๋ ๋ฏธ๋ผ์ ๊ฐ๊น๋ค). ์ง์ง ๋ฏผ๊ฐ ์ ๋ณด๋ ์ฒ์ ์ฐพ์ device.conf ํ๋๋ฟ์ด์๋ค๋ ๊ฑธ rootfs ์ ์ฒด๋ฅผ ํ์ด๋ณด๊ณ ๋์์ผ ํ์ ํ ์ ์์๋ค.
๐ ๊ฒฐ๋ก
ํ์ฅ์๊ฐ ์๋๋ผ ๋งค์ง๋ฐ์ดํธ๋ฅผ ๋ฏฟ์ด๋ผ. .img, .bin, .dat ์ฒ๋ผ ์ ์กฐ์ฌ๊ฐ ์์๋ก ๋ถ์ธ ํ์ฅ์๋ ์ค์ ํฌ๋งท์ ๋ํด ์๋ฌด๊ฒ๋ ๋ณด์ฅํ์ง ์๋๋ค. file ํ ๋ฒ, ํน์ ํฅ์ค๋คํ๋ก ์ฒ์ ๋ช ๋ฐ์ดํธ๋ง ๋ด๋ ์ง์ง ์ ์ฒด๊ฐ ๋๋ฌ๋๋ ๊ฒฝ์ฐ๊ฐ ๋๋ ๋งํผ ๋ง๋ค.
ํ์ค ๋๊ตฌ๊ฐ ์ฃฝ์ผ๋ฉด ๊ทธ ๋๊ตฌ๊ฐ "๋ฌด์์ ํ๋์ง"๋ฅผ ์ดํดํ๊ณ ์์ผ๋ก ์ฌํํ๋ฉด ๋๋ค. binwalk๊ฐ ์ด ํ๊ฒฝ์์ ์ฐ์ฐํ ๋ง๊ฐ์ ธ ์์์ง๋ง, ๊ทธ๊ฒ ํ๋ ์ผ(์๊ทธ๋์ฒ ์ค์บ โ ์์ถ ํด์ โ ์์นด์ด๋ธ ์ถ์ถ)์ ์๊ณ ์์ผ๋ฉด file+gunzip+tar ์ธ ๋ช
๋ น์ผ๋ก ๋๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค. ๋๊ตฌ ํ๋์ ์์กดํ๊ธฐ๋ณด๋ค ๊ทธ ๋๊ตฌ๊ฐ ๋์ฒดํ๊ณ ์๋ ๊ธฐ๋ณธ ๊ฐ๋
์ ์์๋๋ ๊ฒ ์ด๋ด ๋ ๋น์ ๋ฐํ๋ค.
ํ์จ์ด์ ์ธ์ฆ ํค๋ฅผ ํ๋ฌธ์ผ๋ก ๊ตฝ์ง ๋ง๋ผ. ์ด ๋ฌธ์ ๊ฐ ๋ณด์ฌ์ฃผ๋ ์ค์ ์ทจ์ฝ์ ํจํด์ IoT ์ ๊ณ์์ ํํ๋ค โ ๊ธฐ๊ธฐ ๊ณ ์ ํค๋ API ์ํฌ๋ฆฟ์ ๋น๋ ์์ ์ ์ค์ ํ์ผ์ ํ๋์ฝ๋ฉํด ์ ์ฒด ์ ํ ๋ผ์ธ์ ๋์ผํ๊ฒ ๋ฐฐํฌํ๋ฉด, ๊ณต๊ฐ๋ ํ์จ์ด ์ ๋ฐ์ดํธ ํ์ผ ํ๋๋ง ์์ ๋ฃ์ด๋ ๋ชจ๋ ๊ธฐ๊ธฐ์ ํค๊ฐ ํ๊บผ๋ฒ์ ๋ ธ์ถ๋๋ค. ํค๋ ๊ธฐ๊ธฐ๋ณ๋ก ์์ ํ ํ๋ก๋น์ ๋ ์ ์ฐจ๋ฅผ ํตํด ๋ณ๋๋ก ์ฃผ์ ํด์ผ์ง, ์ด๋ฏธ์ง ์์ฒด์ ๊ตฌ์ ๋ฃ์ผ๋ฉด ์ ๋๋ค.
Comments
๋๊ธ
๋๊ธ์ ๋จ๊ธฐ๋ ค๋ฉด ๋ก๊ทธ์ธ์ด ํ์ํด์. (๋ค์ด๋ฒ ยท ๊ตฌ๊ธ ๊ณ์ )
๋๊ธ ๋ถ๋ฌ์ค๋ ์คโฆ