Tapjacking
最后更新于
最后更新于
点击劫持是一种攻击,其中启动恶意应用程序并定位在受害者应用程序顶部。一旦它明显遮挡了受害者应用程序,其用户界面被设计成以一种方式欺骗用户与其交互,同时将交互传递给受害者应用程序。 实际上,它使用户无法意识到他们实际上是在受害者应用程序上执行操作。
为了检测容易受此攻击影响的应用程序,您应该搜索Android清单中的导出活动(请注意,具有意图过滤器的活动默认情况下会自动导出)。找到导出的活动后,检查它们是否需要任何权限。这是因为恶意应用程序也将需要该权限。
根据此来源,从Android 12(API 31和30)及更高版本开始,Android会自动阻止点击劫持攻击。因此,即使应用程序存在漏洞,您也无法利用它。
filterTouchesWhenObscured
如果**android:filterTouchesWhenObscured
设置为true
**,当视图的窗口被另一个可见窗口遮挡时,该View
将不会接收触摸事件。
setFilterTouchesWhenObscured
如果将属性**setFilterTouchesWhenObscured
设置为true,还可以防止在Android版本较低时利用此漏洞。
例如,如果设置为true
,则按钮在被遮挡时可以自动禁用**:
最近的Android应用程序执行Tapjacking攻击(+在被攻击应用程序的导出活动之前调用)可以在以下位置找到:https://github.com/carlospolop/Tapjacking-ExportedActivity。
按照README说明来使用它。
一个示例项目实现了FloatingWindowApp,可以放置在其他活动的顶部以执行点击劫持攻击,可以在FloatingWindowApp中找到(有点老,祝你构建apk好运)。
看起来这个项目现在没有维护了,这个功能不再正常工作
您可以使用qark与--exploit-apk
--sdk-path /Users/username/Library/Android/sdk
参数来创建一个恶意应用程序,以测试可能的Tapjacking漏洞。
缓解措施相对简单,开发人员可以选择在一个视图被另一个视图覆盖时不接收触摸事件。使用Android开发者参考:
有时,应用程序必须能够验证用户完全知情并同意执行的操作,例如授予权限请求、进行购买或点击广告。不幸的是,恶意应用程序可能会试图欺骗用户执行这些操作,而用户却不知情,通过隐藏视图的预期目的。作为补救措施,框架提供了一个触摸过滤机制,可用于提高提供对敏感功能的访问的视图的安全性。
要启用触摸过滤,请调用
setFilterTouchesWhenObscured(boolean)
或将android:filterTouchesWhenObscured布局属性设置为true。启用后,框架将丢弃在视图的窗口被另一个可见窗口遮挡时接收到的触摸。因此,每当toast、对话框或其他窗口出现在视图的窗口上方时,视图将不会接收触摸。