mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
133 lines
9.6 KiB
Markdown
133 lines
9.6 KiB
Markdown
# iOS Testing Environment
|
|
|
|
{{#include ../../banners/hacktricks-training.md}}
|
|
|
|
## Apple Developer Program
|
|
|
|
**프로비저닝 아이덴티티**는 Apple 개발자 계정과 연결된 공개 및 개인 키의 모음입니다. **앱 서명**을 하려면 **99$/년**을 지불하고 **Apple Developer Program**에 등록하여 프로비저닝 아이덴티티를 받아야 합니다. 이를 통해 소스 코드에서 실제 장치에서 애플리케이션을 실행할 수 있습니다. 또 다른 방법은 **탈옥된 장치**를 사용하는 것입니다.
|
|
|
|
Xcode 7.2부터 Apple은 실제 iPhone에서 애플리케이션을 작성하고 테스트할 수 있는 **무료 iOS 개발 프로비저닝 프로필**을 생성할 수 있는 옵션을 제공했습니다. _Xcode_ --> _Preferences_ --> _Accounts_ --> _+_ (자격 증명으로 새 Appli ID 추가) --> _생성된 Apple ID 클릭_ --> _Manage Certificates_ --> _+_ (Apple Development) --> _Done_\
|
|
\_\_그런 다음 iPhone에서 애플리케이션을 실행하려면 먼저 **iPhone이 컴퓨터를 신뢰하도록 지정해야 합니다.** 그런 다음 **Xcode에서 모바일에서 애플리케이션을 실행해 볼 수 있지만 오류가 발생할 것입니다.** 따라서 _Settings_ --> _General_ --> _Profiles and Device Management_ --> 신뢰할 수 없는 프로필을 선택하고 "**Trust**"를 클릭합니다.
|
|
|
|
**같은 서명 인증서로 서명된 애플리케이션은 키체인 항목과 같은 리소스를 안전하게 공유할 수 있습니다.**
|
|
|
|
프로비저닝 프로필은 전화기 내부의 **`/Library/MobileDevice/ProvisioningProfiles`**에 저장됩니다.
|
|
|
|
## **Simulator**
|
|
|
|
> [!NOTE]
|
|
> **시뮬레이터는 에뮬레이터와 동일하지 않다는 점에 유의하세요.** 시뮬레이터는 장치의 동작과 기능을 시뮬레이션할 뿐 실제로 사용하지는 않습니다.
|
|
|
|
### **Simulator**
|
|
|
|
가장 먼저 알아야 할 것은 **시뮬레이터 내에서 펜테스트를 수행하는 것이 탈옥된 장치에서 수행하는 것보다 훨씬 더 제한적이라는 것입니다.**
|
|
|
|
iOS 앱을 구축하고 지원하는 데 필요한 모든 도구는 **Mac OS에서만 공식적으로 지원됩니다.**\
|
|
Apple의 사실상 도구는 iOS 애플리케이션을 생성/디버깅/계측하는 **Xcode**입니다. 이를 사용하여 **시뮬레이터** 및 애플리케이션을 구축하고 **테스트**하는 데 필요한 다양한 **SDK** **버전**과 같은 다른 구성 요소를 다운로드할 수 있습니다.\
|
|
**공식 앱 스토어**에서 Xcode를 **다운로드**하는 것이 강력히 권장됩니다. 다른 버전은 맬웨어를 포함할 수 있습니다.
|
|
|
|
시뮬레이터 파일은 `/Users/<username>/Library/Developer/CoreSimulator/Devices`에 있습니다.
|
|
|
|
시뮬레이터를 열려면 Xcode를 실행한 다음 _Xcode 탭_ --> _Open Developer tools_ --> _Simulator_를 누릅니다.\
|
|
\_\_다음 이미지에서 "iPod touch \[...\]"를 클릭하면 테스트할 다른 장치를 선택할 수 있습니다:
|
|
|
|
.png>)
|
|
|
|
.png>)
|
|
|
|
### Applications in the Simulator
|
|
|
|
`/Users/<username>/Library/Developer/CoreSimulator/Devices` 내부에서 **설치된 시뮬레이터**를 모두 찾을 수 있습니다. 에뮬레이터 중 하나에 생성된 애플리케이션의 파일에 접근하려면 **어느 에뮬레이터에 앱이 설치되었는지 아는 것이 어려울 수 있습니다.** 올바른 UID를 **찾는 빠른 방법**은 시뮬레이터에서 앱을 실행하고 다음을 실행하는 것입니다:
|
|
```bash
|
|
xcrun simctl list | grep Booted
|
|
iPhone 8 (BF5DA4F8-6BBE-4EA0-BA16-7E3AFD16C06C) (Booted)
|
|
```
|
|
한 번 UID를 알게 되면, 그 안에 설치된 앱은 `/Users/<username>/Library/Developer/CoreSimulator/Devices/{UID}/data/Containers/Data/Application`에서 찾을 수 있습니다.
|
|
|
|
하지만 놀랍게도 여기에서 애플리케이션을 찾을 수 없습니다. `/Users/<username>/Library/Developer/Xcode/DerivedData/{Application}/Build/Products/Debug-iphonesimulator/`에 접근해야 합니다.
|
|
|
|
그리고 이 폴더에서 **애플리케이션의 패키지를 찾을 수 있습니다.**
|
|
|
|
## 에뮬레이터
|
|
|
|
Corellium은 공개적으로 사용 가능한 유일한 iOS 에뮬레이터입니다. 이는 사용자당 라이선스 모델을 가진 기업 SaaS 솔루션이며, 시험 라이선스를 제공하지 않습니다.
|
|
|
|
## 탈옥 필요 없음
|
|
|
|
**탈옥되지 않은 장치**에서 iOS 애플리케이션을 펜테스트하는 방법에 대한 블로그 게시물을 확인하세요:
|
|
|
|
{{#ref}}
|
|
ios-pentesting-without-jailbreak.md
|
|
{{#endref}}
|
|
|
|
## 탈옥
|
|
|
|
Apple은 iPhone에서 실행되는 코드가 **Apple이 발급한 인증서로 서명되어야 한다고 엄격히 요구합니다**. **탈옥**은 OS에 의해 설정된 그러한 제한 및 기타 보안 통제를 **우회하는 과정**입니다. 따라서 장치가 탈옥되면, 앱 설치를 확인하는 **무결성 검사**가 패치되어 **우회됩니다**.
|
|
|
|
> [!NOTE]
|
|
> Android와 달리, **iOS에서 "개발자 모드"로 전환하여 서명되지 않거나 신뢰할 수 없는 코드를 실행할 수 없습니다.**
|
|
|
|
### Android 루팅 vs. iOS 탈옥
|
|
|
|
종종 비교되지만, Android의 **루팅**과 iOS의 **탈옥**은 근본적으로 다른 과정입니다. Android 장치의 루팅은 **`su` 바이너리 설치** 또는 **루팅된 커스텀 ROM으로 시스템 교체**를 포함할 수 있으며, 부트로더가 잠금 해제된 경우 반드시 익스플로잇이 필요하지는 않습니다. **커스텀 ROM 플래싱**은 부트로더를 잠금 해제한 후 장치의 OS를 교체하며, 때때로 익스플로잇이 필요합니다.
|
|
|
|
반면, iOS 장치는 부트로더가 Apple 서명 이미지만 부팅하도록 제한되어 있어 커스텀 ROM을 플래싱할 수 없습니다. **iOS 탈옥**은 서명되지 않은 코드를 실행하기 위해 Apple의 코드 서명 보호를 우회하는 것을 목표로 하며, 이는 Apple의 지속적인 보안 강화로 인해 복잡해집니다.
|
|
|
|
### 탈옥의 도전 과제
|
|
|
|
Apple이 취약점을 신속하게 패치함에 따라 iOS 탈옥은 점점 더 어려워지고 있습니다. **iOS 다운그레이드**는 출시 후 제한된 시간 동안만 가능하므로, 탈옥은 시간에 민감한 문제입니다. 보안 테스트에 사용되는 장치는 재탈옥이 보장되지 않는 한 업데이트하지 않아야 합니다.
|
|
|
|
iOS 업데이트는 **챌린지-응답 메커니즘**(SHSH 블롭)에 의해 제어되며, Apple 서명 응답에 대해서만 설치가 허용됩니다. 이 메커니즘은 "서명 창"으로 알려져 있으며, OTA 펌웨어 패키지를 저장하고 나중에 사용할 수 있는 능력을 제한합니다. [IPSW Downloads 웹사이트](https://ipsw.me)는 현재 서명 창을 확인할 수 있는 리소스입니다.
|
|
|
|
### 탈옥의 종류
|
|
|
|
- **테더드 탈옥**은 매번 재부팅 시 컴퓨터 연결이 필요합니다.
|
|
- **세미 테더드 탈옥**은 컴퓨터 없이 비탈옥 모드로 부팅할 수 있습니다.
|
|
- **세미 언테더드 탈옥**은 컴퓨터 없이 수동으로 재탈옥이 필요합니다.
|
|
- **언테더드 탈옥**은 재적용 없이 영구적인 탈옥 솔루션을 제공합니다.
|
|
|
|
### 탈옥 도구 및 리소스
|
|
|
|
탈옥 도구는 iOS 버전 및 장치에 따라 다릅니다. [Can I Jailbreak?](https://canijailbreak.com), [The iPhone Wiki](https://www.theiphonewiki.com), [Reddit Jailbreak](https://www.reddit.com/r/jailbreak/)와 같은 리소스는 최신 정보를 제공합니다. 예시로는:
|
|
|
|
- A7-A11 칩 장치용 [Checkra1n](https://checkra.in/).
|
|
- iOS 15.0-16.5의 Checkm8 장치용 [Palera1n](https://palera.in/).
|
|
- iOS 14.8까지의 버전용 [Unc0ver](https://unc0ver.dev/)가 있습니다.
|
|
|
|
장치를 수정하는 것은 위험을 동반하며, 탈옥은 신중하게 접근해야 합니다.
|
|
|
|
### 탈옥의 이점과 위험
|
|
|
|
탈옥은 **OS가 부과한 샌드박스를 제거하여** 앱이 전체 파일 시스템에 접근할 수 있게 합니다. 이 자유는 승인되지 않은 앱 설치와 더 많은 API 접근을 가능하게 합니다. 그러나 일반 사용자에게는 잠재적인 보안 위험과 장치 불안정성 때문에 탈옥이 **권장되지 않습니다.**
|
|
|
|
### **탈옥 후**
|
|
|
|
{{#ref}}
|
|
basic-ios-testing-operations.md
|
|
{{#endref}}
|
|
|
|
### **탈옥 탐지**
|
|
|
|
**여러 애플리케이션이 모바일이 탈옥되었는지 감지하려고 시도하며, 이 경우 애플리케이션이 실행되지 않습니다.**
|
|
|
|
- 탈옥된 iOS에서는 **파일과 폴더가 일반적으로 설치되며**, 이를 검색하여 장치가 탈옥되었는지 확인할 수 있습니다.
|
|
- 탈옥된 장치에서는 애플리케이션이 샌드박스 외부의 **새 파일에 대한 읽기/쓰기 접근을 얻습니다.**
|
|
- 일부 **API** **호출**은 **다르게 동작합니다.**
|
|
- **OpenSSH** 서비스의 존재
|
|
- `/bin/sh`를 호출하면 **0이 아닌 1을 반환합니다.**
|
|
|
|
**탈옥 탐지 방법에 대한 더 많은 정보는** [**여기**](https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/jailbreak-detection-methods/)**에서 확인할 수 있습니다.**
|
|
|
|
**objection의** `ios jailbreak disable`을 사용하여 이러한 탐지를 피할 수 있습니다.
|
|
|
|
## **탈옥 탐지 우회**
|
|
|
|
- **objection의** `ios jailbreak disable`을 사용하여 이러한 탐지를 피할 수 있습니다.
|
|
- **Liberty Lite** (https://ryleyangus.com/repo/) 도구를 설치할 수도 있습니다. 리포가 추가되면 앱이 ‘검색’ 탭에 나타나야 합니다.
|
|
|
|
## 참고 문헌
|
|
|
|
- [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/)
|
|
|
|
{{#include ../../banners/hacktricks-training.md}}
|