mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/mobile-pentesting/ios-pentesting/ios-universal-links.md
This commit is contained in:
parent
a4ee67219b
commit
6ec6915724
@ -4,9 +4,9 @@
|
||||
|
||||
## Introduction
|
||||
|
||||
Universal links는 사용자가 Safari 리디렉션을 우회하여 앱에서 직접 콘텐츠를 열 수 있는 **매끄러운 리디렉션** 경험을 제공합니다. 이러한 링크는 **고유**하고 안전하며, 다른 앱에서 주장할 수 없습니다. 이는 웹사이트의 루트 디렉토리에 `apple-app-site-association` JSON 파일을 호스팅하여 웹사이트와 앱 간의 검증 가능한 링크를 설정함으로써 보장됩니다. 앱이 설치되지 않은 경우, Safari가 사용자에게 웹페이지로 안내하여 앱의 존재를 유지합니다.
|
||||
Universal links는 사용자가 Safari 리디렉션 없이 앱에서 직접 콘텐츠를 열 수 있도록 하는 **매끄러운 리디렉션** 경험을 제공합니다. 이러한 링크는 **고유**하고 안전하여 다른 앱이 주장할 수 없습니다. 이는 웹사이트의 루트 디렉토리에 `apple-app-site-association` JSON 파일을 호스팅함으로써 보장되며, 웹사이트와 앱 간의 검증 가능한 링크를 설정합니다. 앱이 설치되지 않은 경우, Safari가 사용자에게 웹페이지로 안내하여 앱의 존재를 유지합니다.
|
||||
|
||||
침투 테스터에게 `apple-app-site-association` 파일은 **민감한 경로**를 드러낼 수 있기 때문에 특히 관심이 있습니다. 여기에는 출시되지 않은 기능과 관련된 경로가 포함될 수 있습니다.
|
||||
침투 테스트를 수행하는 테스터에게 `apple-app-site-association` 파일은 **민감한 경로**를 드러낼 수 있어 특히 흥미롭습니다. 여기에는 출시되지 않은 기능과 관련된 경로가 포함될 수 있습니다.
|
||||
|
||||
### **Associated Domains Entitlement 분석하기**
|
||||
|
||||
@ -24,15 +24,27 @@ Universal links는 사용자가 Safari 리디렉션을 우회하여 앱에서
|
||||
|
||||
### **Apple App Site Association 파일 가져오기**
|
||||
|
||||
`apple-app-site-association` 파일은 권한에 지정된 도메인을 사용하여 서버에서 가져와야 합니다. 파일이 `https://<domain>/apple-app-site-association`에서 HTTPS를 통해 직접 접근 가능해야 합니다. [Apple App Site Association (AASA) Validator](https://branch.io/resources/aasa-validator/)와 같은 도구가 이 과정에 도움이 될 수 있습니다.
|
||||
`apple-app-site-association` 파일은 권한에 지정된 도메인을 사용하여 서버에서 가져와야 합니다. 파일이 `https://<domain>/apple-app-site-association` (또는 `/.well-known/apple-app-site-association`)에서 HTTPS를 통해 직접 접근 가능해야 합니다. [Apple App Site Association (AASA) Validator](https://branch.io/resources/aasa-validator/)와 같은 도구가 이 과정에 도움이 될 수 있습니다.
|
||||
|
||||
> **macOS/Linux 셸에서의 빠른 열거**
|
||||
>
|
||||
> ```bash
|
||||
> # ent.xml에 권한을 추출했다고 가정
|
||||
> doms=$(plutil -extract com.apple.developer.associated-domains xml1 -o - ent.xml | \
|
||||
> grep -oE 'applinks:[^<]+' | cut -d':' -f2)
|
||||
> for d in $doms; do
|
||||
> echo "[+] $d에 대한 AASA 가져오는 중";
|
||||
> curl -sk "https://$d/.well-known/apple-app-site-association" | jq '.'
|
||||
> done
|
||||
> ```
|
||||
|
||||
### **앱에서의 유니버설 링크 처리**
|
||||
|
||||
앱은 유니버설 링크를 올바르게 처리하기 위해 특정 메서드를 구현해야 합니다. 주목해야 할 주요 메서드는 [`application:continueUserActivity:restorationHandler:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623072-application)입니다. 처리되는 URL의 스킴이 HTTP 또는 HTTPS여야 하며, 다른 스킴은 지원되지 않습니다.
|
||||
앱은 유니버설 링크를 올바르게 처리하기 위해 특정 메서드를 구현해야 합니다. 찾아야 할 주요 메서드는 [`application:continueUserActivity:restorationHandler:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623072-application)입니다. 처리되는 URL의 스킴이 HTTP 또는 HTTPS여야 하며, 다른 스킴은 지원되지 않습니다.
|
||||
|
||||
#### **데이터 핸들러 메서드 검증**
|
||||
|
||||
유니버설 링크가 앱을 열면, `NSUserActivity` 객체가 URL과 함께 앱에 전달됩니다. 이 URL을 처리하기 전에 보안 위험을 방지하기 위해 이를 검증하고 정리하는 것이 필수적입니다. 다음은 이 과정을 보여주는 Swift 예제입니다:
|
||||
유니버설 링크가 앱을 열면, URL과 함께 `NSUserActivity` 객체가 앱에 전달됩니다. 이 URL을 처리하기 전에 보안 위험을 방지하기 위해 이를 검증하고 정리하는 것이 중요합니다. 다음은 이 과정을 보여주는 Swift 예제입니다:
|
||||
```swift
|
||||
func application(_ application: UIApplication, continue userActivity: NSUserActivity,
|
||||
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
|
||||
@ -72,13 +84,34 @@ return false
|
||||
```
|
||||
**부지런한 구성 및 검증**을 통해 개발자는 유니버설 링크가 사용자 경험을 향상시키면서 보안 및 개인 정보 보호 기준을 유지하도록 할 수 있습니다.
|
||||
|
||||
## 일반적인 취약점 및 펜테스팅 점검
|
||||
|
||||
| # | 약점 | 테스트 방법 | 악용 / 영향 |
|
||||
|---|----------|------------|-----------------------|
|
||||
| 1 | **AASA 파일의 과도한 `paths` / `components`** (예: `"/": "*"` 또는 `"/a/*"`와 같은 와일드카드). | • 다운로드한 AASA를 검사하고 `*`, 후행 슬래시 또는 `{"?": …}` 규칙을 찾습니다.<br>• 여전히 규칙과 일치하는 알려지지 않은 리소스를 요청해 보세요 (`https://domain.com/a/evil?_p_dp=1`). | 유니버설 링크 하이재킹: 동일한 도메인을 등록한 악성 iOS 앱이 이러한 링크를 주장하고 피싱 UI를 표시할 수 있습니다. 실제 사례로는 2025년 5월 Temu.com 버그 바운티 보고서에서 공격자가 `/a/*` 경로를 자신의 앱으로 리디렉션할 수 있었습니다. |
|
||||
| 2 | **딥 링크 경로에 대한 서버 측 검증 누락**. | 허용된 경로를 식별한 후, 존재하지 않는 리소스에 대해 `curl`/Burp 요청을 발행하고 HTTP 상태 코드를 관찰합니다. `404` 이외의 모든 것(예: 200/302)은 의심스럽습니다. | 공격자는 허용된 경로 뒤에 임의의 콘텐츠를 호스팅하고 이를 합법적인 도메인을 통해 제공하여 피싱 또는 세션 토큰 도난의 성공률을 높일 수 있습니다. |
|
||||
| 3 | **스킴/호스트 화이트리스트 없이 앱 측 URL 처리** (CVE-2024-10474 – Mozilla Focus < 132). | 직접 `openURL:`/`open(_:options:)` 호출 또는 임의의 URL을 전달하는 JavaScript 브리지를 찾습니다. | 내부 페이지는 브라우저의 URL 바 안전 검사를 우회하는 `myapp://` 또는 `https://` URL을 밀반입할 수 있어 스푸핑 또는 의도하지 않은 권한 있는 작업으로 이어질 수 있습니다. |
|
||||
| 4 | **권한에서 와일드카드 서브도메인 사용** (`*.example.com`). | 권한에서 `*.`를 `grep`합니다. | 서브도메인이 인수되면(예: 사용되지 않는 S3 버킷을 통해) 공격자는 자동으로 유니버설 링크 바인딩을 얻습니다. |
|
||||
|
||||
### 빠른 체크리스트
|
||||
|
||||
* [ ] 권한을 추출하고 모든 `applinks:` 항목을 나열합니다.
|
||||
* [ ] 각 항목에 대해 AASA를 다운로드하고 와일드카드를 감사합니다.
|
||||
* [ ] 웹 서버가 정의되지 않은 경로에 대해 **404**를 반환하는지 확인합니다.
|
||||
* [ ] 바이너리에서 **오직** 신뢰할 수 있는 호스트/스킴만 처리되는지 확인합니다.
|
||||
* [ ] 앱이 새로운 `components` 구문(iOS 11+)을 사용하는 경우 쿼리 매개변수 규칙(`{"?":{…}}`)을 퍼즈합니다.
|
||||
|
||||
## 도구
|
||||
|
||||
- [GetUniversal.link](https://getuniversal.link/): 앱의 유니버설 링크 및 AASA 파일의 테스트와 관리를 간소화하는 데 도움을 줍니다. 도메인을 입력하여 AASA 파일의 무결성을 확인하거나 사용자 정의 대시보드를 사용하여 링크 동작을 쉽게 테스트할 수 있습니다. 이 도구는 Apple이 다음에 AASA 파일을 인덱싱할 시기를 결정하는 데도 도움을 줍니다.
|
||||
- [GetUniversal.link](https://getuniversal.link/): 앱의 유니버설 링크 및 AASA 파일의 테스트 및 관리를 단순화하는 데 도움을 줍니다. 도메인을 입력하여 AASA 파일 무결성을 확인하거나 사용자 정의 대시보드를 사용하여 링크 동작을 쉽게 테스트할 수 있습니다. 이 도구는 Apple이 다음에 AASA 파일을 인덱싱할 시기를 결정하는 데도 도움을 줍니다.
|
||||
- [Knil](https://github.com/ethanhuang13/knil): 도메이에 의해 선언된 모든 유니버설 링크를 직접 장치에서 가져오고, 구문 분석하며 **탭 테스트**를 할 수 있는 오픈 소스 iOS 유틸리티입니다.
|
||||
- [universal-link-validator](https://github.com/urbangems/universal-link-validator): 엄격한 AASA 적합성 검사를 수행하고 위험한 와일드카드를 강조하는 CLI / 웹 검증기입니다.
|
||||
|
||||
## 참고자료
|
||||
|
||||
- [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0070/#static-analysis](https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0070/#static-analysis)
|
||||
- [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8)
|
||||
- [https://medium.com/@m.habibgpi/universal-link-hijacking-via-misconfigured-aasa-file-on-temu-com-eadfcb745e4e](https://medium.com/@m.habibgpi/universal-link-hijacking-via-misconfigured-aasa-file-on-temu-com-eadfcb745e4e)
|
||||
- [https://nvd.nist.gov/vuln/detail/CVE-2024-10474](https://nvd.nist.gov/vuln/detail/CVE-2024-10474)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user