了解针对“所有”版本Android的Cloak&Dagger攻击
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攻击
当恶意软件获取到上述这两种权限之后,攻击者可以实现以下几种攻击(不仅限于此):
1. 攻击者可修改用户所见的内容;
2. 攻击者可以控制用户输入;
3. 攻击者可以控制屏幕显示的内容;
4. 攻击者可以通过安装木马和其他恶意软件来窃取用户数据;
接下来,我们详细介绍一下攻击者可以发动的攻击类型和步骤。
一、点击劫持覆盖攻击
攻击者可以利用这种技术来获取目标设备的管理员权限,目前也有很多恶意软件可以实现这种攻击。如下图所示,恶意软件可以在屏幕上显示一个“安装完成”的对话框,并带有“继续‘按钮。实际上,这是一个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显示广告的时间和位置,并在目标位置通过额外的可视层来显示其他的广告,并以此来牟利。
参考资料
1. http://iisp.gatech.edu/sites/default/files/documents/ieee_sp17_cloak_and_dagger_final.pdf
2. http://cloak-and-dagger.org/
3. https://www.kaspersky.com/blog/cloak-and-dagger-attack/16960/
4. https://techcrunch.com/2017/05/25/cloak-dagger-is-a-newly-discovered-android-exploit-that-lets-hackers-hide-malicious-activity/
5. https://latesthackingnews.com/2017/05/25/android-is-vulnerable-to-cloak-and-dagger-attack/
* 参考来源:infosecinstitute