OWASP 类别: MASVS-PLATFORM:平台交互
概述
Tapjacking 是 Android 应用等同于 点击劫持 Web 漏洞:恶意应用通过覆盖 UI 或其他方式欺骗用户点击安全相关的控件(确认按钮等)。在此页面上,我们区分两种攻击变体:完全遮挡和部分遮挡。在完全遮挡中,攻击者覆盖触摸区域,而在部分遮挡中,触摸区域保持未被遮挡。
影响
Tapjacking 攻击用于欺骗用户执行某些操作。影响取决于攻击者目标的操作。
风险:完全遮挡
在完全遮挡中,攻击者覆盖触摸区域以劫持触摸事件
缓解措施
通过在代码中设置 View.setFilterTouchesWhenObscured(true)
来防止完全遮挡。这会阻止通过覆盖传递的触摸。如果您更喜欢声明性方法,您也可以在 View
对象的布局文件中添加 android:filterTouchesWhenObscured="true"
,以保护您想要保护的该对象。
风险:部分遮挡
在部分遮挡攻击中,触摸区域保持未被遮挡
缓解措施
通过手动忽略具有 FLAG_WINDOW_IS_PARTIALLY_OBSCURED
标志的触摸事件来缓解部分遮挡。针对这种情况没有默认保护措施。
潜在问题:这种缓解措施可能会干扰良性应用。在某些情况下,推出此修复程序是不可能的,因为它会在部分遮挡由良性应用引起时对用户体验产生负面影响。
具体风险
本节收集需要非标准缓解策略或在某些 SDK 级别得到缓解的风险,并出于完整性考虑而列出。
风险:android.Manifest.permission.SYSTEM_ALERT_WINDOW
SYSTEM_ALERT_WINDOW
权限允许应用创建显示在所有应用顶部的窗口。
缓解措施
较新版本的 Android 引入了多项缓解措施,包括以下措施
- 在 Android 6(API 级别 23)及更高版本中,用户必须明确授予应用创建覆盖窗口的权限。
- 在 Android 12(API 级别 31)及更高版本中,应用可以将
true
传递给Window.setHideOverlayWindows()
。
风险:自定义 Toast
攻击者可以使用 Toast.setView()
自定义 Toast 消息的外观。在 Android 10(API 级别 29)及更低版本中,恶意应用可以从后台启动此类 Toast。
缓解措施
如果应用的目标是 Android 11(API 级别 30)或更高版本,系统会阻止后台自定义 Toast。但是,这种缓解措施在某些情况下可以通过“Toast 突发”来规避,攻击者在应用程序处于前台时排队多个 Toast,即使应用程序转到后台后,它们也会继续启动。
从 Android 12(API 级别 31)开始,后台 Toast 和 Toast 突发攻击得到完全缓解。
风险:Activity 夹层
如果恶意应用设法说服用户打开它,它仍然可以从受害者应用启动 Activity,然后用自己的 Activity 覆盖它,形成一个“Activity 夹层”并创建部分遮挡攻击。
缓解措施
请参阅部分遮挡的一般缓解措施。为了更深入地防御,请确保您不导出不需要导出的 Activity,以防止攻击者将其夹在中间。
资源
为您推荐
- 注意:当 JavaScript 关闭时显示链接文本
- android:exported
- # 密钥管理 {:#key-management}
- 直接从 APK 运行嵌入式 DEX 代码