OWASP 类别: MASVS-PLATFORM:平台交互
概述
点击劫持相当于 Android 应用版本的 点击劫持网络漏洞:恶意应用通过覆盖 UI 或其他方式欺骗用户点击安全相关的控件(确认按钮等)。在此页面上,我们将区分两种攻击变体:完全遮挡和部分遮挡。在完全遮挡中,攻击者覆盖触摸区域,而在部分遮挡中,触摸区域保持未被遮挡。
影响
点击劫持攻击用于欺骗用户执行某些操作。影响取决于攻击者瞄准的操作。
风险:完全遮挡
在完全遮挡中,攻击者覆盖触摸区域以劫持触摸事件。
缓解措施
通过在代码中设置 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.setView()
来自定义 吐司 消息的外观。在 Android 10(API 级别 29)及更低版本上,恶意应用可以从后台启动此类吐司。
缓解措施
如果应用的目标是 Android 11(API 级别 30)或更高版本,则系统会阻止后台自定义吐司。但是,在某些情况下,可以使用“吐司爆发”绕过此缓解措施,攻击者在前景中排队多个吐司,即使应用转到后台,这些吐司也会继续启动。
从 Android 12(API 级别 31)开始,后台吐司和吐司爆发攻击得到完全缓解。
风险:Activity 夹层
如果恶意应用设法说服用户打开它,它仍然可以从受害者应用启动 Activity,然后用它自己的 Activity 覆盖它,形成一个“Activity 夹层”并创建一个部分遮挡攻击。
缓解措施
请参阅部分遮挡的一般缓解措施。为了纵深防御,请确保您不导出不需要导出的 Activity,以防止攻击者对它们进行夹层攻击。
资源
为您推荐
- 注意:当 JavaScript 关闭时,将显示链接文本。
- android:exported
密钥管理 {:#key-management}
- 直接从 APK 运行嵌入式 DEX 代码