mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 12:43:23 +00:00
Translated ['mobile-pentesting/ios-pentesting/ios-universal-links.md'] t
This commit is contained in:
parent
f3f2a6ded5
commit
2728fc4a3b
1 changed files with 24 additions and 27 deletions
|
@ -3,28 +3,28 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
||||
* **해킹 트릭을 공유하려면 PR을 제출하여** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 기여하세요.
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
## 소개
|
||||
|
||||
Universal 링크는 사용자에게 **원활한 리디렉션** 경험을 제공하여 Safari 리디렉션을 우회하고 앱에서 콘텐츠를 직접 열 수 있도록 합니다. 이 링크는 다른 앱에서 요청할 수 없으므로 **고유**하고 안전합니다. 이는 웹 사이트의 루트 디렉토리에 `apple-app-site-association` JSON 파일을 호스팅하여 웹 사이트와 앱 사이의 검증 가능한 링크를 설정함으로써 보장됩니다. 앱이 설치되지 않은 경우 Safari가 사용자를 웹 페이지로 안내하여 앱의 존재를 유지합니다.
|
||||
Universal links는 사용자에게 앱에서 콘텐츠를 직접 열어주어 Safari 리디렉션 필요를 우회하여 **원활한 리디렉션** 경험을 제공합니다. 이러한 링크는 다른 앱에서 요청할 수 없도록 **고유하고 안전**하며, 웹사이트의 루트 디렉토리에 `apple-app-site-association` JSON 파일을 호스팅하여 웹사이트와 앱 간의 검증 가능한 링크를 설정함으로써 보장됩니다. 앱이 설치되지 않은 경우 Safari가 사용자를 웹페이지로 안내하여 앱의 존재를 유지합니다.
|
||||
|
||||
펜테스터에게는 `apple-app-site-association` 파일이 특히 흥미로울 수 있으며, 이 파일은 미발표 기능과 관련된 것을 포함하여 **민감한 경로**를 드러낼 수 있습니다.
|
||||
펜 테스터들에게는 `apple-app-site-association` 파일이 특히 흥미로울 수 있으며, 이 파일은 미발표 기능과 관련된 경로를 포함할 수 있는 **민감한 경로**를 드러낼 수 있습니다.
|
||||
|
||||
### **연결된 도메인 권한 분석**
|
||||
|
||||
개발자는 Xcode의 기능 탭에서 **연결된 도메인**을 구성하거나 `.entitlements` 파일을 검사하여 Universal 링크를 활성화합니다. 각 도메인은 `applinks:`로 접두사가 붙습니다. 예를 들어, Telegram의 구성은 다음과 같이 나타날 수 있습니다:
|
||||
개발자는 Xcode의 기능 탭에서 **연결된 도메인**을 구성하거나 `.entitlements` 파일을 검사하여 Universal Links를 활성화합니다. 각 도메인은 `applinks:`로 접두사가 붙습니다. 예를 들어, 텔레그램의 구성은 다음과 같이 나타날 수 있습니다:
|
||||
```xml
|
||||
<key>com.apple.developer.associated-domains</key>
|
||||
<array>
|
||||
|
@ -32,21 +32,17 @@ Universal 링크는 사용자에게 **원활한 리디렉션** 경험을 제공
|
|||
<string>applinks:t.me</string>
|
||||
</array>
|
||||
```
|
||||
더 포괄적인 통찰력을 위해서는 [보관된 Apple 개발자 문서](https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12-SW2)를 참조하십시오.
|
||||
### **Apple App 사이트 연합 협회 파일 검색**
|
||||
|
||||
컴파일된 애플리케이션을 사용하는 경우, entitlements는 [이 가이드](extracting-entitlements-from-compiled-application.md)에 설명된대로 추출될 수 있습니다.
|
||||
`apple-app-site-association` 파일은 권한에 지정된 도메인을 사용하여 서버에서 검색되어야 합니다. 파일은 `https://<도메인>/apple-app-site-association`에서 직접 액세스할 수 있어야 합니다. [Apple App 사이트 협회 (AASA) Validator](https://branch.io/resources/aasa-validator/)와 같은 도구는이 프로세스를 지원할 수 있습니다.
|
||||
|
||||
### **Apple App Site Association 파일 검색**
|
||||
### **앱에서 Universal 링크 처리**
|
||||
|
||||
`apple-app-site-association` 파일은 entitlements에서 지정된 도메인을 사용하여 서버에서 검색되어야 합니다. 파일은 `https://<도메인>/apple-app-site-association`을 통해 직접적으로 접근 가능해야 합니다. [Apple App Site Association (AASA) Validator](https://branch.io/resources/aasa-validator/)와 같은 도구는 이 과정을 돕는 데 도움이 될 수 있습니다.
|
||||
|
||||
### **앱에서 Universal Links 처리**
|
||||
|
||||
앱은 Universal Links를 올바르게 처리하기 위해 특정 메서드를 구현해야 합니다. 주요한 메서드는 [`application:continueUserActivity:restorationHandler:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623072-application)입니다. 처리되는 URL의 scheme이 HTTP 또는 HTTPS여야 하며, 다른 scheme은 지원되지 않습니다.
|
||||
앱은 Universal 링크를 올바르게 처리하기 위해 특정 메서드를 구현해야합니다. 찾아야 할 주요 메서드는 [`application:continueUserActivity:restorationHandler:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623072-application)입니다. 처리해야 하는 URL의 scheme이 HTTP 또는 HTTPS 여야하며, 다른 scheme은 지원되지 않습니다.
|
||||
|
||||
#### **데이터 핸들러 메서드 유효성 검사**
|
||||
|
||||
Universal Links로 앱이 열릴 때, `NSUserActivity` 객체가 URL과 함께 앱에 전달됩니다. 이 URL을 처리하기 전에 보안 위험을 방지하기 위해 유효성을 검사하고 정리하는 것이 중요합니다. 다음은 이 과정을 보여주는 Swift 예시입니다:
|
||||
Universal 링크가 앱을 열 때 `NSUserActivity` 객체가 URL과 함께 앱으로 전달됩니다. 이 URL을 처리하기 전에 보안 위험을 방지하기 위해 유효성을 검사하고 정리하는 것이 중요합니다. 다음은이 프로세스를 보여주는 Swift의 예시입니다:
|
||||
```swift
|
||||
func application(_ application: UIApplication, continue userActivity: NSUserActivity,
|
||||
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
|
||||
|
@ -58,7 +54,7 @@ application.open(url, options: [:], completionHandler: nil)
|
|||
return true
|
||||
}
|
||||
```
|
||||
URL은 특히 매개변수를 포함하는 경우에는 신중하게 구문 분석되고 유효성이 검사되어야 합니다. `NSURLComponents` API는 이러한 목적에 유용하며, 아래에 설명된 대로 사용할 수 있습니다:
|
||||
URL은 특히 매개변수를 포함하는 경우 신중하게 구문 분석 및 유효성을 검사해야 하며 잠재적인 스푸핑 또는 잘못된 데이터에 대비해야 합니다. 이러한 목적으로 `NSURLComponents` API가 유용하며 아래에서 설명한 대로 사용할 수 있습니다:
|
||||
```swift
|
||||
func application(_ application: UIApplication,
|
||||
continue userActivity: NSUserActivity,
|
||||
|
@ -84,10 +80,11 @@ return false
|
|||
}
|
||||
}
|
||||
```
|
||||
개발자들은 **열심히 구성하고 확인함으로써** 유니버설 링크가 사용자 경험을 향상시키면서 보안 및 개인 정보 보호 기준을 유지할 수 있습니다.
|
||||
|
||||
**노력하는 구성 및 유효성 검사**를 통해, 개발자는 유니버설 링크가 사용자 경험을 향상시키는 동시에 보안 및 개인 정보 보호 기준을 유지할 수 있도록 할 수 있습니다.
|
||||
|
||||
|
||||
## 도구
|
||||
* [GetUniversal.link](https://getuniversal.link/): 앱의 유니버설 링크 및 AASA 파일의 테스트 및 관리를 간소화하는 데 도움이 됩니다. 도메인을 입력하여 AASA 파일 무결성을 확인하거나 링크 동작을 쉽게 테스트하기 위해 사용자 정의 대시보드를 사용할 수 있습니다. 또한 이 도구는 Apple이 다음으로 AASA 파일을 색인화할 때를 결정하는 데 도움을 줍니다.
|
||||
|
||||
## 참고 자료
|
||||
* [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)
|
||||
|
@ -97,14 +94,14 @@ return false
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 AWS 해킹을 전문가 수준으로 배워보세요**!</summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
||||
* **HackTricks**와 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하여 여러분의 해킹 기교를 공유하세요.
|
||||
* **회사가 HackTricks를 광고하거나 PDF로 다운로드하고 싶다면** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [디스코드 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
|
Loading…
Reference in a new issue