iOS Universal Links

htARTE(HackTricks AWS Red Team Expert) でゼロからヒーローまでAWSハッキングを学びましょう

HackTricks をサポートする他の方法:

はじめに

ユニバーサルリンクは、ユーザーにシームレスなリダイレクト体験を提供し、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などのツールがこのプロセスを支援します。

アプリ内でのUniversal Linksの処理

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

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

Universal Linkがアプリを開くと、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
}

URLは、特にパラメータを含む場合には注意深く解析および検証する必要があります。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
}
}

入念な構成と検証により、開発者はユニバーサルリンクがユーザーエクスペリエンスを向上させる一方でセキュリティとプライバシー基準を維持できます。

参考文献

ゼロからヒーローまでのAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)

HackTricksをサポートする他の方法:

Last updated