mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/mobile-pentesting/android-app-pentesting/README.md', 's
This commit is contained in:
parent
9179ebcf66
commit
48e817292d
@ -326,6 +326,7 @@
|
|||||||
- [Android APK Checklist](mobile-pentesting/android-checklist.md)
|
- [Android APK Checklist](mobile-pentesting/android-checklist.md)
|
||||||
- [Android Applications Pentesting](mobile-pentesting/android-app-pentesting/README.md)
|
- [Android Applications Pentesting](mobile-pentesting/android-app-pentesting/README.md)
|
||||||
- [Accessibility Services Abuse](mobile-pentesting/android-app-pentesting/accessibility-services-abuse.md)
|
- [Accessibility Services Abuse](mobile-pentesting/android-app-pentesting/accessibility-services-abuse.md)
|
||||||
|
- [Android Anti Instrumentation And Ssl Pinning Bypass](mobile-pentesting/android-app-pentesting/android-anti-instrumentation-and-ssl-pinning-bypass.md)
|
||||||
- [Android Applications Basics](mobile-pentesting/android-app-pentesting/android-applications-basics.md)
|
- [Android Applications Basics](mobile-pentesting/android-app-pentesting/android-applications-basics.md)
|
||||||
- [Android Task Hijacking](mobile-pentesting/android-app-pentesting/android-task-hijacking.md)
|
- [Android Task Hijacking](mobile-pentesting/android-app-pentesting/android-task-hijacking.md)
|
||||||
- [ADB Commands](mobile-pentesting/android-app-pentesting/adb-commands.md)
|
- [ADB Commands](mobile-pentesting/android-app-pentesting/adb-commands.md)
|
||||||
|
|||||||
@ -19,13 +19,13 @@ android-applications-basics.md
|
|||||||
|
|
||||||
## Smali
|
## Smali
|
||||||
|
|
||||||
Іноді цікаво **модифікувати код додатку**, щоб отримати доступ до **прихованої інформації** (можливо, добре обфусцировані паролі або прапори). Тоді може бути цікаво декомпілювати apk, модифікувати код і знову скомпілювати його.\
|
Іноді цікаво **модифікувати код додатку**, щоб отримати доступ до **прихованої інформації** (можливо, добре обфусцировані паролі або прапори). Тоді може бути цікаво декомпілювати apk, змінити код і знову скомпілювати його.\
|
||||||
[**У цьому посібнику** ви можете **дізнатися, як декомпілювати APK, модифікувати код Smali та знову скомпілювати APK** з новою функціональністю](smali-changes.md). Це може бути дуже корисно як **альтернатива для кількох тестів під час динамічного аналізу**, які будуть представлені. Тому **завжди тримайте в умі цю можливість**.
|
[**У цьому посібнику** ви можете **дізнатися, як декомпілювати APK, модифікувати код Smali та знову скомпілювати APK** з новою функціональністю](smali-changes.md). Це може бути дуже корисно як **альтернатива для кількох тестів під час динамічного аналізу**, які будуть представлені. Тому **завжди майте на увазі цю можливість**.
|
||||||
|
|
||||||
## Інші цікаві трюки
|
## Інші цікаві трюки
|
||||||
|
|
||||||
- [Спуфінг вашого місцезнаходження в Play Store](spoofing-your-location-in-play-store.md)
|
- [Спуфінг вашого місцезнаходження в Play Store](spoofing-your-location-in-play-store.md)
|
||||||
- [Shizuku Privileged API (ADB-основний доступ без root)](shizuku-privileged-api.md)
|
- [Shizuku Privileged API (привілейований доступ без root на основі ADB)](shizuku-privileged-api.md)
|
||||||
- [Експлуатація ненадійних механізмів оновлення в додатку](insecure-in-app-update-rce.md)
|
- [Експлуатація ненадійних механізмів оновлення в додатку](insecure-in-app-update-rce.md)
|
||||||
- [Зловживання службами доступності (Android RAT)](accessibility-services-abuse.md)
|
- [Зловживання службами доступності (Android RAT)](accessibility-services-abuse.md)
|
||||||
- **Завантажити APK**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/), [https://github.com/kiber-io/apkd](https://github.com/kiber-io/apkd)
|
- **Завантажити APK**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/), [https://github.com/kiber-io/apkd](https://github.com/kiber-io/apkd)
|
||||||
@ -79,17 +79,17 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
|
|||||||
|
|
||||||
- **Дебаговані програми**: Програми, які встановлені як дебаговані (`debuggable="true"`) у файлі _Manifest.xml_, становлять ризик, оскільки дозволяють з'єднання, які можуть призвести до експлуатації. Для подальшого розуміння того, як експлуатувати дебаговані програми, зверніться до посібника з пошуку та експлуатації дебагованих програм на пристрої.
|
- **Дебаговані програми**: Програми, які встановлені як дебаговані (`debuggable="true"`) у файлі _Manifest.xml_, становлять ризик, оскільки дозволяють з'єднання, які можуть призвести до експлуатації. Для подальшого розуміння того, як експлуатувати дебаговані програми, зверніться до посібника з пошуку та експлуатації дебагованих програм на пристрої.
|
||||||
- **Налаштування резервного копіювання**: Атрибут `android:allowBackup="false"` повинен бути явно встановлений для програм, що працюють з чутливою інформацією, щоб запобігти несанкціонованим резервним копіям даних через adb, особливо коли увімкнено налагодження USB.
|
- **Налаштування резервного копіювання**: Атрибут `android:allowBackup="false"` повинен бути явно встановлений для програм, що працюють з чутливою інформацією, щоб запобігти несанкціонованим резервним копіям даних через adb, особливо коли увімкнено налагодження USB.
|
||||||
- **Безпека мережі**: Налаштування безпеки мережі (`android:networkSecurityConfig="@xml/network_security_config"`) у _res/xml/_ можуть вказувати деталі безпеки, такі як пін-коди сертифікатів та налаштування HTTP-трафіку. Прикладом є дозволення HTTP-трафіку для певних доменів.
|
- **Безпека мережі**: Налаштування безпеки мережі (`android:networkSecurityConfig="@xml/network_security_config"`) у _res/xml/_ можуть вказувати деталі безпеки, такі як пін-коди сертифікатів та налаштування HTTP-трафіку. Наприклад, дозволяючи HTTP-трафік для певних доменів.
|
||||||
- **Експортовані активності та сервіси**: Виявлення експортованих активностей та сервісів у маніфесті може підкреслити компоненти, які можуть бути зловживані. Подальший аналіз під час динамічного тестування може виявити, як експлуатувати ці компоненти.
|
- **Експортовані активності та сервіси**: Виявлення експортованих активностей та сервісів у маніфесті може підкреслити компоненти, які можуть бути зловживані. Подальший аналіз під час динамічного тестування може виявити, як експлуатувати ці компоненти.
|
||||||
- **Постачальники контенту та FileProviders**: Відкриті постачальники контенту можуть дозволити несанкціонований доступ або модифікацію даних. Конфігурацію FileProviders також слід ретельно перевірити.
|
- **Постачальники контенту та FileProviders**: Відкриті постачальники контенту можуть дозволити несанкціонований доступ або модифікацію даних. Конфігурацію FileProviders також слід ретельно перевірити.
|
||||||
- **Отримувачі трансляцій та 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** - це атака, коли **зловмисна** **програма** запускається і **розташовується поверх програми жертви**. Як тільки вона видимо закриває програму жертви, її інтерфейс користувача спроектований так, щоб обманути користувача взаємодіяти з нею, в той час як вона передає взаємодію до програми жертви.\
|
||||||
Фактично, це **осліплює користувача, не даючи йому знати, що він насправді виконує дії в програмі жертви**.
|
Фактично, це **осліплює користувача, не даючи йому знати, що він насправді виконує дії в програмі жертви**.
|
||||||
|
|
||||||
Знайдіть більше інформації в:
|
Знайдіть більше інформації в:
|
||||||
@ -100,7 +100,7 @@ tapjacking.md
|
|||||||
|
|
||||||
### Викрадення завдань
|
### Викрадення завдань
|
||||||
|
|
||||||
**Активність** з **`launchMode`**, встановленим на **`singleTask`** без визначеного `taskAffinity`, вразлива до викрадення завдань. Це означає, що **програму** можна встановити, і якщо її запустити перед реальною програмою, вона може **викрасти завдання реальної програми** (так що користувач буде взаємодіяти з **зловмисною програмою, вважаючи, що використовує реальну**).
|
**Активність** з **`launchMode`**, встановленим на **`singleTask` без визначеного `taskAffinity`**, вразлива до викрадення завдань. Це означає, що **програму** можна встановити, і якщо її запустити перед реальною програмою, вона може **викрасти завдання реальної програми** (так що користувач буде взаємодіяти з **зловмисною програмою, вважаючи, що використовує реальну**).
|
||||||
|
|
||||||
Більше інформації в:
|
Більше інформації в:
|
||||||
|
|
||||||
@ -112,12 +112,12 @@ android-task-hijacking.md
|
|||||||
|
|
||||||
**Внутрішнє зберігання**
|
**Внутрішнє зберігання**
|
||||||
|
|
||||||
В Android файли, **збережені** у **внутрішньому** зберіганні, **призначені** для **доступу** виключно програмою, яка їх **створила**. Ця міра безпеки **забезпечується** операційною системою Android і зазвичай є адекватною для потреб безпеки більшості програм. Однак розробники іноді використовують режими, такі як `MODE_WORLD_READABLE` і `MODE_WORLD_WRITABLE`, щоб **дозволити** файлам **ділитися** між різними програмами. Проте ці режими **не обмежують доступ** до цих файлів з інших програм, включаючи потенційно зловмисні.
|
У Android файли, **збережені** у **внутрішньому** зберіганні, **призначені** для **доступу** виключно програмою, яка їх **створила**. Ця міра безпеки **забезпечується** операційною системою Android і зазвичай є адекватною для потреб безпеки більшості програм. Однак розробники іноді використовують режими, такі як `MODE_WORLD_READABLE` і `MODE_WORLD_WRITABLE`, щоб **дозволити** файлам **ділитися** між різними програмами. Проте ці режими **не обмежують доступ** до цих файлів з інших програм, включаючи потенційно зловмисні.
|
||||||
|
|
||||||
1. **Статичний аналіз:**
|
1. **Статичний аналіз:**
|
||||||
- **Переконайтеся**, що використання `MODE_WORLD_READABLE` і `MODE_WORLD_WRITABLE` **ретельно перевіряється**. Ці режими **можуть потенційно відкрити** файли для **небажаного або несанкціонованого доступу**.
|
- **Переконайтеся**, що використання `MODE_WORLD_READABLE` і `MODE_WORLD_WRITABLE` **ретельно перевіряється**. Ці режими **можуть потенційно відкрити** файли для **небажаного або несанкціонованого доступу**.
|
||||||
2. **Динамічний аналіз:**
|
2. **Динамічний аналіз:**
|
||||||
- **Перевірте** **дозволи**, встановлені на файли, створені програмою. Зокрема, **перевірте**, чи є файли **встановленими на читання або запис для всіх**. Це може становити значний ризик для безпеки, оскільки це дозволить **будь-якій програмі**, встановленій на пристрої, незалежно від її походження чи намірів, **читати або змінювати** ці файли.
|
- **Перевірте** **дозволи**, встановлені на файлах, створених програмою. Зокрема, **перевірте**, чи є файли, **встановлені на читання або запис для всіх**. Це може становити значний ризик для безпеки, оскільки це дозволить **будь-якій програмі**, встановленій на пристрої, незалежно від її походження чи намірів, **читати або змінювати** ці файли.
|
||||||
|
|
||||||
**Зовнішнє зберігання**
|
**Зовнішнє зберігання**
|
||||||
|
|
||||||
@ -129,7 +129,7 @@ android-task-hijacking.md
|
|||||||
- З огляду на легкість доступу, рекомендується **не зберігати чутливу інформацію** на зовнішньому зберіганні.
|
- З огляду на легкість доступу, рекомендується **не зберігати чутливу інформацію** на зовнішньому зберіганні.
|
||||||
- Зовнішнє зберігання може бути видалено або доступно будь-якою програмою, що робить його менш безпечним.
|
- Зовнішнє зберігання може бути видалено або доступно будь-якою програмою, що робить його менш безпечним.
|
||||||
3. **Обробка даних з зовнішнього зберігання**:
|
3. **Обробка даних з зовнішнього зберігання**:
|
||||||
- Завжди **виконуйте валідацію введення** на даних, отриманих з зовнішнього зберігання. Це важливо, оскільки дані походять з ненадійного джерела.
|
- Завжди **виконуйте валідацію введення** даних, отриманих з зовнішнього зберігання. Це важливо, оскільки дані походять з ненадійного джерела.
|
||||||
- Зберігання виконуваних файлів або класів на зовнішньому зберіганні для динамічного завантаження категорично не рекомендується.
|
- Зберігання виконуваних файлів або класів на зовнішньому зберіганні для динамічного завантаження категорично не рекомендується.
|
||||||
- Якщо ваша програма повинна отримувати виконувані файли з зовнішнього зберігання, переконайтеся, що ці файли **підписані та криптографічно перевірені** перед їх динамічним завантаженням. Цей крок є важливим для підтримки цілісності безпеки вашої програми.
|
- Якщо ваша програма повинна отримувати виконувані файли з зовнішнього зберігання, переконайтеся, що ці файли **підписані та криптографічно перевірені** перед їх динамічним завантаженням. Цей крок є важливим для підтримки цілісності безпеки вашої програми.
|
||||||
|
|
||||||
@ -152,13 +152,13 @@ android-task-hijacking.md
|
|||||||
SSLSocketFactory sf = new cc(trustStore);
|
SSLSocketFactory sf = new cc(trustStore);
|
||||||
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
||||||
```
|
```
|
||||||
Добрий спосіб протестувати це - спробувати захопити трафік, використовуючи проксі, як Burp, без авторизації CA Burp на пристрої. Також ви можете згенерувати з Burp сертифікат для іншого імені хоста та використовувати його.
|
Добрий спосіб протестувати це - спробувати захопити трафік, використовуючи проксі, як Burp, без авторизації CA Burp на пристрої. Також ви можете згенерувати з Burp сертифікат для іншого імені хоста і використовувати його.
|
||||||
|
|
||||||
### Ламана криптографія
|
### Ламана криптографія
|
||||||
|
|
||||||
**Слабкі процеси управління ключами**
|
**Слабкі процеси управління ключами**
|
||||||
|
|
||||||
Деякі розробники зберігають чутливі дані у локальному сховищі та шифрують їх ключем, закодованим у коді. Це не слід робити, оскільки деяке реверсування може дозволити зловмисникам витягти конфіденційну інформацію.
|
Деякі розробники зберігають чутливі дані у локальному сховищі та шифрують їх за допомогою ключа, закодованого в коді або передбачуваного. Це не слід робити, оскільки деяке реверсування може дозволити зловмисникам витягти конфіденційну інформацію.
|
||||||
|
|
||||||
**Використання ненадійних та/або застарілих алгоритмів**
|
**Використання ненадійних та/або застарілих алгоритмів**
|
||||||
|
|
||||||
@ -167,9 +167,9 @@ sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
|||||||
### Інші перевірки
|
### Інші перевірки
|
||||||
|
|
||||||
- Рекомендується **обфускувати APK**, щоб ускладнити реверс-інженерні роботи для зловмисників.
|
- Рекомендується **обфускувати APK**, щоб ускладнити реверс-інженерні роботи для зловмисників.
|
||||||
- Якщо додаток чутливий (як банківські додатки), він повинен виконувати **власні перевірки, щоб дізнатися, чи пристрій зrootований**, і діяти відповідно.
|
- Якщо додаток є чутливим (як банківські додатки), він повинен виконувати **власні перевірки, щоб дізнатися, чи пристрій зrootований**, і діяти відповідно.
|
||||||
- Якщо додаток чутливий (як банківські додатки), він повинен перевіряти, чи використовується **емулятор**.
|
- Якщо додаток є чутливим (як банківські додатки), він повинен перевіряти, чи використовується **емулятор**.
|
||||||
- Якщо додаток чутливий (як банківські додатки), він повинен **перевіряти свою цілісність перед виконанням**, щоб перевірити, чи був він змінений.
|
- Якщо додаток є чутливим (як банківські додатки), він повинен **перевіряти свою цілісність перед виконанням**, щоб перевірити, чи був він змінений.
|
||||||
- Використовуйте [**APKiD**](https://github.com/rednaga/APKiD), щоб перевірити, який компілятор/упаковщик/обфускатор був використаний для створення APK
|
- Використовуйте [**APKiD**](https://github.com/rednaga/APKiD), щоб перевірити, який компілятор/упаковщик/обфускатор був використаний для створення APK
|
||||||
|
|
||||||
### React Native Application
|
### React Native Application
|
||||||
@ -190,17 +190,17 @@ react-native-application.md
|
|||||||
|
|
||||||
### Superpacked Applications
|
### Superpacked Applications
|
||||||
|
|
||||||
Згідно з цим [**блогом**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) superpacked - це алгоритм Meta, який стискає вміст програми в один файл. Блог говорить про можливість створення програми, яка розпаковує такі програми... і швидший спосіб, який передбачає **виконання програми та збір розпакованих файлів з файлової системи.**
|
Згідно з цим [**блогом**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/), superpacked - це алгоритм Meta, який стискає вміст програми в один файл. Блог говорить про можливість створення програми, яка розпаковує такі програми... і швидший спосіб, який передбачає **виконання програми та збір розпакованих файлів з файлової системи.**
|
||||||
|
|
||||||
### Автоматизований статичний аналіз коду
|
### Автоматизований статичний аналіз коду
|
||||||
|
|
||||||
Інструмент [**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)
|
||||||
|
|
||||||
### Обхід біометричної аутентифікації
|
### Обхід біометричної аутентифікації
|
||||||
|
|
||||||
@ -227,7 +227,7 @@ content-protocol.md
|
|||||||
|
|
||||||
## Динамічний аналіз
|
## Динамічний аналіз
|
||||||
|
|
||||||
> Перш за все, вам потрібне середовище, де ви можете встановити додаток і все середовище (сертифікат CA Burp, Drozer і Frida в основному). Тому дуже рекомендується використовувати пристрій з root-доступом (емулятор або ні).
|
> По-перше, вам потрібне середовище, де ви можете встановити додаток і все середовище (сертифікат CA Burp, Drozer і Frida в основному). Тому дуже рекомендується використовувати пристрій з root-доступом (емулятор або ні).
|
||||||
|
|
||||||
### Онлайн динамічний аналіз
|
### Онлайн динамічний аналіз
|
||||||
|
|
||||||
@ -243,7 +243,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}}
|
||||||
@ -272,26 +272,26 @@ 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**, **додатки можуть отримувати доступ лише до своїх власних журналів**. Тому додатки не можуть отримувати доступ до журналів інших додатків.\
|
||||||
> Тим не менш, все ще рекомендується **не записувати чутливу інформацію**.
|
> Тим не менш, все ще рекомендується **не записувати чутливу інформацію**.
|
||||||
|
|
||||||
**Кешування буфера копіювання/вставки**
|
**Кешування буфера копіювання/вставки**
|
||||||
|
|
||||||
Фреймворк Android на основі **буфера обміну** дозволяє функціональність копіювання-вставки в додатках, але несе ризик, оскільки **інші додатки** можуть **отримати доступ** до буфера обміну, потенційно розкриваючи чутливі дані. Важливо **відключити функції копіювання/вставки** для чутливих розділів програми, таких як дані кредитних карток, щоб запобігти витоку даних.
|
Фреймворк **на основі буфера обміну** Android дозволяє функціональність копіювання-вставки в додатках, але несе ризик, оскільки **інші додатки** можуть **отримати доступ** до буфера обміну, потенційно розкриваючи чутливі дані. Важливо **відключити функції копіювання/вставки** для чутливих розділів програми, таких як дані кредитних карток, щоб запобігти витоку даних.
|
||||||
|
|
||||||
**Журнали аварій**
|
**Журнали аварій**
|
||||||
|
|
||||||
Якщо додаток **виникає аварія** і **зберігає журнали**, ці журнали можуть допомогти зловмисникам, особливо коли додаток не може бути реверсовано. Щоб зменшити цей ризик, уникайте ведення журналів при аваріях, а якщо журнали повинні передаватися через мережу, переконайтеся, що вони надсилаються через SSL-канал для безпеки.
|
Якщо додаток **зависає** і **зберігає журнали**, ці журнали можуть допомогти зловмисникам, особливо коли додаток не може бути реверсовано. Щоб зменшити цей ризик, уникайте ведення журналів при аваріях, а якщо журнали повинні передаватися через мережу, переконайтеся, що вони надсилаються через SSL-канал для безпеки.
|
||||||
|
|
||||||
Як пентестер, **слідкуйте за цими журналами**.
|
Як пентестер, **слідкуйте за цими журналами**.
|
||||||
|
|
||||||
@ -299,14 +299,14 @@ avd-android-virtual-device.md
|
|||||||
|
|
||||||
Додатки часто інтегрують сервіси, такі як Google Adsense, які можуть ненавмисно **викривати чутливі дані** через неправильну реалізацію розробниками. Щоб виявити потенційні витоки даних, рекомендується **перехопити трафік програми** та перевірити, чи надсилається якась чутлива інформація третім особам.
|
Додатки часто інтегрують сервіси, такі як Google Adsense, які можуть ненавмисно **викривати чутливі дані** через неправильну реалізацію розробниками. Щоб виявити потенційні витоки даних, рекомендується **перехопити трафік програми** та перевірити, чи надсилається якась чутлива інформація третім особам.
|
||||||
|
|
||||||
### SQLite БД
|
### SQLite DBs
|
||||||
|
|
||||||
Більшість додатків використовуватимуть **внутрішні 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 (Експлуатація активностей, постачальників контенту та сервісів)
|
||||||
|
|
||||||
@ -331,7 +331,7 @@ 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]
|
||||||
> Зверніть увагу, що обхід авторизації не завжди є вразливістю, це залежить від того, як працює обхід і яка інформація піддається розкриттю.
|
> Зверніть увагу, що обхід авторизації не завжди є вразливістю, це залежить від того, як працює обхід і яка інформація піддається розкриттю.
|
||||||
@ -342,32 +342,32 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
|
|||||||
|
|
||||||
#### Tapjacking
|
#### Tapjacking
|
||||||
|
|
||||||
Якщо tapjacking не запобігається, ви можете зловживати експортованою активністю, щоб змусити **користувача виконувати неочікувані дії**. Для отримання додаткової інформації про [**що таке Tapjacking, перейдіть за посиланням**](#tapjacking).
|
Якщо tapjacking не запобігається, ви можете зловживати експортованою активністю, щоб змусити **користувача виконувати несподівані дії**. Для отримання додаткової інформації про [**що таке Tapjacking, перейдіть за посиланням**](#tapjacking).
|
||||||
|
|
||||||
### Експлуатація постачальників контенту - доступ до чутливої інформації та її маніпуляція
|
### Використання Content Providers - Доступ до чутливої інформації та її маніпуляція
|
||||||
|
|
||||||
[**Прочитайте це, якщо хочете освіжити знання про постачальника контенту.**](android-applications-basics.md#content-provider)\
|
[**Прочитайте це, якщо хочете освіжити знання про Content Provider.**](android-applications-basics.md#content-provider)\
|
||||||
Постачальники контенту в основному використовуються для **обміну даними**. Якщо у програми є доступні постачальники контенту, ви можете **витягти чутливі** дані з них. Також цікаво протестувати можливі **SQL-ін'єкції** та **перетворення шляхів**, оскільки вони можуть бути вразливими.
|
Content providers в основному використовуються для **обміну даними**. Якщо у програми є доступні content providers, ви можете **витягти чутливі** дані з них. Також цікаво протестувати можливі **SQL-ін'єкції** та **Path Traversals**, оскільки вони можуть бути вразливими.
|
||||||
|
|
||||||
[**Дізнайтеся, як експлуатувати постачальників контенту за допомогою Drozer.**](drozer-tutorial/index.html#content-providers)
|
[**Дізнайтеся, як експлуатувати Content Providers за допомогою Drozer.**](drozer-tutorial/index.html#content-providers)
|
||||||
|
|
||||||
### **Експлуатація сервісів**
|
### **Використання Services**
|
||||||
|
|
||||||
[**Прочитайте це, якщо хочете освіжити знання про сервіс.**](android-applications-basics.md#services)\
|
[**Прочитайте це, якщо хочете освіжити знання про Service.**](android-applications-basics.md#services)\
|
||||||
Пам'ятайте, що дії сервісу починаються в методі `onStartCommand`.
|
Пам'ятайте, що дії Service починаються в методі `onStartCommand`.
|
||||||
|
|
||||||
Сервіс в основному є чимось, що **може отримувати дані**, **обробляти** їх і **повертати** (або не повертати) відповідь. Тоді, якщо програма експортує деякі сервіси, вам слід **перевірити** **код**, щоб зрозуміти, що він робить, і **тестувати** його **динамічно** для витягування конфіденційної інформації, обходу заходів аутентифікації...\
|
Сервіс в основному є чимось, що **може отримувати дані**, **обробляти** їх і **повертати** (або не повертати) відповідь. Тоді, якщо програма експортує деякі сервіси, вам слід **перевірити** **код**, щоб зрозуміти, що він робить, і **тестувати** його **динамічно** для витягування конфіденційної інформації, обходу заходів аутентифікації...\
|
||||||
[**Дізнайтеся, як експлуатувати сервіси за допомогою Drozer.**](drozer-tutorial/index.html#services)
|
[**Дізнайтеся, як експлуатувати Services за допомогою Drozer.**](drozer-tutorial/index.html#services)
|
||||||
|
|
||||||
### **Експлуатація приймачів трансляцій**
|
### **Використання Broadcast Receivers**
|
||||||
|
|
||||||
[**Прочитайте це, якщо хочете освіжити знання про приймач трансляцій.**](android-applications-basics.md#broadcast-receivers)\
|
[**Прочитайте це, якщо хочете освіжити знання про Broadcast Receiver.**](android-applications-basics.md#broadcast-receivers)\
|
||||||
Пам'ятайте, що дії приймача трансляцій починаються в методі `onReceive`.
|
Пам'ятайте, що дії Broadcast Receiver починаються в методі `onReceive`.
|
||||||
|
|
||||||
Приймач трансляцій буде чекати на певний тип повідомлення. В залежності від того, як приймач обробляє повідомлення, він може бути вразливим.\
|
Broadcast receiver буде чекати на певний тип повідомлення. В залежності від того, як приймач обробляє повідомлення, він може бути вразливим.\
|
||||||
[**Дізнайтеся, як експлуатувати приймачі трансляцій за допомогою Drozer.**](#exploiting-broadcast-receivers)
|
[**Дізнайтеся, як експлуатувати Broadcast Receivers за допомогою Drozer.**](#exploiting-broadcast-receivers)
|
||||||
|
|
||||||
### **Експлуатація схем / глибоких посилань**
|
### **Використання Schemes / Deep links**
|
||||||
|
|
||||||
Ви можете шукати глибокі посилання вручну, використовуючи інструменти, такі як MobSF, або скрипти, як [цей](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\
|
Ви можете шукати глибокі посилання вручну, використовуючи інструменти, такі як MobSF, або скрипти, як [цей](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\
|
||||||
Ви можете **відкрити** оголошену **схему** за допомогою **adb** або **браузера**:
|
Ви можете **відкрити** оголошену **схему** за допомогою **adb** або **браузера**:
|
||||||
@ -381,26 +381,26 @@ _Зверніть увагу, що ви можете **пропустити ім
|
|||||||
<!-- fallback in your url you could try the intent url -->
|
<!-- fallback in your url you could try the intent url -->
|
||||||
<a href="intent://hostname#Intent;scheme=scheme;package=your.package.name;S.browser_fallback_url=http%3A%2F%2Fwww.example.com;end">with alternative</a>
|
<a href="intent://hostname#Intent;scheme=scheme;package=your.package.name;S.browser_fallback_url=http%3A%2F%2Fwww.example.com;end">with alternative</a>
|
||||||
```
|
```
|
||||||
**Код, що виконується**
|
**Виконаний код**
|
||||||
|
|
||||||
Щоб знайти **код, який буде виконуватись в додатку**, перейдіть до активності, викликаної глибоким посиланням, і знайдіть функцію **`onNewIntent`**.
|
Щоб знайти **код, який буде виконаний в додатку**, перейдіть до активності, викликаної глибоким посиланням, і знайдіть функцію **`onNewIntent`**.
|
||||||
|
|
||||||
 (1) (1) (1).png>)
|
 (1) (1) (1).png>)
|
||||||
|
|
||||||
**Чутлива інформація**
|
**Чутлива інформація**
|
||||||
|
|
||||||
Кожного разу, коли ви знаходите глибоке посилання, перевірте, що **воно не отримує чутливі дані (як-от паролі) через параметри URL**, оскільки будь-який інший додаток може **видавати себе за глибоке посилання і вкрасти ці дані!**
|
Кожного разу, коли ви знаходите глибоке посилання, перевірте, що **воно не отримує чутливі дані (наприклад, паролі) через параметри URL**, оскільки будь-який інший додаток може **видавати себе за глибоке посилання і вкрасти ці дані!**
|
||||||
|
|
||||||
**Параметри в шляху**
|
**Параметри в шляху**
|
||||||
|
|
||||||
Ви **також повинні перевірити, чи використовує будь-яке глибоке посилання параметр всередині шляху** 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/).
|
||||||
|
|
||||||
**Більше прикладів**
|
**Більше прикладів**
|
||||||
|
|
||||||
Цей [цікавий звіт про баг-баунті](https://hackerone.com/reports/855618) про посилання (_/.well-known/assetlinks.json_).
|
Цікава [відповідь на баг-баунті](https://hackerone.com/reports/855618) про посилання (_/.well-known/assetlinks.json_).
|
||||||
|
|
||||||
### Перевірка та верифікація транспортного рівня
|
### Перевірка та верифікація транспортного шару
|
||||||
|
|
||||||
- **Сертифікати не завжди належним чином перевіряються** Android-додатками. Це звичайна практика для цих додатків ігнорувати попередження та приймати самопідписані сертифікати або, в деяких випадках, повертатися до використання HTTP-з'єднань.
|
- **Сертифікати не завжди належним чином перевіряються** Android-додатками. Це звичайна практика для цих додатків ігнорувати попередження та приймати самопідписані сертифікати або, в деяких випадках, повертатися до використання HTTP-з'єднань.
|
||||||
- **Переговори під час SSL/TLS рукопожаття іноді є слабкими**, використовуючи небезпечні шифри. Ця вразливість робить з'єднання вразливим до атак типу man-in-the-middle (MITM), що дозволяє зловмисникам розшифровувати дані.
|
- **Переговори під час SSL/TLS рукопожаття іноді є слабкими**, використовуючи небезпечні шифри. Ця вразливість робить з'єднання вразливим до атак типу man-in-the-middle (MITM), що дозволяє зловмисникам розшифровувати дані.
|
||||||
@ -412,21 +412,21 @@ _Зверніть увагу, що ви можете **пропустити ім
|
|||||||
|
|
||||||
#### SSL Pinning
|
#### SSL Pinning
|
||||||
|
|
||||||
SSL Pinning - це захід безпеки, при якому додаток перевіряє сертифікат сервера проти відомої копії, збереженої в самому додатку. Цей метод є важливим для запобігання атакам MITM. Рекомендується впроваджувати SSL Pinning для додатків, що обробляють чутливу інформацію.
|
SSL Pinning - це захід безпеки, при якому додаток перевіряє сертифікат сервера на відповідність відомій копії, збереженій у самому додатку. Цей метод є важливим для запобігання атакам MITM. Рекомендується впроваджувати SSL Pinning для додатків, які обробляють чутливу інформацію.
|
||||||
|
|
||||||
#### Інспекція трафіку
|
#### Інспекція трафіку
|
||||||
|
|
||||||
Щоб перевірити HTTP-трафік, необхідно **встановити сертифікат проксі-інструменту** (наприклад, Burp). Без встановлення цього сертифіката зашифрований трафік може бути невидимим через проксі. Для посібника з установки власного сертифіката CA, [**натисніть тут**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
|
Щоб перевірити HTTP-трафік, необхідно **встановити сертифікат проксі-інструменту** (наприклад, Burp). Без встановлення цього сертифіката зашифрований трафік може бути невидимим через проксі. Для посібника з установки власного сертифіката CA, [**натисніть тут**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
|
||||||
|
|
||||||
Додатки, що націлені на **API Level 24 і вище**, потребують модифікацій конфігурації безпеки мережі, щоб приймати сертифікат CA проксі. Цей крок є критично важливим для перевірки зашифрованого трафіку. Для інструкцій щодо модифікації конфігурації безпеки мережі, [**зверніться до цього посібника**](make-apk-accept-ca-certificate.md).
|
Додатки, які націлені на **API Level 24 і вище**, вимагають модифікацій конфігурації безпеки мережі, щоб приймати сертифікат CA проксі. Цей крок є критично важливим для перевірки зашифрованого трафіку. Для інструкцій щодо модифікації конфігурації безпеки мережі, [**зверніться до цього посібника**](make-apk-accept-ca-certificate.md).
|
||||||
|
|
||||||
Якщо використовується **Flutter**, вам потрібно дотримуватись інструкцій на [**цій сторінці**](flutter.md). Це пов'язано з тим, що просто додавання сертифіката в сховище не спрацює, оскільки Flutter має свій власний список дійсних CA.
|
Якщо використовується **Flutter**, вам потрібно дотримуватися інструкцій на [**цій сторінці**](flutter.md). Це пов'язано з тим, що просто додавання сертифіката в сховище не спрацює, оскільки Flutter має свій власний список дійсних CA.
|
||||||
|
|
||||||
#### Обхід SSL Pinning
|
#### Обхід SSL Pinning
|
||||||
|
|
||||||
Коли впроваджено SSL Pinning, обхід його стає необхідним для перевірки HTTPS-трафіку. Для цього доступні різні методи:
|
Коли впроваджено SSL Pinning, обхід його стає необхідним для перевірки HTTPS-трафіку. Для цього доступні різні методи:
|
||||||
|
|
||||||
- Автоматично **модифікуйте** **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 динамічного аналізу** (пояснено нижче)
|
||||||
@ -434,13 +434,13 @@ SSL Pinning - це захід безпеки, при якому додаток
|
|||||||
|
|
||||||
#### Пошук загальних веб-вразливостей
|
#### Пошук загальних веб-вразливостей
|
||||||
|
|
||||||
Важливо також шукати загальні веб-вразливості в додатку. Детальна інформація про виявлення та усунення цих вразливостей виходить за межі цього резюме, але широко висвітлюється в інших джерелах.
|
Важливо також шукати загальні веб-вразливості в додатку. Детальна інформація про виявлення та усунення цих вразливостей виходить за межі цього резюме, але вона широко висвітлюється в інших джерелах.
|
||||||
|
|
||||||
### 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)
|
||||||
@ -448,6 +448,12 @@ SSL Pinning - це захід безпеки, при якому додаток
|
|||||||
- Ви можете знайти деякі чудові скрипти 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))
|
||||||
|
|
||||||
|
#### Робочий процес обходу анти-інструментації та SSL pinning
|
||||||
|
|
||||||
|
{{#ref}}
|
||||||
|
android-anti-instrumentation-and-ssl-pinning-bypass.md
|
||||||
|
{{#endref}}
|
||||||
|
|
||||||
### **Скидання пам'яті - Fridump**
|
### **Скидання пам'яті - Fridump**
|
||||||
|
|
||||||
Перевірте, чи зберігає додаток чутливу інформацію в пам'яті, яку не повинен зберігати, наприклад, паролі або мнемоніки.
|
Перевірте, чи зберігає додаток чутливу інформацію в пам'яті, яку не повинен зберігати, наприклад, паролі або мнемоніки.
|
||||||
@ -461,13 +467,13 @@ python3 fridump3.py -u <PID>
|
|||||||
frida-ps -Uai
|
frida-ps -Uai
|
||||||
python3 fridump3.py -u "<Name>"
|
python3 fridump3.py -u "<Name>"
|
||||||
```
|
```
|
||||||
Це скине пам'ять у папку ./dump, і там ви зможете використовувати grep з чимось на кшталт:
|
Це скине пам'ять у папку ./dump, і там ви можете використовувати grep з чимось на кшталт:
|
||||||
```bash
|
```bash
|
||||||
strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$"
|
strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$"
|
||||||
```
|
```
|
||||||
### **Чутливі дані в Keystore**
|
### **Чутливі дані в Keystore**
|
||||||
|
|
||||||
У Android Keystore є найкращим місцем для зберігання чутливих даних, однак, з достатніми привілеями все ще **можливо отримати доступ** до нього. Оскільки додатки, як правило, зберігають тут **чутливі дані у відкритому тексті**, пентести повинні перевіряти це як користувач root або хтось з фізичним доступом до пристрою може бути здатний вкрасти ці дані.
|
У Android Keystore є найкращим місцем для зберігання чутливих даних, однак, з достатніми привілеями все ще **можливо отримати доступ** до нього. Оскільки програми, як правило, зберігають тут **чутливі дані у відкритому тексті**, пентести повинні перевіряти це як користувач root або хтось з фізичним доступом до пристрою може бути здатний вкрасти ці дані.
|
||||||
|
|
||||||
Навіть якщо додаток зберігав дані в keystore, дані повинні бути зашифровані.
|
Навіть якщо додаток зберігав дані в keystore, дані повинні бути зашифровані.
|
||||||
|
|
||||||
@ -483,13 +489,13 @@ 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);
|
||||||
```
|
```
|
||||||
@ -515,7 +521,7 @@ getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
|||||||
Можливо, ви знаєте про цей вид вразливостей з вебу. Вам потрібно бути особливо обережними з цими вразливостями в Android-додатку:
|
Можливо, ви знаєте про цей вид вразливостей з вебу. Вам потрібно бути особливо обережними з цими вразливостями в Android-додатку:
|
||||||
|
|
||||||
- **SQL-ін'єкція:** При роботі з динамічними запитами або постачальниками контенту переконайтеся, що ви використовуєте параметризовані запити.
|
- **SQL-ін'єкція:** При роботі з динамічними запитами або постачальниками контенту переконайтеся, що ви використовуєте параметризовані запити.
|
||||||
- **Ін'єкція JavaScript (XSS):** Переконайтеся, що підтримка JavaScript та плагінів вимкнена для будь-яких WebViews (вимкнено за замовчуванням). [Більше інформації тут](webview-attacks.md#javascript-enabled).
|
- **Ін'єкція JavaScript (XSS):** Перевірте, що підтримка JavaScript та плагінів вимкнена для будь-яких WebViews (вимкнено за замовчуванням). [Більше інформації тут](webview-attacks.md#javascript-enabled).
|
||||||
- **Включення локальних файлів:** WebViews повинні мати доступ до файлової системи вимкненим (включено за замовчуванням) - `(webview.getSettings().setAllowFileAccess(false);)`. [Більше інформації тут](webview-attacks.md#javascript-enabled).
|
- **Включення локальних файлів:** WebViews повинні мати доступ до файлової системи вимкненим (включено за замовчуванням) - `(webview.getSettings().setAllowFileAccess(false);)`. [Більше інформації тут](webview-attacks.md#javascript-enabled).
|
||||||
- **Вічні куки**: У кількох випадках, коли Android-додаток завершує сесію, куки не відкликаються або можуть навіть зберігатися на диску.
|
- **Вічні куки**: У кількох випадках, коли Android-додаток завершує сесію, куки не відкликаються або можуть навіть зберігатися на диску.
|
||||||
- [**Безпечний прапорець** у куках](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags)
|
- [**Безпечний прапорець** у куках](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags)
|
||||||
@ -538,14 +544,14 @@ docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
|
|||||||
Зверніть увагу, що MobSF може аналізувати **Android**(apk)**, IOS**(ipa) **та Windows**(apx) програми (_Windows програми повинні аналізуватися з MobSF, встановленого на Windows хості_).\
|
Зверніть увагу, що MobSF може аналізувати **Android**(apk)**, IOS**(ipa) **та Windows**(apx) програми (_Windows програми повинні аналізуватися з MobSF, встановленого на Windows хості_).\
|
||||||
Також, якщо ви створите **ZIP** файл з вихідним кодом **Android** або **IOS** програми (перейдіть до кореневої папки програми, виберіть все і створіть ZIP-файл), він також зможе його проаналізувати.
|
Також, якщо ви створите **ZIP** файл з вихідним кодом **Android** або **IOS** програми (перейдіть до кореневої папки програми, виберіть все і створіть ZIP-файл), він також зможе його проаналізувати.
|
||||||
|
|
||||||
MobSF також дозволяє вам **diff/Compare** аналіз і інтегрувати **VirusTotal** (вам потрібно буде встановити свій API ключ у _MobSF/settings.py_ і активувати його: `VT_ENABLED = TRUE` `VT_API_KEY = <Ваш API ключ>` `VT_UPLOAD = TRUE`). Ви також можете встановити `VT_UPLOAD` на `False`, тоді **хеш** буде **завантажений** замість файлу.
|
MobSF також дозволяє вам **diff/Compare** аналіз і інтегрувати **VirusTotal** (вам потрібно буде встановити свій API ключ у _MobSF/settings.py_ і активувати його: `VT_ENABLED = TRUE` `VT_API_KEY = <Ваш API ключ>` `VT_UPLOAD = TRUE`). Ви також можете встановити `VT_UPLOAD` на `False`, тоді **hash** буде **завантажений** замість файлу.
|
||||||
|
|
||||||
### Допоміжний динамічний аналіз з 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** для отримання **інформації під час виконання**
|
||||||
|
|
||||||
@ -553,7 +559,7 @@ MobSF також дозволяє вам **diff/Compare** аналіз і інт
|
|||||||
|
|
||||||
**Frida**
|
**Frida**
|
||||||
|
|
||||||
За замовчуванням, він також використовуватиме деякі скрипти Frida для **обходу SSL пінінгу**, **виявлення root** і **виявлення дебагера**, а також для **моніторингу цікавих API**.\
|
За замовчуванням, він також використовуватиме деякі скрипти Frida для **обходу SSL pinning**, **виявлення 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").\
|
||||||
@ -565,12 +571,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 Intrumentation**" і ви побачите всі виходи в "**Frida Live Logs**".
|
||||||
|
|
||||||
**Shell**
|
**Shell**
|
||||||
|
|
||||||
@ -585,8 +591,8 @@ receivers
|
|||||||
```
|
```
|
||||||
**HTTP інструменти**
|
**HTTP інструменти**
|
||||||
|
|
||||||
Коли http трафік захоплений, ви можете побачити непривабливий вигляд захопленого трафіку на "**HTTP(S) Traffic**" внизу або більш привабливий вигляд на зеленій кнопці "**Start HTTPTools**". З другого варіанту ви можете **відправити** **захоплені запити** до **проксі** таких як Burp або Owasp ZAP.\
|
Коли http трафік захоплений, ви можете побачити непривабливий вигляд захопленого трафіку на "**HTTP(S) Traffic**" внизу або більш привабливий вигляд у "**Start HTTPTools**" зеленій кнопці. З другого варіанту ви можете **надіслати** **захоплені запити** до **проксі** таких як Burp або Owasp ZAP.\
|
||||||
Для цього, _включіть Burp -->_ _вимкніть Intercept --> в MobSB HTTPTools виберіть запит_ --> натисніть "**Send to Fuzzer**" --> _виберіть адресу проксі_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)).
|
Для цього, _включіть Burp -->_ _вимкніть Intercept --> у MobSB HTTPTools виберіть запит_ --> натисніть "**Send to Fuzzer**" --> _виберіть адресу проксі_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)).
|
||||||
|
|
||||||
Коли ви закінчите динамічний аналіз з MobSF, ви можете натиснути на "**Start Web API Fuzzer**", щоб **фузити http запити** та шукати вразливості.
|
Коли ви закінчите динамічний аналіз з MobSF, ви можете натиснути на "**Start Web API Fuzzer**", щоб **фузити http запити** та шукати вразливості.
|
||||||
|
|
||||||
@ -610,7 +616,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
|
||||||
@ -704,14 +710,14 @@ ProGuard розповсюджується як частина Android SDK і з
|
|||||||
(З тієї інструкції) Останній раз, коли ми перевіряли, режим роботи Dexguard був:
|
(З тієї інструкції) Останній раз, коли ми перевіряли, режим роботи Dexguard був:
|
||||||
|
|
||||||
- завантажити ресурс як InputStream;
|
- завантажити ресурс як InputStream;
|
||||||
- передати результат класу, що наслідує від FilterInputStream, для його розшифрування;
|
- передати результат класу, що успадковує FilterInputStream, для його розшифрування;
|
||||||
- виконати деяку безглузду обфускацію, щоб витратити кілька хвилин часу реверсера;
|
- виконати деяку безглузду обфускацію, щоб витратити кілька хвилин часу реверсера;
|
||||||
- передати розшифрований результат в ZipInputStream, щоб отримати DEX файл;
|
- передати розшифрований результат ZipInputStream, щоб отримати DEX файл;
|
||||||
- нарешті, завантажити отриманий DEX як ресурс, використовуючи метод `loadDex`.
|
- нарешті завантажити отриманий DEX як ресурс, використовуючи метод `loadDex`.
|
||||||
|
|
||||||
### [DeGuard](http://apk-deguard.com)
|
### [DeGuard](http://apk-deguard.com)
|
||||||
|
|
||||||
**DeGuard скасовує процес обфускації, виконуваний інструментами обфускації Android. Це дозволяє проводити численні аналізи безпеки, включаючи інспекцію коду та прогнозування бібліотек.**
|
**DeGuard скасовує процес обфускації, виконуваний інструментами обфускації Android. Це дозволяє проводити численні аналізи безпеки, включаючи перевірку коду та прогнозування бібліотек.**
|
||||||
|
|
||||||
Ви можете завантажити обфускований APK на їх платформу.
|
Ви можете завантажити обфускований APK на їх платформу.
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,203 @@
|
|||||||
|
# Android Anti-Instrumentation & SSL Pinning Bypass (Frida/Objection)
|
||||||
|
|
||||||
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
|
Ця сторінка надає практичний робочий процес для відновлення динамічного аналізу проти Android додатків, які виявляють/блокують інструментацію або забезпечують TLS пінning. Вона зосереджена на швидкій тріажі, загальних виявленнях та копіювальних хуках/тактиках для їх обходу без повторної упаковки, коли це можливо.
|
||||||
|
|
||||||
|
## Detection Surface (що перевіряють додатки)
|
||||||
|
|
||||||
|
- Перевірки root: su binary, шляхи Magisk, значення getprop, загальні пакети root
|
||||||
|
- Перевірки Frida/debugger (Java): Debug.isDebuggerConnected(), ActivityManager.getRunningAppProcesses(), getRunningServices(), сканування /proc, classpath, завантажені бібліотеки
|
||||||
|
- Нативний anti-debug: ptrace(), syscalls, anti-attach, breakpoints, inline hooks
|
||||||
|
- Перевірки раннього ініціалізації: Application.onCreate() або хуки запуску процесу, які викликають збій, якщо присутня інструментація
|
||||||
|
- TLS пінning: кастомний TrustManager/HostnameVerifier, OkHttp CertificatePinner, Conscrypt pinning, нативні пінни
|
||||||
|
|
||||||
|
## Step 1 — Quick win: hide root with Magisk DenyList
|
||||||
|
|
||||||
|
- Увімкніть Zygisk в Magisk
|
||||||
|
- Увімкніть DenyList, додайте цільовий пакет
|
||||||
|
- Перезавантажте та повторно протестуйте
|
||||||
|
|
||||||
|
Багато додатків лише шукають очевидні індикатори (su/Magisk paths/getprop). DenyList часто нейтралізує наївні перевірки.
|
||||||
|
|
||||||
|
References:
|
||||||
|
- Magisk (Zygisk & DenyList): https://github.com/topjohnwu/Magisk
|
||||||
|
|
||||||
|
## Step 2 — 30‑second Frida Codeshare tests
|
||||||
|
|
||||||
|
Спробуйте загальні скрипти перед глибоким зануренням:
|
||||||
|
|
||||||
|
- anti-root-bypass.js
|
||||||
|
- anti-frida-detection.js
|
||||||
|
- hide_frida_gum.js
|
||||||
|
|
||||||
|
Example:
|
||||||
|
```bash
|
||||||
|
frida -U -f com.example.app -l anti-frida-detection.js
|
||||||
|
```
|
||||||
|
Це зазвичай зупиняє перевірки Java root/debug, сканування процесів/сервісів та native ptrace(). Корисно для слабо захищених додатків; для посилених цілей можуть знадобитися спеціалізовані хуки.
|
||||||
|
|
||||||
|
- Codeshare: https://codeshare.frida.re/
|
||||||
|
|
||||||
|
## Крок 3 — Обійти детектори під час ініціалізації, приєднуючись пізніше
|
||||||
|
|
||||||
|
Багато детекцій запускаються лише під час створення процесу/onCreate(). Ін'єкції під час створення (-f) або гаджети потрапляють у пастку; приєднання після завантаження UI може пройти повз.
|
||||||
|
```bash
|
||||||
|
# Launch the app normally (launcher/adb), wait for UI, then attach
|
||||||
|
frida -U -n com.example.app
|
||||||
|
# Or with Objection to attach to running process
|
||||||
|
aobjection --gadget com.example.app explore # if using gadget
|
||||||
|
```
|
||||||
|
Якщо це працює, підтримуйте сесію стабільною та продовжуйте перевірки картування та стубів.
|
||||||
|
|
||||||
|
## Крок 4 — Картування логіки виявлення за допомогою Jadx та пошуку рядків
|
||||||
|
|
||||||
|
Статичні ключові слова для триажу в Jadx:
|
||||||
|
- "frida", "gum", "root", "magisk", "ptrace", "su", "getprop", "debugger"
|
||||||
|
|
||||||
|
Типові шаблони Java:
|
||||||
|
```java
|
||||||
|
public boolean isFridaDetected() {
|
||||||
|
return getRunningServices().contains("frida");
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Загальні API для перегляду/перехоплення:
|
||||||
|
- android.os.Debug.isDebuggerConnected
|
||||||
|
- android.app.ActivityManager.getRunningAppProcesses / getRunningServices
|
||||||
|
- java.lang.System.loadLibrary / System.load (native bridge)
|
||||||
|
- java.lang.Runtime.exec / ProcessBuilder (probing commands)
|
||||||
|
- android.os.SystemProperties.get (root/emulator heuristics)
|
||||||
|
|
||||||
|
## Крок 5 — Статичне підміщення з Frida (Java)
|
||||||
|
|
||||||
|
Перезапишіть користувацькі охоронці, щоб повернути безпечні значення без повторної упаковки:
|
||||||
|
```js
|
||||||
|
Java.perform(() => {
|
||||||
|
const Checks = Java.use('com.example.security.Checks');
|
||||||
|
Checks.isFridaDetected.implementation = function () { return false; };
|
||||||
|
|
||||||
|
// Neutralize debugger checks
|
||||||
|
const Debug = Java.use('android.os.Debug');
|
||||||
|
Debug.isDebuggerConnected.implementation = function () { return false; };
|
||||||
|
|
||||||
|
// Example: kill ActivityManager scans
|
||||||
|
const AM = Java.use('android.app.ActivityManager');
|
||||||
|
AM.getRunningAppProcesses.implementation = function () { return java.util.Collections.emptyList(); };
|
||||||
|
});
|
||||||
|
```
|
||||||
|
Тріаж ранніх збоїв? Вивантажте класи безпосередньо перед тим, як він помре, щоб виявити ймовірні простори імен для виявлення:
|
||||||
|
```js
|
||||||
|
Java.perform(() => {
|
||||||
|
Java.enumerateLoadedClasses({
|
||||||
|
onMatch: n => console.log(n),
|
||||||
|
onComplete: () => console.log('Done')
|
||||||
|
});
|
||||||
|
});
|
||||||
|
```
|
||||||
|
Логування та нейтралізація підозрілих методів для підтвердження виконання потоку:
|
||||||
|
```js
|
||||||
|
Java.perform(() => {
|
||||||
|
const Det = Java.use('com.example.security.DetectionManager');
|
||||||
|
Det.checkFrida.implementation = function () {
|
||||||
|
console.log('checkFrida() called');
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
});
|
||||||
|
```
|
||||||
|
## Крок 6 — Слідуйте за шляхом JNI/нативним, коли Java хуки не працюють
|
||||||
|
|
||||||
|
Відстежте точки входу JNI, щоб знайти нативні завантажувачі та ініціалізацію виявлення:
|
||||||
|
```bash
|
||||||
|
frida-trace -n com.example.app -i "JNI_OnLoad"
|
||||||
|
```
|
||||||
|
Швидка нативна тріажування упакованих .so файлів:
|
||||||
|
```bash
|
||||||
|
# List exported symbols & JNI
|
||||||
|
nm -D libfoo.so | head
|
||||||
|
objdump -T libfoo.so | grep Java_
|
||||||
|
strings -n 6 libfoo.so | egrep -i 'frida|ptrace|gum|magisk|su|root'
|
||||||
|
```
|
||||||
|
Інтерактивне/нативне реверсування:
|
||||||
|
- Ghidra: https://ghidra-sre.org/
|
||||||
|
- r2frida: https://github.com/nowsecure/r2frida
|
||||||
|
|
||||||
|
Приклад: нейтралізувати ptrace, щоб подолати простий анти‑дебаг у libc:
|
||||||
|
```js
|
||||||
|
const ptrace = Module.findExportByName(null, 'ptrace');
|
||||||
|
if (ptrace) {
|
||||||
|
Interceptor.replace(ptrace, new NativeCallback(function () {
|
||||||
|
return -1; // pretend failure
|
||||||
|
}, 'int', ['int', 'int', 'pointer', 'pointer']));
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Дивіться також: {{#ref}}
|
||||||
|
reversing-native-libraries.md
|
||||||
|
{{#endref}}
|
||||||
|
|
||||||
|
## Крок 7 — Патчинг Objection (вбудовування гаджета / основи видалення)
|
||||||
|
|
||||||
|
Коли ви віддаєте перевагу перепакуванню до хуків часу виконання, спробуйте:
|
||||||
|
```bash
|
||||||
|
objection patchapk --source app.apk
|
||||||
|
```
|
||||||
|
Примітки:
|
||||||
|
- Потрібен apktool; переконайтеся, що у вас актуальна версія з офіційного посібника, щоб уникнути проблем зі збіркою: https://apktool.org/docs/install
|
||||||
|
- Впровадження гаджетів дозволяє інструментацію без root, але все ще може бути виявлено більш потужними перевірками під час ініціалізації.
|
||||||
|
|
||||||
|
Посилання:
|
||||||
|
- Objection: https://github.com/sensepost/objection
|
||||||
|
|
||||||
|
## Крок 8 — Резервний варіант: Патч TLS пінінгу для видимості мережі
|
||||||
|
|
||||||
|
Якщо інструментацію заблоковано, ви все ще можете перевірити трафік, видаливши пінінг статично:
|
||||||
|
```bash
|
||||||
|
apk-mitm app.apk
|
||||||
|
# Then install the patched APK and proxy via Burp/mitmproxy
|
||||||
|
```
|
||||||
|
- Інструмент: https://github.com/shroudedcode/apk-mitm
|
||||||
|
- Для трюків з CA‑довереністю в конфігурації мережі (та довірою CA користувача Android 7+), дивіться:
|
||||||
|
{{#ref}}
|
||||||
|
make-apk-accept-ca-certificate.md
|
||||||
|
{{#endref}}
|
||||||
|
{{#ref}}
|
||||||
|
install-burp-certificate.md
|
||||||
|
{{#endref}}
|
||||||
|
|
||||||
|
## Зручний командний шпаргалка
|
||||||
|
```bash
|
||||||
|
# List processes and attach
|
||||||
|
frida-ps -Uai
|
||||||
|
frida -U -n com.example.app
|
||||||
|
|
||||||
|
# Spawn with a script (may trigger detectors)
|
||||||
|
frida -U -f com.example.app -l anti-frida-detection.js
|
||||||
|
|
||||||
|
# Trace native init
|
||||||
|
frida-trace -n com.example.app -i "JNI_OnLoad"
|
||||||
|
|
||||||
|
# Objection runtime
|
||||||
|
objection --gadget com.example.app explore
|
||||||
|
|
||||||
|
# Static TLS pinning removal
|
||||||
|
apk-mitm app.apk
|
||||||
|
```
|
||||||
|
## Поради та застереження
|
||||||
|
|
||||||
|
- Віддавайте перевагу пізньому приєднанню замість створення нових процесів, коли програми аварійно завершують роботу під час запуску
|
||||||
|
- Деякі виявлення повторно запускаються в критичних потоках (наприклад, оплата, автентифікація) — тримайте хуки активними під час навігації
|
||||||
|
- Поєднуйте статичний та динамічний аналіз: шукайте рядки в Jadx, щоб скоротити список класів; потім підключайте методи для перевірки під час виконання
|
||||||
|
- Посилені програми можуть використовувати пакувальники та нативне TLS-пінning — очікуйте реверсування нативного коду
|
||||||
|
|
||||||
|
## Посилання
|
||||||
|
|
||||||
|
- [Reversing Android Apps: Bypassing Detection Like a Pro](https://www.kayssel.com/newsletter/issue-12/)
|
||||||
|
- [Frida Codeshare](https://codeshare.frida.re/)
|
||||||
|
- [Objection](https://github.com/sensepost/objection)
|
||||||
|
- [apk-mitm](https://github.com/shroudedcode/apk-mitm)
|
||||||
|
- [Jadx](https://github.com/skylot/jadx)
|
||||||
|
- [Ghidra](https://ghidra-sre.org/)
|
||||||
|
- [r2frida](https://github.com/nowsecure/r2frida)
|
||||||
|
- [Apktool install guide](https://apktool.org/docs/install)
|
||||||
|
- [Magisk](https://github.com/topjohnwu/Magisk)
|
||||||
|
|
||||||
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
Loading…
x
Reference in New Issue
Block a user