iOS Custom URI Handlers / Deeplinks / Custom Schemes
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
カスタムURLスキームは、アプリがカスタムプロトコルを使用して通信することを可能にします。詳細はApple Developer Documentationに記載されています。これらのスキームはアプリによって宣言され、アプリはそのスキームに従って受信したURLを処理します。すべてのURLパラメータを検証し、不正なURLを破棄することが重要です。このベクターを通じた攻撃を防ぐためです。
例として、URI myapp://hostname?data=123876123
が特定のアプリケーションアクションを呼び出します。注目すべき脆弱性は、Skype Mobileアプリにあり、skype://
プロトコルを介して許可されていない通話アクションを可能にしました。登録されたスキームは、アプリのInfo.plist
のCFBundleURLTypes
にあります。悪意のあるアプリケーションは、URIを再登録することで機密情報を傍受することができます。
iOS 9.0以降、アプリが利用可能かどうかを確認するために、canOpenURL:
はInfo.plist
のLSApplicationQueriesSchemes
にURLスキームを宣言する必要があります。これにより、アプリがクエリできるスキームは50に制限され、アプリの列挙を防ぐことでプライバシーが向上します。
開発者は、application:didFinishLaunchingWithOptions:
やapplication:openURL:options:
など、URLパスの構築と検証を理解するためにソースコードの特定のメソッドを検査する必要があります。例えば、TelegramはURLを開くためにさまざまなメソッドを使用しています:
openURL:options:completionHandler:
のようなメソッドは、他のアプリと対話するためにURLを開くのに重要です。アプリのソースコード内でそのようなメソッドの使用を特定することは、外部通信を理解するための鍵です。
application:handleOpenURL:
やopenURL:
のようなURLオープニングを扱う非推奨メソッドは、特定してセキュリティへの影響をレビューする必要があります。
URLスキームのファジングは、メモリ破損バグを特定できます。Fridaのようなツールは、さまざまなペイロードでURLを開いてクラッシュを監視することで、このプロセスを自動化できます。これは、iGoat-SwiftアプリでのURLの操作によって示されます:
この投稿によると、悪意のあるアプリは他のアプリのカスタムスキームを登録することができ、その後、悪意のあるアプリはASWebAuthenticationSessionを使用して、Safariアプリのすべてのクッキーを持つブラウザを開くことができます。
ブラウザを使用して、悪意のあるアプリは攻撃者が制御するウェブページを読み込み、TCCはモバイルユーザーにそのアプリを開くための権限を求めます。次に、悪意のあるウェブページは、例えばprompt=none
パラメータを持つOAuthフローにリダイレクトすることができます。ユーザーがすでにOAuthフローにログインしている場合、OAuthフローは被害者アプリケーションに秘密をカスタムスキームを使用して送信します。
しかし、悪意のあるアプリもそれを登録しており、使用されるブラウザが悪意のあるアプリ内にあるため、この場合カスタムスキームは悪意のあるアプリによって処理され、OAuthトークンを盗むことが可能になります。
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)