iOS Universal Links

htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!

HackTricks를 지원하는 다른 방법:

소개

Universal 링크는 사용자에게 원활한 리디렉션 경험을 제공하여 Safari 리디렉션을 우회하고 앱에서 콘텐츠를 직접 열 수 있도록 합니다. 이 링크는 다른 앱에서 요청할 수 없으므로 고유하고 안전합니다. 이는 웹 사이트의 루트 디렉토리에 apple-app-site-association JSON 파일을 호스팅하여 웹 사이트와 앱 사이의 검증 가능한 링크를 설정함으로써 보장됩니다. 앱이 설치되지 않은 경우 Safari가 사용자를 웹 페이지로 안내하여 앱의 존재를 유지합니다.

펜테스터에게는 apple-app-site-association 파일이 특히 흥미로울 수 있으며, 이 파일은 미발표 기능과 관련된 것을 포함하여 민감한 경로를 드러낼 수 있습니다.

연결된 도메인 권한 분석

개발자는 Xcode의 기능 탭에서 연결된 도메인을 구성하거나 .entitlements 파일을 검사하여 Universal 링크를 활성화합니다. 각 도메인은 applinks:로 접두사가 붙습니다. 예를 들어, Telegram의 구성은 다음과 같이 나타날 수 있습니다:

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

더 포괄적인 통찰력을 위해서는 보관된 Apple 개발자 문서를 참조하십시오.

컴파일된 애플리케이션을 사용하는 경우, entitlements는 이 가이드에 설명된대로 추출될 수 있습니다.

Apple App Site Association 파일 검색

apple-app-site-association 파일은 entitlements에서 지정된 도메인을 사용하여 서버에서 검색되어야 합니다. 파일은 https://<도메인>/apple-app-site-association을 통해 직접적으로 접근 가능해야 합니다. Apple App Site Association (AASA) Validator와 같은 도구는 이 과정을 돕는 데 도움이 될 수 있습니다.

앱은 Universal Links를 올바르게 처리하기 위해 특정 메서드를 구현해야 합니다. 주요한 메서드는 application:continueUserActivity:restorationHandler:입니다. 처리되는 URL의 scheme이 HTTP 또는 HTTPS여야 하며, 다른 scheme은 지원되지 않습니다.

데이터 핸들러 메서드 유효성 검사

Universal Links로 앱이 열릴 때, 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
}
}

개발자들은 열심히 구성하고 확인함으로써 유니버설 링크가 사용자 경험을 향상시키면서 보안 및 개인 정보 보호 기준을 유지할 수 있습니다.

참고 자료

htARTE (HackTricks AWS Red Team Expert)를 통해 **제로부터 AWS 해킹을 전문가 수준으로 배워보세요**!

HackTricks를 지원하는 다른 방법:

Last updated