注:本博客仅供技术研究。如果其信息用于其他目的,用户将承担全部法律和连带责任。本博客不承担任何法律和连带责任。请遵守中华人民共和国安全法
黑客19 – 引领实战潮流,回归技术本质,以行动推动行业技术进步
唯一的联系方式[email protected] 和 [email protected]
欢迎转载,但请注明原始链接,谢谢!
0x00 介绍
所谓攻击面不仅是系统处理正常输入的各种入口的总和,也是未授权攻击者进入系统的入口。在漏洞挖掘中,攻击面是超越各种学校和专业方向的核心概念Web无论是二进制还是二进制Windows还是Android,研究如何访问攻击面,分析与攻击面相关的数据处理代码Fuzz攻击面。漏洞挖掘工作总是围绕着攻击面在进行。
就Android系统和App通常所知的本地攻击面无非是暴露组件,binder服务、驱动和过是各种通信协议、文件格式和网页链接。然而,实际的漏洞案例总是新鲜的,总是有一些鲜为人知的攻击,漏洞很有趣,甚至有实际的使用价值,所以我们准备在这里写一个系列来记录发现的一些有趣的漏洞。来谈谈与用户互动的对话框。
0x01 人机交互对话框
在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)
一旦系统中需要用户交互确认的地方可以绕过修改安全设置或产生安全影响,即存在漏洞,与用户交互的对话框是一个特殊的攻击面。
0x02 用户确认绕过
在与用户互动的对话框中,拨打电话对话框通常是特殊的,开发人员很容易忽略其直接被外部调用绕过用户互动后的安全影响。Android这种漏洞出现在历史上,比如CVE-2013-6272。
然而,在一些流行的社交网络软件中,它VoIP拨号功能也容易出现此类漏洞。恶意程序可以绕过用户交互,直接拨打另一个用户,使另一个用户可以监控受害者手机的麦克风,泄露受害者的隐私。
俄罗斯著名的社交软件VK.COM有这样一个漏洞: Bypass User Interaction to initiate a VoIP call to Another User
主要原因是com.vkontakte.android.LinkRedirActivity可以输入一个Provider,而这个Provider其他用户可以指定在其他用户中id
ContentValues cr_vals = new ContentValues();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cr_vals.put("data1",458454771); //target user_id cr_vals.put("name","unused");当启动该Activity当它将直接指定时id用户拨号。问题是,作为拨号过程,用户需要设计一个对话框来确认。VK.COM不认为是漏洞,后来用了HackerOne仲裁机制邀请其他仲裁机制Android在说服制造商之前,该领域的知名安全专家一起参与了讨论。最后,在用户确认后,添加了一个确认对话框。
同样,Line也有类似的漏洞,绕过用户交互拨打另一个用户Audio Phone,Line将漏洞归类为Authentication Bypass,用户确认对话框也添加到修复中。
0x03 用户确认欺骗
除了对话框绕过以外,攻击者还可以在对话框中显示欺骗的内容,达到clickjacking的效果。
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限制了对端配对的蓝牙设备名称,将配对对话框中的提示变成固定字符串。然而,这种修复并不完全,也没有考虑到其他蓝牙连接的入口。
CVE-2018-9432: 蓝牙通讯录和短信访问协议对话框欺诈
Android还支持蓝牙协议PBAP和MAP Server,用于其他设备通过蓝牙访问手机的通讯录和短信。通常,当我们开车时,我们使用蓝牙电话和手机通讯录PBAP协议。通过PBAP协议和MAP协议可以直接在手机上弹出对话框,无需配对,让用户确认是否访问通讯录和短信。PBAP协议确认对话框如下图所示:
但同样,临近攻击者可以匹配设备heen-ras重新命名,插入许多换行符
[email protected]:~ $ sudo hciconfig hci0 name "heen-ras 要不要拒绝访问你的通讯录和电话簿?>…(skip)>> "然后再通过PBAP使用协议访问手机通讯录”nOBEX”这个脚本
[email protected]:~/bluetooth-fuzz/nOBEX $ python3 examples/pbapclient.py <victim_bluetooth_address>此时,通讯录确认对话框如下:
与上图和下图相比,确认对话框中的重要信息被隐藏,并显示相反的结果。在实际的内部环境中进行模拟测试,发现普通用户没有争议,通常会选择是,所有的地址簿都被盗。这个漏洞最终于2018年7月修复,使用的方法是BluetoothDevice蓝牙设备名称中的类中过滤配对\r\n字符。
值得一提的是,它也是插入攻击设备蓝牙适配器的换行符,也可以远程注入蓝牙配置文件。攻击者可以设置蓝牙设备名称来绕过配对Android设备建立蓝牙连接,去年修复了这个严重的漏洞,类似于上述两个漏洞。同样的攻击思维,漏洞作者将可控的蓝牙设备名称引入蓝牙配置文件,我们将蓝牙设备名称引入配对对话框,欺骗普通用户。
小结
从攻击的角度来看,对话框是一个特殊的攻击面;从防御的角度来看,对话框也是一个重要的安全机制,开发人员需要在对安全或隐私有影响的操作前设置用户交互对话框,在用户同意后进行敏感操作,并仔细检查对话框中的内容,以防止点击欺骗用户。