iOS Custom URI Handlers / Deeplinks / Custom Schemes

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

HackTricks를 지원하는 다른 방법:

이것은 https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/에서 관련 정보의 요약입니다.

기본 정보

사용자 정의 URL 스키마는 앱이 사용자 정의 프로토콜을 사용하여 통신할 수 있도록합니다. 자세한 내용은 Apple 개발자 문서를 참조하십시오. 이러한 스키마는 앱에 의해 선언되어 해당 스키마를 따르는 URL을 처리합니다. 이 벡터를 통한 공격을 방지하기 위해 모든 URL 매개변수를 유효성 검사하고 잘못된 URL을 폐기해야합니다.

예를 들어, URI myapp://hostname?data=123876123는 특정 애플리케이션 동작을 호출합니다. Skype Mobile 앱에서 발견된 취약점은 skype:// 프로토콜을 통해 허가되지 않은 호출 동작을 허용했습니다. 등록된 스키마는 앱의 Info.plist에서 CFBundleURLTypes 아래에서 찾을 수 있습니다. 악성 애플리케이션은 이를 이용하여 민감한 정보를 가로챌 수 있습니다.

애플리케이션 쿼리 스키마 등록

iOS 9.0부터 canOpenURL:을 사용하여 앱의 가용성을 확인하려면 Info.plist에서 LSApplicationQueriesSchemes 아래에 URL 스키마를 선언해야합니다. 이를 통해 앱의 열거를 방지하여 개인 정보 보호를 강화하기 위해 앱이 쿼리할 수 있는 스키마가 50개로 제한됩니다.

<key>LSApplicationQueriesSchemes</key>
<array>
<string>url_scheme1</string>
<string>url_scheme2</string>
</array>

URL 처리 및 유효성 검사 테스트

개발자는 application:didFinishLaunchingWithOptions:application:openURL:options:와 같은 소스 코드의 특정 메서드를 검사하여 URL 경로 구성 및 유효성 검사를 이해해야 합니다. 예를 들어, 텔레그램은 다양한 방법으로 URL을 열기 위해 다음과 같은 메서드를 사용합니다:

func application(_ application: UIApplication, open url: URL, sourceApplication: String?) -> Bool {
self.openUrl(url: url)
return true
}

func application(_ application: UIApplication, open url: URL, sourceApplication: String?,
annotation: Any) -> Bool {
self.openUrl(url: url)
return true
}

func application(_ app: UIApplication, open url: URL,
options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
self.openUrl(url: url)
return true
}

func application(_ application: UIApplication, handleOpen url: URL) -> Bool {
self.openUrl(url: url)
return true
}

다른 앱에 대한 URL 요청 테스트

openURL:options:completionHandler:와 같은 메소드는 다른 앱과 상호작용하기 위해 URL을 열 때 중요합니다. 앱의 소스 코드에서 이러한 메소드의 사용을 식별하는 것은 외부 통신을 이해하는 데 필수적입니다.

폐기된 메소드에 대한 테스트

application:handleOpenURL:openURL:과 같은 폐기된 메소드는 URL 열기를 처리하는 데 사용되며, 보안적인 영향을 검토하기 위해 식별되어야 합니다.

URL 스키마 퍼징

URL 스키마 퍼징은 메모리 손상 버그를 식별할 수 있습니다. Frida와 같은 도구를 사용하여 다양한 페이로드를 가진 URL을 열어 충돌을 모니터링하는 프로세스를 자동화할 수 있습니다. 이는 iGoat-Swift 앱에서 URL을 조작하는 것으로 예시됩니다.

$ frida -U SpringBoard -l ios-url-scheme-fuzzing.js
[iPhone::SpringBoard]-> fuzz("iGoat", "iGoat://?contactNumber={0}&message={0}")
Watching for crashes from iGoat...
No logs were moved.
Opened URL: iGoat://?contactNumber=0&message=0

참고 자료

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

HackTricks를 지원하는 다른 방법:

Last updated