Translated ['src/mobile-pentesting/android-app-pentesting/README.md', 's

This commit is contained in:
Translator 2025-08-04 18:36:47 +00:00
parent 56289948ef
commit 91220c4bfa
4 changed files with 217 additions and 64 deletions

View File

@ -322,6 +322,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 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)

View File

@ -25,8 +25,9 @@ android-applications-basics.md
## Інші цікаві трюки
- [Спуфінг вашого місцезнаходження в Play Store](spoofing-your-location-in-play-store.md)
- [Shizuku Privileged API (привілейований доступ без root на основі ADB)](shizuku-privileged-api.md)
- [Shizuku Privileged API (ADB-основний доступ без root)](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)
- Витягти APK з пристрою:
```bash
@ -68,9 +69,9 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
### Основи розуміння програми - Manifest.xml, strings.xml
**Дослідження файлів _Manifest.xml_ та **_strings.xml_** програми може виявити потенційні вразливості безпеки**. Ці файли можна отримати за допомогою декомпілерів або перейменувавши розширення файлу APK на .zip, а потім розпакувавши його.
**Вивчення файлів _Manifest.xml_ та _strings.xml_ програми може виявити потенційні вразливості безпеки**. Ці файли можна отримати за допомогою декомпілерів або перейменувавши розширення файлу APK на .zip, а потім розпакувавши його.
**Вразливості**, виявлені з **Manifest.xml** включають:
**Вразливості**, виявлені з **Manifest.xml**, включають:
- **Дебаговані програми**: Програми, які встановлені як дебаговані (`debuggable="true"`) у файлі _Manifest.xml_, становлять ризик, оскільки дозволяють з'єднання, які можуть призвести до експлуатації. Для подальшого розуміння того, як експлуатувати дебаговані програми, зверніться до посібника з пошуку та експлуатації дебагованих програм на пристрої.
- **Налаштування резервного копіювання**: Атрибут `android:allowBackup="false"` повинен бути явно встановлений для програм, що працюють з чутливою інформацією, щоб запобігти несанкціонованим резервним копіям даних через adb, особливо коли увімкнено налагодження USB.
@ -78,9 +79,9 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
- **Експортовані активності та сервіси**: Виявлення експортованих активностей та сервісів у маніфесті може підкреслити компоненти, які можуть бути зловживані. Подальший аналіз під час динамічного тестування може виявити, як експлуатувати ці компоненти.
- **Постачальники контенту та FileProviders**: Відкриті постачальники контенту можуть дозволити несанкціонований доступ або модифікацію даних. Конфігурацію FileProviders також слід ретельно перевірити.
- **Отримувачі трансляцій та URL-схеми**: Ці компоненти можуть бути використані для експлуатації, з особливою увагою до того, як управляються URL-схеми для вразливостей введення.
- **Версії SDK**: Атрибути `minSdkVersion`, `targetSDKVersion` та `maxSdkVersion` вказують на підтримувані версії Android, підкреслюючи важливість того, щоб не підтримувати застарілі, вразливі версії Android з міркувань безпеки.
- **Версії SDK**: Атрибути `minSdkVersion`, `targetSDKVersion` та `maxSdkVersion` вказують на підтримувані версії Android, підкреслюючи важливість непідтримки застарілих, вразливих версій Android з міркувань безпеки.
З файлу **strings.xml** можна виявити чутливу інформацію, таку як API-ключі, власні схеми та інші нотатки розробників, що підкреслює необхідність ретельного перегляду цих ресурсів.
З файлу **strings.xml** можна виявити чутливу інформацію, таку як API ключі, власні схеми та інші нотатки розробників, що підкреслює необхідність ретельного перегляду цих ресурсів.
### Tapjacking
@ -112,26 +113,26 @@ android-task-hijacking.md
1. **Статичний аналіз:**
- **Переконайтеся**, що використання `MODE_WORLD_READABLE` і `MODE_WORLD_WRITABLE` **ретельно перевіряється**. Ці режими **можуть потенційно відкрити** файли для **небажаного або несанкціонованого доступу**.
2. **Динамічний аналіз:**
- **Перевірте** **дозволи**, встановлені на файли, створені програмою. Зокрема, **перевірте**, чи є файли **встановленими на читання або запис для всіх**. Це може становити значний ризик для безпеки, оскільки це дозволить **будь-якій програмі**, встановленій на пристрої, незалежно від її походження чи наміру, **читати або змінювати** ці файли.
- **Перевірте** **дозволи**, встановлені на файли, створені програмою. Зокрема, **перевірте**, чи є файли **встановленими на читання або запис по всьому світу**. Це може становити значний ризик для безпеки, оскільки це дозволить **будь-якій програмі**, встановленій на пристрої, незалежно від її походження або наміру, **читати або модифікувати** ці файли.
**Зовнішнє зберігання**
При роботі з файлами на **зовнішньому зберіганні**, наприклад, на SD-картах, слід вжити певних запобіжних заходів:
1. **Доступність**:
- Файли на зовнішньому зберіганні є **глобально доступними для читання та запису**. Це означає, що будь-яка програма або користувач можуть отримати доступ до цих файлів.
- Файли на зовнішньому зберіганні є **глобально читабельними та записуваними**. Це означає, що будь-яка програма або користувач можуть отримати доступ до цих файлів.
2. **Проблеми безпеки**:
- З огляду на легкість доступу, рекомендується **не зберігати чутливу інформацію** на зовнішньому зберіганні.
- Зовнішнє зберігання може бути видалено або доступно будь-якою програмою, що робить його менш безпечним.
3. **Обробка даних з зовнішнього зберігання**:
- Завжди **виконуйте валідацію введення** на даних, отриманих з зовнішнього зберігання. Це важливо, оскільки дані походять з ненадійного джерела.
- Зберігання виконуваних файлів або класів на зовнішньому зберіганні для динамічного завантаження категорично не рекомендується.
- Якщо ваша програма повинна отримувати виконувані файли з зовнішнього зберігання, переконайтеся, що ці файли **підписані та криптографічно перевірені** перед їх динамічним завантаженням. Цей крок є важливим для підтримки цілісності безпеки вашої програми.
- Якщо ваша програма повинна отримувати виконувані файли з зовнішнього зберігання, переконайтеся, що ці файли **підписані та криптографічно перевірені** перед їх динамічним завантаженням. Цей крок є життєво важливим для підтримки цілісності безпеки вашої програми.
Зовнішнє зберігання може бути **доступним** у `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
> [!TIP]
> Починаючи з Android 4.4 (**API 17**), SD-карта має структуру каталогів, яка **обмежує доступ програми до каталогу, який спеціально призначений для цієї програми**. Це запобігає зловмисним програмам отримувати доступ для читання або запису до файлів іншої програми.
> Починаючи з Android 4.4 (**API 17**), SD-карта має структуру каталогів, яка **обмежує доступ програми до каталогу, який спеціально призначений для цієї програми**. Це запобігає зловмисним програмам отримувати доступ на читання або запис до файлів іншої програми.
**Чутливі дані, збережені у відкритому тексті**
@ -161,11 +162,11 @@ sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
### Інші перевірки
- Рекомендується **обфускувати APK**, щоб ускладнити реверс-інженерні роботи для зловмисників.
- Якщо додаток чутливий (як банківські додатки), він повинен виконувати **власні перевірки, щоб дізнатися, чи мобільний пристрій є рутованим**, і діяти відповідно.
- Якщо додаток чутливий (як банківські додатки), він повинен перевіряти, чи використовується **емулятор**.
- Якщо додаток чутливий (як банківські додатки), він повинен **перевіряти свою цілісність перед виконанням**, щоб перевірити, чи був він змінений.
- Використовуйте [**APKiD**](https://github.com/rednaga/APKiD), щоб перевірити, який компілятор/упаковщик/обфускатор був використаний для створення APK
- Рекомендується **обфускувати APK**, щоб ускладнити реверс інженерії для зловмисників.
- Якщо додаток є чутливим (як банківські додатки), він повинен виконувати **власні перевірки, щоб дізнатися, чи мобільний пристрій є рутованим**, і діяти відповідно.
- Якщо додаток є чутливим (як банківські додатки), він повинен перевіряти, чи використовується **емулятор**.
- Якщо додаток є чутливим (як банківські додатки), він повинен **перевіряти свою цілісність перед виконанням**, щоб перевірити, чи був він змінений.
- Використовуйте [**APKiD**](https://github.com/rednaga/APKiD), щоб перевірити, який компілятор/упаковщик/обфускатор був використаний для створення APK.
### React Native Application
@ -195,7 +196,7 @@ react-native-application.md
### Витік секретів
Додаток може містити секрети (API ключі, паролі, приховані URL, піддомени...) всередині, які ви можете виявити. Ви можете використовувати інструмент, такий як [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks)
Додаток може містити секрети (API ключі, паролі, приховані URL, піддомени...) всередині нього, які ви можете виявити. Ви можете використовувати інструмент, такий як [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks).
### Обхід біометричної аутентифікації
@ -238,7 +239,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}}
@ -267,7 +268,7 @@ avd-android-virtual-device.md
4. Натисніть **Номер збірки** 7 разів.
5. Поверніться назад, і ви знайдете **Опції розробника**.
> Після того, як ви встановили додаток, перше, що ви повинні зробити, це спробувати його та дослідити, що він робить, як він працює і звикнути до нього.\
> Після того, як ви встановили додаток, перше, що вам слід зробити, це спробувати його та дослідити, що він робить, як він працює і звикнути до нього.\
> Я рекомендую **виконати цей початковий динамічний аналіз, використовуючи динамічний аналіз MobSF + pidcat**, щоб ми могли **вивчити, як працює додаток**, поки MobSF **збирає** багато **цікавих** **даних**, які ви зможете переглянути пізніше.
### Ненавмисний витік даних
@ -277,12 +278,12 @@ avd-android-virtual-device.md
Розробники повинні бути обережними, щоб не розкривати **інформацію для налагодження** публічно, оскільки це може призвести до витоку чутливих даних. Рекомендується використовувати інструменти [**pidcat**](https://github.com/JakeWharton/pidcat) та `adb logcat` для моніторингу журналів програми, щоб виявити та захистити чутливу інформацію. **Pidcat** віддається перевага за його простоту використання та читабельність.
> [!WARNING]
> Зверніть увагу, що з **пізніми версіями, ніж Android 4.0**, **додатки можуть отримувати доступ лише до своїх власних журналів**. Тому додатки не можуть отримувати доступ до журналів інших додатків.\
> Зверніть увагу, що з **пізніми версіями Android 4.0**, **додатки можуть отримувати доступ лише до своїх власних журналів**. Тому додатки не можуть отримувати доступ до журналів інших додатків.\
> Тим не менш, все ще рекомендується **не записувати чутливу інформацію**.
**Кешування буфера копіювання/вставки**
Фреймворк **на основі буфера обміну** Android дозволяє функціональність копіювання-вставки в додатках, але несе ризик, оскільки **інші додатки** можуть **отримати доступ** до буфера обміну, потенційно розкриваючи чутливі дані. Важливо **відключити функції копіювання/вставки** для чутливих частин програми, таких як дані кредитних карток, щоб запобігти витоку даних.
Фреймворк Android на основі **буфера обміну** дозволяє функціональність копіювання-вставки в додатках, але несе ризик, оскільки **інші додатки** можуть **отримати доступ** до буфера обміну, потенційно розкриваючи чутливі дані. Важливо **відключити функції копіювання/вставки** для чутливих частин програми, таких як дані кредитних карток, щоб запобігти витоку даних.
**Журнали аварій**
@ -292,16 +293,16 @@ avd-android-virtual-device.md
**Дані аналітики, надіслані третім особам**
Додатки часто інтегрують сервіси, такі як Google Adsense, які можуть ненавмисно **викривати чутливі дані** через неправильну реалізацію розробниками. Щоб виявити потенційні витоки даних, рекомендується **перехопити трафік програми** та перевірити, чи надсилається будь-яка чутлива інформація третім особам.
Додатки часто інтегрують сервіси, такі як Google Adsense, які можуть ненавмисно **викривати чутливі дані** через неналежну реалізацію розробниками. Щоб виявити потенційні витоки даних, рекомендується **перехопити трафік програми** та перевірити, чи надсилається будь-яка чутлива інформація третім особам.
### SQLite DBs
### SQLite БД
Більшість додатків використовуватимуть **внутрішні SQLite бази даних** для збереження інформації. Під час пентесту зверніть увагу на **бази даних**, що створюються, назви **таблиць** та **стовпців** і всі **дані**, що зберігаються, оскільки ви можете знайти **чутливу інформацію** (що буде вразливістю).\
Бази даних повинні розташовуватися в `/data/data/the.package.name/databases`, як `/data/data/com.mwr.example.sieve/databases`
Більшість додатків використовуватимуть **внутрішні SQLite бази даних** для збереження інформації. Під час пентесту зверніть увагу на **бази даних**, які створюються, назви **таблиць** та **стовпців** і всі **дані**, що зберігаються, оскільки ви можете знайти **чутливу інформацію** (що буде вразливістю).\
Бази даних повинні розташовуватися в `/data/data/the.package.name/databases`, як `/data/data/com.mwr.example.sieve/databases`.
Якщо база даних зберігає конфіденційну інформацію і **зашифрована**, але ви можете **знайти** **пароль** всередині програми, це все ще є **вразливістю**.
Перерахуйте таблиці, використовуючи `.tables`, і перераховуйте стовпці таблиць, виконуючи `.schema <table_name>`
Перелічте таблиці, використовуючи `.tables`, і перелічте стовпці таблиць, виконуючи `.schema <table_name>`.
### Drozer (Експлуатація активностей, постачальників контенту та сервісів)
@ -326,7 +327,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]
> Зверніть увагу, що обхід авторизації не завжди є вразливістю, це залежить від того, як працює обхід і яка інформація піддається розкриттю.
@ -389,7 +390,7 @@ _Зверніть увагу, що ви можете **пропустити ім
**Параметри в шляху**
Ви **також повинні перевірити, чи використовує будь-яке глибоке посилання параметр всередині шляху** 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/).
**Більше прикладів**
@ -398,16 +399,16 @@ _Зверніть увагу, що ви можете **пропустити ім
### Перевірка та верифікація транспортного шару
- **Сертифікати не завжди належним чином перевіряються** Android-додатками. Це звичайна практика для цих додатків ігнорувати попередження та приймати самопідписані сертифікати або, в деяких випадках, повертатися до використання HTTP-з'єднань.
- **Переговори під час SSL/TLS рукопожаття іноді є слабкими**, використовуючи небезпечні шифри. Ця вразливість робить з'єднання вразливим до атак "людина посередині" (MITM), що дозволяє зловмисникам розшифровувати дані.
- **Переговори під час SSL/TLS рукопожаття іноді є слабкими**, використовуючи ненадійні шифри. Ця вразливість робить з'єднання вразливим до атак типу man-in-the-middle (MITM), що дозволяє зловмисникам розшифровувати дані.
- **Витік приватної інформації** є ризиком, коли додатки аутентифікуються за допомогою захищених каналів, але потім спілкуються через незахищені канали для інших транзакцій. Цей підхід не захищає чутливі дані, такі як сесійні куки або дані користувачів, від перехоплення зловмисними особами.
#### Перевірка сертифікатів
Ми зосередимося на **перевірці сертифікатів**. Цілісність сертифіката сервера повинна бути перевірена для підвищення безпеки. Це важливо, оскільки небезпечні конфігурації TLS та передача чутливих даних через незашифровані канали можуть становити значні ризики. Для детальних кроків щодо перевірки сертифікатів сервера та усунення вразливостей, [**цей ресурс**](https://manifestsecurity.com/android-application-security-part-10/) надає всебічні рекомендації.
Ми зосередимося на **перевірці сертифікатів**. Цілісність сертифіката сервера повинна бути перевірена для підвищення безпеки. Це важливо, оскільки ненадійні конфігурації TLS та передача чутливих даних через незашифровані канали можуть становити значні ризики. Для детальних кроків щодо перевірки сертифікатів сервера та усунення вразливостей, [**цей ресурс**](https://manifestsecurity.com/android-application-security-part-10/) надає всебічні рекомендації.
#### SSL Pinning
SSL Pinning - це захід безпеки, при якому додаток перевіряє сертифікат сервера проти відомої копії, збереженої в самому додатку. Цей метод є важливим для запобігання атакам MITM. Рекомендується впроваджувати SSL Pinning для додатків, що обробляють чутливу інформацію.
SSL Pinning - це захід безпеки, при якому додаток перевіряє сертифікат сервера на відповідність відомій копії, збереженій у самому додатку. Цей метод є важливим для запобігання атакам MITM. Рекомендується впроваджувати SSL Pinning для додатків, які обробляють чутливу інформацію.
#### Інспекція трафіку
@ -415,7 +416,7 @@ SSL Pinning - це захід безпеки, при якому додаток
Додатки, що націлені на **API Level 24 і вище**, потребують модифікацій конфігурації безпеки мережі, щоб приймати сертифікат CA проксі. Цей крок є критично важливим для перевірки зашифрованого трафіку. Для інструкцій щодо модифікації конфігурації безпеки мережі, [**зверніться до цього посібника**](make-apk-accept-ca-certificate.md).
Якщо використовується **Flutter**, вам потрібно дотримуватись інструкцій на [**цій сторінці**](flutter.md). Це пов'язано з тим, що просто додавання сертифіката в сховище не спрацює, оскільки Flutter має свій власний список дійсних CA.
Якщо використовується **Flutter**, вам потрібно дотримуватись інструкцій на [**цій сторінці**](flutter.md). Це пов'язано з тим, що просто додавання сертифіката до сховища не спрацює, оскільки Flutter має свій власний список дійсних CA.
#### Обхід SSL Pinning
@ -435,11 +436,11 @@ SSL Pinning - це захід безпеки, при якому додаток
[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)
- Ojection - це чудово для автоматизації використання Frida: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
- Ojection - це чудовий інструмент для автоматизації використання Frida: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
- Ви можете знайти деякі чудові скрипти Frida тут: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
- Спробуйте обійти механізми анти-дебагінгу / анти-Frida, завантажуючи 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))
@ -456,13 +457,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, дані повинні бути зашифровані.
@ -478,13 +479,13 @@ frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app
```
### **Фонові зображення**
Коли ви ставите додаток у фоновий режим, Android зберігає **знімок додатку**, щоб, коли його відновлюють на передній план, він починає завантажувати зображення перед додатком, тому здається, що додаток завантажився швидше.
Коли ви ставите додаток у фоновий режим, Android зберігає **знімок додатка**, щоб, коли його відновлюють на передній план, він починає завантажувати зображення перед додатком, тому здається, що додаток завантажився швидше.
Однак, якщо цей знімок містить **чутливу інформацію**, хтось, хто має доступ до знімка, може **викрасти цю інформацію** (зверніть увагу, що вам потрібен root для доступу до неї).
Знімки зазвичай зберігаються за адресою: **`/data/system_ce/0/snapshots`**
Android надає спосіб **запобігти захопленню скріншотів, встановивши параметр макета FLAG_SECURE**. Використовуючи цей прапор, вміст вікна вважається безпечним, що запобігає його появі на скріншотах або перегляду на небезпечних дисплеях.
Android надає спосіб **запобігти захопленню скріншотів, встановивши параметр макета FLAG_SECURE**. Використовуючи цей прапор, вміст вікна обробляється як безпечний, що запобігає його появі на скріншотах або перегляду на небезпечних дисплеях.
```bash
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
```
@ -494,23 +495,23 @@ getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
### Ін'єкція намірів
Розробники часто створюють проксі-компоненти, такі як активності, сервіси та приймачі трансляцій, які обробляють ці Намір і передають їх методам, таким як `startActivity(...)` або `sendBroadcast(...)`, що може бути ризиковано.
Розробники часто створюють проксі-компоненти, такі як активності, сервіси та приймачі широкомовлення, які обробляють ці Намір і передають їх методам, таким як `startActivity(...)` або `sendBroadcast(...)`, що може бути ризиковано.
Небезпека полягає в тому, що зловмисники можуть спонукати до активації неекспортованих компонентів додатка або отримати доступ до чутливих постачальників контенту, неправильно перенаправляючи ці Намір. Яскравим прикладом є компонент `WebView`, який перетворює URL-адреси на об'єкти `Intent` через `Intent.parseUri(...)` і потім виконує їх, що може призвести до зловмисних ін'єкцій Намір.
Небезпека полягає в тому, що зловмисники можуть спонукати до активації неекспортованих компонентів додатка або отримати доступ до чутливих постачальників контенту, неправильно перенаправляючи ці Намір. Яскравим прикладом є компонент `WebView`, який перетворює URL-адреси на об'єкти `Intent` через `Intent.parseUri(...)` і потім виконує їх, що може призвести до шкідливих ін'єкцій Намір.
### Основні висновки
- **Ін'єкція намірів** подібна до проблеми відкритого перенаправлення в вебі.
- Експлойти включають передачу об'єктів `Intent` як додаткових параметрів, які можуть бути перенаправлені для виконання небезпечних операцій.
- Це може відкрити неекспортовані компоненти та постачальників контенту для зловмисників.
- Перетворення URL-адреси `WebView` на `Intent` може сприяти ненавмисним діям.
- Перетворення URL в `Intent` у `WebView` може сприяти ненавмисним діям.
### Ін'єкції на стороні клієнта Android та інші
Можливо, ви знаєте про цей вид вразливостей з вебу. Вам потрібно бути особливо обережними з цими вразливостями в 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)
@ -533,14 +534,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`, тоді **hash** буде **завантажений** замість файлу.
MobSF також дозволяє вам **diff/Compare** аналіз і інтегрувати **VirusTotal** (вам потрібно буде вказати свій API ключ у _MobSF/settings.py_ і активувати його: `VT_ENABLED = TRUE` `VT_API_KEY = <Ваш API ключ>` `VT_UPLOAD = TRUE`). Ви також можете встановити `VT_UPLOAD` на `False`, тоді **хеш** буде **завантажений** замість файлу.
### Допоміжний динамічний аналіз з 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** для отримання **інформації під час виконання**
@ -548,7 +549,7 @@ MobSF також дозволяє вам **diff/Compare** аналіз і інт
**Frida**
За замовчуванням, він також використовуватиме деякі скрипти Frida для **обходу SSL пінінгу**, **виявлення root** і **виявлення дебагера**, а також для **моніторингу цікавих API**.\
За замовчуванням він також використовуватиме деякі скрипти Frida для **обходу SSL пінінгу**, **виявлення root** і **виявлення дебагера**, а також для **моніторингу цікавих API**.\
MobSF також може **викликати експортовані активності**, захоплювати **скріншоти** з них і **зберігати** їх для звіту.
Щоб **почати** динамічне тестування, натисніть зелену кнопку: "**Start Instrumentation**". Натисніть "**Frida Live Logs**", щоб побачити журнали, згенеровані скриптами Frida, і "**Live API Monitor**", щоб побачити всі виклики до підключених методів, передані аргументи та повернені значення (це з'явиться після натискання "Start Instrumentation").\
@ -556,7 +557,7 @@ MobSF також дозволяє вам завантажувати власні
![](<../../images/image (419).png>)
Більше того, у вас є деякі допоміжні функції Frida:
Крім того, у вас є деякі допоміжні функції Frida:
- **Перерахувати завантажені класи**: Він виведе всі завантажені класи
- **Захопити рядки**: Він виведе всі захоплені рядки під час використання програми (дуже шумно)
@ -565,11 +566,11 @@ MobSF також дозволяє вам завантажувати власні
- **Шукати шаблон класу**: Шукати класи за шаблоном
- **Трасувати методи класу**: **Трасувати** **весь клас** (дивитися вхідні та вихідні дані всіх методів класу). Пам'ятайте, що за замовчуванням MobSF трасує кілька цікавих методів Android API.
Коли ви виберете допоміжний модуль, який хочете використовувати, вам потрібно натиснути "**Start Intrumentation**" і ви побачите всі виходи в "**Frida Live Logs**".
Коли ви виберете допоміжний модуль, який хочете використовувати, вам потрібно натиснути "**Start Instrumentation**" і ви побачите всі виходи в "**Frida Live Logs**".
**Shell**
Mobsf також надає вам оболонку з деякими **adb** командами, **MobSF командами** та загальними **shell** **командами** внизу сторінки динамічного аналізу. Деякі цікаві команди:
Mobsf також надає вам оболонку з деякими **adb** командами, **MobSF командами** та загальними **shell** **командами** внизу сторінки динамічного аналізу. Декілька цікавих команд:
```bash
help
shell ls
@ -578,21 +579,21 @@ exported_activities
services
receivers
```
**HTTP tools**
**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 запити** і шукати вразливості.
Коли ви закінчите динамічний аналіз з MobSF, ви можете натиснути на "**Start Web API Fuzzer**", щоб **фузити http запити** та шукати вразливості.
> [!TIP]
> Після виконання динамічного аналізу з MobSF налаштування проксі можуть бути неправильно налаштовані, і ви не зможете їх виправити з GUI. Ви можете виправити налаштування проксі, виконавши:
> Після виконання динамічного аналізу з MobSF налаштування проксі можуть бути неправильно сконфігуровані, і ви не зможете їх виправити з GUI. Ви можете виправити налаштування проксі, виконавши:
>
> ```
> adb shell settings put global http_proxy :0
> ```
### Assisted Dynamic Analysis with Inspeckage
### Допоміжний динамічний аналіз з Inspeckage
Ви можете отримати інструмент з [**Inspeckage**](https://github.com/ac-pm/Inspeckage).\
Цей інструмент використовує деякі **Hooks**, щоб дати вам знати **що відбувається в додатку** під час виконання **динамічного аналізу**.
@ -605,7 +606,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
@ -615,7 +616,7 @@ qark --java path/to/specific/java/file.java
### [**ReverseAPK**](https://github.com/1N3/ReverseAPK.git)
- Відображає всі витягнуті файли для зручного посилання
- Автоматично декомпілює APK файли в Java та Smali формат
- Автоматично декомпілює APK файли у формат Java та Smali
- Аналізує AndroidManifest.xml на наявність поширених вразливостей та поведінки
- Статичний аналіз вихідного коду на наявність поширених вразливостей та поведінки
- Інформація про пристрій
@ -657,9 +658,9 @@ androbugs.exe -f [APK file]
**Androwarn** - це інструмент, основна мета якого полягає в виявленні та попередженні користувача про потенційно шкідливу поведінку, розроблену Android-додатком.
Виявлення здійснюється за допомогою **статичного аналізу** байт-коду Dalvik додатка, представленого як **Smali**, з використанням бібліотеки [`androguard`](https://github.com/androguard/androguard).
Виявлення здійснюється за допомогою **статичного аналізу** байт-коду Dalvik додатку, представленого як **Smali**, з використанням бібліотеки [`androguard`](https://github.com/androguard/androguard).
Цей інструмент шукає **поширену поведінку "поганих" додатків**, таких як: ексфільтрація ідентифікаторів телекомунікацій, перехоплення аудіо/відео потоків, модифікація PIM-даних, виконання довільного коду...
Цей інструмент шукає **поширену поведінку "поганих" додатків**, таких як: ексфільтрація ідентифікаторів телекомунікацій, перехоплення аудіо/відео потоків, модифікація даних PIM, виконання довільного коду...
```
python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
```
@ -694,7 +695,7 @@ ProGuard розповсюджується як частина Android SDK і з
### [DexGuard](https://www.guardsquare.com/dexguard)
Знайдіть покрокову інструкцію для деобфускації apk в [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)
Знайдіть покрокову інструкцію для деобфускації apk на [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)
(З тієї інструкції) Останній раз, коли ми перевіряли, режим роботи Dexguard був:
@ -702,7 +703,7 @@ ProGuard розповсюджується як частина Android SDK і з
- передати результат класу, що наслідує від FilterInputStream, для його розшифрування;
- виконати деяку безглузду обфускацію, щоб витратити кілька хвилин часу реверсера;
- передати розшифрований результат в ZipInputStream, щоб отримати DEX файл;
- нарешті завантажити отриманий DEX як ресурс, використовуючи метод `loadDex`.
- нарешті, завантажити отриманий DEX як ресурс, використовуючи метод `loadDex`.
### [DeGuard](http://apk-deguard.com)

View File

@ -0,0 +1,145 @@
# Зловживання службами доступності Android
{{#include ../../banners/hacktricks-training.md}}
## Огляд
`AccessibilityService` була створена, щоб допомогти користувачам з обмеженими можливостями взаємодіяти з пристроями Android. На жаль, ті ж **потужні API автоматизації** (глобальна навігація, введення тексту, обробка жестів, вікна накладок…) можуть бути використані шкідливим ПЗ для отримання **повного віддаленого контролю** над пристроєм _без прав root_.
Сучасні банківські трояни Android та трояни віддаленого доступу (RAT) такі як **PlayPraetor, SpyNote, BrasDex, SOVA, ToxicPanda** та багато інших слідують одному й тому ж рецепту:
1. Соціально інженерити жертву, щоб вона ввімкнула зловмисну службу доступності (дозвіл *BIND_ACCESSIBILITY_SERVICE* вважається "високим ризиком" і вимагає явної дії користувача).
2. Використовувати службу для
* захоплення кожної події UI та тексту, що з'являється на екрані,
* ін'єкції синтетичних жестів (`dispatchGesture`) та глобальних дій (`performGlobalAction`), щоб автоматизувати будь-яке завдання, яке бажає оператор,
* малювання накладок на весь екран поверх легітимних додатків, використовуючи тип вікна **TYPE_ACCESSIBILITY_OVERLAY** (без запиту `SYSTEM_ALERT_WINDOW`!),
* безшумного надання додаткових дозволів під час виконання, натискаючи на системні діалоги від імені жертви.
3. Екстракція даних або виконання **On-Device-Fraud (ODF)** в реальному часі, поки користувач дивиться на цілком нормальний екран.
---
## Запит на дозвіл
```xml
<!-- AndroidManifest.xml -->
<service
android:name="com.evil.rat.EvilService"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
android:exported="false">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data android:name="android.accessibilityservice"
android:resource="@xml/evil_accessibility_config"/>
</service>
```
Супутній XML визначає, як виглядатиме підроблений діалог:
```xml
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/service_description"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFeedbackType="feedbackGeneric"
android:notificationTimeout="200"
android:canPerformGestures="true"
android:canRetrieveWindowContent="true"/>
```
---
## Примітиви автоматизації віддаленого інтерфейсу користувача
```java
public class EvilService extends AccessibilityService {
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
// harvest text or detect foreground app change
}
// Simulate HOME / BACK / RECENTS …
private void navHome() { performGlobalAction(GLOBAL_ACTION_HOME); }
private void navBack() { performGlobalAction(GLOBAL_ACTION_BACK); }
private void openRecents() { performGlobalAction(GLOBAL_ACTION_RECENTS); }
// Generic tap / swipe
public void tap(float x, float y) {
Path p = new Path(); p.moveTo(x, y);
GestureDescription.StrokeDescription s = new GestureDescription.StrokeDescription(p, 0, 50);
dispatchGesture(new GestureDescription.Builder().addStroke(s).build(), null, null);
}
}
```
З використанням лише цих двох API зловмисник може:
* Розблокувати екран, відкрити банківський додаток, навігувати його UI-дерево та надіслати форму переказу.
* Приймати кожен діалог дозволу, що з'являється.
* Встановлювати/оновлювати додаткові APK через намір Play Store.
---
## Шаблони зловживання
### 1. Фішинг з накладенням (Збирання облікових даних)
Прозорий або непрозорий `WebView` додається до менеджера вікон:
```java
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
MATCH_PARENT, MATCH_PARENT,
TYPE_ACCESSIBILITY_OVERLAY, // ⬅ bypasses SYSTEM_ALERT_WINDOW
FLAG_NOT_FOCUSABLE | FLAG_NOT_TOUCH_MODAL, // touches still reach the real app
PixelFormat.TRANSLUCENT);
wm.addView(phishingView, lp);
```
Жертва вводить облікові дані у фальшиву форму, в той час як фоновий додаток отримує ті ж жести жоден підозрілий запит "малювати поверх інших додатків" ніколи не відображається.
> Детальний приклад: розділ *Accessibility Overlay Phishing* на сторінці Tapjacking.
### 2. Автоматизація шахрайства на пристрої
Сімейства шкідливих програм, такі як **PlayPraetor**, підтримують постійний канал WebSocket, де оператор може видавати команди високого рівня (`init`, `update`, `alert_arr`, `report_list`, …). Сервіс перетворює ці команди на низькорівневі жести, досягаючи несанкціонованих транзакцій в реальному часі, які легко обходять багатофакторну аутентифікацію, пов'язану з цим пристроєм.
### 3. Потокове відео та моніторинг
Поєднуючи **MediaProjection API** з бібліотекою клієнта RTMP, RAT може транслювати живий буфер кадрів на `rtmp://<c2>:1935/live/<device_id>`, надаючи противнику ідеальну ситуаційну обізнаність, поки движок Accessibility керує інтерфейсом.
---
## PlayPraetor робочий процес командування та контролю
1. **HTTP(S) heartbeat** ітерувати по заздалегідь визначеному списку, поки один домен не відповість `POST /app/searchPackageName` з активним C2.
2. **WebSocket (порт 8282)** двосторонні JSON команди:
* `update` надсилати нові конфігурації/APK
* `alert_arr` налаштувати шаблони накладок
* `report_list` надіслати список цільових назв пакетів
* `heartbeat_web` підтримувати з'єднання
3. **RTMP (порт 1935)** трансляція живого екрану/відео.
4. **REST ексфільтрація**
* `/app/saveDevice` (відбиток)
* `/app/saveContacts` | `/app/saveSms` | `/app/uploadImageBase64`
* `/app/saveCardPwd` (банківські облікові дані)
**AccessibilityService** є локальним движком, який перетворює ці команди з хмари на фізичні взаємодії.
---
## Виявлення шкідливих служб доступності
* `adb shell settings get secure enabled_accessibility_services`
* Налаштування → Доступність → *Завантажені служби* шукайте додатки, які **не** з Google Play.
* Рішення MDM / EMM можуть примусово застосовувати `ACCESSIBILITY_ENFORCEMENT_DEFAULT_DENY` (Android 13+), щоб блокувати завантажені служби.
* Аналізуйте запущені служби:
```bash
adb shell dumpsys accessibility | grep "Accessibility Service"
```
---
## Рекомендації щодо посилення безпеки для розробників додатків
* Позначайте чутливі елементи з `android:accessibilityDataSensitive="accessibilityDataPrivateYes"` (API 34+).
* Поєднуйте `setFilterTouchesWhenObscured(true)` з `FLAG_SECURE`, щоб запобігти викраденню натискань/накладок.
* Виявляйте накладки, опитуючи `WindowManager.getDefaultDisplay().getFlags()` або API `ViewRootImpl`.
* Відмовляйтеся від роботи, коли активна `Settings.canDrawOverlays()` **або** ненадійна служба доступності.
---
## Посилання
* [PlayPraetors evolving threat: How Chinese-speaking actors globally scale an Android RAT](https://www.cleafy.com/cleafy-labs/playpraetors-evolving-threat-how-chinese-speaking-actors-globally-scale-an-android-rat)
* [Android accessibility documentation Automating UI interaction](https://developer.android.com/guide/topics/ui/accessibility/service)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -4,12 +4,12 @@
## **Основна інформація**
**Tapjacking** - це атака, коли **шкідлива** **додаток** запускається і **розташовується поверх додатку жертви**. Як тільки він видимо закриває додаток жертви, його інтерфейс користувача спроектований таким чином, щоб обманути користувача взаємодіяти з ним, в той час як він передає взаємодію до додатку жертви.\
Фактично, це **осліплює користувача, не даючи йому знати, що він насправді виконує дії в додатку жертви**.
**Tapjacking** - це атака, коли **зловмисний** **додаток** запускається і **розташовується поверх додатку жертви**. Як тільки він видимо закриває додаток жертви, його інтерфейс користувача спроектований таким чином, щоб обманути користувача взаємодіяти з ним, в той час як він передає взаємодію до додатку жертви.\
Таким чином, він **осліплює користувача, не даючи йому знати, що він насправді виконує дії в додатку жертви**.
### Виявлення
Щоб виявити додатки, вразливі до цієї атаки, ви повинні шукати **експортовані активності** в маніфесті android (зверніть увагу, що активність з intent-filter автоматично експортується за замовчуванням). Як тільки ви знайдете експортовані активності, **перевірте, чи потребують вони будь-яких дозволів**. Це пов'язано з тим, що **шкідливий додаток також потребуватиме цього дозволу**.
Щоб виявити додатки, вразливі до цієї атаки, ви повинні шукати **експортовані активності** в маніфесті android (зверніть увагу, що активність з intent-filter автоматично експортується за замовчуванням). Як тільки ви знайдете експортовані активності, **перевірте, чи потребують вони будь-яких дозволів**. Це пов'язано з тим, що **зловмисний додаток також потребуватиме цього дозволу**.
Ви також можете перевірити мінімальну версію SDK додатку, перевіряючи значення **`android:minSdkVersion`** у файлі **`AndroidManifest.xml`**. Якщо значення **менше 30**, додаток вразливий до Tapjacking.
@ -54,7 +54,7 @@ android:filterTouchesWhenObscured="true">
Ви можете використовувати [**qark**](https://github.com/linkedin/qark) з параметрами `--exploit-apk` --sdk-path `/Users/username/Library/Android/sdk`, щоб створити шкідливий додаток для перевірки можливих вразливостей **Tapjacking**.\
Пом'якшення є відносно простим, оскільки розробник може вибрати не отримувати події дотику, коли вид покритий іншим. Використовуючи [Довідник розробника Android](https://developer.android.com/reference/android/view/View#security):
Пом'якшення є відносно простим, оскільки розробник може вирішити не отримувати події дотику, коли вид покритий іншим. Використовуючи [Довідник розробника Android](https://developer.android.com/reference/android/view/View#security):
> Іноді важливо, щоб додаток міг перевірити, що дія виконується з повним усвідомленням і згодою користувача, наприклад, надання запиту на дозвіл, здійснення покупки або натискання на рекламу. На жаль, шкідливий додаток може спробувати обманути користувача, змушуючи його виконувати ці дії, не усвідомлюючи цього, приховуючи справжню мету виду. Як засіб, фреймворк пропонує механізм фільтрації дотиків, який можна використовувати для підвищення безпеки видів, що надають доступ до чутливої функціональності.
>
@ -86,7 +86,7 @@ PixelFormat.TRANSLUCENT);
wm.addView(phishingView, lp);
```
### Типовий робочий процес, що використовується банківськими троянами
* Запит на встановлені пакети (`QUERY_ALL_PACKAGES`), щоб з'ясувати, який банківський / гаманцевий додаток наразі відкритий.
* Запитати встановлені пакети (`QUERY_ALL_PACKAGES`), щоб з'ясувати, який банківський / гаманцевий додаток наразі відкритий.
* Завантажити **HTML/JS накладку** з C2, яка ідеально імітує цей конкретний додаток (логотип, кольори, рядки i18n…).
* Відобразити накладку, зібрати облікові дані/PIN/шаблон.
* Використовувати **Accessibility API** (`performGlobalAction`, `GestureDescription`), щоб автоматизувати перекази у фоновому режимі.
@ -100,6 +100,12 @@ wm.addView(phishingView, lp);
- Вимкнути *Встановлення з невідомих джерел* та *Доступність для ненадійних додатків*.
- Застосувати PlayProtect та актуальні пристрої.
Для додаткових деталей щодо використання служб доступності для повного віддаленого контролю пристрою (наприклад, PlayPraetor, SpyNote тощо) дивіться:
{{#ref}}
accessibility-services-abuse.md
{{#endref}}
## Посилання
* [Bitsight ToxicPanda Android Banking Malware 2025 Study](https://www.bitsight.com/blog/toxicpanda-android-banking-malware-2025-study)