Cloak&Dagger 攻击是一种利用权限不匹配问题来访问 Android 设备的攻击方法, 版本在 7.1.2 及以下的 Android 设备都会受到这种攻击的影响 Cloak&Dagger 可以捕获用户的 PIN 码和密码, 并且能够帮助攻击者在不会被检测到的情况下获取目标设备的所有权限目前, 厂商还没有修复相关漏洞, 而且安全社区也没有很好的解决方案
Cloak&Dagger 攻击机制
Cloak&Dagger 攻击主要针对的是两个功能, 即 SYSTEM_ALERT_WINDOW 和 BIND_ACCESSIBILITY_SERVICE 如果应用程序得到了这两个权限, 它就可以成功进行这种攻击
SYSTEM_ALERT_WINDOW 允许应用程序显示屏幕覆盖层, 例如通知等等 BIND_ACCESSIBILITY_SERVICE 则允许应用程序跟踪和查询手机屏幕所显示的元素, 而这两种权限既可以单独使用, 也可以配合使用
SYSTEM_ALERT_WINDOW 权限允许应用程序覆盖其他的应用界面, 如果我们从 GooglePlay 下载并安装了一款 App,Android 默认会赋予该权限, 并不需要得到用户同意这也就意味着, 恶意 App 同样可以在后台悄悄获取该权限, 这样也就完成了攻击的第一个阶段, 即在用户毫不知情的情况下获取用户权限
当我们得到了 SYSTEM_ALERT_WINDOW 权限之后, 我们就可以欺骗用户去授权 BIND_ACCESSIBILITY_SERVICE 权限了, 这一步可以通过在 App 中嵌入视频或利用社工技术来实现
BIND_ACCESSIBILITY_SERVICE 是什么?
BIND_ACCESSIBILITY_SERVICE 允许应用程序发现显示在手机屏幕上的 UI 对象, 查询内容, 并与它们进行交互, 这些小工具可以让残疾人用户更加轻松地使用 Android 设备考虑到安全性方面的问题, 这种权限必须用户在设置界面单独的菜单中开启才能激活
比如说, 恶意软件可以向用户请求该权限, 然后再请求窗口上添加额外的显示层, 而这一层显示的请求是一些无害请求, 并留下原本请求窗口中的 OK 按钮当用户点击 OK 之后, 恶意 App 将能够跟踪屏幕上的对象, 并与他们进行交互了 (甚至还可以修改内容) 因此, 如果恶意 App 获取到了这种权限, 后果就会很严重了
所以, 当攻击者得到了这个权限后, 他们就能够实现键盘记录和钓鱼攻击, 甚至是安装其他恶意软件以实现深入攻击
如何发动 Cloak & Dagger 攻击
当恶意软件获取到上述这两种权限之后, 攻击者可以实现以下几种攻击(不仅限于此):
攻击者可修改用户所见的内容;
攻击者可以控制用户输入;
攻击者可以控制屏幕显示的内容;
攻击者可以通过安装木马和其他恶意软件来窃取用户数据;
接下来, 我们详细介绍一下攻击者可以发动的攻击类型和步骤
一点击劫持覆盖攻击
攻击者可以利用这种技术来获取目标设备的管理员权限, 目前也有很多恶意软件可以实现这种攻击如下图所示, 恶意软件可以在屏幕上显示一个安装完成的对话框, 并带有继续按钮实际上, 这是一个 TYPE_SYTEM_OVERLAY 窗口, 其真实意图是要激活设备的管理员权限
根据 Android API 文档的描述, TYPE_SYTEM_OVERLAY 是系统覆盖窗口, 它需要显示在所有内容之上, 而且不能接收输入焦点所以当用户点击了继续按钮之后, 点击事件将会传递给真实设备管理员激活窗口的激活按钮
二安全 PIN 码窃取
当安全屏幕键盘生成辅助事件时, 这种攻击就可以执行了甚至在屏幕锁定状态下, 针对辅助 App 设计的恶意应用仍然可以查看到 PIN 码的输入事件
三手机屏幕解锁
辅助 App 还可以在手机锁定的情况下注入事件, 辅助 App 可以通过注入事件来输入 PIN 码屏并解锁手机, 然后实施下一步攻击, 而且整个过程可以在手机不亮屏的情况下完成
四 App 静默安装
这也是这种攻击技术最巧妙的地方, 当目标设备感染了初始阶段的恶意 App 之后, 它还可以安装其他的恶意软件(例如木马), 并请求获取完整控制权限更重要的是, 整个过程都可以在后台瞧瞧完成, 而且不会显示应用程序安装窗口, 并且还会禁用程序的卸载按钮
五启用所有权限
当恶意 App 安装完成之后, 它可以通过自动点击来获取目标设备的完整权限
六击键推断
在这种攻击技术的帮助下, 只拥有 YSTEM_ALERT_WINDOW 权限的应用程序也有可能获取到目标用户在屏幕键盘上输入的内容此时, 恶意 App 需要在虚拟键盘的每一个键上添加额外的透明覆盖层, 这些覆盖层不会拦截点击事件, 这里需要涉及到键盘的底层设计如果点击事件是从不同的覆盖层传递过来的, 那么 FLAG_WINDOW_IS_OBSCURED 标识将会设置为 true, 再配合上运动事件和叠加层堆栈的顺序, 攻击者可以大致推测出用户的按键情况
七键盘 App 劫持
这种攻击允许攻击者通过键盘劫持来窃取用户输入的数据一般来说, 当 App 显示密码输入文本框时, getText 方法将会返回一个空字符串但是在 BIND_ACCESSIBILITY_SERVICE 权限的帮助下, 键盘 App 本身将会被视作普通的非特权 App, 而每一个按键所生成的键盘事件都将被记录下来
八目标密码窃取
辅助服务可以用来检测目标用户启动的应用程序, 攻击者可以显示一个看似像用户名和密码编辑框的可视层来窃取用户密码但是, 当用户在输入完凭证并点击提交按钮之后, 这些信息将会发送到攻击者的服务器上
九 2FA 令牌窃取
现在很多网站服务或应用程序都采用了双因素身份验证功能 (2FA) 来验证用户的合法性通过这种攻击技术, 攻击者可以完全控制目标设备, 并读取用户的短信消息, 从而获取到访问令牌
十广告劫持
恶意软件可以知道一款 App 显示广告的时间和位置, 并在目标位置通过额外的可视层来显示其他的广告, 并以此来牟利
参考资料
- http://iisp.gatech.edu/sites/default/files/documents/ieee_sp17_cloak_and_dagger_final.pdf
- http://cloak-and-dagger.org/
- https://www.kaspersky.com/blog/cloak-and-dagger-attack/16960/
- https://techcrunch.com/2017/05/25/cloak-dagger-is-a-newly-discovered-android-exploit-that-lets-hackers-hide-malicious-activity/
来源: http://www.tuicool.com/articles/ueymyan