hacktricks/mobile-pentesting/ios-pentesting/ios-custom-uri-handlers-deeplinks-custom-schemes.md

104 lines
7.8 KiB
Markdown
Raw Normal View History

# iOS Custom URI Handlers / Deeplinks / Custom Schemes
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>Support HackTricks</summary>
2022-04-28 16:01:33 +00:00
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}
2022-04-28 16:01:33 +00:00
## 基本情報
2021-05-21 16:38:18 +00:00
カスタムURLスキームは、アプリがカスタムプロトコルを使用して通信することを可能にします。詳細は[Apple Developer Documentation](https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Inter-AppCommunication/Inter-AppCommunication.html#//apple\_ref/doc/uid/TP40007072-CH6-SW1)に記載されています。これらのスキームはアプリによって宣言され、アプリはそのスキームに従って受信したURLを処理します。すべてのURLパラメータを**検証し**、**不正なURLを破棄する**ことが重要です。このベクターを通じた攻撃を防ぐためです。
2021-05-21 16:38:18 +00:00
例として、URI `myapp://hostname?data=123876123` が特定のアプリケーションアクションを呼び出します。注目すべき脆弱性は、Skype Mobileアプリにあり、`skype://`プロトコルを介して許可されていない通話アクションを可能にしました。登録されたスキームは、アプリの`Info.plist`の`CFBundleURLTypes`にあります。悪意のあるアプリケーションは、URIを再登録することで機密情報を傍受することができます。
2021-05-21 16:38:18 +00:00
### アプリケーションクエリスキームの登録
2021-05-21 16:38:18 +00:00
iOS 9.0以降、アプリが利用可能かどうかを確認するために、`canOpenURL:`は`Info.plist`の`LSApplicationQueriesSchemes`にURLスキームを宣言する必要があります。これにより、アプリがクエリできるスキームは50に制限され、アプリの列挙を防ぐことでプライバシーが向上します。
```xml
2021-05-21 16:38:18 +00:00
<key>LSApplicationQueriesSchemes</key>
2023-07-07 23:42:27 +00:00
<array>
<string>url_scheme1</string>
<string>url_scheme2</string>
</array>
2021-05-21 16:38:18 +00:00
```
### URL処理と検証のテスト
2021-05-21 16:38:18 +00:00
開発者は、`application:didFinishLaunchingWithOptions:`や`application:openURL:options:`など、URLパスの構築と検証を理解するためにソースコードの特定のメソッドを検査する必要があります。例えば、TelegramはURLを開くためにさまざまなメソッドを使用しています
2021-05-21 16:38:18 +00:00
```swift
func application(_ application: UIApplication, open url: URL, sourceApplication: String?) -> Bool {
2023-07-07 23:42:27 +00:00
self.openUrl(url: url)
return true
2021-05-21 16:38:18 +00:00
}
func application(_ application: UIApplication, open url: URL, sourceApplication: String?,
annotation: Any) -> Bool {
2023-07-07 23:42:27 +00:00
self.openUrl(url: url)
return true
2021-05-21 16:38:18 +00:00
}
func application(_ app: UIApplication, open url: URL,
options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
2023-07-07 23:42:27 +00:00
self.openUrl(url: url)
return true
2021-05-21 16:38:18 +00:00
}
func application(_ application: UIApplication, handleOpen url: URL) -> Bool {
2023-07-07 23:42:27 +00:00
self.openUrl(url: url)
return true
2021-05-21 16:38:18 +00:00
}
```
### 他のアプリへのURLリクエストのテスト
2021-05-21 16:38:18 +00:00
`openURL:options:completionHandler:`のようなメソッドは、他のアプリと対話するためにURLを開くのに重要です。アプリのソースコード内でそのようなメソッドの使用を特定することは、外部通信を理解するための鍵です。
2021-05-21 16:38:18 +00:00
### 非推奨メソッドのテスト
2021-05-21 16:38:18 +00:00
`application:handleOpenURL:`や`openURL:`のようなURLオープニングを扱う非推奨メソッドは、特定してセキュリティへの影響をレビューする必要があります。
2021-05-21 16:38:18 +00:00
### URLスキームのファジング
2021-05-21 16:38:18 +00:00
URLスキームのファジングは、メモリ破損バグを特定できます。[Frida](https://codeshare.frida.re/@dki/ios-url-scheme-fuzzing/)のようなツールは、さまざまなペイロードでURLを開いてクラッシュを監視することで、このプロセスを自動化できます。これは、iGoat-SwiftアプリでのURLの操作によって示されます
2021-05-21 16:38:18 +00:00
```bash
$ frida -U SpringBoard -l ios-url-scheme-fuzzing.js
[iPhone::SpringBoard]-> fuzz("iGoat", "iGoat://?contactNumber={0}&message={0}")
Watching for crashes from iGoat...
No logs were moved.
Opened URL: iGoat://?contactNumber=0&message=0
```
## カスタムURLスキームのハイジャック
[**この投稿**](https://evanconnelly.github.io/post/ios-oauth/)によると、悪意のあるアプリは**他のアプリのカスタムスキームを登録**することができ、その後、悪意のあるアプリは[ASWebAuthenticationSession](https://developer.apple.com/documentation/authenticationservices/aswebauthenticationsession/2990952-init#parameters)を使用して、Safariアプリのすべてのクッキーを持つブラウザを開くことができます。&#x20;
ブラウザを使用して、悪意のあるアプリは攻撃者が制御するウェブページを読み込み、TCCはモバイルユーザーにそのアプリを開くための権限を求めます。次に、悪意のあるウェブページは、例えば`prompt=none`パラメータを持つOAuthフローにリダイレクトすることができます。ユーザーがすでにOAuthフローにログインしている場合、OAuthフローは被害者アプリケーションに秘密をカスタムスキームを使用して送信します。\
しかし、悪意のあるアプリもそれを登録しており、使用されるブラウザが悪意のあるアプリ内にあるため、この場合カスタムスキームは悪意のあるアプリによって処理され、OAuthトークンを盗むことが可能になります。
## 参考文献
* [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/](https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/)
* [https://evanconnelly.github.io/post/ios-oauth/](https://evanconnelly.github.io/post/ios-oauth/)
2022-04-28 16:01:33 +00:00
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>Support HackTricks</summary>
2022-04-28 16:01:33 +00:00
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}