diff --git a/src/mobile-pentesting/android-app-pentesting/android-task-hijacking.md b/src/mobile-pentesting/android-app-pentesting/android-task-hijacking.md index 02d7f5f39..d65a2a75d 100644 --- a/src/mobile-pentesting/android-app-pentesting/android-task-hijacking.md +++ b/src/mobile-pentesting/android-app-pentesting/android-task-hijacking.md @@ -1,4 +1,4 @@ -# Android Task Hijacking +# Android 任务劫持 {{#include ../../banners/hacktricks-training.md}} @@ -15,39 +15,89 @@ ![https://developer.android.com/images/fundamentals/diagram_backstack.png](<../../images/image (698).png>) +--- + ## 任务亲和力攻击 -### 任务亲和力和启动模式概述 +`taskAffinity` 告诉 Android 一个 `Activity` *更倾向于* 属于哪个任务。当两个活动共享相同的亲和力时,**Android 允许将它们合并到同一个后栈中,即使它们来自不同的 APK**。 -在 Android 应用中,**任务亲和力** 指定活动的首选任务,通常与应用的包名对齐。这个设置在制作证明概念 (PoC) 应用以演示攻击时至关重要。 +如果攻击者能够将恶意活动放置在该栈的 **根** 位置,每次受害者打开合法应用程序时,恶意 UI 将是用户看到的第一件事——非常适合网络钓鱼或滥用权限请求。 -### 启动模式 +攻击面比许多开发者想象的要广,因为 **每个活动自动继承与应用程序包名称相等的亲和力**(除非开发者设置 `android:taskAffinity=""`)。因此 *不采取任何行动* 已经使应用在 Android 11 之前的版本中暴露于任务劫持的风险。 -`launchMode` 属性指导活动实例在任务中的处理。**singleTask** 模式对该攻击至关重要,根据现有活动实例和任务亲和力匹配情况,规定了三种场景。该漏洞利用攻击者的应用模仿目标应用的任务亲和力,误导 Android 系统启动攻击者的应用而不是预期的目标。 +### 经典的 "singleTask / StrandHogg" 场景 -### 详细攻击步骤 +1. 攻击者声明一个活动: +```xml + + + + + + +``` +2. 恶意应用程序启动一次,以便任务(具有伪造的亲和力)存在于最近的任务中。 +3. 当用户稍后打开真实应用程序时,Android 发现已经有一个任务,其 **根亲和力与包匹配**,并将该任务带到前台。 +4. 攻击者的 UI 首先显示。 -1. **恶意应用安装**:受害者在其设备上安装攻击者的应用。 -2. **初始激活**:受害者首次打开恶意应用,为攻击做好准备。 -3. **目标应用启动尝试**:受害者尝试打开目标应用。 -4. **劫持执行**:在某个时刻,应用尝试打开 **singleTask** 视图。由于任务亲和力匹配,恶意应用被启动,取代目标应用。 -5. **欺骗**:恶意应用展示一个假登录界面,类似于目标应用,欺骗用户输入敏感信息。 +### 默认亲和力(无 `singleTask`)变体 – 来电显示案例研究 -> [!TIP] -> 请注意,为了使此攻击有效,易受攻击的视图 **不需要将 exported 设置为 true**,也不需要是主活动。 +在 **来电显示 (caller.id.phone.number.block)** 应用程序中报告的漏洞表明,该攻击 *也* 适用于默认的 `standard` 启动模式: -有关此攻击的实际实现,请参阅 GitHub 上的 Task Hijacking Strandhogg 存储库:[Task Hijacking Strandhogg](https://github.com/az0mb13/Task_Hijacking_Strandhogg)。 +1. 攻击者应用程序创建一个假根活动并立即隐藏自己: +```kotlin +class HackActivity : AppCompatActivity() { +override fun onCreate(savedInstanceState: Bundle?) { +super.onCreate(savedInstanceState) +moveTaskToBack(true) // 保持任务在最近任务中但不在视野中 +} +} +``` +2. 清单只需将受害者包复制到 `taskAffinity` 中: +```xml + + + + + + +``` +3. 一旦用户安装并打开恶意应用程序 **一次**,一个亲和力等于受害者包的任务就存在(但在后台)。 +4. 当真实的来电显示应用程序启动时,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. 从目标 APK 中提取 `AndroidManifest.xml`,检查每个 ``(或全局 `` 元素)是否包含 `android:taskAffinity=""`(空) **或** 自定义值。 +2. 如果没有,制作一个恶意应用: +- `android:taskAffinity` = 受害者包名。 +- 提供一个 `MAIN/LAUNCHER` 意图,以便用户可以打开一次。 +- 可选地调用 `moveTaskToBack(true)` 以立即隐藏。 +3. 让受害者打开他们的合法应用程序 → 劫持。 + +## 缓解 + +开发者应: + +* 在 `` 级别明确设置 `android:taskAffinity=""`(推荐) **或** 为每个活动提供一个唯一的、私有的亲和力。 +* 对于高度敏感的屏幕,将上述内容与 `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}}