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/tapjacking.md'
This commit is contained in:
parent
3b8e2b4eab
commit
b6c368af81
@ -9,7 +9,7 @@
|
||||
|
||||
### 检测
|
||||
|
||||
为了检测易受此攻击的应用程序,您应该在 android manifest 中搜索 **导出活动**(请注意,带有 intent-filter 的活动默认情况下会自动导出)。一旦找到导出活动,**检查它们是否需要任何权限**。这是因为 **恶意应用程序也需要该权限**。
|
||||
为了检测易受此攻击的应用程序,您应该在 Android 清单中搜索 **导出活动**(请注意,带有意图过滤器的活动默认情况下会自动导出)。一旦找到导出活动,**检查它们是否需要任何权限**。这是因为 **恶意应用程序也需要该权限**。
|
||||
|
||||
您还可以检查应用程序的最低 SDK 版本,检查 **`android:minSdkVersion`** 在 **`AndroidManifest.xml`** 文件中的值。如果该值 **低于 30**,则该应用程序易受 Tapjacking 攻击。
|
||||
|
||||
@ -26,7 +26,7 @@
|
||||
#### **`setFilterTouchesWhenObscured`**
|
||||
|
||||
如果将属性 **`setFilterTouchesWhenObscured`** 设置为 true,也可以防止在 Android 版本较低时利用此漏洞。\
|
||||
例如,如果设置为 **`true`**,则按钮在被遮挡时可以自动 **禁用**:
|
||||
例如,如果设置为 **`true`**,则按钮可以在被遮挡时自动 **禁用**:
|
||||
```xml
|
||||
<Button android:text="Button"
|
||||
android:id="@+id/button1"
|
||||
@ -39,13 +39,13 @@ android:filterTouchesWhenObscured="true">
|
||||
|
||||
### Tapjacking-ExportedActivity
|
||||
|
||||
最新的 **Android 应用程序** 执行 Tapjacking 攻击(+ 在被攻击应用程序的导出活动之前调用)可以在这里找到: [**https://github.com/carlospolop/Tapjacking-ExportedActivity**](https://github.com/carlospolop/Tapjacking-ExportedActivity)。
|
||||
最新的 **Android 应用程序** 执行 Tapjacking 攻击(+ 在被攻击应用程序的导出活动之前调用)可以在以下位置找到: [**https://github.com/carlospolop/Tapjacking-ExportedActivity**](https://github.com/carlospolop/Tapjacking-ExportedActivity)。
|
||||
|
||||
请遵循 **README 指示使用它**。
|
||||
|
||||
### FloatingWindowApp
|
||||
|
||||
一个实现 **FloatingWindowApp** 的示例项目,可以用于覆盖其他活动以执行点击劫持攻击,可以在 [**FloatingWindowApp**](https://github.com/aminography/FloatingWindowApp) 找到(有点旧,祝你构建 apk 顺利)。
|
||||
一个实现 **FloatingWindowApp** 的示例项目,可以用于放置在其他活动之上以执行点击劫持攻击,可以在 [**FloatingWindowApp**](https://github.com/aminography/FloatingWindowApp) 找到(有点旧,祝你构建 apk 顺利)。
|
||||
|
||||
### Qark
|
||||
|
||||
@ -56,9 +56,51 @@ android:filterTouchesWhenObscured="true">
|
||||
|
||||
缓解措施相对简单,因为开发者可以选择在视图被其他视图覆盖时不接收触摸事件。使用 [Android 开发者参考](https://developer.android.com/reference/android/view/View#security):
|
||||
|
||||
> 有时,应用程序能够验证某个操作是在用户的完全知情和同意下执行的,这一点至关重要,例如授予权限请求、进行购买或点击广告。不幸的是,恶意应用程序可能会试图欺骗用户执行这些操作,而用户却对此毫不知情,因为它隐藏了视图的预期目的。作为补救措施,框架提供了一种触摸过滤机制,可以用来提高提供敏感功能访问的视图的安全性。
|
||||
> 有时,应用程序能够验证某个操作是在用户的充分了解和同意下进行的,这一点至关重要,例如授予权限请求、进行购买或点击广告。不幸的是,恶意应用程序可能会试图欺骗用户在不知情的情况下执行这些操作,通过掩盖视图的预期目的。作为补救措施,框架提供了一种触摸过滤机制,可以用来提高提供敏感功能访问的视图的安全性。
|
||||
>
|
||||
> 要启用触摸过滤,请调用 [`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29) 或将 android:filterTouchesWhenObscured 布局属性设置为 true。当启用时,框架将丢弃在视图的窗口被另一个可见窗口遮挡时接收到的触摸。因此,当 toast、对话框或其他窗口出现在视图的窗口上方时,视图将不会接收到触摸。
|
||||
> 要启用触摸过滤,请调用 [`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29) 或将 android:filterTouchesWhenObscured 布局属性设置为 true。当启用时,框架将丢弃在视图的窗口被另一个可见窗口遮挡时接收到的触摸。因此,当吐司、对话框或其他窗口出现在视图的窗口上方时,视图将不会接收到触摸。
|
||||
|
||||
---
|
||||
|
||||
## 可访问性覆盖钓鱼(银行木马变种)
|
||||
|
||||
除了经典的 Tapjacking,现代 Android 银行恶意软件家族(例如 **ToxicPanda**、BrasDex、Sova 等)滥用 **可访问性服务** 在合法应用程序上方放置全屏 WebView **覆盖**,同时仍然能够 **转发用户输入** 到下面的视图。这大大增加了可信度,并允许攻击者窃取凭据、一次性密码或甚至自动化欺诈交易。
|
||||
|
||||
### 工作原理
|
||||
1. 恶意 APK 请求高度敏感的 `BIND_ACCESSIBILITY_SERVICE` 权限,通常将请求隐藏在假冒的 Google/Chrome/PDF 查看器对话框后面。
|
||||
2. 一旦用户启用该服务,恶意软件程序会以编程方式模拟授予额外危险权限所需的点击(`READ_SMS`、`SYSTEM_ALERT_WINDOW`、`REQUEST_INSTALL_PACKAGES` 等)。
|
||||
3. 一个 **WebView** 被膨胀并使用 **`TYPE_ACCESSIBILITY_OVERLAY`** 窗口类型添加到窗口管理器中。覆盖可以完全不透明或半透明,并可以标记为 *“透过”*,以便原始触摸仍然传递到后台活动(因此交易确实发生,而受害者只看到钓鱼表单)。
|
||||
```java
|
||||
WebView phishingView = new WebView(getApplicationContext());
|
||||
phishingView.getSettings().setJavaScriptEnabled(true);
|
||||
phishingView.loadUrl("file:///android_asset/bank_login.html");
|
||||
|
||||
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
|
||||
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
|
||||
WindowManager.LayoutParams.MATCH_PARENT,
|
||||
WindowManager.LayoutParams.MATCH_PARENT,
|
||||
WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY, // <-- bypasses SYSTEM_ALERT_WINDOW prompt
|
||||
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
|
||||
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, // «through» flag → forward touches
|
||||
PixelFormat.TRANSLUCENT);
|
||||
wm.addView(phishingView, lp);
|
||||
```
|
||||
### 银行木马的典型工作流程
|
||||
* 查询已安装的应用程序 (`QUERY_ALL_PACKAGES`),以确定当前打开的是哪个银行/钱包应用。
|
||||
* 从 C2 下载一个完美模仿该特定应用的 **HTML/JS 覆盖模板**(徽标、颜色、国际化字符串…)。
|
||||
* 显示覆盖,收集凭据/密码/PIN/图案。
|
||||
* 使用 **无障碍 API** (`performGlobalAction`, `GestureDescription`) 在后台自动进行转账。
|
||||
|
||||
### 检测与缓解
|
||||
* 使用 `adb shell pm list packages -3 -e BIND_ACCESSIBILITY_SERVICE` 审计已安装应用程序的列表。
|
||||
* 从应用程序端(银行/钱包):
|
||||
- 在敏感视图上启用 **`android:accessibilityDataSensitive="accessibilityDataPrivateYes"`**(Android 14+),以阻止非 Play 商店服务。
|
||||
- 结合使用 `setFilterTouchesWhenObscured(true)` 和 `FLAG_SECURE`。
|
||||
* 系统加固:
|
||||
- 禁用 *来自未知来源的安装* 和 *不受信任应用的无障碍功能*。
|
||||
- 强制使用 PlayProtect 和保持设备更新。
|
||||
|
||||
## 参考
|
||||
* [Bitsight – ToxicPanda Android Banking Malware 2025 Study](https://www.bitsight.com/blog/toxicpanda-android-banking-malware-2025-study)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user