近期,安全研究专家JonSawyer公开表示,他在某些由富士康代工制造的Android智能手机中发现了一个后门,攻击者或可通过这个后门来root用户的Android手机。在此之前,JohnSawyer曾经为美国地方政府和执法机构提供过安全咨询服务,所以他的这一发现也引起了不小的轰动。
有意为之or无心之举?
想必各位应该都知道富士康公司吧?富士康目前正在为多家智能手机厂商代工生产或组配智能手机,而且某些厂商甚至还允许富士康开发手机系统固件中的部分低级别代码。
根据Sawyer的发现,富士康在代工制造某些Android智能手机时,“故意”在App的引导程序代码中留下了一个调试功能,而在某些特殊软件的帮助下,攻击者就可以利用这个后门来攻击用户的手机了。
Sawyer在接受采访时说到:
“这个漏洞之所以会存在,完全是由于富士康的技术人员”疏忽大意“所导致的。该后门是不是故意留下的,我们暂且不论,但是这样的失误确实是非常可怕的。攻击者如果可以成功利用这个漏洞,那么他们将可以绕过Android的安全访问控制(SELinux),并获取到目标设备的完整控制权,然后在未经身份验证的情况下访问目标设备中的数据。
“Pork Explosion”漏洞
这个名为“Pork Explosion”的漏洞不仅对攻击者来说是一个有力的攻击武器,而且对于安全取证专家而言也是一个非常棒的工具。实际上,正是因为手机中存在各种各样的安全漏洞,所以安全取证专家们才可以顺利地从目标手机中提取出各种类型的取证数据。根据Sawyer透露的信息,由于这个漏洞将允许攻击者直接获取到一台加密设备的root shell,所以安全取证人员同样可以利用这个漏洞来进行数据提取、爆破密钥、或者解锁手机的引导程序(bootloader)。
Sawyer说到:
“在这一漏洞的帮助下,攻击者一旦拿到了目标用户的智能手机之后,便可以通过USB来禁用SELinux,然后获取目标设备的root shell。简而言之,攻击者只需一条USB数据线,即可完成攻击。”
Sawyer表示,此次发现存在安全漏洞的手机为富士康代工的Infocus M810和Nextbit Robin这两款手机。他在今年八月份就已经与Nextbit公司以及Google的Android安全团队进行了联系,并且将有关该漏洞的信息提供给了相关的安全技术人员。目前,Nextbit已经修复了相应的安全漏洞,但Infocus方面还未有消息更新。
漏洞分析
正如文章中所提到的那样,攻击者如果可以拿到目标手机的话,他们就可以通过USB来禁用SELinux,并且获取到设备的rootshell。除此之外,攻击者还可以通过adb命令、fastboot、以及App的引导程序来对设备进行攻击。于是我便对Nexbit Robin的App引导程序进行了分析,其中有一段fastboot命令引起了我的注意,而这个命令似乎并不应该出现在这个地方。具体如下所示:
LOAD:0F92F8DC fastboot_table ; CODE XREF:sub_F939888+174p
LOAD:0F92F8DC
LOAD:0F92F8DC var_C = -0xC
LOAD:0F92F8DC
LOAD:0F92F8DC STMFD SP!, {R4,LR}
LOAD:0F92F8E0 MOV R4,
从上面这段代码中我们可以看到,手机中同时存在有两种fastboot命令,即普通命令和OEM命令。普通命令会以“command:parameters”(命令:参数)的形式通过USB来进行发送。比如说,“getvar all”命令则会以“getvar:all”的形式发送,而“reboot”命令就直接以“reboot”的形式发送。需要注意的是,这种普通命令是硬编码在fastboot客户端中的。但是其中的OEM命令却并没有以设备制造商的标准命令形式执行,OEM命令是以“oem command parameters”的形式发送的,例如“oem writeimei 1234567899876543”。
在上面列出的命令中,存在问题的命令为“reboot-ftm”,而且这个命令既不属于普通命令,也不属于OEM命令。实际上,这是一个由移动设备支持的命令,而且我们无法在fastboot中实现这个命令。为了与这个命令进行交互,我们必须先创建一个自定义的客户端,然后用这个自定义的客户端来与设备进行连接,并向设备的bootloader发送字节数据“7265626F6F742D66746D(reboot-ftm)”。操作代码如下所示:
Jons-Mac-Pro:nextbit jcase$ adb shell
root@ether:/ # id
uid=0(root) gid=0(root)groups=0(root),1004(input),1007(log),1011(adb),1015(sdcard_rw),1028(sdcard_r),3001(net_bt_admin),3002(net_bt),3003(inet),3006(net_bw_stats)
root@ether:/ # getenforce
Disabled
root@ether:/ # grep finger /system/build.prop
# Do not try to parse description, fingerprint, orthumbprint
ro.build.fingerprint=Nextbit/ether/ether:6.0.1/MMB29M/00WW_1_350:user/release–keys
当我们向目标手机发送了这条命令之后,手机将会重启并进入“工厂测试模式”。在这个模式下,手机会将软件和硬件的详细信息全部显示出来,包括eMMC存储器的牌子、手机MAC地址、以及手机序列号。如果你习惯于使用adb来访问手机的话,你也可以通过“adb reboot ftm”命令来进入这个模式。
在工厂测试模式下,adbd进程会以root权限运行,而此时我们就可以在不经过身份验证的情况下通过adb来拿到设备的shell了。需要注意的是,此时设备的SELinux将会处于禁用状态。
对于那些希望在设备中寻找安全漏洞的人,我建议大家可以先去检查“ftmboot”和 “ftmdata”这两个分区。其中,“ftmboot”分区与传统的Android内核以及ramdisk镜像有关,而“ftmdata”分区在ftm启动模式下会被自动加载。如果设备存在漏洞的话,对这些分区进行安全检测也许会给你带来意想不到的惊喜。
总结
虽然从表面上看,这是一个调试功能,但这绝对是一个不折不扣的后门,而且这种东西是绝对不能被允许存在于现在这些智能设备中的。至于这个漏洞到底是富士康的无心之举,还是某人有意为之,我们就不得而知了。
需要注意的是,在此之前,相应的手机厂商其实并不知道他们的产品中被加入了后门。而且在这篇文章发稿之前,富士康方面仍然没有对此次事件发表任何的评论。