# iOS Basic Testing Operations {{#include ../../banners/hacktricks-training.md}} ## **Summary of iOS Device Identification and Access** ### **Identifying the UDID of an iOS Device** Щоб унікально ідентифікувати пристрій iOS, використовується 40-значна послідовність, відома як UDID. На macOS Catalina або новіших версіях це можна знайти в додатку **Finder**, оскільки iTunes більше не присутній. Пристрій, підключений через USB і вибраний у Finder, показує свій UDID серед іншої інформації, коли натискають на деталі під його назвою. Для версій macOS до Catalina iTunes полегшує виявлення UDID. Докладні інструкції можна знайти [here](http://www.iclarified.com/52179/how-to-find-your-iphones-udid). Командні інструменти пропонують альтернативні методи для отримання UDID: - **Using I/O Registry Explorer tool `ioreg`:** ```bash $ ioreg -p IOUSB -l | grep "USB Serial" ``` - **Використання `ideviceinstaller` для macOS (та Linux):** ```bash $ brew install ideviceinstaller $ idevice_id -l ``` - **Використання `system_profiler`:** ```bash $ system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p;/iPhone/,/Serial/p;/iPod/,/Serial/p' | grep "Serial Number:" ``` - **Використання `instruments` для переліку пристроїв:** ```bash $ instruments -s devices ``` ### **Доступ до оболонки пристрою** **Доступ SSH** активується шляхом встановлення **пакету OpenSSH** після джейлбрейку, що дозволяє підключення через `ssh root@`. Важливо змінити стандартні паролі (`alpine`) для користувачів `root` та `mobile`, щоб забезпечити безпеку пристрою. **SSH через USB** стає необхідним за відсутності Wi-Fi, використовуючи `iproxy` для відображення портів пристрою для SSH-з'єднань. Ця конфігурація дозволяє доступ до SSH через USB, запустивши: ```bash $ iproxy 2222 22 $ ssh -p 2222 root@localhost ``` **На пристрої shell додатки**, такі як NewTerm 2, полегшують безпосередню взаємодію з пристроєм, що особливо корисно для усунення неполадок. **Зворотні SSH shell** також можуть бути встановлені для віддаленого доступу з комп'ютера-хоста. ### **Скидання забутих паролів** Щоб скинути забутий пароль до значення за замовчуванням (`alpine`), необхідно редагувати файл `/private/etc/master.passwd`. Це передбачає заміну існуючого хешу на хеш для `alpine` поруч з записами користувачів `root` та `mobile`. ## **Техніки передачі даних** ### **Передача файлів даних додатків** **Архівування та отримання через SSH та SCP:** Легко архівувати каталог даних програми за допомогою `tar`, а потім передати його за допомогою `scp`. Команда нижче архівує каталог даних у файл .tgz, який потім витягується з пристрою: ```bash tar czvf /tmp/data.tgz /private/var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693 exit scp -P 2222 root@localhost:/tmp/data.tgz . ``` ### **Графічні інтерфейсні інструменти** **Використання iFunbox та iExplorer:** Ці GUI інструменти корисні для управління файлами на пристроях iOS. Однак, починаючи з iOS 8.4, Apple обмежила доступ цих інструментів до пісочниці додатків, якщо пристрій не зламаний. ### **Використання Objection для управління файлами** **Інтерактивна оболонка з Objection:** Запуск objection надає доступ до каталогу Bundle додатку. Звідси ви можете перейти до каталогу Documents додатку та керувати файлами, включаючи їх завантаження та вивантаження на та з пристрою iOS. ```bash objection --gadget com.apple.mobilesafari explorer cd /var/mobile/Containers/Data/Application/72C7AAFB-1D75-4FBA-9D83-D8B4A2D44133/Documents file download ``` ## **Отримання та витягування додатків** ### **Придбання IPA файлу** **Посилання на розподіл по повітрю (OTA):** Додатки, розподілені для тестування через OTA, можна завантажити за допомогою інструменту завантаження активів ITMS, який встановлюється через npm і використовується для збереження IPA файлу локально. ```bash npm install -g itms-services itms-services -u "itms-services://?action=download-manifest&url=https://s3-ap-southeast-1.amazonaws.com/test-uat/manifest.plist" -o - > out.ipa ``` ### **Витягування бінарного файлу програми** 1. **З IPA:** Розпакуйте IPA, щоб отримати розшифрований бінарний файл програми. 2. **З джейлбрейкнутого пристрою:** Встановіть програму та витягніть розшифрований бінарний файл з пам'яті. ### **Процес розшифрування** **Огляд ручного розшифрування:** Бінарні файли програм iOS зашифровані Apple за допомогою FairPlay. Щоб провести реверс-інжиніринг, потрібно витягти розшифрований бінарний файл з пам'яті. Процес розшифрування включає перевірку прапора PIE, коригування прапорів пам'яті, ідентифікацію зашифрованої секції, а потім витягування та заміну цієї секції на її розшифровану форму. **Перевірка та модифікація прапора PIE:** ```bash otool -Vh Original_App python change_macho_flags.py --no-pie Original_App otool -Vh Hello_World ``` **Визначення зашифрованої секції та дамп пам'яті:** Визначте початкові та кінцеві адреси зашифрованої секції за допомогою `otool` та зробіть дамп пам'яті з джейлбрейкнутого пристрою за допомогою gdb. ```bash otool -l Original_App | grep -A 4 LC_ENCRYPTION_INFO dump memory dump.bin 0x8000 0x10a4000 ``` **Перезаписування зашифрованої секції:** Замініть зашифровану секцію в оригінальному бінарному файлі програми на розшифрований дамп. ```bash dd bs=1 seek= conv=notrunc if=dump.bin of=Original_App ``` **Завершення розшифрування:** Змініть метадані бінарного файлу, щоб вказати на відсутність шифрування, використовуючи інструменти, такі як **MachOView**, встановивши `cryptid` на 0. ### **Розшифрування (Автоматично)** #### **frida-ios-dump** Інструмент [**frida-ios-dump**](https://github.com/AloneMonkey/frida-ios-dump) використовується для **автоматичного розшифрування та витягування додатків** з пристроїв iOS. Спочатку потрібно налаштувати `dump.py` для підключення до пристрою iOS, що можна зробити через localhost на порту 2222 за допомогою **iproxy** або безпосередньо через IP-адресу пристрою та порт. Додатки, встановлені на пристрої, можна перерахувати за допомогою команди: ```bash $ python dump.py -l ``` Щоб скинути конкретний додаток, наприклад Telegram, використовується наступна команда: ```bash $ python3 dump.py -u "root" -p "" ph.telegra.Telegraph ``` Ця команда ініціює дамп програми, в результаті чого створюється файл `Telegram.ipa` у поточному каталозі. Цей процес підходить для джейлбрейкнутіх пристроїв, оскільки незасвідчені або підроблені програми можуть бути повторно встановлені за допомогою інструментів, таких як [**ios-deploy**](https://github.com/ios-control/ios-deploy). #### **flexdecrypt** Інструмент [**flexdecrypt**](https://github.com/JohnCoates/flexdecrypt), разом зі своїм обгорткою [**flexdump**](https://gist.github.com/defparam/71d67ee738341559c35c684d659d40ac), дозволяє витягувати IPA файли з встановлених додатків. Команди для встановлення **flexdecrypt** на пристрій включають завантаження та встановлення пакету `.deb`. **flexdump** можна використовувати для переліку та дампу програм, як показано в командах нижче: ```bash apt install zip unzip wget https://gist.githubusercontent.com/defparam/71d67ee738341559c35c684d659d40ac/raw/30c7612262f1faf7871ba8e32fbe29c0f3ef9e27/flexdump -P /usr/local/bin; chmod +x /usr/local/bin/flexdump flexdump list flexdump dump Twitter.app ``` #### **bagbak** [**bagbak**](https://github.com/ChiChou/bagbak), ще один інструмент на базі Frida, вимагає джейлбрейкнутого пристрою для розшифровки додатків: ```bash bagbak --raw Chrome ``` #### **r2flutch** **r2flutch**, використовуючи як radare, так і frida, служить для декодування та дампінгу додатків. Більше інформації можна знайти на його [**GitHub сторінці**](https://github.com/as0ler/r2flutch). ### **Встановлення додатків** **Sideloading** відноситься до встановлення додатків поза офіційним App Store. Цей процес обробляється **installd daemon** і вимагає, щоб додатки були підписані сертифікатом, виданим Apple. Пристрої з джейлбрейком можуть обійти це через **AppSync**, що дозволяє встановлювати фальшиво підписані IPA пакети. #### **Інструменти для Sideloading** - **Cydia Impactor**: Інструмент для підписування та встановлення IPA файлів на iOS та APK файлів на Android. Посібники та усунення неполадок можна знайти на [yalujailbreak.net](https://yalujailbreak.net/how-to-use-cydia-impactor/). - **libimobiledevice**: Бібліотека для Linux та macOS для зв'язку з iOS пристроями. Команди для встановлення та приклади використання ideviceinstaller надаються для встановлення додатків через USB. - **ipainstaller**: Цей інструмент командного рядка дозволяє безпосереднє встановлення додатків на iOS пристрої. - **ios-deploy**: Для користувачів macOS, ios-deploy встановлює iOS додатки з командного рядка. Розпакування IPA та використання прапора `-m` для безпосереднього запуску додатка є частиною процесу. - **Xcode**: Використовуйте Xcode для встановлення додатків, перейшовши до **Window/Devices and Simulators** та додавши додаток до **Installed Apps**. #### **Дозволити встановлення додатків на пристрої, що не є iPad** Щоб встановити специфічні для iPad додатки на пристрої iPhone або iPod touch, значення **UIDeviceFamily** у файлі **Info.plist** потрібно змінити на **1**. Однак ця модифікація вимагає повторного підписування IPA файлу через перевірки підпису. **Примітка**: Цей метод може не спрацювати, якщо додаток вимагає можливостей, ексклюзивних для новіших моделей iPad, при використанні старішого iPhone або iPod touch. ## References - [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](ttps://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/index.html) - [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0052/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0052/) - [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0053/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0053/) - [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0054/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0054/) - [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0056/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0056/) {{#include ../../banners/hacktricks-training.md}}