天创培训:您身边的信息安全培训专家!
行业动态
“最安全”智能机Blackphone上发现高危漏洞

 Blackphone 被普遍认为是目前最安全的Android智能机。不幸的是,无论设计者把系统设计的怎么安全,它肯定还是存在漏洞的。我们最近发现了一个漏洞,这个漏洞允许攻击者远程控制手机的调制解调器功能。

Blackphone是SGP科技的全资子公司SilentCircle开发的,Blackphone提供给用户控制应用程序的权限,比如绑定无声电话、无声短信服务即匿名服务和加密通信服务,这样就没有人对语音、视频和短信进行窃听了。

我们最近在为 Red Naga 培训会议做准备,其中一部分工作就是逆向工程,我们发现这个Blackphone(BP1)上的socket处于打开并可访问状态。

shell@blackphone:/dev/socket $ ls -l at_pal
srw-rw-rw- radio system 2015-07-31 17:51 at_pal

除了被Android上的SELinuxfile_contexts使用,网上没有任何地方提及了这个socket。它似乎是nVidia Shield tablet,这个东西似乎是另一种带有Icera调制解调器的被广泛使用的Android设备,但是它现在已经被nVidia放弃了。随着我们的进一步挖掘,我们发现有一些应用程序会和这个socket交互,尤其是agps_daemon,它需要更高的shell权限因为它是一个system/radio user。

细节展示

在进行逆向并查看系统日志之前,我们可以看看agps_daemon展现了哪些有趣的细节;

I/AGPSD ( 219): agps_PortParseArgs: Getting property (agpsd.dev_path=/dev/ttySHM3) from environment 
I/AGPSD ( 219): agps_PortParseArgs: Getting property (agpsd.socket_path=/dev/socket/at_pal) from environment 
D/AGPSD ( 219): Kernel time: [9.408745] 
D/AGPSD ( 219): vendor/nvidia/tegra/prebuilt/ceres/../../icera/ril/agpsd/agps_daemon.c Version : 1.12 
D/AGPSD ( 219): vendor/nvidia/tegra/prebuilt/ceres/../../icera/ril/agpsd/agps_daemon.c Built Dec 2 2014 12:00:30 
D/AGPSD ( 219): agps_uplinkThread: Entering 
I/AGPSD ( 219): open_tty_port: Opening /dev/ttySHM3 
I/AGPSD ( 219): agps_downlinkThread: Entering

根据日志,我们可以看出这是一个nVidia Icera调制解调二进制,它在监听一个"socket_path"/dev/socket/at_pal,打开一个/dev/ttySHM3上的tty_port。之后,我们用IDA Pro打开agps_daemon,想法很快被确认,然后我们可以看到这个权限的过程在at_pal socket上监听,然后write所有从socket到ttySHM3d端口的内容。我们之后大概看了下二进制,发现这个ttySHM3端口被radio监听了。这就意味着我们已经发现了一种方式直接与调制解调器进行谈话!我们很容易就能确认这种使用shell命令行润行agps_daemon的方式是可行的,因为我们看到一个"test"县城已经被遗留到了代码里;

进制,我们可以看出这些假的命令行是被发送给调制解调器的。这将允许一个攻击者运行称一个shell使用者然后发送命令行给radio,或者利用一个带有internet权限的安卓应用发送命令行给radio。

由于命令行开始于"AT"并且开起来像修改版的Hayes命令,我们开始Google获得可能导致更有趣结果的运河代码。同时,我们调出所有来自设备的文件并开始grep获取"AT"样式代码。在这里,我们发现这个二进制/system/bin/fild看起来能打开 socket /dev/ttySHM3 并且可以加载共享的二进制文件 /system/lib/libcera-ril.so。通过挖掘这两个二进制文件,我们没太下功夫就发现了非常有用的代码,包括接下来的有趣的AT代码;

AT + CMUT - 设置调制解调器是否静音(防止响铃)
ATD - 设置呼叫ID或者无法拨出电话
AT+CMGT + AT+CMGS - 发送SMS,安卓设备上不可见
AT+CCFC - 设置呼叫转移,防止来电显示
AT+CSCS + AT+CUSD - 发送USSD代码

除了上边的代码,还有很多看起来不标准的代码,或者是执行任何可见操作的代码。进一步调查之后,我们能够找到其他的代码路径,这些允许攻击者这么做:

发送和接受短信(不会在Android 主UI中展示,也不会让用户以任何方式注意到)
拨号或连接电话(这个对用户来说会非常明显,因为UI会弹出对话,然而这会导致一些不可撤销的电话,这些电话必须通过调制解调互动挂断)
静默检查手机通话状态(用户的电话打了那个号码,用户是打电话还是接电话)
重置APN/SMSC/Power设置
强制取消一些号码的通话
静音
强制/取消强制来电显示设置
杀调制解调(强硬重启回复所需的调制解调)
找到连接的信号塔(基站)
静默注册呼叫号码转移(Blackphone将不会注意到任何打入的电话、来电这不会受到任何通知)

还有很多我们没有列举的方式,一些代码看起来潜在危害很大。一旦我们确认这些研究结果,我们需要一个CVE并联系SilentCircle公司。他们要求我们通过Bugcrowd提交问题。这个问题被分配为CVE-2015-6841,我们通过了Bugcrowd的bug赏金,相信SilentCircle修复了bug。

此漏洞说明了攻击面所能达到的深度和广度是我们无法估计的。它页引发了安全专业人员的思考。首先,即使是"最安全"的系统,也是存在漏洞的。第二,今天设备中使用第三方科技(硬件、驱动、软件库等)会导致监测和修复更加困难。第三,几乎所有的漏洞都需要某种杀毒软件来进行远程利用。当看似合法的请求执行了系统功能异常,我们可以看出对一个设备的监测会提供一个重要的检测和响应效果。

时间线

2015-08-25 – 联系供应商、销售商,要求进入Bugcrowd,问题通过Bugcrowd被提交,提交CVE
2015-09-04 – 问题在Bugcrowd发布
2015-09-10 – 问题通过MITRE CERT被分配为CVE-2015-6841
2015-09-30 – 供应商承认并接受提交
2015-11-02 – 问题标记为已解决,获得奖励,供应商修复
2015-12-07 – 发布包含已修复bug的补丁1.1.13 RC3