Translated ['src/mobile-pentesting/ios-pentesting/ios-pentesting-without

This commit is contained in:
Translator 2025-07-12 18:08:24 +00:00
parent faff2a8143
commit 8000ee33ef
2 changed files with 107 additions and 14 deletions

View File

@ -6,9 +6,9 @@
Застосунки, підписані з **правом `get_task_allow`**, дозволяють стороннім застосункам виконувати функцію **`task_for_pid()`** з ідентифікатором процесу початкового застосунку як аргумент, щоб отримати порт завдання над ним (мати можливість контролювати його та отримувати доступ до його пам'яті).
Однак це не так просто, як просто витягти IPA, повторно підписати його з правом і перепрошити його назад на ваш пристрій. Це пов'язано з захистом FairPlay. Коли підпис змінюється, ключ DRM (управління цифровими правами) **стає недійсним, і застосунок не працюватиме**.
Однак це не так просто, як просто витягти IPA, повторно підписати його з правом і завантажити назад на ваш пристрій. Це пов'язано з захистом FairPlay. Коли підпис змінюється, ключ DRM (управління цифровими правами) **анулюється, і застосунок не працюватиме**.
З старим джейлбрейкнутим пристроєм можна встановити IPA, **декодувати його за допомогою вашого улюбленого інструменту** (такого як Iridium або frida-ios-dump) і витягти його з пристрою. Хоча, якщо це можливо, рекомендується просто запитати у клієнта декодований IPA.
З старим джейлбрейкнутим пристроєм можливо встановити IPA, **декодувати його за допомогою вашого улюбленого інструменту** (такого як Iridium або frida-ios-dump) і витягти його з пристрою. Хоча, якщо це можливо, рекомендується просто запитати у клієнта декодований IPA.
## Отримати декодований IPA
@ -40,7 +40,7 @@ unzip redacted.ipa -d unzipped
cd unzipped
zip -r ../no-min-version.ipa *
```
Тоді встановіть IPA, наприклад, за допомогою:
Потім встановіть IPA, наприклад, за допомогою:
```bash
ideviceinstaller -i no-min-version.ipa -w
```
@ -49,13 +49,13 @@ ideviceinstaller -i no-min-version.ipa -w
Після встановлення ви можете використовувати **Iridium tweak** з Cydia, щоб отримати розшифрований IPA.
### Патчування прав та повторне підписання
### Патчинг прав та повторне підписання
Щоб повторно підписати додаток з правом `get-task-allow`, доступно кілька інструментів, таких як `app-signer`, `codesign` та `iResign`. `app-signer` має дуже зручний інтерфейс, який дозволяє дуже легко повторно підписати файл IPA, вказуючи IPA для повторного підписання, **додати `get-task-allow`** та сертифікат і профіль для використання.
Щодо сертифіката та профілів підписання, Apple пропонує **безкоштовні профілі підписання для розробників** для всіх облікових записів через Xcode. Просто створіть додаток і налаштуйте один. Потім налаштуйте **iPhone, щоб довіряти додаткам розробника**, перейшовши в `Налаштування` → `Конфіденційність та безпека`, і натисніть на `Режим розробника`.
Щодо сертифіката та профілів підписання, Apple пропонує **безкоштовні профілі підписання для розробників** для всіх облікових записів через Xcode. Просто створіть додаток і налаштуйте один. Потім налаштуйте **iPhone, щоб довіряти додаткам розробника**, перейшовши в `Settings` → `Privacy & Security`, і натисніть на `Developer Mode`.
З повторно підписаним IPA настав час встановити його на пристрій для тестування:
З повторно підписаним IPA настав час встановити його на пристрій для пентестування:
```bash
ideviceinstaller -i resigned.ipa -w
```
@ -77,10 +77,10 @@ ideviceinstaller -i resigned.ipa -w
| Інструмент | Вимоги | Переваги | Обмеження |
|------------|--------|----------|-----------|
| **AltStore 2 / SideStore** | компаньйон macOS/Windows/Linux, який повторно підписує IPA кожні 7 днів з безкоштовним профілем розробника | Автоматичне перезавантаження через Wi-Fi, працює до iOS 17 | Потрібен комп'ютер в тій же мережі, обмеження на 3 додатки, накладене Apple |
| **TrollStore 1/2** | Пристрій на iOS 14 15.4.1, вразливий до помилки CoreTrust | *Постійне* підписування (без обмеження на 7 днів); комп'ютер не потрібен після установки | Не підтримується на iOS 15.5+ (помилка виправлена) |
| **AltStore 2 / SideStore** | macOS/Windows/Linux компаньйон, який повторно підписує IPA кожні 7 днів з безкоштовним профілем розробника | Автоматичне перезавантаження через Wi-Fi, працює до iOS 17 | Потрібен комп'ютер в тій же мережі, обмеження на 3 додатки, накладене Apple |
| **TrollStore 1/2** | Пристрій на iOS 14 15.4.1, вразливий до помилки CoreTrust | *Постійне* підписування (без 7-денного обмеження); комп'ютер не потрібен після установки | Не підтримується на iOS 15.5+ (помилка виправлена) |
Для рутинних пентестів на актуальних версіях iOS Alt/Side-Store зазвичай є найпрактичнішим вибором.
Для рутинних пентестів на сучасних версіях iOS Alt/Side-Store зазвичай є найпрактичнішим вибором.
### Хукінг / динамічна інструментація
@ -92,11 +92,11 @@ objection -g "com.example.target" explore
# Or plain Frida
frida -U -f com.example.target -l my_script.js --no-pause
```
Останні випуски Frida (>=16) автоматично обробляють автентифікацію вказівників та інші пом'якшення iOS 17, тому більшість існуючих скриптів працюють з коробки.
Останні версії Frida (>=16) автоматично обробляють автентифікацію вказівників та інші пом'якшення iOS 17, тому більшість існуючих скриптів працюють без додаткових налаштувань.
### Автоматизований динамічний аналіз з MobSF (без джейлбрейка)
[MobSF](https://mobsf.github.io/Mobile-Security-Framework-MobSF/) може інструментувати IPA з підписом розробника на реальному пристрої, використовуючи ту ж техніку (`get_task_allow`), і надає веб-інтерфейс з браузером файлової системи, захопленням трафіку та консоллю Frida【】. Найшвидший спосіб - запустити MobSF у Docker, а потім підключити ваш iPhone через USB:
[MobSF](https://mobsf.github.io/Mobile-Security-Framework-MobSF/) може інструментувати IPA з підписом розробника на реальному пристрої, використовуючи ту ж техніку (`get_task_allow`), і надає веб-інтерфейс з браузером файлової системи, захопленням трафіку та консоллю Frida【†L2-L3】. Найшвидший спосіб - запустити MobSF у Docker, а потім підключити ваш iPhone через USB:
```bash
docker pull opensecurity/mobile-security-framework-mobsf:latest
docker run -p 8000:8000 --privileged \
@ -109,7 +109,7 @@ MobSF автоматично розгорне бінарний файл, уві
### iOS 17 та застереження режиму блокування
* **Режим блокування** (Налаштування → Конфіденційність та безпека) блокує динамічний зв'язувач від завантаження непідписаних або зовнішньо підписаних динамічних бібліотек. При тестуванні пристроїв, на яких може бути увімкнено цей режим, переконайтеся, що він **вимкнений**, інакше ваші сесії Frida/objection завершаться негайно.
* Аутентифікація вказівників (PAC) застосовується на всіх пристроях A12+. Frida ≥16 прозоро обробляє видалення PAC — просто підтримуйте актуальність як *frida-server*, так і інструментів Python/CLI, коли виходить нова основна версія iOS.
* Аутентифікація вказівників (PAC) застосовується на всіх пристроях A12+. Frida ≥16 прозоро обробляє зняття PAC — просто підтримуйте актуальними як *frida-server*, так і Python/CLI інструменти, коли виходить нова основна версія iOS.
## Посилання

View File

@ -1,7 +1,100 @@
# Запитне підсумовування в HTTP/2 даунгрейдах
# Request Smuggling in HTTP/2 Downgrades
{{#include ../../banners/hacktricks-training.md}}
**Перевірте пост [https://portswigger.net/research/http-2-downgrades](https://portswigger.net/research/http-2-downgrades)**
HTTP/2 зазвичай вважається захищеним від класичного request-smuggling, оскільки довжина кожного DATA фрейму є явною. **Ця захист зникає, як тільки фронтальний проксі “знижує” запит до HTTP/1.x перед тим, як передати його на бекенд**. У момент, коли два різні парсери (фронтальний HTTP/2 і бекенд HTTP/1) намагаються домовитися, де закінчується один запит і де починається наступний, всі старі трюки десинхронізації повертаються плюс кілька нових.
---
## Чому відбуваються зниження
1. Браузери вже підтримують HTTP/2, але багато застарілої інфраструктури все ще розуміє лише HTTP/1.1.
2. Зворотні проксі (CDN, WAF, балансувальники навантаження) тому завершують TLS + HTTP/2 на краю і **переписують кожен запит як HTTP/1.1** для походження.
3. Крок перекладу повинен створити *обидва* заголовки `Content-Length` **і/або** `Transfer-Encoding: chunked`, щоб походження могло визначити довжину тіла.
Коли фронтальний проксі довіряє довжині фрейму HTTP/2 **але** бекенд довіряє CL або TE, зловмисник може змусити їх не погоджуватися.
---
## Дві домінуючі класи примітивів
| Варіант | Довжина фронтального | Довжина бекендного | Типове навантаження |
|---------|---------------------|---------------------|---------------------|
| **H2.TE** | HTTP/2 фрейм | `Transfer-Encoding: chunked` | Вбудувати додаткове тіло повідомлення з частинами, останній `0\r\n\r\n` якого *не* надсилається, тому бекенд чекає на “наступний” запит, наданий зловмисником. |
| **H2.CL** | HTTP/2 фрейм | `Content-Length` | Надіслати *менший* CL, ніж реальне тіло, щоб бекенд читав за межами кордону в наступний запит. |
> Це ідентичні за духом класичним TE.CL / CL.TE, просто з HTTP/2, що замінює один з парсерів.
---
## Визначення ланцюга зниження
1. Використовуйте **ALPN** у TLS рукопожатті (`openssl s_client -alpn h2 -connect host:443`) або **curl**:
```bash
curl -v --http2 https://target
```
Якщо з'являється `* Using HTTP2`, край говорить H2.
2. Надішліть навмисно неправильно сформований запит CL/TE *через* HTTP/2 (Burp Repeater тепер має випадаюче меню для примусової роботи з HTTP/2). Якщо відповідь є помилкою HTTP/1.1, такою як `400 Bad chunk`, у вас є доказ того, що край конвертував трафік для парсера HTTP/1 вниз за течією.
---
## Робочий процес експлуатації (приклад H2.TE)
```http
:method: POST
:path: /login
:scheme: https
:authority: example.com
content-length: 13 # ignored by the edge
transfer-encoding: chunked
5;ext=1\r\nHELLO\r\n
0\r\n\r\nGET /admin HTTP/1.1\r\nHost: internal\r\nX: X
```
1. **Фронт-енд** читає точно 13 байтів (`HELLO\r\n0\r\n\r\nGE`), вважає, що запит завершено, і пересилає цю частину до оригіналу.
2. **Бек-енд** довіряє заголовку TE, продовжує читати, поки не побачить *другий* `0\r\n\r\n`, таким чином споживаючи префікс другого запиту атакуючого (`GET /admin …`).
3. Решта (`GET /admin …`) розглядається як *новий* запит, що стоїть у черзі за запитом жертви.
Замініть підслуханий запит на:
* `POST /api/logout` для примусової фіксації сесії
* `GET /users/1234` для викрадення ресурсу, специфічного для жертви
---
## h2c smuggling (чисті текстові оновлення)
Дослідження 2023 року показало, що якщо фронт-енд передає заголовок HTTP/1.1 `Upgrade: h2c` бек-енду, який підтримує чистий текст HTTP/2, атакуючий може тунелювати *сирі* HTTP/2 фрейми через край, який лише перевіряв HTTP/1.1. Це обминає нормалізацію заголовків, правила WAF і навіть завершення TLS.
Ключові вимоги:
* Край передає **обидва** `Connection: Upgrade` і `Upgrade: h2c` без змін.
* Оригінал переходить на HTTP/2 і зберігає семантику повторного використання з'єднання, що дозволяє чергування запитів.
Зменшення ризиків просте видалити або жорстко закодувати заголовок `Upgrade` на краю, за винятком WebSockets.
---
## Помітні реальні CVE (2022-2025)
* **CVE-2023-25690** Правила переписування mod_proxy Apache HTTP Server можуть бути з'єднані для розділення запитів і підслуховування. (виправлено в 2.4.56)
* **CVE-2023-25950** HAProxy 2.7/2.6 підслуховування запитів/відповідей, коли парсер HTX неправильно обробляв конвеєрні запити.
* **CVE-2022-41721** Go `MaxBytesHandler` призвів до того, що залишкові байти тіла були розібрані як **HTTP/2** фрейми, що дозволило міжпротокольне підслуховування.
---
## Інструменти
* **Burp Request Smuggler** з версії v1.26 автоматично тестує H2.TE/H2.CL і приховану підтримку ALPN. Увімкніть “HTTP/2 probing” в параметрах розширення.
* **h2cSmuggler** Python PoC від Bishop Fox для автоматизації атаки чистого тексту:
```bash
python3 h2csmuggler.py -u https://target -x 'GET /admin HTTP/1.1\r\nHost: target\r\n\r\n'
```
* **curl**/`hyper` створення ручних корисних навантажень: `curl --http2-prior-knowledge -X POST --data-binary @payload.raw https://target`.
---
## Заходи захисту
1. **End-to-end HTTP/2** повністю усунути зниження перекладу.
2. **Єдине джерело правди про довжину** під час зниження *завжди* генерувати дійсний `Content-Length` **і** **видаляти** будь-які заголовки `Content-Length`/`Transfer-Encoding`, надані користувачем.
3. **Нормалізувати перед маршрутом** застосовувати санітаризацію заголовків *перед* логікою маршрутизації/переписування.
4. **Ізоляція з'єднання** не повторно використовувати TCP з'єднання бек-енду між користувачами; “один запит на з'єднання” перемагає експлойти на основі черги.
5. **Видалити `Upgrade`, якщо не WebSocket** запобігає тунелюванню h2c.
---
## Посилання
* PortSwigger Research “HTTP/2: Продовження завжди гірше” <https://portswigger.net/research/http2>
* Bishop Fox “h2c Smuggling: підслуховування запитів через HTTP/2 чистий текст” <https://bishopfox.com/blog/h2c-smuggling-request>
{{#include ../../banners/hacktricks-training.md}}