.. | ||
macos-tcc-bypasses | ||
macos-apple-scripts.md | ||
macos-tcc-bypasses.md | ||
README.md |
macOS TCC
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- あなたはサイバーセキュリティ企業で働いていますか? HackTricksであなたの会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを発見しましょう、私たちの独占的なNFTのコレクション
- 公式のPEASS&HackTricks swagを手に入れましょう
- 💬 Discordグループまたはtelegramグループに参加するか、Twitterで私をフォローしてください🐦@carlospolopm.
- ハッキングのトリックを共有するために、PRを hacktricks repo と hacktricks-cloud repo に提出してください。
基本情報
TCC(透明性、同意、および制御)は、macOSの機構であり、通常はプライバシーの観点からアプリケーションの特定の機能へのアクセスを制限および制御します。これには、位置情報サービス、連絡先、写真、マイクロフォン、カメラ、アクセシビリティ、フルディスクアクセスなどが含まれます。
ユーザーの視点からは、TCCは、TCCによって保護された機能へのアクセスをアプリケーションが要求するときに表示されます。これが発生すると、ユーザーにはアクセスを許可するかどうかを尋ねるダイアログが表示されます。
また、ユーザーがファイルをプログラムにドラッグ&ドロップするなど、明示的な意図によってアプリにアクセスを許可することも可能です(もちろん、プログラムはそれにアクセスできる必要があります)。
TCCは、/System/Library/PrivateFrameworks/TCC.framework/Support/tccd
にあるデーモンによって処理され、/System/Library/LaunchDaemons/com.apple.tccd.system.plist
で構成されています(com.apple.tccd.system
というマッハサービスを登録)。
/System/Library/LaunchAgents/com.apple.tccd.plist
に定義されたログインユーザーごとのユーザーモードのtccdが実行され、マッハサービス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
として保存されます。また、ユーザーごとの設定の場合は$HOME/Library/Application Support/com.apple.TCC/TCC.db
に保存されます。これらのデータベースはSIP(System Integrity Protection)によって編集が制限**されていますが、読み取ることはできます。
{% hint style="danger" %}
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="user DB" %}
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;
{% tab title="システムDB" %}
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;
{% endtab %} {% endtabs %}
{% hint style="success" %} 両方のデータベースをチェックすることで、アプリが許可された権限、禁止された権限、または持っていない権限(要求される場合があります)を確認できます。 {% endhint %}
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)- テーブルの他のフィールドの詳細については、このブログ記事を参照してください。
{% hint style="info" %} 一部のTCCの権限には、kTCCServiceAppleEvents、kTCCServiceCalendar、kTCCServicePhotosなどがあります。これらをすべて定義する公開リストは存在しませんが、この既知のリストを確認できます。
Full Disk Accessの名前は**kTCCServiceSystemPolicyAllFiles
であり、kTCCServiceAppleEvents
は他のアプリケーションにイベントを送信することを可能にし、一般的にはタスクの自動化に使用されます。さらに、kTCCServiceSystemPolicySysAdminFiles
は、ユーザのホームフォルダを変更するNFSHomeDirectory
属性を変更することができ、それによりTCCをバイパス**することができます。
{% endhint %}
また、システム環境設定 --> セキュリティとプライバシー --> プライバシー --> ファイルとフォルダー
で、アプリに与えられた既存の権限も確認できます。
{% hint style="success" %} ユーザは、SIPのために(rootであっても)これらのデータベースを直接変更することはできません。新しいルールを設定または変更する唯一の方法は、システム環境設定パネルまたはアプリがユーザに要求するプロンプトです。
ただし、ユーザは**tccutil
を使用してルールを削除またはクエリ**することができます。
{% endhint %}
TCC署名チェック
TCCのデータベースは、アプリケーションのバンドルIDを保存するだけでなく、アプリが許可を使用するために正しいものであることを確認するための署名に関する情報も保存します。
{% code overflow="wrap" %}
# From sqlite
sqlite> select hex(csreq) from access where client="ru.keepcoder.Telegram";
#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 %}
エンタイトルメント
アプリは、リソースへのアクセスを要求し、許可されたアクセスを持つだけでなく、関連するエンタイトルメントを持つ必要があります。
たとえば、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 %}
機密情報の保護されていない場所
- $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バイパス
参考文献
- 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/
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンやHackTricksのPDFをダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを発見しましょう、私たちの独占的なNFTコレクション
- 公式のPEASS&HackTricksグッズを手に入れましょう
- 💬 Discordグループまたはtelegramグループに参加するか、Twitter 🐦@carlospolopmをフォローしてください。
- ハッキングのトリックを共有するには、hacktricks repo および hacktricks-cloud repo にPRを提出してください。