[EN](README.md) | [KR](korean.md) --- ## ๐Ÿ“„ ๊ฐœ์š” ์ด ๋„๊ตฌ๋Š” ๋กœ์ปฌ ๋„คํŠธ์›Œํฌ ์ƒ์˜ AirPlay ๊ธฐ๋Šฅ์ด ํ™œ์„ฑํ™”๋œ ๊ธฐ๊ธฐ๋ฅผ mDNS(Zeroconf)๋ฅผ ํ†ตํ•ด ์ž๋™์œผ๋กœ ํƒ์ƒ‰ํ•˜๊ณ , CVE-2025-24132 โ€œzero-clickโ€ HTTP RCE ์ทจ์•ฝ์  ์—ฌ๋ถ€๋ฅผ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค. ํƒ์ƒ‰๋œ ๊ธฐ๊ธฐ๋Š” ๊ฐ„๋‹จํ•œ GUI์— ํ‘œ์‹œ๋˜๋ฉฐ, ๊ธฐ๊ธฐ๋ฅผ ํด๋ฆญํ•˜๋ฉด ๋ชจ๋“  ์†์„ฑ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. --- ### ์š”๊ตฌ ์‚ฌํ•ญ * Python 3.7 ์ด์ƒ * PyQt5 * `zeroconf` ํŒจํ‚ค์ง€ (`pip install zeroconf`) ### ์„ค์น˜ ```bash pip install PyQt5 zeroconf ```` ๋˜๋Š” ```bash pip install -r requirements.txt ``` ### ์‚ฌ์šฉ ๋ฐฉ๋ฒ• ```bash python3 main.py ``` * GUI ์ฐฝ์ด ์—ด๋ฆฌ๋ฉด ๋™์ผ LAN ์ƒ์˜ AirPlay ๊ธฐ๊ธฐ๋ฅผ ์ž๋™์œผ๋กœ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. * ๊ฒ€์ƒ‰๋œ ๊ธฐ๊ธฐ๋Š” โ€œ<๊ธฐ๊ธฐ๋ช…> ()โ€ ํ˜•ํƒœ๋กœ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€๋˜๋ฉฐ, ์ฒ˜์Œ์—๋Š” โ€œScanningโ€ฆโ€ ์ƒํƒœ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. * RCE ํ…Œ์ŠคํŠธ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์˜ค๋ฅธ์ชฝ ์—ด์ด **Vuln**(์ทจ์•ฝ) ๋˜๋Š” **Safe**(์•ˆ์ „)๋กœ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค. ### ํ™”๋ฉด ๊ตฌ์„ฑ * **์™ผ์ชฝ ์—ด(โ€œDeviceโ€)**: `<๊ธฐ๊ธฐ๋ช…> (IP ์ฃผ์†Œ)`๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. * **์˜ค๋ฅธ์ชฝ ์—ด(โ€œRCEโ€)**: ์ทจ์•ฝ ์—ฌ๋ถ€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. * **๊ธฐ๊ธฐ ํ•ญ๋ชฉ์„ ํด๋ฆญ**ํ•˜๋ฉด ํŠธ๋ฆฌ๊ฐ€ ํ™•์žฅ๋˜์–ด ๋ชจ๋“  mDNS TXT ์†์„ฑ์ด ํ•˜์œ„ ํ•ญ๋ชฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค (์˜ˆ: `deviceid`, `model`, `osvers`, `features`, `srcvers` ๋“ฑ). ### ๋™์ž‘ ์›๋ฆฌ 1. **๋””์Šค์ปค๋ฒ„๋ฆฌ** * `zeroconf`๋กœ `_airplay._tcp.local.` ์„œ๋น„์Šค๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. * `127.*` ์ฃผ์†Œ์™€ ์ค‘๋ณต๋œ IP๋ฅผ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค. 2. **์†์„ฑ ์ˆ˜์ง‘** * `info.properties`์—์„œ ๋ชจ๋“  TXT ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฝ์–ด Python ๋”•์…”๋„ˆ๋ฆฌ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. 3. **RCE ํ…Œ์ŠคํŠธ (CVE-2025-24132)** * ๊ฐ€์งœ reverse shell plist ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•œ HTTP `POST /pairing-init` ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. * ์–ด๋– ํ•œ `HTTP` ์‘๋‹ต์ด๋ผ๋„ ๋ฐ›์œผ๋ฉด ์ทจ์•ฝ์œผ๋กœ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค. 4. **GUI ์—…๋ฐ์ดํŠธ** * Qt ์‹œ๊ทธ๋„์„ ์‚ฌ์šฉํ•ด ์ƒˆ ํ–‰์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. * `self.device_info`์— ๊ธฐ๊ธฐ์˜ ์ „์ฒด ์ •๋ณด(TXT ํ•„๋“œ ํฌํ•จ)๋ฅผ ์ €์žฅํ•˜์—ฌ ํด๋ฆญ ์‹œ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.