Translated ['macos-hardening/macos-security-and-privilege-escalation/mac

This commit is contained in:
Translator 2023-09-30 18:18:18 +00:00
parent 37ed3b37ac
commit b03f1f10cf

View file

@ -4,36 +4,42 @@
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
* [**公式のPEASSHackTricks swag**](https://peass.creator-spring.com)を手に入れましょう
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)****
* **ハッキングのトリックを共有する**ために、PRを**hacktricksリポジトリ**と**hacktricks-cloudリポジトリ**に提出してください。
* あなたは**サイバーセキュリティ企業**で働いていますか? HackTricksであなたの**会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう、私たちの独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクション
* [**公式のPEASSHackTricks swag**](https://peass.creator-spring.com)を手に入れましょう
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **ハッキングのトリックを共有するために、PRを提出して** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に参加してください。**
</details>
## **基本情報**
**TCC透明性、同意、および制御**は、macOSの機能へのアプリケーションのアクセスを**制限および制御する**メカニズムです。これは、位置情報サービス、連絡先、写真、マイクロフォン、カメラ、アクセシビリティ、フルディスクアクセスなどを含むことがあります。
**TCC透明性、同意、および制御**は、macOSの機構であり、通常はプライバシーの観点から**アプリケーションの特定の機能へのアクセスを制限および制御**します。これには、位置情報サービス、連絡先、写真、マイクロフォン、カメラ、アクセシビリティ、フルディスクアクセスなどが含まれます。
ユーザーの視点からは、TCCは**TCCで保護された機能へのアクセスをアプリケーションが要求するときに**動作します。これが発生すると、**ユーザーに対してアクセスを許可するかどうかを尋ねるダイアログが表示**されます。
ユーザーの視点からは、TCCは**TCCで保護された機能へのアクセスをアプリケーションが要求するときに**動作します。これが発生すると、**ユーザーにアクセスを許可するかどうかを尋ねるダイアログが表示**されます。
また、ユーザーが**ファイルをプログラムにドラッグ&ドロップする**など、**明示的な意図**によってアプリにアクセスを許可することも可能です(もちろん、プログラムはそれにアクセスできる必要があります)。
また、ユーザーが**ファイルをプログラムにドラッグ&ドロップする**など、**明示的な意図**によってアプリにアクセスを**許可することも可能**です(もちろん、プログラムはそれにアクセスできる必要があります)。
![TCCプロンプトの例](https://rainforest.engineering/images/posts/macos-tcc/tcc-prompt.png?1620047855)
**TCC**は、`/System/Library/PrivateFrameworks/TCC.framework/Resources/tccd`にある**デーモン**によって処理されます。これは`/System/Library/LaunchDaemons/com.apple.tccd.system.plist`で構成されており、`com.apple.tccd.system`というマッハサービスを登録します
**TCC**は、`/System/Library/PrivateFrameworks/TCC.framework/Support/tccd`にある**デーモン**によって処理され、`/System/Library/LaunchDaemons/com.apple.tccd.system.plist`で構成されています(`com.apple.tccd.system`というマッハサービスを登録)
ユーザーモードのtccdは、`/System/Library/LaunchAgents/com.apple.tccd.plist`で定義され、`com.apple.tccd`と`com.apple.usernotifications.delegate.com.apple.tccd`というマッハサービスを登録します。
`/System/Library/LaunchAgents/com.apple.tccd.plist`に定義された**ログインユーザーごとのユーザーモードのtccd**が実行され、マッハサービス`com.apple.tccd`と`com.apple.usernotifications.delegate.com.apple.tccd`を登録します。
権限は**親アプリケーションから継承**され、権限は**Bundle ID**と**Developer ID**に基づいて**追跡**されます。
ここでは、システムとユーザーとして実行されているtccdを見ることができます
```bash
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`**に保存されます。データベースは**SIPSystem Integrity Protectionによって編集が制限**されていますが、**フルディスクアクセス**を許可することで読み取ることができます。
選択肢は、TCCシステム全体のデータベースである**`/Library/Application Support/com.apple.TCC/TCC.db`**に保存されます。また、ユーザーごとの設定の場合は**`$HOME/Library/Application Support/com.apple.TCC/TCC.db`**に保存されます。このデータベースは**SIPSystem Integrity Protectionによって編集が制限されています**が、**フルディスクアクセス**を許可することで読み取ることができます。
{% hint style="info" %}
**通知センターUI**は、**システムTCCデータベース**を**変更**することができます:
**通知センターのUI**を使用すると、**システムのTCCデータベース**に変更を加えることができます。
{% code overflow="wrap" %}
```bash
@ -86,22 +92,30 @@ sqlite> select * from access where client LIKE "%telegram%" and auth_value=0;
{% 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)
- テーブルの**他のフィールド**についての詳細は、[**このブログ記事**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive)を参照してください。
* **`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
* テーブルの**他のフィールド**の詳細については、[**このブログ記事**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive)を参照してください。
{% hint style="info" %}
一部の TCC 権限には、kTCCServiceAppleEvents、kTCCServiceCalendar、kTCCServicePhotos などがあります。すべてを定義する公開リストは存在しませんが、この[**既知のリスト**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive#service)を参照できます。
一部のTCCの許可は、kTCCServiceAppleEvents、kTCCServiceCalendar、kTCCServicePhotosなどです... すべてを定義する公開リストはありませんが、この[**既知のリスト**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive#service)を確認できます。
**Full Disk Access**の名前は`kTCCServiceSystemPolicyAllFiles`であり、`kTCCServiceAppleEvents`は、タスクの自動化に一般的に使用される他のアプリケーションにイベントを送信するためのアプリに許可を与えます。
{% endhint %}
また、`システム環境設定 --> セキュリティとプライバシー --> プライバシー --> ファイルとフォルダー`で、アプリに与えられた**既存の権限**も確認できます。
また、`システム環境設定 --> セキュリティとプライバシー --> プライバシー --> ファイルとフォルダー`で、アプリに与えられた**既存の許可**も確認できます。
### TCC 署名チェック
{% hint style="success" %}
ユーザーがホーム内にあるデータベースを直接変更することはできませんrootであっても**SIPのため**です。新しいルールを設定または変更する唯一の方法は、システム環境設定パネルまたはアプリがユーザーに要求するプロンプトです。
TCC **データベース**は、アプリケーションの**バンドル ID**を保存するだけでなく、**許可を使用するために要求するアプリが正しいものであることを確認するための署名に関する情報も保存します。
ただし、ユーザーは**`tccutil`**を使用してルールを**削除またはクエリ**することができます。&#x20;
{% endhint %}
### TCC署名チェック
TCC **データベース**は、アプリケーションの**バンドルID**を保存するだけでなく、アプリが許可を使用するために正しいものであることを確認するための**署名**に関する**情報**も保存します。
{% code overflow="wrap" %}
```bash
@ -114,18 +128,21 @@ echo FADE0C00000000CC000000010000000600000007000000060000000F0000000E00000000000
## 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`というエンタイトルメントを持ち、カメラへのアクセスを要求します。このエンタイトルメントを持たないアプリはカメラにアクセスできません(ユーザーには許可の要求も表示されません)。
アプリは、リソースへのアクセスを要求し、許可されたアクセスを持つだけでなく、関連するエンタイトルメントを持つ必要があります。\
たとえば、**Telegram**は、カメラへのアクセスを要求するためのエンタイトルメント`com.apple.security.device.camera`を持っています。このエンタイトルメントを持たないアプリはカメラにアクセスできません(ユーザーには許可の要求もされません)。
ただし、`~/Desktop`、`~/Downloads`、`~/Documents`などの特定のユーザーフォルダにアクセスするためには、特定のエンタイトルメントは必要ありません。システムはアクセスを透過的に処理し、必要に応じてユーザーにプロンプトを表示します。
ただし、アプリが`~/Desktop`、`~/Downloads`、`~/Documents`などの特定のユーザーフォルダにアクセスするためには、特定のエンタイトルメントは必要ありません。システムはアクセスを透過的に処理し、必要に応じてユーザーにプロンプトを表示します。
Appleのアプリはプロンプトを生成しません。エンタイトルメントリストに事前に許可された権限が含まれているため、ポップアップは表示されず、TCCデータベースにも表示されません。例えば
Appleのアプリはプロンプトを生成しません。エンタイトルメントリストに事前に付与された権限が含まれているため、ポップアップは表示されず、TCCデータベースにも表示されません。例えば
```bash
codesign -dv --entitlements :- /System/Applications/Calendar.app
[...]
@ -136,7 +153,7 @@ codesign -dv --entitlements :- /System/Applications/Calendar.app
<string>kTCCServiceAddressBook</string>
</array>
```
これにより、カレンダーがユーザーにリマインダー、カレンダー、アドレス帳へのアクセスを求めることを防ぎます。
これにより、Calendarがユーザーにリマインダー、カレンダー、アドレス帳へのアクセスを求めることを防ぎます。
### 機密情報が保護されていない場所
@ -146,7 +163,7 @@ codesign -dv --entitlements :- /System/Applications/Calendar.app
### ユーザーの意図 / com.apple.macl
前述のように、**ファイルをAppにドラッグドロップすることで、Appにファイルへのアクセスを許可する**ことができます。このアクセスは、TCCデータベースではなく、ファイルの**拡張属性**として指定されます。この属性には、許可されたAppのUUIDが**保存されます**
前述のように、**ファイルをAppにドラッグドロップすることで、Appにファイルへのアクセスを許可する**ことができます。このアクセスはTCCデータベースには特定されませんが、ファイルの**拡張属性**として指定されます。この属性には、許可されたAppのUUIDが**保存されます**
```bash
xattr Desktop/private.txt
com.apple.macl
@ -163,22 +180,28 @@ uuid 769FD8F1-90E0-3206-808C-A8947BEBD6C3
```
{% hint style="info" %}
興味深いことに、**`com.apple.macl`**属性はtccdではなく**Sandbox**によって管理されています。
また、コンピュータ内のアプリのUUIDを許可するファイルを別のコンピュータに移動すると、同じアプリでも異なるUIDを持つため、そのアプリにアクセス権が付与されません。
{% endhint %}
拡張属性`com.apple.macl`は他の拡張属性とは異なり、**SIPによって保護**されているため、**クリアすることはできません**。ただし、[**この投稿で説明されているように**](https://www.brunerd.com/blog/2020/01/07/track-and-tackle-com-apple-macl/)、ファイルを**圧縮**して無効化し、**削除**してから**解凍**することが可能です。
拡張属性`com.apple.macl`は他の拡張属性とは異なり、**SIPによって保護**されているため、**クリアすることはできません**。ただし、[**この投稿で説明されているように**](https://www.brunerd.com/blog/2020/01/07/track-and-tackle-com-apple-macl/)、ファイルを**圧縮**し、**削除**してから**解凍**することで無効にすることが可能です。
## 参考文献
* [**https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive)
* [**https://gist.githubusercontent.com/brunerd/8bbf9ba66b2a7787e1a6658816f3ad3b/raw/34cabe2751fb487dc7c3de544d1eb4be04701ac5/maclTrack.command**](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.brunerd.com/blog/2020/01/07/track-and-tackle-com-apple-macl/)
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* **サイバーセキュリティ企業で働いていますか?** HackTricksで**会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
* [**公式のPEASSHackTricksグッズ**](https://peass.creator-spring.com)を手に入れましょう。
* **サイバーセキュリティ企業で働いていますか?** HackTricksで**会社を宣伝**したいですか?または、**PEASSの最新バージョンやHackTricksのPDFをダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう。独占的な[NFT](https://opensea.io/collection/the-peass-family)のコレクションです。
* [**公式のPEASSHackTricksグッズ**](https://peass.creator-spring.com)を手に入れましょう。
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォロー**してください。
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
* **ハッキングのトリックを共有するには、**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **にPRを提出**してください。
</details>