iOS Custom URI Handlers / Deeplinks / Custom Schemes
Reading time: 4 minutes
tip
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
Basic Information
커스텀 URL 스킴은 앱이 커스텀 프로토콜을 사용하여 통신할 수 있도록 하며, 이는 Apple Developer Documentation에서 자세히 설명되어 있습니다. 이러한 스킴은 앱에서 선언해야 하며, 이후 해당 스킴에 따라 들어오는 URL을 처리합니다. 모든 URL 매개변수를 검증하고 형식이 잘못된 URL은 폐기하는 것이 중요하여, 이를 통해 공격을 방지할 수 있습니다.
URI myapp://hostname?data=123876123
가 특정 애플리케이션 동작을 호출하는 예가 주어집니다. 주목할 만한 취약점은 Skype Mobile 앱에서 발견되었으며, 이는 skype://
프로토콜을 통해 허가되지 않은 통화 동작을 허용했습니다. 등록된 스킴은 앱의 Info.plist
의 CFBundleURLTypes
에서 확인할 수 있습니다. 악의적인 애플리케이션은 URI를 재등록하여 민감한 정보를 가로챌 수 있습니다.
Application Query Schemes Registration
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 경로 구성 및 검증을 이해해야 합니다. 예를 들어, Telegram은 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
커스텀 URL 스킴 하이재킹
이 게시물에 따르면, 악성 앱은 다른 앱의 커스텀 스킴을 등록할 수 있으며, 그러면 악성 앱은 ASWebAuthenticationSession을 사용하여 Safari 앱의 모든 쿠키가 있는 브라우저를 열 수 있습니다.
악성 앱은 브라우저를 통해 공격자가 제어하는 웹 페이지를 로드할 수 있으며, TCC는 모바일 사용자에게 해당 앱을 열기 위한 권한을 요청합니다. 그런 다음, 악성 웹 페이지는 피해자 페이지로 리디렉션할 수 있으며, 예를 들어 prompt=none
매개변수를 가진 OAuth 흐름으로 리디렉션됩니다. 사용자가 이미 OAuth 흐름에 로그인한 경우, OAuth 흐름은 피해자 앱의 커스텀 스킴을 사용하여 비밀을 피해자 애플리케이션으로 다시 보냅니다.
그러나 악성 앱도 이를 등록했기 때문에, 사용된 브라우저가 악성 앱 내에 있기 때문에, 이 경우 커스텀 스킴은 악성 앱에 의해 처리되어 OAuth 토큰을 훔칠 수 있습니다.
참조
- https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/
- https://evanconnelly.github.io/post/ios-oauth/
tip
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.