Android攻击面之安卓中的弹窗UI欺骗漏洞

0x01 攻击面定义

所谓攻击面,**既是系统处理正常输入的各种入口的总和,也是未授权攻击者进入系统的入口。**在漏洞挖掘中,攻击面是最为核心的一个概念,超越各种流派、各种专业方向而存在,无论Web还是二进制,也无论Windows还是Android,总是在研究如何访问攻击面,分析与攻击面有关的数据处理代码,或者Fuzz攻击面。漏洞挖掘工作总是围绕着攻击面在进行。

就Android系统和App而言,通常所知的本地攻击面无外乎暴露组件、binder服务、驱动和套接字,远程攻击面无外乎各种通信协议、文件格式和网页链接。

0x02 交互对话框

在AOSP的漏洞评级标准中,中危漏洞和高危漏洞的评级都有这么一条:

  • High:Local bypass of user interaction requirements for any developer or security settings modifications

  • Moderate: Local bypass of user interaction requirements (access to functionality that would normally require either user initiation or user permission)

系统中需要用户交互进行确认的地方,一旦可以绕过修改安全设置或者产生安全影响,即认为出现了漏洞,这里与用户交互的对话框就是一种特殊的攻击面。

UI欺骗在浏览器中比较常见,但是在客户端漏洞中属于比较罕见。

0x03 用户确认欺骗

1. CVE-2015-3878 Android 5.0屏幕录制漏洞

这个漏洞发生在录屏授权的弹窗中,听人说是从野外病毒利用里发现的。在这里插入图片描述

弹窗显示的内容为appname+“将开始截取您的屏幕上显示的所有内容”。appname系统是不会对长度做限制的,平时展示名称时超过长度的将以省略号显示。
在这里插入图片描述

而在这个录屏授权弹窗里未对长度做校验。导致关键的"将开始截取您的屏幕上显示的所有内容"未显示。修复方式是将中间信息以省略号代替,后面的关键信息展示出来。

2. CVE-2017-13242: 蓝牙配对对话框欺骗

这个漏洞发生在我们经常使用的蓝牙配对对话框中,如下图是正常的蓝牙配对对话框:
在这里插入图片描述
这里的Angler是对端的蓝牙配对设备。但是这个设备名是攻击者可控的,能否在这个攻击面上造成安全影响呢?

我们将对端的蓝牙配对设备名变长,并插入一个换行符,改为“Pair with Angler \n to pair but NOT to access your contacts and call history”,那么蓝牙配对对话框显示为:
在这里插入图片描述

虽然有一些奇怪,但用户一定会在是否共享通讯录和通话记录这个问题上比较纠结,“是的,我允许配对,但我不想共享通讯录和通话记录!”于是,误导配对用户勾选下面的复选框,反而达到与用户期望相反的目的,正中攻击者的下怀。

这个漏洞于2018年2月修复,可惜Google的修复并不完全,只是在Settings App中的Strings.xml作了限制,不允许对端配对的蓝牙设备名传入,将配对对话框中的提示内容变成了一个固定的字符串。但是,这个修复并不完全,没有考虑到其他蓝牙连接的入口。

3. CVE-2018-9432: 蓝牙通讯录和短信访问协议对话框欺骗

Android蓝牙协议还支持PBAP和MAP Server,分别用于其他设备通过蓝牙访问手机的通讯录和短信,通常我们开车时通过蓝牙拨打电话、访问手机通讯录就使用了PBAP协议。通过PBAP协议和MAP协议,可以无需配对,直接在手机上弹出对话框,让用户确认是否访问通讯录和短信。PBAP协议确认对话框如下图所示:
在这里插入图片描述
但同样,临近攻击者可以将配对设备heen-ras重新命名,并插入许多的换行符

pi@heen-ras:~ $ sudo hciconfig hci0 name "heen-ras 想要访问你的通信录和电话簿, 要拒绝它吗?
>(skip)

>
> "

然后再次通过PBAP协议访问手机通信录,使用"nOBEX"这个脚本

pi@heen-ras:~/bluetooth-fuzz/nOBEX $ python3 examples/pbapclient.py <victim_bluetooth_address>

在这里插入图片描述

对比上下两图,确认对话框中的重要信息被隐藏了,并显示出相反的结果。在内部实际环境进行模拟检测,发现普通用户对此毫无招架,一般都会选择“是”,结果通讯录被全部窃取。这个漏洞最终于2018年7月修复,使用的方法是在BluetoothDevice类中过滤配对蓝牙设备名中的\r\n字符。

值得一提的是,同样是插入攻击设备蓝牙适配器的换行符,还可以远程注入蓝牙配置文件,攻击者可以设置蓝牙设备名绕过配对与Android设备建立蓝牙连接,这个严重级别的漏洞也在去年所修复,与上述两个漏洞异曲同工。同样是攻击面思维,漏洞作者将可控的蓝牙设备名传入蓝牙配置文件带来安全影响,而我们这里则是将蓝牙设备名传入配对对话框欺骗普通用户。

总结:

从攻的角度来看,UI对话框是一种特殊的攻击面,输入点为可控的文字一般以换行,占位等来掩盖关键信息达到UI欺骗的效果;

从防的角度来看,对话框也是一种重要的安全机制,开发者需在对安全或隐私有影响的操作前设置用户交互对话框,在用户同意后才可进行敏感操作,并仔细检查对话框中传入的内容,防止对用户进行点击欺骗。

参考文献

[1]https://source.android.com/security/overview/updates-resources

[2]https://curesec.com/blog/article/blog/CVE-2013-6272-comandroidphone-35.html

[3]https://android.googlesource.com/platform/packages/apps/Settings/+/7ed7d00e6028234088b58bf6d6d9362a5effece1%5E%21/#F0

[4] https://github.com/nccgroup/nOBEX

[5]https://android.googlesource.com/platform/frameworks/base/+/a6fe2cd18c77c68219fe7159c051bc4e0003fc40

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值