iOS Universal Links

Support HackTricks

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>

For more comprehensive insights, refer to the archived Apple Developer Documentation.

If working with a compiled application, entitlements can be extracted as outlined in this guide.

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ファイルをインデックスする時期を判断するのにも役立ちます。

参考文献

HackTricksをサポートする

Last updated