hacktricks/mobile-pentesting/ios-pentesting/ios-uiactivity-sharing.md

80 lines
5.6 KiB
Markdown

# iOS UIActivity Sharing
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
# UIActivity Sharing Simplified
iOS 6부터, 서드파티 애플리케이션은 Apple의 [Inter-App Communication guide](https://developer.apple.com/library/archive/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Inter-AppCommunication/Inter-AppCommunication.html#//apple_ref/doc/uid/TP40007072-CH6-SW3)에서 설명된 대로 AirDrop과 같은 메커니즘을 사용하여 텍스트, URL 또는 이미지와 같은 **데이터를 공유**할 수 있게 되었습니다. 이 기능은 "공유" 버튼과 상호작용할 때 나타나는 시스템 전체의 _공유 활동 시트_를 통해 구현됩니다.
모든 내장 공유 옵션의 포괄적인 열거는 [UIActivity.ActivityType](https://developer.apple.com/documentation/uikit/uiactivity/activitytype)에서 확인할 수 있습니다. 개발자는 애플리케이션에 적합하지 않다고 판단되는 특정 공유 옵션을 제외할 수 있습니다.
## **데이터 공유 방법**
다음 사항에 주의를 기울여야 합니다:
- 공유되는 데이터의 성격.
- 사용자 정의 활동의 포함.
- 특정 활동 유형의 제외.
공유는 `UIActivityViewController`의 인스턴스를 생성하여 촉진되며, 공유할 항목이 전달됩니다. 이는 다음과 같이 호출하여 달성됩니다:
```bash
$ rabin2 -zq Telegram\ X.app/Telegram\ X | grep -i activityItems
0x1000df034 45 44 initWithActivityItems:applicationActivities:
```
개발자는 `UIActivityViewController`에서 초기화된 활동 및 사용자 정의 활동과 지정된 `excludedActivityTypes`를 면밀히 검토해야 합니다.
## **데이터 수신 방법**
데이터를 수신할 때 다음 사항이 중요합니다:
- **사용자 정의 문서 유형**의 선언.
- **앱이 열 수 있는 문서 유형**의 명시.
- **수신된 데이터의 무결성** 확인.
소스 코드에 접근할 수 없더라도 `Info.plist`에서 `UTExportedTypeDeclarations`, `UTImportedTypeDeclarations`, `CFBundleDocumentTypes`와 같은 키를 검사하여 앱이 처리하고 선언할 수 있는 문서 유형을 이해할 수 있습니다.
이 키에 대한 간결한 가이드는 [Stackoverflow](https://stackoverflow.com/questions/21937978/what-are-utimportedtypedeclarations-and-utexportedtypedeclarations-used-for-on-i)에서 확인할 수 있으며, 시스템 전반에 걸쳐 UTI를 정의하고 가져오는 것의 중요성과 "Open With" 대화 상자에서 문서 유형을 앱과 연관시키는 방법을 강조합니다.
## 동적 테스트 접근법
**보내는 활동**을 테스트하기 위해서는:
- `init(activityItems:applicationActivities:)` 메서드에 후킹하여 공유되는 항목과 활동을 캡처합니다.
- `excludedActivityTypes` 속성을 가로채어 제외된 활동을 식별합니다.
**항목 수신**은 다음을 포함합니다:
- 다른 소스(예: AirDrop, 이메일)에서 앱으로 파일을 공유하여 "Open with..." 대화 상자를 유도합니다.
- 정적 분석 중 식별된 다른 메서드와 함께 `application:openURL:options:`에 후킹하여 앱의 반응을 관찰합니다.
- 잘못된 형식의 파일이나 퍼징 기법을 사용하여 앱의 견고성을 평가합니다.
## 참고 문헌
* [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction)
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}