hacktricks/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc
2023-10-09 11:53:00 +00:00
..
macos-tcc-bypasses Translated ['macos-hardening/macos-auto-start-locations.md', 'macos-hard 2023-10-01 18:13:43 +00:00
macos-apple-scripts.md Translated to Japanese 2023-07-07 23:42:27 +00:00
macos-tcc-bypasses.md Translated ['README.md', 'backdoors/salseo.md', 'forensics/basic-forensi 2023-08-31 16:28:04 +00:00
README.md Translated ['macos-hardening/macos-security-and-privilege-escalation/mac 2023-10-09 11:53:00 +00:00

macOS TCC

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

基本情報

TCC透明性、同意、および制御は、macOSの機構であり、通常はプライバシーの観点からアプリケーションの特定の機能へのアクセスを制限および制御します。これには、位置情報サービス、連絡先、写真、マイクロフォン、カメラ、アクセシビリティ、フルディスクアクセスなどが含まれます。

ユーザーの視点からは、TCCは、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.tccdcom.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 IDDeveloper IDに基づいて追跡されます。

TCCデータベース

選択肢は、TCCシステム全体のデータベースに**/Library/Application Support/com.apple.TCC/TCC.dbとして保存されます。また、ユーザーごとの設定の場合は$HOME/Library/Application Support/com.apple.TCC/TCC.dbに保存されます。これらのデータベースはSIPSystem 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 には、denied0、unknown1、allowed2、またはlimited3の異なる値が入る可能性があります。
  • auth_reason には、次の値が入る可能性がありますError1、User Consent2、User Set3、System Set4、Service Policy5、MDM Policy6、Override Policy7、Missing usage string8、Prompt Timeout9、Preflight Unknown10、Entitled11、App Type Policy12
  • テーブルの他のフィールドの詳細については、このブログ記事を参照してください。

{% 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バイパス

参考文献

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥