mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-methodologies-and-resources/pentesting-wifi/ena
This commit is contained in:
parent
f3c6c71146
commit
d1be7c87cd
@ -3,7 +3,7 @@
|
|||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
## Огляд
|
## Огляд
|
||||||
Більшість сучасних телефонів Android оснащені чіпсетом Wi-Fi Broadcom/Cypress, який постачається без можливостей режиму моніторингу 802.11 або ін'єкції кадрів. Відкритий фреймворк NexMon патчує власне ПЗ, щоб додати ці функції та надає їх через спільну бібліотеку (`libnexmon.so`) та CLI допоміжну програму (`nexutil`). Завантажуючи цю бібліотеку в стандартний драйвер Wi-Fi, пристрій з root-доступом може захоплювати сирий трафік 802.11 та ін'єктувати довільні кадри – усуваючи необхідність у зовнішньому USB-адаптері.
|
Більшість сучасних телефонів Android оснащені чіпсетом Wi-Fi Broadcom/Cypress, який постачається без можливостей режиму моніторингу 802.11 або ін'єкції кадрів. Відкритий фреймворк NexMon патчує власне ПЗ, щоб додати ці функції та надає їх через спільну бібліотеку (`libnexmon.so`) та CLI допоміжний засіб (`nexutil`). Завантажуючи цю бібліотеку в стандартний драйвер Wi-Fi, пристрій з root-доступом може захоплювати сирий трафік 802.11 та ін'єктувати довільні кадри – усуваючи необхідність у зовнішньому USB-адаптері.
|
||||||
|
|
||||||
Ця сторінка документує швидкий робочий процес, який використовує повністю патчений Samsung Galaxy S10 (BCM4375B1) як приклад, використовуючи:
|
Ця сторінка документує швидкий робочий процес, який використовує повністю патчений Samsung Galaxy S10 (BCM4375B1) як приклад, використовуючи:
|
||||||
|
|
||||||
@ -23,7 +23,7 @@
|
|||||||
* `/system/lib*/libnexmon.so`
|
* `/system/lib*/libnexmon.so`
|
||||||
* `/system/xbin/nexutil`
|
* `/system/xbin/nexutil`
|
||||||
* Hijacker ≥ 1.7 (arm/arm64) – [https://github.com/chrisk44/Hijacker](https://github.com/chrisk44/Hijacker)
|
* Hijacker ≥ 1.7 (arm/arm64) – [https://github.com/chrisk44/Hijacker](https://github.com/chrisk44/Hijacker)
|
||||||
* (Необов'язково) Kali NetHunter або будь-який Linux chroot, де ви плануєте запускати бездротові інструменти
|
* (Додатково) Kali NetHunter або будь-який Linux chroot, де ви плануєте запускати бездротові інструменти
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -53,13 +53,13 @@ nexutil -m0; svc wifi enable
|
|||||||
```
|
```
|
||||||
Увімкніть “Start monitor mode on airodump start”, щоб кожен скан Hijacker відбувався в рідному моніторинговому режимі (`wlan0` замість `wlan0mon`).
|
Увімкніть “Start monitor mode on airodump start”, щоб кожен скан Hijacker відбувався в рідному моніторинговому режимі (`wlan0` замість `wlan0mon`).
|
||||||
|
|
||||||
Якщо Hijacker показує помилки під час запуску, створіть необхідний каталог на спільному сховищі та знову відкрийте додаток:
|
Якщо Hijacker показує помилки під час запуску, створіть необхідний каталог на загальному сховищі та знову відкрийте додаток:
|
||||||
```bash
|
```bash
|
||||||
mkdir -p /storage/emulated/0/Hijacker
|
mkdir -p /storage/emulated/0/Hijacker
|
||||||
```
|
```
|
||||||
### Що означають ці прапори `nexutil`?
|
### Що означають ці прапори `nexutil`?
|
||||||
* **`-s0x613`** Записати змінну прошивки 0x613 (FCAP_FRAME_INJECTION) → `1` (увімкнути TX довільних кадрів).
|
* **`-s0x613`** Записати змінну прошивки 0x613 (FCAP_FRAME_INJECTION) → `1` (увімкнути TX довільних кадрів).
|
||||||
* **`-i`** Перевести інтерфейс в моніторний режим (заголовок radiotap буде додано).
|
* **`-i`** Перевести інтерфейс в моніторний режим (заголовок radiotap буде додано на початку).
|
||||||
* **`-v2`** Встановити рівень детальності; `2` виводить підтвердження та версію прошивки.
|
* **`-v2`** Встановити рівень детальності; `2` виводить підтвердження та версію прошивки.
|
||||||
* **`-m0`** Відновити керований режим (використовується в команді *disable*).
|
* **`-m0`** Відновити керований режим (використовується в команді *disable*).
|
||||||
|
|
||||||
@ -104,7 +104,7 @@ wifite -i wlan0 # або aircrack-ng, mdk4 …
|
|||||||
## Типові можливі атаки
|
## Типові можливі атаки
|
||||||
Якщо монітор + TX активні, ви можете:
|
Якщо монітор + TX активні, ви можете:
|
||||||
* Захоплювати WPA(2/3-SAE) хендшейки або PMKID за допомогою `wifite`, `hcxdumptool`, `airodump-ng`.
|
* Захоплювати WPA(2/3-SAE) хендшейки або PMKID за допомогою `wifite`, `hcxdumptool`, `airodump-ng`.
|
||||||
* Ін'єктувати кадри деавторизації / дисасоціації, щоб змусити клієнтів перепідключитися.
|
* Ін'єктувати кадри деаутентифікації / дисасоціації, щоб змусити клієнтів перепідключитися.
|
||||||
* Створювати довільні управлінські/дані кадри за допомогою `mdk4`, `aireplay-ng`, Scapy тощо.
|
* Створювати довільні управлінські/дані кадри за допомогою `mdk4`, `aireplay-ng`, Scapy тощо.
|
||||||
* Будувати підроблені AP або виконувати атаки KARMA/MANA безпосередньо з телефону.
|
* Будувати підроблені AP або виконувати атаки KARMA/MANA безпосередньо з телефону.
|
||||||
|
|
||||||
|
|||||||
BIN
src/images/discount.jpeg
Normal file
BIN
src/images/discount.jpeg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 186 KiB |
@ -48,12 +48,12 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
|
|||||||
```
|
```
|
||||||
## Статичний аналіз
|
## Статичний аналіз
|
||||||
|
|
||||||
По-перше, для аналізу APK вам слід **ознайомитися з Java кодом** за допомогою декомпілера.\
|
По-перше, для аналізу APK вам слід **ознайомитися з Java-кодом** за допомогою декомпілера.\
|
||||||
Будь ласка, [**читайте тут, щоб знайти інформацію про різні доступні декомпілери**](apk-decompilers.md).
|
Будь ласка, [**читайте тут, щоб знайти інформацію про різні доступні декомпілери**](apk-decompilers.md).
|
||||||
|
|
||||||
### Пошук цікавої інформації
|
### Пошук цікавої інформації
|
||||||
|
|
||||||
Просто ознайомившись з **рядками** APK, ви можете шукати **паролі**, **URL-адреси** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** ключі, **шифрування**, **bluetooth uuids**, **токени** та будь-яку цікаву інформацію... шукайте навіть код виконання **бекдорів** або бекдори аутентифікації (жорстко закодовані облікові дані адміністратора для програми).
|
Просто переглядаючи **рядки** APK, ви можете шукати **паролі**, **URL-адреси** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** ключі, **шифрування**, **bluetooth uuids**, **токени** та будь-яку цікаву інформацію... шукайте навіть код виконання **бекдорів** або бекдори аутентифікації (жорстко закодовані облікові дані адміністратора для програми).
|
||||||
|
|
||||||
**Firebase**
|
**Firebase**
|
||||||
|
|
||||||
@ -73,11 +73,11 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
|
|||||||
- **Отримувачі широкомовлення та URL-схеми**: Ці компоненти можуть бути використані для експлуатації, з особливою увагою до того, як управляються URL-схеми для вразливостей введення.
|
- **Отримувачі широкомовлення та URL-схеми**: Ці компоненти можуть бути використані для експлуатації, з особливою увагою до того, як управляються URL-схеми для вразливостей введення.
|
||||||
- **Версії SDK**: Атрибути `minSdkVersion`, `targetSDKVersion` та `maxSdkVersion` вказують на підтримувані версії Android, підкреслюючи важливість непідтримки застарілих, вразливих версій Android з міркувань безпеки.
|
- **Версії SDK**: Атрибути `minSdkVersion`, `targetSDKVersion` та `maxSdkVersion` вказують на підтримувані версії Android, підкреслюючи важливість непідтримки застарілих, вразливих версій Android з міркувань безпеки.
|
||||||
|
|
||||||
З файлу **strings.xml** можна виявити чутливу інформацію, таку як API ключі, власні схеми та інші нотатки розробників, що підкреслює необхідність ретельного перегляду цих ресурсів.
|
З файлу **strings.xml** можна виявити чутливу інформацію, таку як API-ключі, власні схеми та інші нотатки розробників, що підкреслює необхідність ретельного перегляду цих ресурсів.
|
||||||
|
|
||||||
### Tapjacking
|
### Tapjacking
|
||||||
|
|
||||||
**Tapjacking** - це атака, коли **зловмисна** **програма** запускається і **розташовується поверх програми жертви**. Як тільки вона видимо закриває програму жертви, її інтерфейс користувача спроектований таким чином, щоб обманути користувача взаємодіяти з нею, в той час як вона передає взаємодію до програми жертви.\
|
**Tapjacking** - це атака, коли **зловмисна** **програма** запускається і **розташовується поверх програми жертви**. Як тільки вона видимо закриває програму жертви, її інтерфейс користувача спроектований так, щоб обманути користувача взаємодіяти з нею, в той час як вона передає взаємодію до програми жертви.\
|
||||||
Фактично, це **осліплює користувача, не даючи йому знати, що він насправді виконує дії в програмі жертви**.
|
Фактично, це **осліплює користувача, не даючи йому знати, що він насправді виконує дії в програмі жертви**.
|
||||||
|
|
||||||
Знайдіть більше інформації в:
|
Знайдіть більше інформації в:
|
||||||
@ -86,9 +86,9 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
|
|||||||
tapjacking.md
|
tapjacking.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
### Захоплення завдань
|
### Викрадення завдань
|
||||||
|
|
||||||
**Активність** з **`launchMode`**, встановленим на **`singleTask` без визначеного `taskAffinity`**, вразлива до захоплення завдань. Це означає, що **програму** можна встановити, і якщо вона запуститься до реальної програми, вона може **захопити завдання реальної програми** (так що користувач буде взаємодіяти з **зловмисною програмою, вважаючи, що використовує реальну**).
|
**Активність** з **`launchMode`**, встановленим на **`singleTask` без визначеного `taskAffinity`**, вразлива до викрадення завдань. Це означає, що **програму** можна встановити, і якщо її запустити перед реальною програмою, вона може **викрасти завдання реальної програми** (так що користувач буде взаємодіяти з **зловмисною програмою, вважаючи, що використовує реальну**).
|
||||||
|
|
||||||
Більше інформації в:
|
Більше інформації в:
|
||||||
|
|
||||||
@ -105,30 +105,30 @@ android-task-hijacking.md
|
|||||||
1. **Статичний аналіз:**
|
1. **Статичний аналіз:**
|
||||||
- **Переконайтеся**, що використання `MODE_WORLD_READABLE` і `MODE_WORLD_WRITABLE` **ретельно перевіряється**. Ці режими **можуть потенційно відкрити** файли для **небажаного або несанкціонованого доступу**.
|
- **Переконайтеся**, що використання `MODE_WORLD_READABLE` і `MODE_WORLD_WRITABLE` **ретельно перевіряється**. Ці режими **можуть потенційно відкрити** файли для **небажаного або несанкціонованого доступу**.
|
||||||
2. **Динамічний аналіз:**
|
2. **Динамічний аналіз:**
|
||||||
- **Перевірте** **дозволи**, встановлені на файли, створені програмою. Зокрема, **перевірте**, чи є файли, **встановлені на читання або запис для всіх**. Це може становити значний ризик для безпеки, оскільки це дозволить **будь-якій програмі**, встановленій на пристрої, незалежно від її походження чи наміру, **читати або змінювати** ці файли.
|
- **Перевірте** **дозволи**, встановлені на файли, створені програмою. Зокрема, **перевірте**, чи є файли **встановленими на читання або запис для всіх**. Це може становити значний ризик для безпеки, оскільки це дозволить **будь-якій програмі**, встановленій на пристрої, незалежно від її походження чи наміру, **читати або змінювати** ці файли.
|
||||||
|
|
||||||
**Зовнішнє зберігання**
|
**Зовнішнє зберігання**
|
||||||
|
|
||||||
При роботі з файлами на **зовнішньому зберіганні**, наприклад, на SD-картах, слід вжити певних запобіжних заходів:
|
При роботі з файлами на **зовнішньому зберіганні**, наприклад, на SD-картах, слід вжити певних запобіжних заходів:
|
||||||
|
|
||||||
1. **Доступність**:
|
1. **Доступність**:
|
||||||
- Файли на зовнішньому зберіганні є **глобально доступними для читання та запису**. Це означає, що будь-яка програма або користувач можуть отримати доступ до цих файлів.
|
- Файли на зовнішньому зберіганні є **глобально читабельними та записуваними**. Це означає, що будь-яка програма або користувач можуть отримати доступ до цих файлів.
|
||||||
2. **Проблеми безпеки**:
|
2. **Проблеми безпеки**:
|
||||||
- З огляду на легкість доступу, рекомендується **не зберігати чутливу інформацію** на зовнішньому зберіганні.
|
- З огляду на легкість доступу, рекомендується **не зберігати чутливу інформацію** на зовнішньому зберіганні.
|
||||||
- Зовнішнє зберігання може бути видалено або доступно будь-якою програмою, що робить його менш безпечним.
|
- Зовнішнє зберігання може бути видалено або доступно будь-якою програмою, що робить його менш безпечним.
|
||||||
3. **Обробка даних з зовнішнього зберігання**:
|
3. **Обробка даних з зовнішнього зберігання**:
|
||||||
- Завжди **виконуйте перевірку введення** даних, отриманих з зовнішнього зберігання. Це важливо, оскільки дані надходять з ненадійного джерела.
|
- Завжди **виконуйте перевірку введення** на дані, отримані з зовнішнього зберігання. Це важливо, оскільки дані надходять з ненадійного джерела.
|
||||||
- Зберігання виконуваних файлів або класів на зовнішньому зберіганні для динамічного завантаження категорично не рекомендується.
|
- Зберігання виконуваних файлів або класів на зовнішньому зберіганні для динамічного завантаження категорично не рекомендується.
|
||||||
- Якщо ваша програма повинна отримувати виконувані файли з зовнішнього зберігання, переконайтеся, що ці файли **підписані та криптографічно перевірені** перед їх динамічним завантаженням. Цей крок є важливим для підтримки цілісності безпеки вашої програми.
|
- Якщо ваша програма повинна отримувати виконувані файли з зовнішнього зберігання, переконайтеся, що ці файли **підписані та криптографічно перевірені** перед їх динамічним завантаженням. Цей крок є важливим для підтримки цілісності безпеки вашої програми.
|
||||||
|
|
||||||
Зовнішнє зберігання може бути **доступним** у `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
|
Зовнішнє зберігання може бути **доступним** у `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> Починаючи з Android 4.4 (**API 17**), SD-карта має структуру каталогів, яка **обмежує доступ програми до каталогу, який спеціально призначений для цієї програми**. Це запобігає зловмисним програмам отримувати доступ для читання або запису до файлів іншої програми.
|
> Починаючи з Android 4.4 (**API 17**), SD-карта має структуру директорій, яка **обмежує доступ програми до директорії, яка спеціально призначена для цієї програми**. Це запобігає зловмисним програмам отримувати доступ на читання або запис до файлів іншої програми.
|
||||||
|
|
||||||
**Чутливі дані, збережені у відкритому тексті**
|
**Чутливі дані, збережені у відкритому тексті**
|
||||||
|
|
||||||
- **Спільні налаштування**: Android дозволяє кожній програмі легко зберігати xml файли за адресою `/data/data/<packagename>/shared_prefs/`, і іноді можливо знайти чутливу інформацію у відкритому тексті в цій папці.
|
- **Спільні налаштування**: Android дозволяє кожній програмі легко зберігати xml-файли за адресою `/data/data/<packagename>/shared_prefs/`, і іноді можливо знайти чутливу інформацію у відкритому тексті в цій папці.
|
||||||
- **Бази даних**: Android дозволяє кожній програмі легко зберігати sqlite бази даних за адресою `/data/data/<packagename>/databases/`, і іноді можливо знайти чутливу інформацію у відкритому тексті в цій папці.
|
- **Бази даних**: Android дозволяє кожній програмі легко зберігати sqlite бази даних за адресою `/data/data/<packagename>/databases/`, і іноді можливо знайти чутливу інформацію у відкритому тексті в цій папці.
|
||||||
|
|
||||||
### Пошкоджений TLS
|
### Пошкоджений TLS
|
||||||
@ -155,10 +155,10 @@ sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
|||||||
### Інші перевірки
|
### Інші перевірки
|
||||||
|
|
||||||
- Рекомендується **обфускувати APK**, щоб ускладнити реверс-інженерні роботи для зловмисників.
|
- Рекомендується **обфускувати APK**, щоб ускладнити реверс-інженерні роботи для зловмисників.
|
||||||
- Якщо додаток є чутливим (наприклад, банківські додатки), він повинен виконувати **власні перевірки, щоб дізнатися, чи пристрій є рутованим**, і діяти відповідно.
|
- Якщо додаток є чутливим (наприклад, банківські додатки), він повинен виконувати **власні перевірки, щоб дізнатися, чи є мобільний пристрій зламаним**, і діяти відповідно.
|
||||||
- Якщо додаток є чутливим (наприклад, банківські додатки), він повинен перевіряти, чи використовується **емулятор**.
|
- Якщо додаток є чутливим (наприклад, банківські додатки), він повинен перевіряти, чи використовується **емулятор**.
|
||||||
- Якщо додаток є чутливим (наприклад, банківські додатки), він повинен **перевіряти свою цілісність перед виконанням**, щоб перевірити, чи був він змінений.
|
- Якщо додаток є чутливим (наприклад, банківські додатки), він повинен **перевіряти свою цілісність перед виконанням**, щоб перевірити, чи був він змінений.
|
||||||
- Використовуйте [**APKiD**](https://github.com/rednaga/APKiD), щоб перевірити, який компілятор/упаковщик/обфускатор був використаний для створення APK
|
- Використовуйте [**APKiD**](https://github.com/rednaga/APKiD), щоб перевірити, який компілятор/упаковщик/обфускатор був використаний для створення APK.
|
||||||
|
|
||||||
### React Native Application
|
### React Native Application
|
||||||
|
|
||||||
@ -182,13 +182,13 @@ react-native-application.md
|
|||||||
|
|
||||||
### Автоматизований статичний аналіз коду
|
### Автоматизований статичний аналіз коду
|
||||||
|
|
||||||
Інструмент [**mariana-trench**](https://github.com/facebook/mariana-trench) здатний знаходити **вразливості** шляхом **сканування** **коду** програми. Цей інструмент містить ряд **відомих джерел** (які вказують інструменту **місця**, де **вхід** **контролюється користувачем), **синків** (які вказують інструменту **небезпечні** **місця**, де шкідливий вхід користувача може завдати шкоди) та **правил**. Ці правила вказують на **комбінацію** **джерел-синків**, яка вказує на вразливість.
|
Інструмент [**mariana-trench**](https://github.com/facebook/mariana-trench) здатний знаходити **вразливості** шляхом **сканування** **коду** програми. Цей інструмент містить серію **відомих джерел** (які вказують інструменту **місця**, де **вхід** **контролюється користувачем**), **синків** (які вказують інструменту **небезпечні** **місця**, де шкідливий вхід користувача може завдати шкоди) та **правил**. Ці правила вказують на **комбінацію** **джерел-синків**, яка вказує на вразливість.
|
||||||
|
|
||||||
З цими знаннями **mariana-trench перегляне код і знайде можливі вразливості в ньому**.
|
З цими знаннями **mariana-trench перегляне код і знайде можливі вразливості в ньому**.
|
||||||
|
|
||||||
### Витік секретів
|
### Витік секретів
|
||||||
|
|
||||||
Додаток може містити секрети (API ключі, паролі, приховані URL, піддомени...) всередині, які ви можете виявити. Ви можете використовувати інструмент, такий як [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks)
|
Додаток може містити секрети (API ключі, паролі, приховані URL, піддомени...) всередині, які ви можете виявити. Ви можете використовувати інструмент, такий як [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks).
|
||||||
|
|
||||||
### Обхід біометричної аутентифікації
|
### Обхід біометричної аутентифікації
|
||||||
|
|
||||||
@ -215,7 +215,7 @@ content-protocol.md
|
|||||||
|
|
||||||
## Динамічний аналіз
|
## Динамічний аналіз
|
||||||
|
|
||||||
> По-перше, вам потрібне середовище, де ви можете встановити додаток і все середовище (сертифікат CA Burp, Drozer і Frida в основному). Тому рутований пристрій (емулятор чи ні) є надзвичайно рекомендованим.
|
> По-перше, вам потрібне середовище, де ви можете встановити додаток і все середовище (сертифікат Burp CA, Drozer і Frida в основному). Тому дуже рекомендується використовувати зламаний пристрій (емулятор або ні).
|
||||||
|
|
||||||
### Онлайн динамічний аналіз
|
### Онлайн динамічний аналіз
|
||||||
|
|
||||||
@ -231,7 +231,7 @@ content-protocol.md
|
|||||||
|
|
||||||
#### Використання емулятора
|
#### Використання емулятора
|
||||||
|
|
||||||
- [**Android Studio**](https://developer.android.com/studio) (Ви можете створити **x86** та **arm** пристрої, і відповідно до [**цього**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**останні x86** версії **підтримують ARM бібліотеки** без необхідності повільного емулятора arm).
|
- [**Android Studio**](https://developer.android.com/studio) (Ви можете створювати **x86** та **arm** пристрої, і відповідно до [**цього**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**останні версії x86** підтримують ARM бібліотеки без необхідності в повільному емуляторі arm).
|
||||||
- Дізнайтеся, як налаштувати його на цій сторінці:
|
- Дізнайтеся, як налаштувати його на цій сторінці:
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
@ -252,7 +252,7 @@ avd-android-virtual-device.md
|
|||||||
|
|
||||||
#### Використання фізичного пристрою
|
#### Використання фізичного пристрою
|
||||||
|
|
||||||
Вам потрібно активувати **опції налагодження**, і було б добре, якщо ви зможете **рутнути** його:
|
Вам потрібно активувати **опції налагодження**, і було б добре, якщо ви зможете **зламати** його:
|
||||||
|
|
||||||
1. **Налаштування**.
|
1. **Налаштування**.
|
||||||
2. (З Android 8.0) Виберіть **Система**.
|
2. (З Android 8.0) Виберіть **Система**.
|
||||||
@ -260,14 +260,14 @@ avd-android-virtual-device.md
|
|||||||
4. Натисніть **Номер збірки** 7 разів.
|
4. Натисніть **Номер збірки** 7 разів.
|
||||||
5. Поверніться назад, і ви знайдете **Опції розробника**.
|
5. Поверніться назад, і ви знайдете **Опції розробника**.
|
||||||
|
|
||||||
> Після того, як ви встановили додаток, перше, що вам слід зробити, це спробувати його та дослідити, що він робить, як він працює і звикнути до нього.\
|
> Як тільки ви встановили додаток, перше, що ви повинні зробити, це спробувати його та дослідити, що він робить, як він працює і звикнути до нього.\
|
||||||
> Я рекомендую **виконати цей початковий динамічний аналіз, використовуючи динамічний аналіз MobSF + pidcat**, щоб ми могли **вивчити, як працює додаток**, поки MobSF **збирає** багато **цікавих** **даних**, які ви зможете переглянути пізніше.
|
> Я рекомендую **виконати цей початковий динамічний аналіз, використовуючи динамічний аналіз MobSF + pidcat**, щоб ми могли **вивчити, як працює додаток**, поки MobSF **збирає** багато **цікавих** **даних**, які ви зможете переглянути пізніше.
|
||||||
|
|
||||||
### Ненавмисний витік даних
|
### Ненавмисний витік даних
|
||||||
|
|
||||||
**Логування**
|
**Логування**
|
||||||
|
|
||||||
Розробники повинні бути обережними, щоб не оприлюднювати **інформацію для налагодження**, оскільки це може призвести до витоку чутливих даних. Рекомендується використовувати інструменти [**pidcat**](https://github.com/JakeWharton/pidcat) та `adb logcat` для моніторингу журналів додатка, щоб виявити та захистити чутливу інформацію. **Pidcat** віддається перевага за його простоту використання та читабельність.
|
Розробники повинні бути обережними, щоб не розкривати **інформацію для налагодження** публічно, оскільки це може призвести до витоку чутливих даних. Рекомендується використовувати інструменти [**pidcat**](https://github.com/JakeWharton/pidcat) та `adb logcat` для моніторингу журналів додатка, щоб виявити та захистити чутливу інформацію. **Pidcat** віддається перевага за його простоту використання та читабельність.
|
||||||
|
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> Зверніть увагу, що з **пізніми версіями Android 4.0**, **додатки можуть отримувати доступ лише до своїх власних журналів**. Тому додатки не можуть отримувати доступ до журналів інших додатків.\
|
> Зверніть увагу, що з **пізніми версіями Android 4.0**, **додатки можуть отримувати доступ лише до своїх власних журналів**. Тому додатки не можуть отримувати доступ до журналів інших додатків.\
|
||||||
@ -275,13 +275,13 @@ avd-android-virtual-device.md
|
|||||||
|
|
||||||
**Кешування буфера копіювання/вставки**
|
**Кешування буфера копіювання/вставки**
|
||||||
|
|
||||||
Фреймворк Android на основі **буфера обміну** дозволяє функціональність копіювання-вставки в додатках, але несе ризик, оскільки **інші додатки** можуть **отримати доступ** до буфера обміну, потенційно відкриваючи чутливі дані. Важливо **відключити функції копіювання/вставки** для чутливих розділів програми, таких як дані кредитних карток, щоб запобігти витоку даних.
|
**Кліпборд** Android дозволяє функціональність копіювання-вставки в додатках, але це створює ризик, оскільки **інші додатки** можуть **отримати доступ** до буфера обміну, потенційно розкриваючи чутливі дані. Важливо **відключити функції копіювання/вставки** для чутливих частин програми, таких як дані кредитних карток, щоб запобігти витоку даних.
|
||||||
|
|
||||||
**Журнали аварій**
|
**Журнали аварій**
|
||||||
|
|
||||||
Якщо додаток **виникає аварія** і **зберігає журнали**, ці журнали можуть допомогти зловмисникам, особливо коли додаток не може бути реверсовано. Щоб зменшити цей ризик, уникайте ведення журналів при аваріях, а якщо журнали повинні передаватися через мережу, переконайтеся, що вони надсилаються через SSL-канал для безпеки.
|
Якщо додаток **зависає** і **зберігає журнали**, ці журнали можуть допомогти зловмисникам, особливо коли додаток не може бути реверсовано. Щоб зменшити цей ризик, уникайте ведення журналів при аваріях, а якщо журнали повинні передаватися через мережу, переконайтеся, що вони надсилаються через SSL-канал для безпеки.
|
||||||
|
|
||||||
Як пентестер, **слідкуйте за цими журналами**.
|
Як пентестер, **спробуйте переглянути ці журнали**.
|
||||||
|
|
||||||
**Дані аналітики, надіслані третім особам**
|
**Дані аналітики, надіслані третім особам**
|
||||||
|
|
||||||
@ -289,12 +289,12 @@ avd-android-virtual-device.md
|
|||||||
|
|
||||||
### SQLite БД
|
### SQLite БД
|
||||||
|
|
||||||
Більшість додатків використовуватимуть **внутрішні SQLite бази даних** для збереження інформації. Під час пентесту зверніть увагу на **бази даних**, що створюються, назви **таблиць** та **стовпців** і всі **дані**, що зберігаються, оскільки ви можете знайти **чутливу інформацію** (що буде вразливістю).\
|
Більшість додатків використовуватимуть **внутрішні SQLite бази даних** для збереження інформації. Під час пентесту зверніть увагу на **бази даних**, які створені, назви **таблиць** та **стовпців** і всі **дані**, що зберігаються, оскільки ви можете знайти **чутливу інформацію** (що буде вразливістю).\
|
||||||
Бази даних повинні розташовуватися в `/data/data/the.package.name/databases`, наприклад, `/data/data/com.mwr.example.sieve/databases`
|
Бази даних повинні розташовуватися в `/data/data/the.package.name/databases`, як `/data/data/com.mwr.example.sieve/databases`.
|
||||||
|
|
||||||
Якщо база даних зберігає конфіденційну інформацію і **зашифрована**, але ви можете **знайти** **пароль** всередині програми, це все ще є **вразливістю**.
|
Якщо база даних зберігає конфіденційну інформацію і **зашифрована**, але ви можете **знайти** **пароль** всередині програми, це все ще **вразливість**.
|
||||||
|
|
||||||
Перерахуйте таблиці, використовуючи `.tables`, і перераховуйте стовпці таблиць, виконуючи `.schema <table_name>`
|
Перерахуйте таблиці, використовуючи `.tables`, і перераховуйте стовпці таблиць, виконуючи `.schema <table_name>`.
|
||||||
|
|
||||||
### Drozer (Експлуатація активностей, постачальників контенту та сервісів)
|
### Drozer (Експлуатація активностей, постачальників контенту та сервісів)
|
||||||
|
|
||||||
@ -308,7 +308,7 @@ Drozer є корисним інструментом для **експлуата
|
|||||||
|
|
||||||
**Обхід авторизації**
|
**Обхід авторизації**
|
||||||
|
|
||||||
Коли активність експортується, ви можете викликати її екран з зовнішнього додатка. Тому, якщо активність з **чутливою інформацією** є **експортованою**, ви можете **обійти** механізми **автентифікації**, щоб отримати доступ до неї.
|
Коли активність експортується, ви можете викликати її екран з зовнішнього додатка. Тому, якщо активність з **чутливою інформацією** є **експортованою**, ви можете **обійти** механізми **авторизації**, щоб отримати доступ до неї.
|
||||||
|
|
||||||
[**Дізнайтеся, як експлуатувати експортовані активності за допомогою Drozer.**](drozer-tutorial/index.html#activities)
|
[**Дізнайтеся, як експлуатувати експортовані активності за допомогою Drozer.**](drozer-tutorial/index.html#activities)
|
||||||
|
|
||||||
@ -319,10 +319,10 @@ Drozer є корисним інструментом для **експлуата
|
|||||||
```bash
|
```bash
|
||||||
adb shell am start -n com.example.demo/com.example.test.MainActivity
|
adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||||
```
|
```
|
||||||
**NOTE**: MobSF виявить використання _**singleTask/singleInstance**_ як `android:launchMode` в активності як шкідливе, але через [це](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), очевидно, це небезпечно лише на старих версіях (версії API < 21).
|
**NOTE**: MobSF виявить використання _**singleTask/singleInstance**_ як `android:launchMode` в активності як шкідливе, але через [це](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), очевидно, що це небезпечно лише в старих версіях (версії API < 21).
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> Зверніть увагу, що обхід авторизації не завжди є вразливістю, це залежить від того, як працює обхід і яка інформація розкривається.
|
> Зверніть увагу, що обхід авторизації не завжди є вразливістю, це залежить від того, як працює обхід і яка інформація піддається розкриттю.
|
||||||
|
|
||||||
**Витік чутливої інформації**
|
**Витік чутливої інформації**
|
||||||
|
|
||||||
@ -382,7 +382,7 @@ _Зверніть увагу, що ви можете **пропустити ім
|
|||||||
**Параметри в шляху**
|
**Параметри в шляху**
|
||||||
|
|
||||||
Ви **також повинні перевірити, чи використовує будь-яке глибоке посилання параметр всередині шляху** URL, наприклад: `https://api.example.com/v1/users/{username}`, у такому випадку ви можете примусити перехід по шляху, отримуючи доступ до чогось на кшталт: `example://app/users?username=../../unwanted-endpoint%3fparam=value`.\
|
Ви **також повинні перевірити, чи використовує будь-яке глибоке посилання параметр всередині шляху** URL, наприклад: `https://api.example.com/v1/users/{username}`, у такому випадку ви можете примусити перехід по шляху, отримуючи доступ до чогось на кшталт: `example://app/users?username=../../unwanted-endpoint%3fparam=value`.\
|
||||||
Зверніть увагу, що якщо ви знайдете правильні кінцеві точки всередині додатку, ви можете викликати **Open Redirect** (якщо частина шляху використовується як ім'я домену), **захоплення облікового запису** (якщо ви можете змінити деталі користувачів без CSRF токена, а вразлива кінцева точка використовувала правильний метод) та будь-яку іншу вразливість. Більше [інформації про це тут](http://dphoeniixx.com/2020/12/13-2/).
|
Зверніть увагу, що якщо ви знайдете правильні кінцеві точки всередині додатку, ви можете викликати **Open Redirect** (якщо частина шляху використовується як ім'я домену), **захоплення облікового запису** (якщо ви можете змінити дані користувачів без токена CSRF, а вразлива кінцева точка використовувала правильний метод) та будь-яку іншу вразливість. Більше [інформації про це тут](http://dphoeniixx.com/2020/12/13-2/).
|
||||||
|
|
||||||
**Більше прикладів**
|
**Більше прикладів**
|
||||||
|
|
||||||
@ -392,7 +392,7 @@ _Зверніть увагу, що ви можете **пропустити ім
|
|||||||
|
|
||||||
- **Сертифікати не завжди належним чином перевіряються** Android-додатками. Це звичайна практика, коли ці додатки ігнорують попередження і приймають самопідписані сертифікати або, в деяких випадках, повертаються до використання HTTP-з'єднань.
|
- **Сертифікати не завжди належним чином перевіряються** Android-додатками. Це звичайна практика, коли ці додатки ігнорують попередження і приймають самопідписані сертифікати або, в деяких випадках, повертаються до використання HTTP-з'єднань.
|
||||||
- **Переговори під час SSL/TLS рукопожаття іноді є слабкими**, використовуючи небезпечні шифри. Ця вразливість робить з'єднання вразливим до атак типу man-in-the-middle (MITM), що дозволяє зловмисникам розшифровувати дані.
|
- **Переговори під час SSL/TLS рукопожаття іноді є слабкими**, використовуючи небезпечні шифри. Ця вразливість робить з'єднання вразливим до атак типу man-in-the-middle (MITM), що дозволяє зловмисникам розшифровувати дані.
|
||||||
- **Витік приватної інформації** є ризиком, коли додатки аутентифікуються за допомогою захищених каналів, але потім спілкуються через незахищені канали для інших транзакцій. Цей підхід не захищає чутливі дані, такі як сесійні куки або деталі користувачів, від перехоплення зловмисними особами.
|
- **Витік приватної інформації** є ризиком, коли додатки аутентифікуються за допомогою захищених каналів, але потім спілкуються через незахищені канали для інших транзакцій. Цей підхід не захищає чутливі дані, такі як сесійні куки або дані користувачів, від перехоплення зловмисними особами.
|
||||||
|
|
||||||
#### Перевірка сертифікатів
|
#### Перевірка сертифікатів
|
||||||
|
|
||||||
@ -400,7 +400,7 @@ _Зверніть увагу, що ви можете **пропустити ім
|
|||||||
|
|
||||||
#### SSL Pinning
|
#### SSL Pinning
|
||||||
|
|
||||||
SSL Pinning - це захід безпеки, коли додаток перевіряє сертифікат сервера проти відомої копії, збереженої в самому додатку. Цей метод є важливим для запобігання атакам MITM. Рекомендується впроваджувати SSL Pinning для додатків, які обробляють чутливу інформацію.
|
SSL Pinning - це захід безпеки, коли додаток перевіряє сертифікат сервера проти відомої копії, збереженої в самому додатку. Цей метод є важливим для запобігання атакам MITM. Рекомендується впроваджувати SSL Pinning для додатків, що обробляють чутливу інформацію.
|
||||||
|
|
||||||
#### Інспекція трафіку
|
#### Інспекція трафіку
|
||||||
|
|
||||||
@ -416,23 +416,23 @@ SSL Pinning - це захід безпеки, коли додаток перев
|
|||||||
|
|
||||||
- Автоматично **модифікуйте** **apk**, щоб **обійти** SSLPinning за допомогою [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Найкраща перевага цього варіанту полягає в тому, що вам не потрібно мати root для обходу SSL Pinning, але вам потрібно буде видалити додаток і перевстановити новий, і це не завжди спрацює.
|
- Автоматично **модифікуйте** **apk**, щоб **обійти** SSLPinning за допомогою [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Найкраща перевага цього варіанту полягає в тому, що вам не потрібно мати root для обходу SSL Pinning, але вам потрібно буде видалити додаток і перевстановити новий, і це не завжди спрацює.
|
||||||
- Ви можете використовувати **Frida** (обговорюється нижче), щоб обійти цю захист. Ось посібник з використання Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
|
- Ви можете використовувати **Frida** (обговорюється нижче), щоб обійти цю захист. Ось посібник з використання Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
|
||||||
- Ви також можете спробувати **автоматично обійти SSL Pinning** за допомогою [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
- Ви також можете спробувати **автоматично обійти SSL Pinning**, використовуючи [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
||||||
- Ви також можете спробувати **автоматично обійти SSL Pinning** за допомогою **MobSF динамічного аналізу** (пояснено нижче)
|
- Ви також можете спробувати **автоматично обійти SSL Pinning**, використовуючи **MobSF динамічний аналіз** (пояснено нижче)
|
||||||
- Якщо ви все ще вважаєте, що є якийсь трафік, який ви не захоплюєте, ви можете спробувати **переслати трафік до burp за допомогою iptables**. Прочитайте цей блог: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
|
- Якщо ви все ще вважаєте, що є якийсь трафік, який ви не захоплюєте, ви можете спробувати **переслати трафік до burp за допомогою iptables**. Прочитайте цей блог: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
|
||||||
|
|
||||||
#### Пошук загальних веб-вразливостей
|
#### Пошук загальних веб-вразливостей
|
||||||
|
|
||||||
Важливо також шукати загальні веб-вразливості в додатку. Детальна інформація про виявлення та усунення цих вразливостей виходить за межі цього резюме, але широко висвітлюється в інших джерелах.
|
Важливо також шукати загальні веб-вразливості в додатку. Детальна інформація про виявлення та усунення цих вразливостей виходить за межі цього резюме, але вона широко висвітлюється в інших джерелах.
|
||||||
|
|
||||||
### Frida
|
### Frida
|
||||||
|
|
||||||
[Frida](https://www.frida.re) - це набір інструментів для динамічної інструментації для розробників, реверс-інженерів та дослідників безпеки.\
|
[Frida](https://www.frida.re) - це набір інструментів для динамічної інструментації для розробників, реверс-інженерів та дослідників безпеки.\
|
||||||
**Ви можете отримати доступ до працюючого додатку та підключати методи в реальному часі, щоб змінити поведінку, змінити значення, витягти значення, виконати різний код...**\
|
**Ви можете отримати доступ до працюючого додатку та підключати методи в реальному часі, щоб змінити поведінку, змінити значення, витягти значення, виконати різний код...**\
|
||||||
Якщо ви хочете проводити тестування безпеки Android-додатків, вам потрібно знати, як використовувати Frida.
|
Якщо ви хочете провести тестування безпеки Android-додатків, вам потрібно знати, як використовувати Frida.
|
||||||
|
|
||||||
- Дізнайтеся, як використовувати Frida: [**Посібник з Frida**](frida-tutorial/index.html)
|
- Дізнайтеся, як використовувати Frida: [**Посібник з Frida**](frida-tutorial/index.html)
|
||||||
- Деякі "GUI" для дій з Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
|
- Деякі "GUI" для дій з Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
|
||||||
- Ojection - це чудовий інструмент для автоматизації використання Frida: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
|
- Ojection - це чудово для автоматизації використання Frida: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
|
||||||
- Ви можете знайти деякі чудові скрипти Frida тут: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
|
- Ви можете знайти деякі чудові скрипти Frida тут: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
|
||||||
- Спробуйте обійти механізми анти-дебагінгу / анти-Frida, завантажуючи Frida, як вказано в [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) (інструмент [linjector](https://github.com/erfur/linjector-rs))
|
- Спробуйте обійти механізми анти-дебагінгу / анти-Frida, завантажуючи Frida, як вказано в [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) (інструмент [linjector](https://github.com/erfur/linjector-rs))
|
||||||
|
|
||||||
@ -455,7 +455,7 @@ strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a
|
|||||||
```
|
```
|
||||||
### **Чутливі дані в Keystore**
|
### **Чутливі дані в Keystore**
|
||||||
|
|
||||||
У Android Keystore є найкращим місцем для зберігання чутливих даних, однак, з достатніми привілеями все ще **можливо отримати доступ** до нього. Оскільки додатки, як правило, зберігають тут **чутливі дані у відкритому тексті**, пентести повинні перевіряти це як користувач root або хтось з фізичним доступом до пристрою може бути здатний вкрасти ці дані.
|
У Android Keystore є найкращим місцем для зберігання чутливих даних, однак, з достатніми привілеями все ще **можливо отримати доступ** до нього. Оскільки програми, як правило, зберігають тут **чутливі дані у відкритому тексті**, пентести повинні перевіряти це як користувач root або хтось з фізичним доступом до пристрою може бути здатний вкрасти ці дані.
|
||||||
|
|
||||||
Навіть якщо додаток зберігав дані в keystore, дані повинні бути зашифровані.
|
Навіть якщо додаток зберігав дані в keystore, дані повинні бути зашифровані.
|
||||||
|
|
||||||
@ -471,50 +471,50 @@ frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app
|
|||||||
```
|
```
|
||||||
### **Фонові зображення**
|
### **Фонові зображення**
|
||||||
|
|
||||||
Коли ви ставите додаток у фоновий режим, Android зберігає **знімок додатку**, щоб, коли його відновлюють на передній план, він починає завантажувати зображення перед додатком, тому здається, що додаток завантажився швидше.
|
Коли ви ставите додаток у фоновий режим, Android зберігає **знімок додатку**, щоб, коли він відновлюється на передній план, почати завантажувати зображення перед додатком, щоб здавалося, що додаток завантажився швидше.
|
||||||
|
|
||||||
Однак, якщо цей знімок містить **чутливу інформацію**, хтось, хто має доступ до знімка, може **викрасти цю інформацію** (зверніть увагу, що вам потрібен root для доступу до неї).
|
Однак, якщо цей знімок містить **чутливу інформацію**, хтось, хто має доступ до знімка, може **викрасти цю інформацію** (зверніть увагу, що вам потрібен root для доступу до нього).
|
||||||
|
|
||||||
Знімки зазвичай зберігаються за адресою: **`/data/system_ce/0/snapshots`**
|
Знімки зазвичай зберігаються за адресою: **`/data/system_ce/0/snapshots`**
|
||||||
|
|
||||||
Android надає спосіб **запобігти захопленню скріншотів, встановивши параметр макета FLAG_SECURE**. Використовуючи цей прапор, вміст вікна вважається безпечним, що запобігає його появі на скріншотах або перегляду на небезпечних дисплеях.
|
Android надає спосіб **запобігти захопленню знімків екрану, встановивши параметр макета FLAG_SECURE**. Використовуючи цей прапор, вміст вікна обробляється як безпечний, що запобігає його появі на знімках екрану або перегляду на небезпечних дисплеях.
|
||||||
```bash
|
```bash
|
||||||
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||||
```
|
```
|
||||||
### **Аналізатор Android-додатків**
|
### **Android Application Analyzer**
|
||||||
|
|
||||||
Цей інструмент може допомогти вам керувати різними інструментами під час динамічного аналізу: [https://github.com/NotSoSecure/android_application_analyzer](https://github.com/NotSoSecure/android_application_analyzer)
|
Цей інструмент може допомогти вам керувати різними інструментами під час динамічного аналізу: [https://github.com/NotSoSecure/android_application_analyzer](https://github.com/NotSoSecure/android_application_analyzer)
|
||||||
|
|
||||||
### Ін'єкція намірів
|
### Intent Injection
|
||||||
|
|
||||||
Розробники часто створюють проксі-компоненти, такі як активності, сервіси та приймачі трансляцій, які обробляють ці Намір і передають їх методам, таким як `startActivity(...)` або `sendBroadcast(...)`, що може бути ризиковано.
|
Розробники часто створюють проксі-компоненти, такі як активності, сервіси та приймачі трансляцій, які обробляють ці Intents і передають їх методам, таким як `startActivity(...)` або `sendBroadcast(...)`, що може бути ризиковано.
|
||||||
|
|
||||||
Небезпека полягає в тому, що зловмисники можуть спонукати до активації неекспортованих компонентів додатка або отримати доступ до чутливих постачальників контенту, неправильно перенаправляючи ці Намір. Яскравим прикладом є компонент `WebView`, який перетворює URL-адреси на об'єкти `Intent` через `Intent.parseUri(...)` і потім виконує їх, що може призвести до зловмисних ін'єкцій Намір.
|
Небезпека полягає в тому, що зловмисники можуть спонукати до активації неекспортованих компонентів додатка або отримати доступ до чутливих постачальників контенту, неправильно перенаправляючи ці Intents. Яскравим прикладом є компонент `WebView`, який перетворює URL-адреси на об'єкти `Intent` через `Intent.parseUri(...)` і потім виконує їх, що може призвести до зловмисних ін'єкцій Intent.
|
||||||
|
|
||||||
### Основні висновки
|
### Essential Takeaways
|
||||||
|
|
||||||
- **Ін'єкція намірів** подібна до проблеми відкритого перенаправлення в вебі.
|
- **Intent Injection** подібний до проблеми Open Redirect в вебі.
|
||||||
- Експлойти включають передачу об'єктів `Intent` як додаткових параметрів, які можуть бути перенаправлені для виконання небезпечних операцій.
|
- Експлойти включають передачу об'єктів `Intent` як додаткових параметрів, які можуть бути перенаправлені для виконання небезпечних операцій.
|
||||||
- Це може відкрити неекспортовані компоненти та постачальників контенту для зловмисників.
|
- Це може відкрити неекспортовані компоненти та постачальників контенту для зловмисників.
|
||||||
- Перетворення URL-адреси `WebView` на `Intent` може сприяти ненавмисним діям.
|
- Перетворення URL в `Intent` у `WebView` може сприяти ненавмисним діям.
|
||||||
|
|
||||||
### Ін'єкції на стороні клієнта Android та інші
|
### Android Client Side Injections and others
|
||||||
|
|
||||||
Можливо, ви знаєте про цей вид вразливостей з вебу. Вам потрібно бути особливо обережними з цими вразливостями в Android-додатку:
|
Можливо, ви знаєте про цей вид вразливостей з вебу. Вам потрібно бути особливо обережними з цими вразливостями в Android-додатку:
|
||||||
|
|
||||||
- **SQL-ін'єкція:** При роботі з динамічними запитами або постачальниками контенту переконайтеся, що ви використовуєте параметризовані запити.
|
- **SQL Injection:** При роботі з динамічними запитами або постачальниками контенту переконайтеся, що ви використовуєте параметризовані запити.
|
||||||
- **Ін'єкція JavaScript (XSS):** Переконайтеся, що підтримка JavaScript та плагінів вимкнена для будь-яких WebViews (вимкнено за замовчуванням). [Більше інформації тут](webview-attacks.md#javascript-enabled).
|
- **JavaScript Injection (XSS):** Перевірте, що підтримка JavaScript і плагінів вимкнена для будь-яких WebViews (вимкнено за замовчуванням). [Більше інформації тут](webview-attacks.md#javascript-enabled).
|
||||||
- **Включення локальних файлів:** WebViews повинні мати доступ до файлової системи вимкненим (включено за замовчуванням) - `(webview.getSettings().setAllowFileAccess(false);)`. [Більше інформації тут](webview-attacks.md#javascript-enabled).
|
- **Local File Inclusion:** WebViews повинні мати доступ до файлової системи вимкненим (включено за замовчуванням) - `(webview.getSettings().setAllowFileAccess(false);)`. [Більше інформації тут](webview-attacks.md#javascript-enabled).
|
||||||
- **Вічні куки**: У кількох випадках, коли Android-додаток завершує сесію, куки не відкликаються або можуть навіть зберігатися на диску.
|
- **Eternal cookies**: У кількох випадках, коли Android-додаток завершує сесію, cookie не відкликається або може бути навіть збережено на диску.
|
||||||
- [**Безпечний прапорець** у куках](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags)
|
- [**Secure Flag** in cookies](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Автоматичний аналіз
|
## Automatic Analysis
|
||||||
|
|
||||||
### [MobSF](https://github.com/MobSF/Mobile-Security-Framework-MobSF)
|
### [MobSF](https://github.com/MobSF/Mobile-Security-Framework-MobSF)
|
||||||
|
|
||||||
**Статичний аналіз**
|
**Static analysis**
|
||||||
|
|
||||||
.png>)
|
.png>)
|
||||||
|
|
||||||
@ -530,10 +530,10 @@ MobSF також дозволяє вам **diff/Compare** аналіз і інт
|
|||||||
|
|
||||||
### Допоміжний динамічний аналіз з MobSF
|
### Допоміжний динамічний аналіз з MobSF
|
||||||
|
|
||||||
**MobSF** також може бути дуже корисним для **динамічного аналізу** в **Android**, але в цьому випадку вам потрібно буде встановити MobSF і **genymotion** на вашому хості (VM або Docker не працюватимуть). _Примітка: Вам потрібно **спочатку запустити VM в genymotion** і **потім MobSF.**_\
|
**MobSF** також може бути дуже корисним для **динамічного аналізу** в **Android**, але в цьому випадку вам потрібно буде встановити MobSF і **genymotion** на вашому хості (VM або Docker не працюватимуть). _Примітка: Спочатку потрібно **запустити VM в genymotion** і **потім MobSF.**_\
|
||||||
**Динамічний аналізатор MobSF** може:
|
**Динамічний аналізатор MobSF** може:
|
||||||
|
|
||||||
- **Витягувати дані програми** (URL-адреси, журнали, буфер обміну, скріншоти, зроблені вами, скріншоти, зроблені "**Exported Activity Tester**", електронні листи, бази даних SQLite, XML файли та інші створені файли). Усе це виконується автоматично, за винятком скріншотів, вам потрібно натиснути, коли ви хочете зробити скріншот, або вам потрібно натиснути "**Exported Activity Tester**", щоб отримати скріншоти всіх експортованих активностей.
|
- **Витягувати дані програми** (URL-адреси, журнали, буфер обміну, скріншоти, зроблені вами, скріншоти, зроблені "**Exported Activity Tester**", електронні листи, бази даних SQLite, XML файли та інші створені файли). Усе це виконується автоматично, за винятком скріншотів, вам потрібно натиснути, коли ви хочете зробити скріншот, або натиснути "**Exported Activity Tester**", щоб отримати скріншоти всіх експортованих активностей.
|
||||||
- Захоплювати **HTTPS трафік**
|
- Захоплювати **HTTPS трафік**
|
||||||
- Використовувати **Frida** для отримання **інформації під час виконання**
|
- Використовувати **Frida** для отримання **інформації під час виконання**
|
||||||
|
|
||||||
@ -541,7 +541,7 @@ MobSF також дозволяє вам **diff/Compare** аналіз і інт
|
|||||||
|
|
||||||
**Frida**
|
**Frida**
|
||||||
|
|
||||||
За замовчуванням, він також використовуватиме деякі скрипти Frida для **обходу SSL пінінгу**, **виявлення root** і **виявлення дебагера** та для **моніторингу цікавих API**.\
|
За замовчуванням, він також використовуватиме деякі скрипти Frida для **обходу SSL пінінгу**, **виявлення root** і **виявлення дебагера**, а також для **моніторингу цікавих API**.\
|
||||||
MobSF також може **викликати експортовані активності**, захоплювати **скріншоти** з них і **зберігати** їх для звіту.
|
MobSF також може **викликати експортовані активності**, захоплювати **скріншоти** з них і **зберігати** їх для звіту.
|
||||||
|
|
||||||
Щоб **почати** динамічне тестування, натисніть зелену кнопку: "**Start Instrumentation**". Натисніть "**Frida Live Logs**", щоб побачити журнали, згенеровані скриптами Frida, і "**Live API Monitor**", щоб побачити всі виклики до підключених методів, передані аргументи та повернені значення (це з'явиться після натискання "Start Instrumentation").\
|
Щоб **почати** динамічне тестування, натисніть зелену кнопку: "**Start Instrumentation**". Натисніть "**Frida Live Logs**", щоб побачити журнали, згенеровані скриптами Frida, і "**Live API Monitor**", щоб побачити всі виклики до підключених методів, передані аргументи та повернені значення (це з'явиться після натискання "Start Instrumentation").\
|
||||||
@ -553,12 +553,12 @@ MobSF також дозволяє вам завантажувати власні
|
|||||||
|
|
||||||
- **Перерахувати завантажені класи**: Він виведе всі завантажені класи
|
- **Перерахувати завантажені класи**: Він виведе всі завантажені класи
|
||||||
- **Захопити рядки**: Він виведе всі захоплені рядки під час використання програми (дуже шумно)
|
- **Захопити рядки**: Він виведе всі захоплені рядки під час використання програми (дуже шумно)
|
||||||
- **Захопити порівняння рядків**: Може бути дуже корисно. Він **показуватиме 2 рядки, які порівнюються** і чи був результат True чи False.
|
- **Захопити порівняння рядків**: Може бути дуже корисно. Він **показуватиме 2 рядки, що порівнюються** і чи був результат True чи False.
|
||||||
- **Перерахувати методи класу**: Введіть ім'я класу (наприклад, "java.io.File") і він виведе всі методи класу.
|
- **Перерахувати методи класу**: Введіть ім'я класу (наприклад, "java.io.File") і він виведе всі методи класу.
|
||||||
- **Шукати шаблон класу**: Шукати класи за шаблоном
|
- **Шукати шаблон класу**: Шукати класи за шаблоном
|
||||||
- **Трасувати методи класу**: **Трасувати** **весь клас** (дивитися вхідні та вихідні дані всіх методів класу). Пам'ятайте, що за замовчуванням MobSF трасує кілька цікавих методів Android API.
|
- **Трасувати методи класу**: **Трасувати** **весь клас** (дивитися вхідні та вихідні дані всіх методів класу). Пам'ятайте, що за замовчуванням MobSF трасує кілька цікавих методів Android API.
|
||||||
|
|
||||||
Якщо ви вибрали допоміжний модуль, який хочете використовувати, вам потрібно натиснути "**Start Instrumentation**" і ви побачите всі виходи в "**Frida Live Logs**".
|
Коли ви виберете допоміжний модуль, який хочете використовувати, вам потрібно натиснути "**Start Instrumentation**" і ви побачите всі виходи в "**Frida Live Logs**".
|
||||||
|
|
||||||
**Shell**
|
**Shell**
|
||||||
|
|
||||||
@ -598,7 +598,7 @@ receivers
|
|||||||
|
|
||||||
### [Qark](https://github.com/linkedin/qark)
|
### [Qark](https://github.com/linkedin/qark)
|
||||||
|
|
||||||
Цей інструмент призначений для пошуку кількох **вразливостей Android-додатків, пов'язаних із безпекою**, як у **джерельному коді**, так і в **упакованих APK**. Інструмент також **може створювати "Proof-of-Concept" розгортаємий APK** та **команди ADB**, щоб експлуатувати деякі з виявлених вразливостей (відкриті активності, наміри, tapjacking...). Як і з Drozer, немає необхідності рутувати тестовий пристрій.
|
Цей інструмент призначений для пошуку кількох **вразливостей Android-додатків, пов'язаних із безпекою**, як у **джерельному коді**, так і в **упакованих APK**. Інструмент також **може створювати "Proof-of-Concept" розгортаємий APK** та **команди ADB**, щоб експлуатувати деякі з виявлених вразливостей (викриті активності, наміри, tapjacking...). Як і з Drozer, немає необхідності рутувати тестовий пристрій.
|
||||||
```bash
|
```bash
|
||||||
pip3 install --user qark # --user is only needed if not using a virtualenv
|
pip3 install --user qark # --user is only needed if not using a virtualenv
|
||||||
qark --apk path/to/my.apk
|
qark --apk path/to/my.apk
|
||||||
@ -634,7 +634,7 @@ StaCoAn - це **кросплатформений** інструмент, яки
|
|||||||
|
|
||||||
Концепція полягає в тому, що ви перетягуєте файл вашого мобільного додатку (файл .apk або .ipa) на додаток StaCoAn, і він створить для вас візуальний та портативний звіт. Ви можете налаштувати параметри та словники для отримання індивідуального досвіду.
|
Концепція полягає в тому, що ви перетягуєте файл вашого мобільного додатку (файл .apk або .ipa) на додаток StaCoAn, і він створить для вас візуальний та портативний звіт. Ви можете налаштувати параметри та словники для отримання індивідуального досвіду.
|
||||||
|
|
||||||
Завантажити [остання версія](https://github.com/vincentcox/StaCoAn/releases):
|
Завантажити [остання версію](https://github.com/vincentcox/StaCoAn/releases):
|
||||||
```
|
```
|
||||||
./stacoan
|
./stacoan
|
||||||
```
|
```
|
||||||
@ -650,7 +650,7 @@ androbugs.exe -f [APK file]
|
|||||||
|
|
||||||
**Androwarn** - це інструмент, основна мета якого полягає в виявленні та попередженні користувача про потенційно шкідливу поведінку, розроблену Android-додатком.
|
**Androwarn** - це інструмент, основна мета якого полягає в виявленні та попередженні користувача про потенційно шкідливу поведінку, розроблену Android-додатком.
|
||||||
|
|
||||||
Виявлення здійснюється за допомогою **статичного аналізу** байт-коду Dalvik додатку, представленого як **Smali**, з використанням бібліотеки [`androguard`](https://github.com/androguard/androguard).
|
Виявлення здійснюється за допомогою **статичного аналізу** байт-коду Dalvik додатка, представленого як **Smali**, з використанням бібліотеки [`androguard`](https://github.com/androguard/androguard).
|
||||||
|
|
||||||
Цей інструмент шукає **поширену поведінку "поганих" додатків**, таких як: ексфільтрація ідентифікаторів телекомунікацій, перехоплення аудіо/відео потоків, модифікація PIM-даних, виконання довільного коду...
|
Цей інструмент шукає **поширену поведінку "поганих" додатків**, таких як: ексфільтрація ідентифікаторів телекомунікацій, перехоплення аудіо/відео потоків, модифікація PIM-даних, виконання довільного коду...
|
||||||
```
|
```
|
||||||
@ -660,7 +660,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
|||||||
|
|
||||||
.png>)
|
.png>)
|
||||||
|
|
||||||
**MARA** - це **M**обільний **A**плікаційний **R**еверс-інжиніринг та **A**наліз Фреймворк. Це інструмент, який об'єднує загальновживані інструменти для реверс-інжинірингу та аналізу мобільних додатків, щоб допомогти в тестуванні мобільних додатків на предмет загроз безпеці мобільних додатків OWASP. Його мета - спростити це завдання та зробити його більш зручним для розробників мобільних додатків та фахівців з безпеки.
|
**MARA** - це **M**обільний **A**плікаційний **R**еверс-інжиніринг та **A**наліз Фреймворк. Це інструмент, який об'єднує загальновживані інструменти реверс-інжинірингу та аналізу мобільних додатків, щоб допомогти в тестуванні мобільних додатків на предмет загроз безпеці мобільних додатків OWASP. Його мета - спростити це завдання та зробити його більш дружнім для розробників мобільних додатків та фахівців з безпеки.
|
||||||
|
|
||||||
Він здатний:
|
Він здатний:
|
||||||
|
|
||||||
@ -681,7 +681,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
|||||||
|
|
||||||
### [ProGuard](<https://en.wikipedia.org/wiki/ProGuard_(software)>)
|
### [ProGuard](<https://en.wikipedia.org/wiki/ProGuard_(software)>)
|
||||||
|
|
||||||
З [Wikipedia](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **ProGuard** - це інструмент командного рядка з відкритим кодом, який зменшує, оптимізує та обфускує Java код. Він здатний оптимізувати байт-код, а також виявляти та видаляти невикористовувані інструкції. ProGuard - це безкоштовне програмне забезпечення, яке розповсюджується під ліцензією GNU General Public License, версія 2.
|
З [Wikipedia](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **ProGuard** - це інструмент командного рядка з відкритим кодом, який зменшує, оптимізує та обфускує Java код. Він здатний оптимізувати байт-код, а також виявляти та видаляти невикористовувані інструкції. ProGuard є безкоштовним програмним забезпеченням і розповсюджується під ліцензією GNU General Public License, версія 2.
|
||||||
|
|
||||||
ProGuard розповсюджується як частина Android SDK і запускається під час створення програми в режимі випуску.
|
ProGuard розповсюджується як частина Android SDK і запускається під час створення програми в режимі випуску.
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
Shizuku - це відкритий сервіс, який **створює привілейований Java процес за допомогою `app_process`** і надає вибрані **API системи Android через Binder**. Оскільки процес запускається з тими ж **UID можливостями `shell`, які використовує ADB**, будь-який додаток (або термінал), що підключається до експортованого інтерфейсу AIDL, може виконувати багато дій, які зазвичай вимагають **`WRITE_SECURE_SETTINGS`, `INSTALL_PACKAGES`, файлового вводу/виводу всередині `/data`,** тощо – **без рутування пристрою**.
|
Shizuku - це відкритий сервіс, який **створює привілейований Java процес за допомогою `app_process`** і надає вибрані **API системи Android через Binder**. Оскільки процес запускається з тими ж **UID можливостями `shell`, які використовує ADB**, будь-який додаток (або термінал), що підключається до експортованого інтерфейсу AIDL, може виконувати багато дій, які зазвичай вимагають **`WRITE_SECURE_SETTINGS`, `INSTALL_PACKAGES`, доступу до файлів у `/data`,** тощо – **без рутування пристрою**.
|
||||||
|
|
||||||
Типові випадки використання:
|
Типові випадки використання:
|
||||||
* Аудит безпеки з не рутованого пристрою
|
* Аудит безпеки з не рутованого пристрою
|
||||||
@ -16,7 +16,7 @@ Shizuku - це відкритий сервіс, який **створює при
|
|||||||
`moe.shizuku.privileged.api` можна запустити трьома різними способами – результуючий сервіс Binder поводиться однаково в усіх випадках.
|
`moe.shizuku.privileged.api` можна запустити трьома різними способами – результуючий сервіс Binder поводиться однаково в усіх випадках.
|
||||||
|
|
||||||
### 1.1 Безпровідний ADB (Android 11+)
|
### 1.1 Безпровідний ADB (Android 11+)
|
||||||
1. Увімкніть **Опції розробника ➜ Безпровідне налагодження** та спарте пристрій.
|
1. Увімкніть **Опції для розробників ➜ Безпровідне налагодження** та спарте пристрій.
|
||||||
2. У додатку Shizuku виберіть **“Запустити через безпровідне налагодження”** та скопіюйте код спарювання.
|
2. У додатку Shizuku виберіть **“Запустити через безпровідне налагодження”** та скопіюйте код спарювання.
|
||||||
3. Сервіс працює до наступного перезавантаження (сеанси безпровідного налагодження очищуються при завантаженні).
|
3. Сервіс працює до наступного перезавантаження (сеанси безпровідного налагодження очищуються при завантаженні).
|
||||||
|
|
||||||
@ -98,13 +98,13 @@ pm uninstall --user 0 com.miui.weather2
|
|||||||
|
|
||||||
---
|
---
|
||||||
## 4. Заходи безпеки / виявлення
|
## 4. Заходи безпеки / виявлення
|
||||||
1. Shizuku потребує **привілеїв налагодження ADB**, тому _Опції розробника → USB/Бездротове налагодження_ повинні бути **увімкнені**.
|
1. Shizuku потребує **привілеїв налагодження ADB**, тому _Параметри розробника → USB/Бездротове налагодження_ повинні бути **увімкнені**.
|
||||||
Організації можуть заблокувати це через MDM або за допомогою `settings put global development_settings_enabled 0`.
|
Організації можуть заблокувати це через MDM або за допомогою `settings put global development_settings_enabled 0`.
|
||||||
2. Сервіс реєструє себе під назвою `moe.shizuku.privileged.api`.
|
2. Сервіс реєструє себе під назвою `moe.shizuku.privileged.api`.
|
||||||
Просте `adb shell service list | grep shizuku` (або правило Endpoint Security) виявляє його присутність.
|
Простий `adb shell service list | grep shizuku` (або правило Endpoint Security) виявляє його присутність.
|
||||||
3. Можливості обмежені тим, що користувач `shell` вже може робити – це **не root**.
|
3. Можливості обмежені тим, що користувач `shell` вже може робити – це **не root**.
|
||||||
Чутливі API, які вимагають користувача `system` або `root`, все ще недоступні.
|
Чутливі API, які вимагають користувача `system` або `root`, все ще недоступні.
|
||||||
4. Сесії **не переживають перезавантаження**, якщо пристрій не є рутованим, а Shizuku не налаштовано як демон запуску.
|
4. Сесії **не переживають перезавантаження**, якщо пристрій не має root-доступу, а Shizuku не налаштовано як демон запуску.
|
||||||
|
|
||||||
---
|
---
|
||||||
## 5. Пом'якшення
|
## 5. Пом'якшення
|
||||||
|
|||||||
@ -6,12 +6,12 @@
|
|||||||
|
|
||||||
Застосунки, підписані з **правом `get_task_allow`**, дозволяють стороннім застосункам виконувати функцію **`task_for_pid()`** з ідентифікатором процесу початкового застосунку як аргумент, щоб отримати порт завдання над ним (мати можливість контролювати його та отримувати доступ до його пам'яті).
|
Застосунки, підписані з **правом `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
|
## Отримати дешифрований IPA
|
||||||
|
|
||||||
### Отримати його від Apple
|
### Отримати його від Apple
|
||||||
|
|
||||||
@ -19,15 +19,15 @@
|
|||||||
2. Встановіть і запустіть [Apple Configurator](https://apps.apple.com/au/app/apple-configurator/id1037126344?mt=12) на вашому macos
|
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 з'явиться в цій папці пізніше.
|
3. Відкрийте `Terminal` на вашому Mac і перейдіть до `/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps`. IPA з'явиться в цій папці пізніше.
|
||||||
4. Ви повинні побачити свій iOS пристрій. Двічі клацніть на ньому, а потім натисніть Додати + → Застосунки у верхньому меню.
|
4. Ви повинні побачити свій iOS пристрій. Двічі клацніть на ньому, а потім натисніть Додати + → Застосунки у верхньому меню.
|
||||||
5. Після натискання Додати, Configurator завантажить IPA з Apple і спробує надіслати його на ваш пристрій. Якщо ви слідували моїм рекомендаціям раніше і вже встановили IPA, з'явиться запит на повторну установку застосунку.
|
5. Після натискання Додати, Configurator завантажить IPA з Apple і спробує надіслати його на ваш пристрій. Якщо ви раніше виконали мою рекомендацію і вже встановили IPA, з'явиться запит на повторну установку застосунку.
|
||||||
6. IPA має бути завантажено в `/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps`, звідки ви можете його забрати.
|
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) для отримання більш детальної інформації про цей процес.
|
Перевірте [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed) для отримання більш детальної інформації про цей процес.
|
||||||
|
|
||||||
|
|
||||||
### Декодування застосунку
|
### Дешифрування застосунку
|
||||||
|
|
||||||
Щоб декодувати IPA, ми збираємося його встановити. Однак, якщо у вас старий джейлбрейкнутій iPhone, можливо, його версія не буде підтримуватися застосунком, оскільки зазвичай застосунки підтримують лише останні версії.
|
Щоб дешифрувати IPA, ми збираємося його встановити. Однак, якщо у вас старий джейлбрейкнутій iPhone, можливо, його версія не буде підтримуватися застосунком, оскільки зазвичай застосунки підтримують лише останні версії.
|
||||||
|
|
||||||
Отже, щоб його встановити, просто розпакуйте IPA:
|
Отже, щоб його встановити, просто розпакуйте IPA:
|
||||||
```bash
|
```bash
|
||||||
@ -49,9 +49,9 @@ ideviceinstaller -i no-min-version.ipa -w
|
|||||||
Після встановлення ви можете використовувати **Iridium tweak** з Cydia, щоб отримати розшифрований IPA.
|
Після встановлення ви можете використовувати **Iridium tweak** з Cydia, щоб отримати розшифрований IPA.
|
||||||
|
|
||||||
|
|
||||||
### Патчування прав та повторне підписання
|
### Патчинг прав та повторне підписання
|
||||||
|
|
||||||
Щоб повторно підписати додаток з правом `get-task-allow`, доступно кілька інструментів, таких як `app-signer`, `codesign` та `iResign`. `app-signer` має дуже зручний інтерфейс, який дозволяє дуже легко повторно підписати файл IPA, вказуючи IPA для повторного підписання, **додати `get-task-allow`** та сертифікат і профіль провізії для використання.
|
Щоб повторно підписати додаток з правом `get-task-allow`, доступно кілька інструментів, таких як `app-signer`, `codesign` та `iResign`. `app-signer` має дуже зручний інтерфейс, який дозволяє дуже легко повторно підписати файл IPA, вказуючи IPA для повторного підписання, **додати `get-task-allow`** та сертифікат і профіль провізії, які потрібно використовувати.
|
||||||
|
|
||||||
Щодо сертифіката та профілів підписання, Apple пропонує **безкоштовні профілі підписання для розробників** для всіх облікових записів через Xcode. Просто створіть додаток і налаштуйте один. Потім налаштуйте **iPhone, щоб довіряти додаткам розробника**, перейшовши в `Settings` → `Privacy & Security`, і натисніть на `Developer Mode`.
|
Щодо сертифіката та профілів підписання, Apple пропонує **безкоштовні профілі підписання для розробників** для всіх облікових записів через Xcode. Просто створіть додаток і налаштуйте один. Потім налаштуйте **iPhone, щоб довіряти додаткам розробника**, перейшовши в `Settings` → `Privacy & Security`, і натисніть на `Developer Mode`.
|
||||||
|
|
||||||
@ -78,7 +78,7 @@ ideviceinstaller -i resigned.ipa -w
|
|||||||
| Інструмент | Вимоги | Переваги | Обмеження |
|
| Інструмент | Вимоги | Переваги | Обмеження |
|
||||||
|------------|--------|----------|-----------|
|
|------------|--------|----------|-----------|
|
||||||
| **AltStore 2 / SideStore** | macOS/Windows/Linux компаньйон, який повторно підписує IPA кожні 7 днів з безкоштовним профілем розробника | Автоматичне перезавантаження через Wi-Fi, працює до iOS 17 | Потрібен комп'ютер в тій же мережі, обмеження на 3 додатки, накладене Apple |
|
| **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+ (помилка виправлена) |
|
| **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
|
# Or plain Frida
|
||||||
frida -U -f com.example.target -l my_script.js --no-pause
|
frida -U -f com.example.target -l my_script.js --no-pause
|
||||||
```
|
```
|
||||||
Останні випуски Frida (>=16) автоматично обробляють автентифікацію вказівників та інші пом'якшення iOS 17, тому більшість існуючих скриптів працюють з коробки.
|
Останні версії Frida (>=16) автоматично обробляють автентифікацію вказівників та інші пом'якшення iOS 17, тому більшість існуючих скриптів працюють без додаткових налаштувань.
|
||||||
|
|
||||||
### Автоматизований динамічний аналіз з MobSF (без джейлбрейка)
|
### Автоматизований динамічний аналіз з 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【】. Найшвидший спосіб - запустити MobSF у Docker, а потім підключити ваш iPhone через USB:
|
||||||
```bash
|
```bash
|
||||||
docker pull opensecurity/mobile-security-framework-mobsf:latest
|
docker pull opensecurity/mobile-security-framework-mobsf:latest
|
||||||
docker run -p 8000:8000 --privileged \
|
docker run -p 8000:8000 --privileged \
|
||||||
@ -109,7 +109,7 @@ MobSF автоматично розгорне бінарний файл, уві
|
|||||||
### iOS 17 та застереження режиму блокування
|
### iOS 17 та застереження режиму блокування
|
||||||
|
|
||||||
* **Режим блокування** (Налаштування → Конфіденційність та безпека) блокує динамічний зв'язувач від завантаження непідписаних або зовнішньо підписаних динамічних бібліотек. При тестуванні пристроїв, на яких може бути увімкнено цей режим, переконайтеся, що він **вимкнений**, інакше ваші сесії Frida/objection завершаться негайно.
|
* **Режим блокування** (Налаштування → Конфіденційність та безпека) блокує динамічний зв'язувач від завантаження непідписаних або зовнішньо підписаних динамічних бібліотек. При тестуванні пристроїв, на яких може бути увімкнено цей режим, переконайтеся, що він **вимкнений**, інакше ваші сесії Frida/objection завершаться негайно.
|
||||||
* Аутентифікація вказівників (PAC) застосовується на всіх пристроях A12+. Frida ≥16 прозоро обробляє зняття PAC — просто підтримуйте актуальними як *frida-server*, так і Python/CLI інструментальний набір, коли виходить нова основна версія iOS.
|
* Аутентифікація вказівників (PAC) застосовується на всіх пристроях A12+. Frida ≥16 прозоро обробляє видалення PAC — просто підтримуйте актуальними як *frida-server*, так і Python/CLI інструменти, коли виходить нова основна версія iOS.
|
||||||
|
|
||||||
## Посилання
|
## Посилання
|
||||||
|
|
||||||
|
|||||||
@ -23,7 +23,7 @@ nmap -n -sV -Pn --script "*telnet* and safe" -p 23 <IP>
|
|||||||
```
|
```
|
||||||
Скрипт `telnet-ntlm-info.nse` отримає інформацію NTLM (версії Windows).
|
Скрипт `telnet-ntlm-info.nse` отримає інформацію NTLM (версії Windows).
|
||||||
|
|
||||||
З [telnet RFC](https://datatracker.ietf.org/doc/html/rfc854): У протоколі TELNET є різні "**options**", які будуть санкціоновані і можуть бути використані зі структурою "**DO, DON'T, WILL, WON'T**", щоб дозволити користувачу та серверу погодитися використовувати більш складний (або, можливо, просто інший) набір конвенцій для їхнього з'єднання TELNET. Такі опції можуть включати зміну набору символів, режиму еха тощо.
|
З [telnet RFC](https://datatracker.ietf.org/doc/html/rfc854): У протоколі TELNET є різні "**options**", які будуть санкціоновані і можуть використовуватися зі структурою "**DO, DON'T, WILL, WON'T**", щоб дозволити користувачу та серверу погодитися використовувати більш складний (або, можливо, просто інший) набір конвенцій для їхнього з'єднання TELNET. Такі опції можуть включати зміну набору символів, режиму еха тощо.
|
||||||
|
|
||||||
**Я знаю, що можливо перерахувати ці опції, але не знаю як, тому дайте знати, якщо знаєте як.**
|
**Я знаю, що можливо перерахувати ці опції, але не знаю як, тому дайте знати, якщо знаєте як.**
|
||||||
|
|
||||||
@ -73,7 +73,7 @@ Command: msfconsole -q -x 'use auxiliary/scanner/telnet/telnet_version; set RHOS
|
|||||||
* **CVE-2023-40478 – NETGEAR RAX30**: Переповнення буфера на основі стеку в команді Telnet CLI `passwd` дозволяє сусідньому зловмиснику обійти автентифікацію та виконати довільний код як root.
|
* **CVE-2023-40478 – NETGEAR RAX30**: Переповнення буфера на основі стеку в команді Telnet CLI `passwd` дозволяє сусідньому зловмиснику обійти автентифікацію та виконати довільний код як root.
|
||||||
* **CVE-2022-39028 – GNU inetutils telnetd**: Двобайтовий рядок (`0xff 0xf7` / `0xff 0xf8`) викликає розіменування NULL-вказівника, що може призвести до збою `telnetd`, в результаті чого виникає постійний DoS після кількох збоїв.
|
* **CVE-2022-39028 – GNU inetutils telnetd**: Двобайтовий рядок (`0xff 0xf7` / `0xff 0xf8`) викликає розіменування NULL-вказівника, що може призвести до збою `telnetd`, в результаті чого виникає постійний DoS після кількох збоїв.
|
||||||
|
|
||||||
Тримайте ці CVE на увазі під час триажу вразливостей — якщо ціль працює на непатченої прошивці або застарілому демоні Telnet inetutils, ви можете мати простий шлях до виконання коду або деструктивного DoS.
|
Тримайте ці CVE на увазі під час триажу вразливостей — якщо ціль працює на непатченої прошивці або застарілому демоні inetutils Telnet, ви можете мати простий шлях до виконання коду або деструктивного DoS.
|
||||||
|
|
||||||
### Перехоплення облікових даних та атака "людина посередині"
|
### Перехоплення облікових даних та атака "людина посередині"
|
||||||
|
|
||||||
@ -87,7 +87,7 @@ tcp.port == 23 && (telnet.data || telnet.option)
|
|||||||
```
|
```
|
||||||
Для активного MITM поєднайте ARP спуфінг (наприклад, `arpspoof`/`ettercap`) з тими ж фільтрами для перехоплення паролів у комутованих мережах.
|
Для активного MITM поєднайте ARP спуфінг (наприклад, `arpspoof`/`ettercap`) з тими ж фільтрами для перехоплення паролів у комутованих мережах.
|
||||||
|
|
||||||
### Автоматизований брутфорс / Спрей паролів
|
### Автоматизований брутфорс / Спрайінг паролів
|
||||||
```bash
|
```bash
|
||||||
# Hydra (stop at first valid login)
|
# Hydra (stop at first valid login)
|
||||||
hydra -L users.txt -P rockyou.txt -t 4 -f telnet://<IP>
|
hydra -L users.txt -P rockyou.txt -t 4 -f telnet://<IP>
|
||||||
@ -114,9 +114,9 @@ Metasploit має кілька корисних модулів:
|
|||||||
### Укріплення та виявлення (куток синьої команди)
|
### Укріплення та виявлення (куток синьої команди)
|
||||||
|
|
||||||
1. Вибирайте SSH і повністю вимкніть службу Telnet.
|
1. Вибирайте SSH і повністю вимкніть службу Telnet.
|
||||||
2. Якщо Telnet необхідний, прив'яжіть його лише до VLAN для управління, забезпечте ACL і обгорніть демон за допомогою TCP wrappers (`/etc/hosts.allow`).
|
2. Якщо Telnet необхідний, прив'яжіть його лише до VLAN для управління, забезпечте ACL і обгорніть демон за допомогою TCP обгорток (`/etc/hosts.allow`).
|
||||||
3. Замініть застарілі реалізації `telnetd` на `ssl-telnet` або `telnetd-ssl`, щоб додати шифрування транспорту, але **це лише захищає дані в русі—вгадування паролів залишається тривіальним**.
|
3. Замініть застарілі реалізації `telnetd` на `ssl-telnet` або `telnetd-ssl`, щоб додати шифрування транспорту, але **це лише захищає дані в русі—вгадування паролів залишається тривіальним**.
|
||||||
4. Моніторте вихідний трафік на порт 23; компрометації часто запускають зворотні оболонки через Telnet, щоб обійти суворі HTTP фільтри виходу.
|
4. Моніторте вихідний трафік на порт 23; компрометації часто запускають зворотні оболонки через Telnet, щоб обійти суворі фільтри виходу HTTP.
|
||||||
|
|
||||||
## Посилання
|
## Посилання
|
||||||
|
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
## Огляд
|
## Огляд
|
||||||
|
|
||||||
LESS є популярним CSS препроцесором, який додає змінні, міксини, функції та потужну директиву `@import`. Під час компіляції движок LESS **отримує ресурси, на які посилаються в директивах `@import`** і вбудовує ("inline") їх вміст у результуючий CSS, коли використовується опція `(inline)`.
|
LESS - це популярний CSS препроцесор, який додає змінні, міксини, функції та потужну директиву `@import`. Під час компіляції движок LESS **отримує ресурси, на які посилаються в директивах `@import`** і вбудовує ("inline") їх вміст у результуючий CSS, коли використовується опція `(inline)`.
|
||||||
|
|
||||||
Коли додаток конкатенує **вхідні дані, контрольовані користувачем**, у рядок, який пізніше обробляється компілятором LESS, зловмисник може **впровадити довільний код LESS**. Зловживаючи `@import (inline)`, зловмисник може змусити сервер отримати:
|
Коли додаток конкатенує **вхідні дані, контрольовані користувачем**, у рядок, який пізніше обробляється компілятором LESS, зловмисник може **впровадити довільний код LESS**. Зловживаючи `@import (inline)`, зловмисник може змусити сервер отримати:
|
||||||
|
|
||||||
@ -16,7 +16,7 @@ LESS є популярним CSS препроцесором, який додає
|
|||||||
## Експлуатація
|
## Експлуатація
|
||||||
|
|
||||||
1. Визначте параметр, який безпосередньо вбудований у рядок стилю, оброблений движком LESS (наприклад, `?lm=` в SugarCRM).
|
1. Визначте параметр, який безпосередньо вбудований у рядок стилю, оброблений движком LESS (наприклад, `?lm=` в SugarCRM).
|
||||||
2. Закрийте поточну директиву та впровадьте нові директиви. Найбільш поширені примітиви:
|
2. Закрийте поточну інструкцію та впровадьте нові директиви. Найбільш поширені примітиви:
|
||||||
* `;` – завершує попереднє оголошення.
|
* `;` – завершує попереднє оголошення.
|
||||||
* `}` – закриває попередній блок (якщо потрібно).
|
* `}` – закриває попередній блок (якщо потрібно).
|
||||||
3. Використовуйте `@import (inline) '<URL>';` для читання довільних ресурсів.
|
3. Використовуйте `@import (inline) '<URL>';` для читання довільних ресурсів.
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
В Інтернеті є кілька блогів, які **підкреслюють небезпеки залишення принтерів, налаштованих з LDAP з за замовчуванням/слабкими** обліковими даними для входу. \
|
Є кілька блогів в Інтернеті, які **підкреслюють небезпеки залишення принтерів, налаштованих з LDAP з за замовчуванням/слабкими** обліковими даними для входу. \
|
||||||
Це пов'язано з тим, що зловмисник може **змусити принтер аутентифікуватися проти підробленого LDAP-сервера** (зазвичай `nc -vv -l -p 389` або `slapd -d 2` достатньо) і захопити **облікові дані принтера у відкритому вигляді**.
|
Це пов'язано з тим, що зловмисник може **змусити принтер аутентифікуватися проти підробленого LDAP-сервера** (зазвичай `nc -vv -l -p 389` або `slapd -d 2` достатньо) і захопити **облікові дані принтера у відкритому вигляді**.
|
||||||
|
|
||||||
Крім того, кілька принтерів міститимуть **журнали з іменами користувачів** або навіть можуть **завантажити всі імена користувачів** з контролера домену.
|
Крім того, кілька принтерів міститимуть **журнали з іменами користувачів** або навіть можуть **завантажити всі імена користувачів** з контролера домену.
|
||||||
@ -41,18 +41,18 @@ sudo dpkg-reconfigure slapd # set any base-DN – it will not be validated
|
|||||||
# run slapd in foreground / debug 2
|
# run slapd in foreground / debug 2
|
||||||
slapd -d 2 -h "ldap:///" # only LDAP, no LDAPS
|
slapd -d 2 -h "ldap:///" # only LDAP, no LDAPS
|
||||||
```
|
```
|
||||||
Коли принтер виконує свій запит, ви побачите облікові дані у відкритому тексті в виході налагодження.
|
Коли принтер виконує свій запит, ви побачите облікові дані у відкритому тексті в налагоджувальному виводі.
|
||||||
|
|
||||||
> 💡 Ви також можете використовувати `impacket/examples/ldapd.py` (Python rogue LDAP) або `Responder -w -r -f` для збору NTLMv2 хешів через LDAP/SMB.
|
> 💡 Ви також можете використовувати `impacket/examples/ldapd.py` (Python rogue LDAP) або `Responder -w -r -f` для збору NTLMv2 хешів через LDAP/SMB.
|
||||||
|
|
||||||
---
|
---
|
||||||
## Останні вразливості Pass-Back (2024-2025)
|
## Останні вразливості Pass-Back (2024-2025)
|
||||||
|
|
||||||
Pass-back *не* є теоретичною проблемою – постачальники продовжують публікувати повідомлення у 2024/2025, які точно описують цей клас атак.
|
Pass-back *не* є теоретичною проблемою – постачальники продовжують публікувати рекомендації в 2024/2025, які точно описують цей клас атак.
|
||||||
|
|
||||||
### Xerox VersaLink – CVE-2024-12510 & CVE-2024-12511
|
### Xerox VersaLink – CVE-2024-12510 & CVE-2024-12511
|
||||||
|
|
||||||
Прошивка ≤ 57.69.91 принтерів Xerox VersaLink C70xx MFP дозволяла автентифікованому адміністратору (або будь-кому, коли залишаються стандартні облікові дані):
|
ПЗ ≤ 57.69.91 принтерів Xerox VersaLink C70xx MFP дозволяло автентифікованому адміністратору (або будь-кому, коли залишаються стандартні облікові дані):
|
||||||
|
|
||||||
* **CVE-2024-12510 – LDAP pass-back**: змінити адресу LDAP сервера та ініціювати запит, що призводить до витоку налаштованих облікових даних Windows на хост, контрольований зловмисником.
|
* **CVE-2024-12510 – LDAP pass-back**: змінити адресу LDAP сервера та ініціювати запит, що призводить до витоку налаштованих облікових даних Windows на хост, контрольований зловмисником.
|
||||||
* **CVE-2024-12511 – SMB/FTP pass-back**: ідентична проблема через *scan-to-folder* призначення, витікаючи NetNTLMv2 або FTP облікові дані у відкритому тексті.
|
* **CVE-2024-12511 – SMB/FTP pass-back**: ідентична проблема через *scan-to-folder* призначення, витікаючи NetNTLMv2 або FTP облікові дані у відкритому тексті.
|
||||||
@ -65,7 +65,7 @@ or rogue SMB server (`impacket-smbserver`) достатньо для збору
|
|||||||
|
|
||||||
### Canon imageRUNNER / imageCLASS – Повідомлення 20 травня 2025
|
### Canon imageRUNNER / imageCLASS – Повідомлення 20 травня 2025
|
||||||
|
|
||||||
Canon підтвердила слабкість **SMTP/LDAP pass-back** у десятках продуктів Laser & MFP. Зловмисник з адміністративним доступом може змінити конфігурацію сервера та отримати збережені облікові дані для LDAP **або** SMTP (багато організацій використовують привілейований обліковий запис для дозволу сканування на електронну пошту).
|
Canon підтвердила вразливість **SMTP/LDAP pass-back** у десятках продуктів Laser & MFP. Зловмисник з адміністративним доступом може змінити конфігурацію сервера та отримати збережені облікові дані для LDAP **або** SMTP (багато організацій використовують привілейований обліковий запис для дозволу сканування на електронну пошту).
|
||||||
|
|
||||||
Рекомендації постачальника чітко вказують:
|
Рекомендації постачальника чітко вказують:
|
||||||
|
|
||||||
@ -74,7 +74,7 @@ Canon підтвердила слабкість **SMTP/LDAP pass-back** у де
|
|||||||
3. Уникати привілейованих облікових записів AD для інтеграції принтерів.
|
3. Уникати привілейованих облікових записів AD для інтеграції принтерів.
|
||||||
|
|
||||||
---
|
---
|
||||||
## Автоматизовані інструменти для перерахунку / експлуатації
|
## Інструменти автоматизованої енумерації / експлуатації
|
||||||
|
|
||||||
| Інструмент | Призначення | Приклад |
|
| Інструмент | Призначення | Приклад |
|
||||||
|------------|-------------|---------|
|
|------------|-------------|---------|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user