Середовище тестування iOS

Tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks

Apple Developer Program

A provisioning identity — це набір публічних і приватних ключів, який пов’язаний з Apple developer account. Щоб sign apps потрібно заплатити 99$/year та зареєструватися в Apple Developer Program, щоб отримати ваш provisioning identity. Без цього ви не зможете запускати застосунки зі зразка коду на фізичному пристрої. Інший варіант — використовувати jailbroken device.

Starting in Xcode 7.2 Apple has provided an option to create a free iOS development provisioning profile that allows to write and test your application on a real iPhone. Go to Xcode –> Preferences –> Accounts –> + (Add new Appli ID you your credentials) –> Click on the Apple ID created –> Manage Certificates –> + (Apple Development) –> Done
Потім, щоб запустити застосунок на iPhone, спочатку потрібно вказати iPhone довіряти комп’ютеру. Після цього можна спробувати запустити застосунок на мобільному з Xcode, але з’явиться помилка. Тому перейдіть у Settings –> General –> Profiles and Device Management –> виберіть недовірений профіль і натисніть “Trust”.

На iOS 16+ також потрібно увімкнути Developer Mode на пристрої, перш ніж локально встановлені застосунки з development-signed (або застосунки, повторно підписані з get-task-allow) будуть запускатися. Ця опція з’являється лише після спарування пристрою з Xcode або після одноразової установки застосунку з development-підписом. Послідовність: pair the device, ініціювати інсталяцію з Xcode, потім увімкнути Settings –> Privacy & Security –> Developer Mode, перезавантажити пристрій і підтвердити запит після розблокування.

Зверніть увагу, що застосунки, підписані тим самим signing certificate, можуть безпечно ділитися ресурсами, наприклад keychain items.

Профілі provisioning зберігаються на телефоні в /Library/MobileDevice/ProvisioningProfiles

Modern host-side device tooling

Для сучасного тестування iOS інструменти на хості все більше розділяються між:

  • xcrun simctl for simulator management
  • xcrun xctrace list devices to enumerate simulators and physical devices
  • xcrun devicectl (Xcode 15+) to interact with paired physical devices from the command line

Корисні приклади:

# List booted simulators
xcrun simctl list | grep Booted

# List all visible devices/simulators
xcrun xctrace list devices

# List paired physical devices (Xcode 15+)
xcrun devicectl list devices

devicectl особливо корисний у автоматизаційних конвеєрах, коли потрібно встановити або запустити тестову збірку без відкриття Xcode:

xcrun devicectl device install app --device <udid> <path_to_app_or_ipa>
xcrun devicectl device launch app --terminate-existing --device <udid> <bundle_id>

Keep Xcode updated when testing iOS 17+ devices. Apple moved developer services to the CoreDevice stack and also changed how Developer Disk Images are handled, so outdated host tooling frequently fails with pairing, image-mounting, or app-launch errors.

Симулятор

Tip

Зауважте, що симулятор не те саме, що емулятор. Симулятор лише імітує поведінку пристрою та його функції, але фактично їх не використовує.

Симулятор

Перше, що потрібно знати — performing a pentest inside a simulator will much more limited than doing it in a jailbroken device.

Усі інструменти, необхідні для створення та підтримки iOS-додатка, офіційно підтримуються тільки на Mac OS.
Apple’s de facto tool для створення/налагодження/інструментування iOS-застосунків — Xcode. Він може використовуватися для завантаження інших компонентів, таких як simulators та різні SDK versions, необхідні для збірки та test вашого додатка.
Рекомендується download Xcode з офіційного App Store. Інші версії можуть містити malware.

The simulator files can be found in /Users/<username>/Library/Developer/CoreSimulator/Devices

Симулятор все ще дуже корисний для швидкого тестування filesystem artifacts, NSUserDefaults, plist parsing, custom URL schemes, та basic runtime instrumentation. Однак майте на увазі, що він не емулює низку властивостей фізичного пристрою, які часто важливі під час pentest, таких як Secure Enclave, baseband, певні keychain access-control behaviours, реалістичні biometric flows, та умови виконання, специфічні для jailbreak.

To open the simulator, run Xcode, then press in the Xcode tab –> Open Developer tools –> Simulator
__In the following image clicking in “iPod touch […]” you can select other device to test in:

Застосунки в симуляторі

Inside /Users/<username>/Library/Developer/CoreSimulator/Devices you may find all the installed simulators. If you want to access the files of an application created inside one of the emulators it might be difficult to know in which one the app is installed. A quick way to find the correct UID is to execute the app in the simulator and execute:

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/

І в цій папці ви можете знайти пакет додатку.

Emulator

Corellium — єдиний публічно доступний iOS емулятор. Це enterprise SaaS рішення з ліцензуванням на користувача і не пропонує пробну ліцензію.

Не потрібен Jailbreak

Check this blog post about how to pentest an iOS application in a non jailbroken device:

iOS Pentesting withuot Jailbreak

Jailbreaking

Apple строго вимагає, щоб код, що виконується на iPhone, був signed by a certificate issued by Apple. Jailbreaking — це процес активного circumventing such restrictions та інших заходів безпеки, запроваджених ОС. Тому після джейлбрейку перевірка цілісності, яка відповідає за підтвердження встановлених додатків, патчиться і bypassed.

Tip

На відміну від Android, ви не можете switch to “Developer Mode” на iOS, щоб запускати unsigned/untrusted code на пристрої.

Android Rooting vs. iOS Jailbreaking

Хоча їх часто порівнюють, rooting на Android і jailbreaking на iOS є фундаментально різними процесами. Rooting Android-пристроїв може включати встановлення бінарника su або заміни system на rooted custom ROM, що не обов’язково вимагає експлойтів, якщо розблокований bootloader. Flashing custom ROMs замінює ОС пристрою після розблокування bootloader, інколи вимагаючи експлойту.

На відміну від цього, iOS-пристрої не можуть flash custom ROMs через обмеження bootloader, який завантажує лише Apple-signed images. Jailbreaking iOS прагне обійти захист підпису коду Apple, щоб запускати unsigned code, що ускладнюється постійними покращеннями безпеки від Apple.

Jailbreaking Challenges

Джейлбрейк стає все важче через те, що Apple швидко патчить уразливості. Downgrading iOS можливий лише протягом обмеженого часу після релізу, що робить джейлбрейк часово-чутливою справою. Пристрої, що використовуються для тестування безпеки, не слід оновлювати, якщо повторний джейлбрейк не гарантований.

iOS-оновлення контролюються механізмом challenge-response (SHSH blobs), який дозволяє інсталяцію лише за Apple-signed responses. Цей механізм, відомий як “signing window”, обмежує можливість зберігати та пізніше використовувати OTA firmware packages. The IPSW Downloads website — ресурс для перевірки поточних signing windows.

Jailbreak Varieties

  • Tethered jailbreaks require a computer connection for each reboot.
  • Semi-tethered jailbreaks allow booting into non-jailbroken mode without a computer.
  • Semi-untethered jailbreaks require manual re-jailbreaking without needing a computer.
  • Untethered jailbreaks offer a permanent jailbreak solution without the need for re-application.

Jailbreaking Tools and Resources

Тулзи для джейлбрейку залежать від версії iOS та моделі пристрою. Ресурси як Can I Jailbreak?, The iPhone Wiki, та Reddit Jailbreak надають актуальну інформацію. Приклади включають:

  • Checkra1n для старіших A7-A11/iOS 12-14 дослідницьких пристроїв.
  • Palera1n для checkm8-compatible пристроїв (A8-A11) на iOS/iPadOS 15+.
  • Dopamine для багатьох arm64/arm64e пристроїв на iOS 15/16 з modern rootless jailbreak.
  • Unc0ver залишається актуальним здебільшого для старіших iOS версій до 14.8.

Модифікація вашого пристрою пов’язана з ризиками, тому підхід до джейлбрейку повинен бути обережним.

Rootless jailbreaks

Сучасні джейлбрейки для iOS 15+ зазвичай є rootless замість rootful. З позиції тестувальника це має значення, бо багато старих гайдів все ще припускають, що джейлбрейк-файли знаходяться безпосередньо в / або /Library/..., що тепер не відповідає дійсності на багатьох сучасних налаштуваннях.

  • Rootless jailbreaks уникають прямого модифікування sealed system volume.
  • На palera1n джейлбрейк-файли зазвичай зберігаються під рандомізованим шляхом у /private/preboot/... і виставляються через стабільний symlink /var/jb.
  • Tweaks, launch daemons, та допоміжні бінарні файли можуть тому знаходитись під /var/jb замість класичних rootful локацій.

Це безпосередньо впливає на environment validation, Frida setup, та jailbreak detection bypass:

  • При перевірці того, чи інструменти встановлені правильно, оглядайте як legacy шляхи, так і /var/jb.
  • При перегляді логіки виявлення джейлбрейку в додатку пам’ятайте, що сучасні перевірки часто шукають rootless артефакти та symlink-и на додаток до класичних індикаторів як Cydia.app.
  • Якщо сторонній скрипт або tweak припускає rootful filesystem layout, він може тихо не спрацювати на rootless пристрої.

Jailbreaking Benefits and Risks

Jailbreaking removes OS-imposed sandboxing, дозволяє додаткам отримувати доступ до всього filesystem. Така свобода дозволяє встановлювати неперевірені додатки та отримувати доступ до більшої кількості APIs. Однак для звичайних користувачів джейлбрейк не рекомендований через потенційні ризики безпеки та нестабільність пристрою.

After Jailbreaking

iOS Basic Testing Operations

Jailbreak Detection

Декілька додатків спробують визначити, чи пристрій джейлбрейкнутий, і в такому випадку додаток не запуститься

  • Після джейлбрейку зазвичай встановлюються файли та папки, які можна шукати, щоб визначити, чи пристрій джейлбрейкнутий.
  • У сучасних rootless джейлбрейках ці файли можуть з’являтися під /var/jb або резолвитися через symlink-и в /private/preboot/... замість лише класичних rootful локацій.
  • На джейлбрейкнутому пристрої додатки отримують read/write доступ до нових файлів поза sandbox
  • Деякі API calls поводитимуться інакше
  • Наявність сервісу OpenSSH
  • Виклик /bin/sh буде повертати 1 замість 0

More information about how to detect jailbreaking here.

You can try to avoid this detections using objection’s ios jailbreak disable

Jailbreak Detection Bypass

  • You can try to avoid this detections using objection’s ios jailbreak disable
  • You could also install the tool Liberty Lite (https://ryleyangus.com/repo/). Once the repo is added, the app should appear in the ‘Search’ tab

References

Tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks