hacktricks/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/macos-xpc-connecting-process-check.md

105 lines
8.2 KiB
Markdown
Raw Normal View History

2023-07-07 23:42:27 +00:00
# macOS XPC接続プロセスのチェック
<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>
2023-07-07 23:42:27 +00:00
* **サイバーセキュリティ企業**で働いていますか? **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>
2023-07-07 23:42:27 +00:00
## XPC接続プロセスのチェック
2023-07-07 23:42:27 +00:00
XPCサービスへの接続が確立されると、サーバーは接続が許可されているかどうかをチェックします。通常、以下のチェックが行われます。
2023-07-07 23:42:27 +00:00
1. 接続する**プロセスがAppleによって署名された**証明書を持っているかどうかをチェックしますAppleのみが提供
* これが**検証されていない**場合、攻撃者は他のチェックに合わせるために**偽の証明書**を作成することができます。
2. 接続するプロセスが**組織の証明書**チームIDの検証で署名されているかどうかをチェックします。
* これが**検証されていない**場合、Appleの**任意の開発者証明書**を使用して署名し、サービスに接続することができます。
3. 接続するプロセスが**適切なバンドルID**を持っているかどうかをチェックします。
4. 接続するプロセスが**適切なソフトウェアバージョン番号**を持っているかどうかをチェックします。
* これが**検証されていない**場合、他のチェックが行われていても、古い、セキュリティの脆弱なクライアントがプロセスインジェクションに対して脆弱であるため、XPCサービスに接続することができます。
5. 接続するプロセスがサービスに接続するための**エンタイトルメント**を持っているかどうかをチェックします。これはAppleのバイナリに適用されます。
6. **検証**は、接続する**クライアントの監査トークン**に基づいて行われる必要があります。プロセスIDPIDではなく。
* 開発者は監査トークンAPI呼び出しをほとんど使用しないため、Appleはいつでも変更できます。また、Mac App Storeアプリでは、プライベートAPIの使用は許可されていません。
2023-07-07 23:42:27 +00:00
PID再利用攻撃チェックの詳細については、次を参照してください
{% content-ref url="macos-pid-reuse.md" %}
[macos-pid-reuse.md](macos-pid-reuse.md)
{% endcontent-ref %}
2023-07-07 23:42:27 +00:00
### Trustcache - ダウングレード攻撃の防止
2023-07-07 23:42:27 +00:00
Trustcacheは、Apple Siliconマシンに導入された防御手法であり、AppleのバイナリのCDHSAHのデータベースを格納し、許可されていない変更されたバイナリの実行を防止します。
2023-07-07 23:42:27 +00:00
### コード例
2023-07-07 23:42:27 +00:00
サーバーは、この**検証**を**`shouldAcceptNewConnection`**という関数で実装します。
{% code overflow="wrap" %}
```objectivec
- (BOOL)listener:(NSXPCListener *)listener shouldAcceptNewConnection:(NSXPCConnection *)newConnection {
2023-07-07 23:42:27 +00:00
//Check connection
return YES;
}
```
{% endcode %}
2023-07-07 23:42:27 +00:00
オブジェクトNSXPCConnectionには、**`auditToken`**という**非公開**プロパティ(使用すべきですが変更される可能性があります)と、**`processIdentifier`**という**公開**プロパティ(使用すべきではありません)があります。
2023-07-07 23:42:27 +00:00
接続プロセスは、次のような方法で確認できます:
{% code overflow="wrap" %}
```objectivec
[...]
SecRequirementRef requirementRef = NULL;
NSString requirementString = @"anchor apple generic and identifier \"xyz.hacktricks.service\" and certificate leaf [subject.CN] = \"TEAMID\" and info [CFBundleShortVersionString] >= \"1.0\"";
/* Check:
- Signed by a cert signed by Apple
- Check the bundle ID
- Check the TEAMID of the signing cert
- Check the version used
*/
// Check the requirements
SecRequirementCreateWithString(requirementString, kSecCSDefaultFlags, &requirementRef);
SecCodeCheckValidity(code, kSecCSDefaultFlags, requirementRef);
```
{% endcode %}
2023-07-07 23:42:27 +00:00
開発者がクライアントのバージョンをチェックしたくない場合、少なくともクライアントがプロセスインジェクションの脆弱性を持っていないことをチェックすることができます。
{% code overflow="wrap" %}
```objectivec
[...]
CFDictionaryRef csInfo = NULL;
SecCodeCopySigningInformation(code, kSecCSDynamicInformation, &csInfo);
uint32_t csFlags = [((__bridge NSDictionary *)csInfo)[(__bridge NSString *)kSecCodeInfoStatus] intValue];
2023-07-07 23:42:27 +00:00
const uint32_t cs_hard = 0x100; // don't load invalid page.
const uint32_t cs_kill = 0x200; // Kill process if page is invalid
const uint32_t cs_restrict = 0x800; // Prevent debugging
const uint32_t cs_require_lv = 0x2000; // Library Validation
const uint32_t cs_runtime = 0x10000; // hardened runtime
if ((csFlags & (cs_hard | cs_require_lv)) {
2023-07-07 23:42:27 +00:00
return Yes; // Accept connection
}
```
{% endcode %}
<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>
2023-07-07 23:42:27 +00:00
* **サイバーセキュリティ企業で働いていますか?** **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>