iOS Universal Links

Reading time: 7 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

Introduction

ユニバーサルリンクは、ユーザーにシームレスなリダイレクション体験を提供し、Safariのリダイレクションをバイパスしてアプリ内のコンテンツを直接開きます。これらのリンクはユニークで安全であり、他のアプリによって主張されることはありません。これは、ウェブサイトのルートディレクトリにapple-app-site-association JSONファイルをホスティングすることで保証され、ウェブサイトとアプリの間に検証可能なリンクが確立されます。アプリがインストールされていない場合、Safariが引き継ぎ、ユーザーをウェブページに誘導し、アプリの存在を維持します。

ペネトレーションテスターにとって、apple-app-site-associationファイルは特に興味深いものであり、機密パスを明らかにする可能性があり、未発表の機能に関連するものが含まれることもあります。

関連ドメイン権限の分析

開発者は、XcodeのCapabilitiesタブで関連ドメインを設定するか、.entitlementsファイルを検査することでユニバーサルリンクを有効にします。各ドメインはapplinks:で始まります。例えば、Telegramの設定は次のように表示されるかもしれません:

xml
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:telegram.me</string>
<string>applinks:t.me</string>
</array>

より包括的な洞察については、アーカイブされたApple Developer Documentationを参照してください。

コンパイルされたアプリケーションを使用している場合、このガイドに従って権限を抽出できます。

Apple App Site Associationファイルの取得

apple-app-site-associationファイルは、権限に指定されたドメインを使用してサーバーから取得する必要があります。このファイルは、https://<domain>/apple-app-site-associationでHTTPS経由で直接アクセスできることを確認してください。Apple App Site Association (AASA) Validatorのようなツールがこのプロセスを支援できます。

アプリ内のユニバーサルリンクの処理

アプリは、ユニバーサルリンクを正しく処理するために特定のメソッドを実装する必要があります。探すべき主なメソッドはapplication:continueUserActivity:restorationHandler:です。処理されるURLのスキームはHTTPまたはHTTPSであることが重要であり、他のスキームはサポートされません。

データハンドラーメソッドの検証

ユニバーサルリンクがアプリを開くと、NSUserActivityオブジェクトがURLと共にアプリに渡されます。このURLを処理する前に、セキュリティリスクを防ぐために検証およびサニタイズすることが重要です。以下は、プロセスを示すSwiftの例です:

swift
func application(_ application: UIApplication, continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
// Check for web browsing activity and valid URL
if userActivity.activityType == NSUserActivityTypeBrowsingWeb, let url = userActivity.webpageURL {
application.open(url, options: [:], completionHandler: nil)
}

return true
}

URLsは慎重に解析され、検証されるべきです。特にパラメータが含まれている場合、潜在的なスプーフィングや不正なデータから守るためです。NSURLComponents APIはこの目的に役立ちます。以下に示します:

swift
func application(_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let incomingURL = userActivity.webpageURL,
let components = NSURLComponents(url: incomingURL, resolvingAgainstBaseURL: true),
let path = components.path,
let params = components.queryItems else {
return false
}

if let albumName = params.first(where: { $0.name == "albumname" })?.value,
let photoIndex = params.first(where: { $0.name == "index" })?.value {
// Process the URL with album name and photo index

return true

} else {
// Handle invalid or missing parameters

return false
}
}

開発者は、勤勉な構成と検証を通じて、ユニバーサルリンクがユーザーエクスペリエンスを向上させると同時に、セキュリティとプライバシー基準を維持することを確実にできます。

ツール

  • GetUniversal.link: アプリのユニバーサルリンクとAASAファイルのテストと管理を簡素化するのに役立ちます。ドメインを入力するだけでAASAファイルの整合性を確認したり、カスタムダッシュボードを使用してリンクの動作を簡単にテストできます。このツールは、Appleが次にAASAファイルをインデックスする時期を判断するのにも役立ちます。

参考文献

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする