Середовище тестування 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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
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 simctlfor simulator managementxcrun xctrace list devicesto enumerate simulators and physical devicesxcrun 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:
.png)
.png)
Застосунки в симуляторі
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
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
- https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/
- https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device
- https://docs.palera.in/docs/reference/environment-types/
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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.


