mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
65 lines
4.0 KiB
Markdown
65 lines
4.0 KiB
Markdown
# Tapjacking
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|
||
|
||
## **基本信息**
|
||
|
||
**Tapjacking** 是一种攻击,其中 **恶意** **应用程序** 被启动并 **定位在受害者应用程序的顶部**。一旦它明显遮挡了受害者应用程序,其用户界面被设计成欺骗用户与之互动,同时将互动传递给受害者应用程序。\
|
||
实际上,它是 **让用户无法知道他们实际上是在对受害者应用程序执行操作**。
|
||
|
||
### 检测
|
||
|
||
为了检测易受此攻击的应用程序,您应该在 android manifest 中搜索 **导出活动**(请注意,带有 intent-filter 的活动默认情况下会自动导出)。一旦找到导出活动,**检查它们是否需要任何权限**。这是因为 **恶意应用程序也需要该权限**。
|
||
|
||
您还可以检查应用程序的最低 SDK 版本,检查 **`android:minSdkVersion`** 在 **`AndroidManifest.xml`** 文件中的值。如果该值 **低于 30**,则该应用程序易受 Tapjacking 攻击。
|
||
|
||
### 保护
|
||
|
||
#### Android 12 (API 31,32) 及更高版本
|
||
|
||
[**根据这个来源**](https://www.geeksforgeeks.org/tapjacking-in-android/)**,** 从 Android 12 (API 31 & 30) 及更高版本开始,Android 会自动防止 tapjacking 攻击。因此,即使应用程序易受攻击,您 **也无法利用它**。
|
||
|
||
#### `filterTouchesWhenObscured`
|
||
|
||
如果 **`android:filterTouchesWhenObscured`** 设置为 **`true`**,则当视图的窗口被另一个可见窗口遮挡时,`View` 将不会接收触摸。
|
||
|
||
#### **`setFilterTouchesWhenObscured`**
|
||
|
||
如果将属性 **`setFilterTouchesWhenObscured`** 设置为 true,也可以防止在 Android 版本较低时利用此漏洞。\
|
||
例如,如果设置为 **`true`**,则按钮在被遮挡时可以自动 **禁用**:
|
||
```xml
|
||
<Button android:text="Button"
|
||
android:id="@+id/button1"
|
||
android:layout_width="wrap_content"
|
||
android:layout_height="wrap_content"
|
||
android:filterTouchesWhenObscured="true">
|
||
</Button>
|
||
```
|
||
## 利用
|
||
|
||
### 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 顺利)。
|
||
|
||
### Qark
|
||
|
||
> [!CAUTION]
|
||
> 看起来这个项目现在不再维护,这个功能也不再正常工作
|
||
|
||
你可以使用 [**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):
|
||
|
||
> 有时,应用程序能够验证某个操作是在用户的完全知情和同意下执行的,这一点至关重要,例如授予权限请求、进行购买或点击广告。不幸的是,恶意应用程序可能会试图欺骗用户执行这些操作,而用户却对此毫不知情,因为它隐藏了视图的预期目的。作为补救措施,框架提供了一种触摸过滤机制,可以用来提高提供敏感功能访问的视图的安全性。
|
||
>
|
||
> 要启用触摸过滤,请调用 [`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29) 或将 android:filterTouchesWhenObscured 布局属性设置为 true。当启用时,框架将丢弃在视图的窗口被另一个可见窗口遮挡时接收到的触摸。因此,当 toast、对话框或其他窗口出现在视图的窗口上方时,视图将不会接收到触摸。
|
||
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|