近年来智能家居日益普及,涌现了各式各样的产品,如智能电视、智能插座、智能灯泡、智能门锁、智能摄像头。智能家居为我们的生活提供了便利,带来了对未来的无限想象空间。然而,大多数智能家居产品在安全性方面的表现堪忧,可以这么说吧,就像飞机上的一颗隐形炸弹随时可能被引爆。
对于智能设备的安全性,也有很多安全研究者开始关注,比如近期神话鬼斧实验室最近在汽车防盗系统方面的研究。当然,我们也在关注和研究,部分成果可以参考这篇物联网安全研究联合团队的文章《潜伏在身边的危机——智能设备安全》。
笔者前段时间跟团队一起参加了今年的GeekPwn(很棒的一个关注智能生活安全的比赛),对某款智能插座进行了分析并发现了一些问题,可惜在比赛过程中出了点意外导致演示失败。不过没有关系,本文就通过这个智能插座的问题管中窥豹一探智能生活安全。文中涉及的漏洞已经由GeekPwn官方通知厂商修复。
【发现】
该插座的控制示意图如下:
过程:
1)手机APP通过智能插座自带WIFI完成配置,告知智能插座路由器密码;
2)智能插座通过路由器连接服务器;
3)手机APP与智能插座同时连接服务器,利用xmpp协议通信,完成手机APP对智能插座的控制、升级等操作
另外,插座固件升级过程:手机向服务器发送升级请求,服务器向智能插座发送升级的固件地址,智能插座自行下载固件并完成升级。
对固件升级过程抓包,可以发现,智能插座会通过HTTP从固定的URL下载更新固件y2.bin以及校验码y2.bin.md5。很明显,这里存在中间人攻击的可能性。
【进一步分析】
Binwalk解压升级固件y2.bin,可知该插座使用的是openwrt系统。
查看shadow文件,发现root用户默认密码p9zxxx。
nmap扫描,该插座开放了tcp 22(SSH)端口。
于是乎果断尝试,SSH直接登录上去了。使用系统自带的sysupgrade便可以直接更新固件。该过程未校验待刷固件是否比当前固件版本高,还存在固件降级的漏洞。
在解压出来的固件中植入反弹shell的代码,并打包固件。Openwrt自带的nc是不带-e选项的,使用一个小技巧便可绑定指定端口,如下图所示。Openwrt squashfs ROM的重打包方法参考这篇文章(注:重打包的过程如果稍有差错,将会直接把智能硬件刷成砖。笔者成功刷坏了两个插座)。
【一次实际的渗透测试】
尝试搭建中间人攻击的环境。由于在路由器上不方便对HTTP包做修改,故采用局域网内DNS欺骗的攻击方式,网络环境如图所示。
位于同一局域网的攻击者使用ettercap的dns_spoof模块进行攻击。
此时用户使用手机APP向插座发送固件升级指令。可以看到,已成功实施两次DNS欺骗。一次是y2.bin,一次是y2.bin.md5。
更新固件后,重新启动插座。公网主机成功获得反弹shell,如下图所示。
由于条件有限,只演示了DNS欺骗这种攻击场景。其它可行的中间人攻击方式还有在路由器或主干网修改请求包的URL,以及利用ARP攻击修改HTTP请求返回的数据。由此可见,智能插座使用HTTP传输同时又没有实施有效的文件校验(比如用非对称加密算法),实非明智之举。
【结语】
智能硬件存在诸多的安全隐患,其中不仅仅是用户隐私,还可能涉及人身安全。正如《网络犯罪调查》中的情节,罪犯远程控制婴儿摄像头,发现父母的作息规律,趁父母睡觉时偷走婴儿。
最后还是希望智能硬件厂商能够更加注重安全,提供安全的智能生活。我们也会对行业尽自己的一份力,建设更安全的物联网。