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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
Introduction
ユニバーサルリンクは、ユーザーにシームレスなリダイレクション体験を提供し、Safariのリダイレクションをバイパスしてアプリ内のコンテンツを直接開きます。これらのリンクはユニークで安全であり、他のアプリによって主張されることはありません。これは、ウェブサイトのルートディレクトリにapple-app-site-association
JSONファイルをホスティングすることで保証され、ウェブサイトとアプリの間に検証可能なリンクが確立されます。アプリがインストールされていない場合、Safariが引き継ぎ、ユーザーをウェブページに誘導し、アプリの存在を維持します。
ペネトレーションテスターにとって、apple-app-site-association
ファイルは特に興味深いものであり、機密パスを明らかにする可能性があり、未発表の機能に関連するものが含まれることもあります。
関連ドメイン権限の分析
開発者は、XcodeのCapabilitiesタブで関連ドメインを設定するか、.entitlements
ファイルを検査することでユニバーサルリンクを有効にします。各ドメインはapplinks:
で始まります。例えば、Telegramの設定は次のように表示されるかもしれません:
<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の例です:
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はこの目的に役立ちます。以下に示します:
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ファイルをインデックスする時期を判断するのにも役立ちます。
参考文献
- https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0070/#static-analysis
- https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8
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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。