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 Applications Pentesting](mobile-pentesting/android-app-pentesting/README.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 Task Hijacking](mobile-pentesting/android-app-pentesting/android-task-hijacking.md)
|
||||
- [ADB Commands](mobile-pentesting/android-app-pentesting/adb-commands.md)
|
||||
|
||||
@ -19,13 +19,13 @@ android-applications-basics.md
|
||||
|
||||
## Smali
|
||||
|
||||
Іноді цікаво **модифікувати код додатку**, щоб отримати доступ до **прихованої інформації** (можливо, добре обфусцировані паролі або прапори). Тоді може бути цікаво декомпілювати apk, модифікувати код і знову скомпілювати його.\
|
||||
[**У цьому посібнику** ви можете **дізнатися, як декомпілювати APK, модифікувати код Smali та знову скомпілювати APK** з новою функціональністю](smali-changes.md). Це може бути дуже корисно як **альтернатива для кількох тестів під час динамічного аналізу**, які будуть представлені. Тому **завжди тримайте в умі цю можливість**.
|
||||
Іноді цікаво **модифікувати код додатку**, щоб отримати доступ до **прихованої інформації** (можливо, добре обфусцировані паролі або прапори). Тоді може бути цікаво декомпілювати apk, змінити код і знову скомпілювати його.\
|
||||
[**У цьому посібнику** ви можете **дізнатися, як декомпілювати APK, модифікувати код Smali та знову скомпілювати APK** з новою функціональністю](smali-changes.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)
|
||||
- [Зловживання службами доступності (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)
|
||||
@ -79,17 +79,17 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
|
||||
|
||||
- **Дебаговані програми**: Програми, які встановлені як дебаговані (`debuggable="true"`) у файлі _Manifest.xml_, становлять ризик, оскільки дозволяють з'єднання, які можуть призвести до експлуатації. Для подальшого розуміння того, як експлуатувати дебаговані програми, зверніться до посібника з пошуку та експлуатації дебагованих програм на пристрої.
|
||||
- **Налаштування резервного копіювання**: Атрибут `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 також слід ретельно перевірити.
|
||||
- **Отримувачі трансляцій та URL-схеми**: Ці компоненти можуть бути використані для експлуатації, з особливою увагою до того, як управляються URL-схеми для вразливостей введення.
|
||||
- **Версії SDK**: Атрибути `minSdkVersion`, `targetSDKVersion` та `maxSdkVersion` вказують на підтримувані версії Android, підкреслюючи важливість непідтримки застарілих, вразливих версій Android з міркувань безпеки.
|
||||
|
||||
З файлу **strings.xml** можна виявити чутливу інформацію, таку як API ключі, власні схеми та інші нотатки розробників, що підкреслює необхідність ретельного перегляду цих ресурсів.
|
||||
З файлу **strings.xml** можна виявити чутливу інформацію, таку як API-ключі, власні схеми та інші нотатки розробників, що підкреслює необхідність ретельного перегляду цих ресурсів.
|
||||
|
||||
### 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. **Статичний аналіз:**
|
||||
- **Переконайтеся**, що використання `MODE_WORLD_READABLE` і `MODE_WORLD_WRITABLE` **ретельно перевіряється**. Ці режими **можуть потенційно відкрити** файли для **небажаного або несанкціонованого доступу**.
|
||||
2. **Динамічний аналіз:**
|
||||
- **Перевірте** **дозволи**, встановлені на файли, створені програмою. Зокрема, **перевірте**, чи є файли **встановленими на читання або запис для всіх**. Це може становити значний ризик для безпеки, оскільки це дозволить **будь-якій програмі**, встановленій на пристрої, незалежно від її походження чи намірів, **читати або змінювати** ці файли.
|
||||
- **Перевірте** **дозволи**, встановлені на файлах, створених програмою. Зокрема, **перевірте**, чи є файли, **встановлені на читання або запис для всіх**. Це може становити значний ризик для безпеки, оскільки це дозволить **будь-якій програмі**, встановленій на пристрої, незалежно від її походження чи намірів, **читати або змінювати** ці файли.
|
||||
|
||||
**Зовнішнє зберігання**
|
||||
|
||||
@ -129,7 +129,7 @@ android-task-hijacking.md
|
||||
- З огляду на легкість доступу, рекомендується **не зберігати чутливу інформацію** на зовнішньому зберіганні.
|
||||
- Зовнішнє зберігання може бути видалено або доступно будь-якою програмою, що робить його менш безпечним.
|
||||
3. **Обробка даних з зовнішнього зберігання**:
|
||||
- Завжди **виконуйте валідацію введення** на даних, отриманих з зовнішнього зберігання. Це важливо, оскільки дані походять з ненадійного джерела.
|
||||
- Завжди **виконуйте валідацію введення** даних, отриманих з зовнішнього зберігання. Це важливо, оскільки дані походять з ненадійного джерела.
|
||||
- Зберігання виконуваних файлів або класів на зовнішньому зберіганні для динамічного завантаження категорично не рекомендується.
|
||||
- Якщо ваша програма повинна отримувати виконувані файли з зовнішнього зберігання, переконайтеся, що ці файли **підписані та криптографічно перевірені** перед їх динамічним завантаженням. Цей крок є важливим для підтримки цілісності безпеки вашої програми.
|
||||
|
||||
@ -152,13 +152,13 @@ android-task-hijacking.md
|
||||
SSLSocketFactory sf = new cc(trustStore);
|
||||
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**, щоб ускладнити реверс-інженерні роботи для зловмисників.
|
||||
- Якщо додаток чутливий (як банківські додатки), він повинен виконувати **власні перевірки, щоб дізнатися, чи пристрій зrootований**, і діяти відповідно.
|
||||
- Якщо додаток чутливий (як банківські додатки), він повинен перевіряти, чи використовується **емулятор**.
|
||||
- Якщо додаток чутливий (як банківські додатки), він повинен **перевіряти свою цілісність перед виконанням**, щоб перевірити, чи був він змінений.
|
||||
- Якщо додаток є чутливим (як банківські додатки), він повинен виконувати **власні перевірки, щоб дізнатися, чи пристрій зrootований**, і діяти відповідно.
|
||||
- Якщо додаток є чутливим (як банківські додатки), він повинен перевіряти, чи використовується **емулятор**.
|
||||
- Якщо додаток є чутливим (як банківські додатки), він повинен **перевіряти свою цілісність перед виконанням**, щоб перевірити, чи був він змінений.
|
||||
- Використовуйте [**APKiD**](https://github.com/rednaga/APKiD), щоб перевірити, який компілятор/упаковщик/обфускатор був використаний для створення APK
|
||||
|
||||
### React Native Application
|
||||
@ -190,17 +190,17 @@ react-native-application.md
|
||||
|
||||
### 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 перегляне код і знайде можливі вразливості в ньому**.
|
||||
|
||||
### Витік секретів
|
||||
|
||||
Додаток може містити секрети (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}}
|
||||
@ -272,26 +272,26 @@ avd-android-virtual-device.md
|
||||
4. Натисніть **Номер збірки** 7 разів.
|
||||
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]
|
||||
> Зверніть увагу, що з **пізніми версіями Android 4.0**, **додатки можуть отримувати доступ лише до своїх власних журналів**. Тому додатки не можуть отримувати доступ до журналів інших додатків.\
|
||||
> Зверніть увагу, що з **пізніших версій Android 4.0**, **додатки можуть отримувати доступ лише до своїх власних журналів**. Тому додатки не можуть отримувати доступ до журналів інших додатків.\
|
||||
> Тим не менш, все ще рекомендується **не записувати чутливу інформацію**.
|
||||
|
||||
**Кешування буфера копіювання/вставки**
|
||||
|
||||
Фреймворк Android на основі **буфера обміну** дозволяє функціональність копіювання-вставки в додатках, але несе ризик, оскільки **інші додатки** можуть **отримати доступ** до буфера обміну, потенційно розкриваючи чутливі дані. Важливо **відключити функції копіювання/вставки** для чутливих розділів програми, таких як дані кредитних карток, щоб запобігти витоку даних.
|
||||
Фреймворк **на основі буфера обміну** Android дозволяє функціональність копіювання-вставки в додатках, але несе ризик, оскільки **інші додатки** можуть **отримати доступ** до буфера обміну, потенційно розкриваючи чутливі дані. Важливо **відключити функції копіювання/вставки** для чутливих розділів програми, таких як дані кредитних карток, щоб запобігти витоку даних.
|
||||
|
||||
**Журнали аварій**
|
||||
|
||||
Якщо додаток **виникає аварія** і **зберігає журнали**, ці журнали можуть допомогти зловмисникам, особливо коли додаток не може бути реверсовано. Щоб зменшити цей ризик, уникайте ведення журналів при аваріях, а якщо журнали повинні передаватися через мережу, переконайтеся, що вони надсилаються через SSL-канал для безпеки.
|
||||
Якщо додаток **зависає** і **зберігає журнали**, ці журнали можуть допомогти зловмисникам, особливо коли додаток не може бути реверсовано. Щоб зменшити цей ризик, уникайте ведення журналів при аваріях, а якщо журнали повинні передаватися через мережу, переконайтеся, що вони надсилаються через SSL-канал для безпеки.
|
||||
|
||||
Як пентестер, **слідкуйте за цими журналами**.
|
||||
|
||||
@ -299,14 +299,14 @@ avd-android-virtual-device.md
|
||||
|
||||
Додатки часто інтегрують сервіси, такі як Google Adsense, які можуть ненавмисно **викривати чутливі дані** через неправильну реалізацію розробниками. Щоб виявити потенційні витоки даних, рекомендується **перехопити трафік програми** та перевірити, чи надсилається якась чутлива інформація третім особам.
|
||||
|
||||
### SQLite БД
|
||||
### SQLite DBs
|
||||
|
||||
Більшість додатків використовуватимуть **внутрішні SQLite бази даних** для збереження інформації. Під час пентесту зверніть увагу на **бази даних**, які створені, назви **таблиць** та **стовпців** і всі **дані**, що зберігаються, оскільки ви можете знайти **чутливу інформацію** (що буде вразливістю).\
|
||||
Більшість додатків використовуватимуть **внутрішні SQLite бази даних** для збереження інформації. Під час пентесту зверніть увагу на **бази даних**, що створюються, назви **таблиць** та **стовпців** і всі **дані**, що зберігаються, оскільки ви можете знайти **чутливу інформацію** (що буде вразливістю).\
|
||||
Бази даних повинні розташовуватися в `/data/data/the.package.name/databases`, як `/data/data/com.mwr.example.sieve/databases`
|
||||
|
||||
Якщо база даних зберігає конфіденційну інформацію і **зашифрована**, але ви можете **знайти** **пароль** всередині програми, це все ще **вразливість**.
|
||||
|
||||
Перерахуйте таблиці, використовуючи `.tables`, і перераховуйте стовпці таблиць, виконуючи `.schema <table_name>`
|
||||
Перелічте таблиці, використовуючи `.tables`, і перелічте стовпці таблиць, виконавши `.schema <table_name>`
|
||||
|
||||
### Drozer (Експлуатація активностей, постачальників контенту та сервісів)
|
||||
|
||||
@ -331,7 +331,7 @@ Drozer є корисним інструментом для **експлуата
|
||||
```bash
|
||||
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]
|
||||
> Зверніть увагу, що обхід авторизації не завжди є вразливістю, це залежить від того, як працює обхід і яка інформація піддається розкриттю.
|
||||
@ -342,32 +342,32 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
|
||||
#### Tapjacking
|
||||
|
||||
Якщо tapjacking не запобігається, ви можете зловживати експортованою активністю, щоб змусити **користувача виконувати неочікувані дії**. Для отримання додаткової інформації про [**що таке Tapjacking, перейдіть за посиланням**](#tapjacking).
|
||||
Якщо tapjacking не запобігається, ви можете зловживати експортованою активністю, щоб змусити **користувача виконувати несподівані дії**. Для отримання додаткової інформації про [**що таке Tapjacking, перейдіть за посиланням**](#tapjacking).
|
||||
|
||||
### Експлуатація постачальників контенту - доступ до чутливої інформації та її маніпуляція
|
||||
### Використання Content Providers - Доступ до чутливої інформації та її маніпуляція
|
||||
|
||||
[**Прочитайте це, якщо хочете освіжити знання про постачальника контенту.**](android-applications-basics.md#content-provider)\
|
||||
Постачальники контенту в основному використовуються для **обміну даними**. Якщо у програми є доступні постачальники контенту, ви можете **витягти чутливі** дані з них. Також цікаво протестувати можливі **SQL-ін'єкції** та **перетворення шляхів**, оскільки вони можуть бути вразливими.
|
||||
[**Прочитайте це, якщо хочете освіжити знання про Content Provider.**](android-applications-basics.md#content-provider)\
|
||||
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)\
|
||||
Пам'ятайте, що дії сервісу починаються в методі `onStartCommand`.
|
||||
[**Прочитайте це, якщо хочете освіжити знання про Service.**](android-applications-basics.md#services)\
|
||||
Пам'ятайте, що дії Service починаються в методі `onStartCommand`.
|
||||
|
||||
Сервіс в основному є чимось, що **може отримувати дані**, **обробляти** їх і **повертати** (або не повертати) відповідь. Тоді, якщо програма експортує деякі сервіси, вам слід **перевірити** **код**, щоб зрозуміти, що він робить, і **тестувати** його **динамічно** для витягування конфіденційної інформації, обходу заходів аутентифікації...\
|
||||
[**Дізнайтеся, як експлуатувати сервіси за допомогою Drozer.**](drozer-tutorial/index.html#services)
|
||||
[**Дізнайтеся, як експлуатувати Services за допомогою Drozer.**](drozer-tutorial/index.html#services)
|
||||
|
||||
### **Експлуатація приймачів трансляцій**
|
||||
### **Використання Broadcast Receivers**
|
||||
|
||||
[**Прочитайте це, якщо хочете освіжити знання про приймач трансляцій.**](android-applications-basics.md#broadcast-receivers)\
|
||||
Пам'ятайте, що дії приймача трансляцій починаються в методі `onReceive`.
|
||||
[**Прочитайте це, якщо хочете освіжити знання про Broadcast Receiver.**](android-applications-basics.md#broadcast-receivers)\
|
||||
Пам'ятайте, що дії Broadcast Receiver починаються в методі `onReceive`.
|
||||
|
||||
Приймач трансляцій буде чекати на певний тип повідомлення. В залежності від того, як приймач обробляє повідомлення, він може бути вразливим.\
|
||||
[**Дізнайтеся, як експлуатувати приймачі трансляцій за допомогою Drozer.**](#exploiting-broadcast-receivers)
|
||||
Broadcast receiver буде чекати на певний тип повідомлення. В залежності від того, як приймач обробляє повідомлення, він може бути вразливим.\
|
||||
[**Дізнайтеся, як експлуатувати Broadcast Receivers за допомогою Drozer.**](#exploiting-broadcast-receivers)
|
||||
|
||||
### **Експлуатація схем / глибоких посилань**
|
||||
### **Використання Schemes / Deep links**
|
||||
|
||||
Ви можете шукати глибокі посилання вручну, використовуючи інструменти, такі як MobSF, або скрипти, як [цей](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\
|
||||
Ви можете **відкрити** оголошену **схему** за допомогою **adb** або **браузера**:
|
||||
@ -381,26 +381,26 @@ _Зверніть увагу, що ви можете **пропустити ім
|
||||
<!-- 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>
|
||||
```
|
||||
**Код, що виконується**
|
||||
**Виконаний код**
|
||||
|
||||
Щоб знайти **код, який буде виконуватись в додатку**, перейдіть до активності, викликаної глибоким посиланням, і знайдіть функцію **`onNewIntent`**.
|
||||
Щоб знайти **код, який буде виконаний в додатку**, перейдіть до активності, викликаної глибоким посиланням, і знайдіть функцію **`onNewIntent`**.
|
||||
|
||||
 (1) (1) (1).png>)
|
||||
|
||||
**Чутлива інформація**
|
||||
|
||||
Кожного разу, коли ви знаходите глибоке посилання, перевірте, що **воно не отримує чутливі дані (як-от паролі) через параметри URL**, оскільки будь-який інший додаток може **видавати себе за глибоке посилання і вкрасти ці дані!**
|
||||
Кожного разу, коли ви знаходите глибоке посилання, перевірте, що **воно не отримує чутливі дані (наприклад, паролі) через параметри URL**, оскільки будь-який інший додаток може **видавати себе за глибоке посилання і вкрасти ці дані!**
|
||||
|
||||
**Параметри в шляху**
|
||||
|
||||
Ви **також повинні перевірити, чи використовує будь-яке глибоке посилання параметр всередині шляху** 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/).
|
||||
Ви **також повинні перевірити, чи використовує будь-яке глибоке посилання параметр всередині шляху** 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/).
|
||||
|
||||
**Більше прикладів**
|
||||
|
||||
Цей [цікавий звіт про баг-баунті](https://hackerone.com/reports/855618) про посилання (_/.well-known/assetlinks.json_).
|
||||
Цікава [відповідь на баг-баунті](https://hackerone.com/reports/855618) про посилання (_/.well-known/assetlinks.json_).
|
||||
|
||||
### Перевірка та верифікація транспортного рівня
|
||||
### Перевірка та верифікація транспортного шару
|
||||
|
||||
- **Сертифікати не завжди належним чином перевіряються** Android-додатками. Це звичайна практика для цих додатків ігнорувати попередження та приймати самопідписані сертифікати або, в деяких випадках, повертатися до використання HTTP-з'єднань.
|
||||
- **Переговори під час SSL/TLS рукопожаття іноді є слабкими**, використовуючи небезпечні шифри. Ця вразливість робить з'єднання вразливим до атак типу man-in-the-middle (MITM), що дозволяє зловмисникам розшифровувати дані.
|
||||
@ -412,21 +412,21 @@ _Зверніть увагу, що ви можете **пропустити ім
|
||||
|
||||
#### 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).
|
||||
|
||||
Додатки, що націлені на **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, обхід його стає необхідним для перевірки 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/)
|
||||
- Ви також можете спробувати **автоматично обійти SSL Pinning** за допомогою [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
||||
- Ви також можете спробувати **автоматично обійти SSL Pinning** за допомогою **MobSF динамічного аналізу** (пояснено нижче)
|
||||
@ -434,13 +434,13 @@ SSL Pinning - це захід безпеки, при якому додаток
|
||||
|
||||
#### Пошук загальних веб-вразливостей
|
||||
|
||||
Важливо також шукати загальні веб-вразливості в додатку. Детальна інформація про виявлення та усунення цих вразливостей виходить за межі цього резюме, але широко висвітлюється в інших джерелах.
|
||||
Важливо також шукати загальні веб-вразливості в додатку. Детальна інформація про виявлення та усунення цих вразливостей виходить за межі цього резюме, але вона широко висвітлюється в інших джерелах.
|
||||
|
||||
### Frida
|
||||
|
||||
[Frida](https://www.frida.re) - це набір інструментів для динамічної інструментації для розробників, реверс-інженерів та дослідників безпеки.\
|
||||
[Frida](https://www.frida.re) - це набір інструментів динамічної інструментації для розробників, реверс-інженерів та дослідників безпеки.\
|
||||
**Ви можете отримати доступ до працюючого додатку та підключати методи в реальному часі, щоб змінити поведінку, змінити значення, витягти значення, виконати різний код...**\
|
||||
Якщо ви хочете проводити тестування безпеки Android-додатків, вам потрібно знати, як використовувати Frida.
|
||||
Якщо ви хочете провести тестування безпеки Android-додатків, вам потрібно знати, як використовувати Frida.
|
||||
|
||||
- Дізнайтеся, як використовувати Frida: [**Посібник з Frida**](frida-tutorial/index.html)
|
||||
- Деякі "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, завантажуючи 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**
|
||||
|
||||
Перевірте, чи зберігає додаток чутливу інформацію в пам'яті, яку не повинен зберігати, наприклад, паролі або мнемоніки.
|
||||
@ -461,13 +467,13 @@ python3 fridump3.py -u <PID>
|
||||
frida-ps -Uai
|
||||
python3 fridump3.py -u "<Name>"
|
||||
```
|
||||
Це скине пам'ять у папку ./dump, і там ви зможете використовувати grep з чимось на кшталт:
|
||||
Це скине пам'ять у папку ./dump, і там ви можете використовувати grep з чимось на кшталт:
|
||||
```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]+$"
|
||||
```
|
||||
### **Чутливі дані в Keystore**
|
||||
|
||||
У Android Keystore є найкращим місцем для зберігання чутливих даних, однак, з достатніми привілеями все ще **можливо отримати доступ** до нього. Оскільки додатки, як правило, зберігають тут **чутливі дані у відкритому тексті**, пентести повинні перевіряти це як користувач root або хтось з фізичним доступом до пристрою може бути здатний вкрасти ці дані.
|
||||
У Android Keystore є найкращим місцем для зберігання чутливих даних, однак, з достатніми привілеями все ще **можливо отримати доступ** до нього. Оскільки програми, як правило, зберігають тут **чутливі дані у відкритому тексті**, пентести повинні перевіряти це як користувач root або хтось з фізичним доступом до пристрою може бути здатний вкрасти ці дані.
|
||||
|
||||
Навіть якщо додаток зберігав дані в 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`**
|
||||
|
||||
Android надає спосіб **запобігти захопленню скріншотів, встановивши параметр макета FLAG_SECURE**. Використовуючи цей прапор, вміст вікна вважається безпечним, що запобігає його появі на скріншотах або перегляду на небезпечних дисплеях.
|
||||
Android надає спосіб **запобігти захопленню скріншотів, встановивши параметр макета FLAG_SECURE**. Використовуючи цей прапор, вміст вікна обробляється як безпечний, що запобігає його появі на скріншотах або перегляду на небезпечних дисплеях.
|
||||
```bash
|
||||
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
```
|
||||
@ -515,7 +521,7 @@ getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
Можливо, ви знаєте про цей вид вразливостей з вебу. Вам потрібно бути особливо обережними з цими вразливостями в Android-додатку:
|
||||
|
||||
- **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).
|
||||
- **Вічні куки**: У кількох випадках, коли Android-додаток завершує сесію, куки не відкликаються або можуть навіть зберігатися на диску.
|
||||
- [**Безпечний прапорець** у куках](../../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 хості_).\
|
||||
Також, якщо ви створите **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** також може бути дуже корисним для **динамічного аналізу** в **Android**, але в цьому випадку вам потрібно буде встановити MobSF і **genymotion** на вашому хості (VM або Docker не працюватимуть). _Примітка: Спочатку потрібно **запустити VM в genymotion**, а **потім MobSF.**_\
|
||||
**MobSF** також може бути дуже корисним для **динамічного аналізу** в **Android**, але в цьому випадку вам потрібно буде встановити MobSF і **genymotion** на вашому хості (VM або Docker не працюватимуть). _Примітка: Вам потрібно **спочатку запустити VM в genymotion** і **потім MobSF.**_\
|
||||
**Динамічний аналізатор MobSF** може:
|
||||
|
||||
- **Вивантажити дані програми** (URL-адреси, журнали, буфер обміну, скріншоти, зроблені вами, скріншоти, зроблені "**Exported Activity Tester**", електронні листи, бази даних SQLite, XML файли та інші створені файли). Усе це виконується автоматично, за винятком скріншотів, вам потрібно натиснути, коли ви хочете зробити скріншот, або натиснути "**Exported Activity Tester**", щоб отримати скріншоти всіх експортованих активностей.
|
||||
- **Витягувати дані програми** (URL-адреси, журнали, буфер обміну, скріншоти, зроблені вами, скріншоти, зроблені "**Exported Activity Tester**", електронні листи, бази даних SQLite, XML файли та інші створені файли). Усе це виконується автоматично, за винятком скріншотів, вам потрібно натиснути, коли ви хочете зробити скріншот, або вам потрібно натиснути "**Exported Activity Tester**", щоб отримати скріншоти всіх експортованих активностей.
|
||||
- Захоплювати **HTTPS трафік**
|
||||
- Використовувати **Frida** для отримання **інформації під час виконання**
|
||||
|
||||
@ -553,7 +559,7 @@ MobSF також дозволяє вам **diff/Compare** аналіз і інт
|
||||
|
||||
**Frida**
|
||||
|
||||
За замовчуванням, він також використовуватиме деякі скрипти Frida для **обходу SSL пінінгу**, **виявлення root** і **виявлення дебагера**, а також для **моніторингу цікавих API**.\
|
||||
За замовчуванням, він також використовуватиме деякі скрипти Frida для **обходу SSL pinning**, **виявлення root** і **виявлення налагоджувача** та для **моніторингу цікавих API**.\
|
||||
MobSF також може **викликати експортовані активності**, захоплювати **скріншоти** з них і **зберігати** їх для звіту.
|
||||
|
||||
Щоб **почати** динамічне тестування, натисніть зелену кнопку: "**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") і він виведе всі методи класу.
|
||||
- **Шукати шаблон класу**: Шукати класи за шаблоном
|
||||
- **Трасувати методи класу**: **Трасувати** **весь клас** (дивитися вхідні та вихідні дані всіх методів класу). Пам'ятайте, що за замовчуванням MobSF трасує кілька цікавих методів Android API.
|
||||
- **Відстежувати методи класу**: **Відстежити** **весь клас** (дивитися вхідні та вихідні дані всіх методів класу). Пам'ятайте, що за замовчуванням MobSF відстежує кілька цікавих методів Android API.
|
||||
|
||||
Коли ви виберете допоміжний модуль, який хочете використовувати, вам потрібно натиснути "**Start Instrumentation**", і ви побачите всі виходи в "**Frida Live Logs**".
|
||||
Якщо ви вибрали допоміжний модуль, який хочете використовувати, вам потрібно натиснути "**Start Intrumentation**" і ви побачите всі виходи в "**Frida Live Logs**".
|
||||
|
||||
**Shell**
|
||||
|
||||
@ -585,8 +591,8 @@ receivers
|
||||
```
|
||||
**HTTP інструменти**
|
||||
|
||||
Коли 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)).
|
||||
Коли 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)).
|
||||
|
||||
Коли ви закінчите динамічний аналіз з MobSF, ви можете натиснути на "**Start Web API Fuzzer**", щоб **фузити http запити** та шукати вразливості.
|
||||
|
||||
@ -610,7 +616,7 @@ receivers
|
||||
|
||||
### [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
|
||||
pip3 install --user qark # --user is only needed if not using a virtualenv
|
||||
qark --apk path/to/my.apk
|
||||
@ -704,14 +710,14 @@ ProGuard розповсюджується як частина Android SDK і з
|
||||
(З тієї інструкції) Останній раз, коли ми перевіряли, режим роботи Dexguard був:
|
||||
|
||||
- завантажити ресурс як InputStream;
|
||||
- передати результат класу, що наслідує від FilterInputStream, для його розшифрування;
|
||||
- передати результат класу, що успадковує FilterInputStream, для його розшифрування;
|
||||
- виконати деяку безглузду обфускацію, щоб витратити кілька хвилин часу реверсера;
|
||||
- передати розшифрований результат в ZipInputStream, щоб отримати DEX файл;
|
||||
- нарешті, завантажити отриманий DEX як ресурс, використовуючи метод `loadDex`.
|
||||
- передати розшифрований результат ZipInputStream, щоб отримати DEX файл;
|
||||
- нарешті завантажити отриманий DEX як ресурс, використовуючи метод `loadDex`.
|
||||
|
||||
### [DeGuard](http://apk-deguard.com)
|
||||
|
||||
**DeGuard скасовує процес обфускації, виконуваний інструментами обфускації Android. Це дозволяє проводити численні аналізи безпеки, включаючи інспекцію коду та прогнозування бібліотек.**
|
||||
**DeGuard скасовує процес обфускації, виконуваний інструментами обфускації Android. Це дозволяє проводити численні аналізи безпеки, включаючи перевірку коду та прогнозування бібліотек.**
|
||||
|
||||
Ви можете завантажити обфускований 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