# iOS App Extensions {{#include ../../banners/hacktricks-training.md}} アプリ拡張は、他のアプリやシステムと相互作用することにより、アプリの機能を強化し、カスタム機能やコンテンツを提供します。これらの拡張には以下が含まれます: - **カスタムキーボード**: デフォルトのiOSキーボードを置き換え、すべてのアプリでユニークなキーボードを提供します。 - **共有**: ソーシャルネットワークや他のユーザーと直接共有することを可能にします。 - **今日(ウィジェット)**: 通知センターの今日ビューから迅速にコンテンツを提供したり、タスクを実行したりします。 ユーザーがホストアプリからテキストを共有するなど、これらの拡張に関与すると、拡張はそのコンテキスト内でこの入力を処理し、共有された情報を活用してタスクを実行します。これはAppleのドキュメントに詳述されています。 ### **セキュリティ考慮事項** 主なセキュリティの側面には以下が含まれます: - 拡張とその含まれるアプリは、直接ではなく、プロセス間通信を介して通信します。 - **今日ウィジェット**は、特定の方法でアプリを開くよう要求できる点でユニークです。 - 共有データへのアクセスはプライベートコンテナ内で許可されていますが、直接アクセスは制限されています。 - HealthKitを含む特定のAPIはアプリ拡張には使用できず、iMessage拡張を除いて、長時間実行されるタスクを開始したり、カメラやマイクにアクセスしたりすることはできません。 ### 静的分析 #### **アプリ拡張の特定** ソースコード内でアプリ拡張を見つけるには、Xcodeで`NSExtensionPointIdentifier`を検索するか、拡張を示す`.appex`ファイルをアプリバンドル内で検査します。ソースコードがない場合は、grepやSSHを使用してアプリバンドル内のこれらの識別子を見つけます。 #### **サポートされているデータタイプ** 拡張の`Info.plist`ファイルを確認して`NSExtensionActivationRule`を特定し、サポートされているデータタイプを確認します。この設定により、ホストアプリで拡張をトリガーするのは互換性のあるデータタイプのみとなります。 #### **データ共有** アプリとその拡張間のデータ共有には、"App Groups"を介して設定された共有コンテナが必要で、`NSUserDefaults`を通じてアクセスされます。この共有スペースは、拡張によって開始されるバックグラウンド転送に必要です。 #### **拡張の制限** アプリは特定の拡張タイプ、特にカスタムキーボードを制限でき、機密データの取り扱いがセキュリティプロトコルに沿うようにします。 ### 動的分析 動的分析には以下が含まれます: - **共有アイテムの検査**: `NSExtensionContext - inputItems`にフックして、共有データタイプとその起源を確認します。 - **拡張の特定**: `NSXPCConnection`のような内部メカニズムを観察することで、どの拡張がデータを処理しているかを発見します。 `frida-trace`のようなツールは、プロセス間通信の技術的詳細に興味がある人々にとって、基盤となるプロセスを理解するのに役立ちます。 ## 参考文献 - [https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/](https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/) - [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0072/](https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0072/) {{#include ../../banners/hacktricks-training.md}}