本文讲的是
从上手到“直播”,一次智能震动棒Hacking之旅,
近几年,物联网安全事件频出,不过大家的关注点大多停留在电子设备上,少有人关注过玩具,特别是成人玩具。今天我们破天荒地来聊聊性玩具的安全性。
首先聊聊几个问题:
1.震动棒应该去连Wi-Fi吗?
2.如果带内窥摄像头呢?
3. 还包含连接到Skype的隐藏功能?
4.可以将视频自动保存到网络文件共享?
5.还可以用电子邮件发送图片?
6.如果它的Web界面存在代码注入,怎么办?
看完这6个问题,小盆友们,你们是不是懵逼了,什么东东会有这么好玩的功能?
比如这款带内窥摄像头的震动棒:SVAKOM Siime Eye。SVAKOM是全球高端知名情趣生活方式的品牌服务商,成立于2012年,主要研发智能情趣用品。
![从上手到直播,一次智能震动棒Hacking之旅](http://www.4hou.com/uploads/20170410/1491786957826231.jpg?x-oss-process=image/resize,w_1400/format,webp)
本文将重点关注其内置摄像头是如何被黑客攻破的。
SVAKOM Siime Eye是如何运行的
Siime Eye需要iPhone或Android应用配合使用,启动硬件后,手机使用默认密码(88888888)连接到WiFi(SSID“Siime Eye”),然后你就可以通过应用控制拍照、视频了。
它的Android应用内部结构是这样:
![从上手到直播,一次智能震动棒Hacking之旅](http://www.4hou.com/uploads/20170410/1491787019973344.jpg?x-oss-process=image/resize,w_1400/format,webp)
如上图所示,里边提到“wingedcamlib”和“skyviper”这两个名字,看着很像专门为无人机应用编写的库文件。
![从上手到直播,一次智能震动棒Hacking之旅](http://www.4hou.com/uploads/20170410/1491787059738211.jpg?x-oss-process=image/resize,w_1400/format,webp)
我和SkyViper(可以拍摄高清视频的无人机)的开发人员聊了聊,对方像我一样感到惊讶,公司内部代码怎么会在一个性玩具的应用上运行呢?他们怀疑开发Sky Viper控制应用早期版本和编写Siime Eye应用的是同一个人。
这样想并非没有根据的,“com.SiimeEye”源代码包含的一些硬编码及其IP地址和端口非常能说明问题:
![从上手到直播,一次智能震动棒Hacking之旅](http://www.4hou.com/uploads/20170410/1491787126604545.jpg?x-oss-process=image/resize,w_1400/format,webp)
有一个名为“admin”的帐户,密码为空
在使用笔记本电脑连接到Siime Eye AP时,我尝试使用192.168.1.1:80的服务器,这时服务器弹出验证框,提示输入用户名和密码:
![从上手到直播,一次智能震动棒Hacking之旅](http://www.4hou.com/uploads/20170410/1491787208544371.jpg?x-oss-process=image/resize,w_1400/format,webp)
这看起来很像平时所见的登录身份验证。我输入用户名“admin”后,直接进入了AP的Web控制界面。
这里需要注意,由于登录凭据在官方应用程序中是硬编码的,任何准备使用Siime Eye的用户都不能更改这些凭据。如果有人可以进入无线AP,那他就可以随时访问此Web应用程序中的所有内容,此Web应用允许多个并发连接。
通过APP可以看到震动棒内置摄像头所拍摄的画面,由于是Wi-Fi AP,黑客可以轻而易举地找到使用震动棒的用户。
鉴于传输视频所需的带宽,大部分震动棒都被配置成Wi-Fi客户端而不是接入点运行,Siime Eye的这个选择让我感觉无法理解。
在正常使用情况下,无线AP名称很少会被更改。这意味着我们可以查询wigle.net等Wi-Fi数据网站,查找可能出现“Siime Eye”的位置。以下是我在东京看到的示例图:
![从上手到直播,一次智能震动棒Hacking之旅](http://www.4hou.com/uploads/20170410/1491788102172001.jpg?x-oss-process=image/resize,w_1400/format,webp)
以上这些都是小意思,下面我们来看黑客是怎么获得震动棒的Root Shell权限,以及提权后如何进行持久性控制的。
软件
Siime Eye震动棒应用之所以会和无人机的一些代码相似,那是因为对于编写无人机相机程序的开发人员来说,附加到震动棒上的相机和无人机上的相机是没有区别的。也就是说只要是这类相机,不管用途是什么,它们背后的程序代码都是通用的,因此我可以利用这个通用的程序代码来做一些我希望做的修改,比如黑客行为:
![从上手到直播,一次智能震动棒Hacking之旅](http://www.4hou.com/uploads/20170410/1491788113363659.jpg?x-oss-process=image/resize,w_1400/format,webp)
其中有一些NFS服务器设置、运动检测设置等等。正如我们在嵌入式设备Web界面中经常看到的,所有设置请求都由.cgi文件处理。很多要更改设置的请求将发送到/set_params.cgi,而它所做的只是返回表示成功或失败的JSON数据,如果我发送GET请求,sibling 文件 /get_params.cgi会在响应中发回许多配置数据,其中就包括“skype_pwd”,“smtp_pwd”,“ddns_pwd”等参数。因此,我可以假设Siime Eye有发送电子邮件、更改DNS设置、甚至添加Skype帐户的功能。
一个.cgi文件的典型响应如下所示:
![从上手到直播,一次智能震动棒Hacking之旅](http://www.4hou.com/uploads/20170410/1491788167251427.gif?x-oss-process=image/resize,w_1400/format,webp)
它似乎有着跨域资源共享(CORS)策略,因为我们可以看到,它返回了带Access-Control-Allow-Origin信息的header。理论上说,这将让我或任何可以访问此Web应用程序的浏览器读取服务器上的任何响应的内容,不过浏览器通常会限制从另一个网站读取响应的设备,并且是“同源策略”(SOP)的组成部分。这一限制,就意味着恶意网站不能够随意读取我的金融信息,比如银行余额。
在理想情况下,SOP也意味着网站无法浏览具有我的IP的摄像视频。但是如果服务器指定了具有通配符值的“Access-Control-Allow-Origin”标头,那任何网站的任何人都可以读取视频响应,从而使使SOP失效。
所以,我用XMLHttpRequest调用了一段JavaScript,试图将数据从设备中抽出。然而奇怪的是,浏览器不断提示我违反了SOP。
经过一番调查,我发现了这个问题所在。事实证明,使用XHR的CORS的特性之一是首先发送带有OPTIONS头部的飞行前请求,直到Access-Control-Allow-Origin头返回。但是,Siime Eye可以将OPTIONS解释为RTSP请求,并获得标准的RTSP响应:
![从上手到直播,一次智能震动棒Hacking之旅](http://www.4hou.com/uploads/20170410/1491788175643118.jpg?x-oss-process=image/resize,w_1400/format,webp)
我不能像上图那样对数据进行扫描,因为这样,浏览器会认为我打破了SOP而得不到预期的响应, RTSP协议也似乎在80端口上运行。
然而,所有.cgi文件都允许我在每个请求中指定JSONP回调,这意味着SOP仍然无用。 JSONP可以指定变量名称,将生成的JSON数据导入脚本,并像其他任何JSON数据一样使用。
我写了一小段PoC来从设备中使用JSONP转储一些信息,包括可以看到的本地Wi-Fi网络列表和视频。由于视频流是受保护的,我必须先得到一个登录凭证,然后才能查看视频。但是使用JSONP仍然意味着我可以将它们复制出来,大家可以在Github上看到编写的代码。
![从上手到直播,一次智能震动棒Hacking之旅](http://www.4hou.com/uploads/20170410/1491788186160289.gif?x-oss-process=image/resize,w_1400/format,webp)
我从网上搜索到一些.cgi文件名后,发现了Reecam开发者文档。
我在Siime Eye遇到的每个.cgi文件似乎都记录在了Reecam网站上,硬件MAC地址指向的是深圳Reecam科技有限公司。据调查,Siime Eye上运行的软件是由他们开发的。
如果我能找到固件,就可以了解在后台实际发生了什么。此时,我只有80端口及一个网页界面。尽管在SVAKOM 的网站上贴了很多开发者信息,但是我还是无法在任何地方找到固件。
然而,通过在网站上记录的一个参数“telnetd”(我最初测试Web界面时并没有遇到),我浏览了以下链接并重新启动了Siime Eye:
http://192.168.40.17/set_params.cgi?telnetd=1&save=1&reboot=1
当它返回时,telnet可用,这似乎也太容易得到默认凭证了,不过事实证明,不是那么简单。
![从上手到直播,一次智能震动棒Hacking之旅](http://www.4hou.com/uploads/20170410/1491788196562743.gif?x-oss-process=image/resize,w_1400/format,webp)
所以,我现在还没有固件,没有shell,只有一个Web界面问题,下一步我必须解决它。
硬件
Siime运行了一个Ralink RT5350F WiSoC,里边有一颗MIPS处理器。它通常用于诸如Wi-Fi扩展器之类的东西,功能相对强大,还有Winbond W9825G6JH-6 SDRAM和一个Winbond 25Q64FVSIG闪存芯片,用来保存文件系统。
MIPS处理器有一些方便操作的外露UART接口,我把它与BusPirate连接,尝试将错误波特率设置为57600,并获得了一个无用的调试信息,不过同时我也碰到了禁止访问的telnet登录提示和一个限制超多的uBoot shell。
![从上手到直播,一次智能震动棒Hacking之旅](http://www.4hou.com/uploads/20170410/1491788209180107.jpg?x-oss-process=image/resize,w_1400/format,webp)
现在,我决定尝试转储固件,我设法读取了Winbond 25Q64FVSIG芯片。
![从上手到直播,一次智能震动棒Hacking之旅](http://www.4hou.com/uploads/20170410/1491788220368179.jpg?x-oss-process=image/resize,w_1400/format,webp)
大约读取了30分钟,我得到了一份固件,然后我binwalk到一个正确的文件系统。
这是一个Linux文件系统,但是既没有/etc/passwd,也没有/etc/shadow,只有些许尝试在NVRAM加载参数的引导脚本的踪迹。
我将笔记本电脑接在UART上,并再次开始检查网页界面。这一次,我注意到来自Web应用程序的小型调试消息被引导到UART硬件流控制。它看起来很像stderr,stdout可能只是被调出来进行调试。
现在我返回到NFS设置页面,除了将unanitised参数直接发送到UNIX的“mount” 命令之外,还可以怎样设置网络文件共享?
几分钟后,我发现了一个命令注入点,所有stdout和stderr输出都被发送到我的另一台笔记本电脑上的UART流。
发送“192.168.1.1; ls -al; echo”和“192.168.1.1; cat /etc/passwd; echo”作为NFS设置中的“HOST / IP“参数将会导致安装错误,根文件系统的列表和/etc/passwd的内容。
![从上手到直播,一次智能震动棒Hacking之旅](http://www.4hou.com/uploads/20170410/1491788230346547.jpg?x-oss-process=image/resize,w_1400/format,webp)
![从上手到直播,一次智能震动棒Hacking之旅](http://www.4hou.com/uploads/20170410/1491788238180247.jpg?x-oss-process=image/resize,w_1400/format,webp)
破解hash加密不需要使用密码暴力破解,由于Web应用程序以root身份运行,我将自己写入/etc/passwd作为另一个root用户,并通过telnet登录。
甚至不需要破解哈希,我检查了运行的进程,并在一些自定义系统二进制文件中进行了替换:/bin/reecam和/bin/camera。从前面转储的固件中运行/bin/camera上的字符串,使用root权限即可打印出硬编码的telnet密码。
![从上手到直播,一次智能震动棒Hacking之旅](http://www.4hou.com/uploads/20170410/1491788246162478.gif?x-oss-process=image/resize,w_1400/format,webp)
至此,经过以上尝试过程,我已经完全控制Siime Eye的每个内置功能,轻松访问内置摄像机的视频。
具体分析过程我还录制了视频,感兴趣可以点击这里查看(YouTube)。
最后
如果用户不会使用某个功能,那么请不要暴露出来,因为利用官方这些内置功能进行攻击真是太简单了。
在SVAKOM Siime Eye的案例中,我可以编写针对性的攻击程序,连上设备并执行未授权操作,比如让设备连上WiFi作为视频流直播。只需要在设备附近,极大可能(用户未修改设备WiFi信息)我可以立马获取root权限和视频流。
如果各位曾经购买过SVAKOM Siime Eye或者类似产品,请务必修改设备WiFi名和密码,密码需要设置得复杂些。
由于运气不太好,我多次尝试联系SVAKOM均未得到回应,最终决定公开漏洞。
原文发布时间为:2017年4月10日
本文作者:xiaohui
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。