hacktricks/src/mobile-pentesting/ios-pentesting/ios-testing-environment.md

135 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# iOS Testing Environment
{{#include ../../banners/hacktricks-training.md}}
## Apple Developer Program
**Provisioning identity** - це набір публічних і приватних ключів, які пов'язані з обліковим записом розробника Apple. Щоб **підписувати додатки**, вам потрібно сплатити **99$/рік** для реєстрації в **Apple Developer Program**, щоб отримати вашу provisioning identity. Без цього ви не зможете запускати програми з вихідного коду на фізичному пристрої. Інший варіант - використовувати **jailbroken device**.
Починаючи з Xcode 7.2, Apple надала можливість створити **безкоштовний профіль для розробки iOS**, який дозволяє писати та тестувати ваш додаток на реальному iPhone. Перейдіть до _Xcode_ --> _Preferences_ --> _Accounts_ --> _+_ (Додати новий Appli ID з вашими обліковими даними) --> _Натисніть на створений Apple ID_ --> _Manage Certificates_ --> _+_ (Apple Development) --> _Done_\
\_\_Потім, щоб запустити ваш додаток на iPhone, спочатку потрібно **вказати iPhone довіряти комп'ютеру.** Потім ви можете спробувати **запустити додаток на мобільному з Xcode,** але з'явиться помилка. Тож перейдіть до _Settings_ --> _General_ --> _Profiles and Device Management_ --> Виберіть ненадійний профіль і натисніть "**Trust**".
Зверніть увагу, що **додатки, підписані одним і тим же сертифікатом підпису, можуть безпечно ділитися ресурсами, такими як елементи ключа**.
Профілі provisioning зберігаються всередині телефону в **`/Library/MobileDevice/ProvisioningProfiles`**
## **Simulator**
> [!TIP]
> Зверніть увагу, що **симулятор не є емулятором**. Симулятор просто імітує поведінку пристрою та функції, але насправді їх не використовує.
### **Simulator**
Перше, що вам потрібно знати, це те, що **виконання pentest всередині симулятора буде значно обмеженим, ніж на jailbroken device**.
Усі інструменти, необхідні для створення та підтримки iOS додатка, **офіційно підтримуються лише на Mac OS**.\
Дефакто інструмент Apple для створення/налагодження/інструментування iOS додатків - це **Xcode**. Його можна використовувати для завантаження інших компонентів, таких як **симулятори** та різні **версії SDK**, необхідні для створення та **тестування** вашого додатка.\
Рекомендується **завантажити** Xcode з **офіційного магазину додатків**. Інші версії можуть містити шкідливе ПЗ.
Файли симулятора можна знайти в `/Users/<username>/Library/Developer/CoreSimulator/Devices`
Щоб відкрити симулятор, запустіть Xcode, потім натисніть на _Xcode tab_ --> _Open Developer tools_ --> _Simulator_\
\_\_На наступному зображенні, натискаючи на "iPod touch \[...\]", ви можете вибрати інший пристрій для тестування:
![](<../../images/image (270).png>)
![](<../../images/image (520).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**. **Джейлбрейк** — це процес активного **обходу таких обмежень** та інших заходів безпеки, встановлених ОС. Тому, як тільки пристрій джейлбрейкнуто, **перевірка цілісності**, яка відповідає за перевірку встановлених додатків, патчується, тому вона **обходиться**.
> [!TIP]
> На відміну від Android, **ви не можете перейти в "Режим розробника"** в iOS, щоб запускати непідписаний/недовірений код на пристрої.
### Рутинг Android vs. Джейлбрейк iOS
Хоча їх часто порівнюють, **рутинг** на Android і **джейлбрейк** на iOS є принципово різними процесами. Рутинг Android-пристроїв може включати **встановлення бінарного файлу `su`** або **заміна системи на рутований кастомний ROM**, що не обов'язково вимагає експлойтів, якщо завантажувач розблоковано. **Флешинг кастомних ROM** замінює ОС пристрою після розблокування завантажувача, іноді вимагаючи експлойт.
На відміну від цього, пристрої iOS не можуть флешити кастомні ROM через обмеження завантажувача, який дозволяє завантажувати лише образи, підписані Apple. **Джейлбрейк iOS** має на меті обійти захист підписування коду Apple, щоб запускати непідписаний код, процес ускладнюється постійними покращеннями безпеки Apple.
### Виклики джейлбрейку
Джейлбрейк iOS стає все складнішим, оскільки Apple швидко патчує вразливості. **Пониження iOS** можливе лише протягом обмеженого часу після випуску, що робить джейлбрейк справою, що залежить від часу. Пристрої, що використовуються для тестування безпеки, не повинні оновлюватися, якщо не гарантовано повторний джейлбрейк.
Оновлення iOS контролюються **механізмом виклику-відповіді** (SHSH blobs), що дозволяє встановлення лише для підписаних 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/) надають актуальну інформацію. Приклади включають:
- [Checkra1n](https://checkra.in/) для пристроїв з чипами A7-A11.
- [Palera1n](https://palera.in/) для пристроїв Checkm8 (A8-A11) на iOS 15.0-16.5.
- [Unc0ver](https://unc0ver.dev/) для версій iOS до 14.8.
Модифікація вашого пристрою несе ризики, і до джейлбрейку слід підходити з обережністю.
### Переваги та ризики джейлбрейку
Джейлбрейк **усуває пісочницю, накладену ОС**, дозволяючи додаткам отримувати доступ до всієї файлової системи. Ця свобода дозволяє встановлювати непідтверджені додатки та отримувати доступ до більшої кількості API. Однак для звичайних користувачів джейлбрейк **не рекомендується** через потенційні ризики безпеки та нестабільність пристрою.
### **Після джейлбрейку**
{{#ref}}
basic-ios-testing-operations.md
{{#endref}}
### **Виявлення джейлбрейку**
**Декілька додатків намагатимуться виявити, чи є мобільний пристрій джейлбрейкнутим, і в такому випадку додаток не запуститься**
- Після джейлбрейку на iOS **файли та папки зазвичай встановлюються**, їх можна шукати, щоб визначити, чи є пристрій джейлбрекнутим.
- На джейлбрекнутому пристрої додатки отримують **доступ на читання/запис до нових файлів** поза пісочницею.
- Деякі **виклики API** **поведуться інакше**.
- Наявність служби **OpenSSH**.
- Виклик `/bin/sh` **поверне 1** замість 0.
**Більше інформації про те, як виявити джейлбрейк** [**тут**](https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/jailbreak-detection-methods/)**.**
Ви можете спробувати уникнути цього виявлення, використовуючи **objection's** `ios jailbreak disable`
## **Обхід виявлення джейлбрейку**
- Ви можете спробувати уникнути цього виявлення, використовуючи **objection's** `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}}