Cloak&Dagger 是一种可出现于目前所有版本 Android 系统(<8.0)的新型攻击技术,手机上安装恶意 APP 后,黑客能悄悄获取到目标 Android 设备的完整控制权,进而窃取到用户包括键盘记录、聊天数据、设备PIN码、在线账号密码、OTP密码和通讯录在内的多种隐私数据。针对该漏洞 Google 将在 Android O 版本通过加强权限检查机制来减少感染机会,但暂时还没有彻底封堵该漏洞的方案。

攻击产生原理及场景

Cloak&Dagger 不需要利用 Android 生态系统中的任何安全漏洞,利用的是 Android 设备中两大合法基础权限:

  1. SYSTEM_ALERT_WINDOW (“draw on top”):允许App在设备屏幕上显示额外的叠加窗口来覆盖其他的App界面。
  2. BIND_ACCESSIBILITY_SERVICE (“a11y”):帮助包括盲人和视力障碍用户在内的残疾人用户更好地通过语音命令来输入信息或通过屏幕阅读功能来了解屏幕内容。

从2015年10月份发布的 Android Marshmallow(Version6)开始,Google 默认 会给那些直接从 GooglePlay 应用商店下载并安装的App提供”SYSTEM_ALERT_WINDOW”(“draw on top”)权限。有了这两个权限,恶意 APP 通过使用 TYPE_TOAST 类型窗口即可实现一系列监控与劫持的操作。

示例1:获取用户键盘输入内容


如图,由于 TYPE_TOAST 类型窗口允许某APP在另一APP界面上方覆盖悬浮窗,且不需要请求 SYSTEM_ALERT_WINDOW 权限,恶意 APP 便可在用户无法察觉的情况下获取用户键盘输入的内容(实际攻击过程中该网格设置为不可见)。

示例2:劫持用户点击,实现静默安装恶意 APP

该示例展示了一个看似为教学APP,实为诱导用户点击某一特定区域,以开启系统 Accessibility 权限,利用 Accessibility 的检测视图以及模拟点击功能,进行恶意安装。


左边为用户看到的教学demo,右边为诱导用户开启 Accessibility 权限。最后用户观看视频的过程中背后完成了恶意 APP 的静默安装。
以下代码展示了上述两个攻击场景使用的两种 Toast 窗口,view1用于覆盖底部 GUI 并监听用户点击情况,view2用于诱导用户点击某一区域。

漏洞解决方案

查看 framework 相关源码可发现,通常在其他 APP 页面最上层展示悬浮窗口是需要进行权限检查(Permission Check)和操作检查(Operation Check)的,但如果是 TYPE_TOAST 窗口则不需要,权限自动开启。

因此该漏洞是由于 Android 操作系统底层涉及缺陷导致的(涉及到两个标准功能,但这两个功能的行为符合系统预期),Google暂时未提供解决方案,但Google计划在 “Android O” 版本修改原有策略,增加合适的权限检查。
在 Android 7.1.2 上,防止 Cloak&Dagger 攻击最简单的方法就是手动关闭 “draw on top” 权限。