mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
135 lines
14 KiB
Markdown
135 lines
14 KiB
Markdown
# 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 \[...\]", ви можете вибрати інший пристрій для тестування:
|
||
|
||
.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**. **Джейлбрейк** — це процес активного **обходу таких обмежень** та інших заходів безпеки, встановлених ОС. Тому, як тільки пристрій джейлбрейкнуто, **перевірка цілісності**, яка відповідає за перевірку встановлених додатків, патчується, тому вона **обходиться**.
|
||
|
||
> [!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}}
|