开发者社区> 玄学酱> 正文

从上手到“直播”,一次智能震动棒Hacking之旅

简介: 本文讲的是从上手到“直播”,一次智能震动棒Hacking之旅,近几年,物联网安全事件频出,不过大家的关注点大多停留在电子设备上,少有人关注过玩具,特别是成人玩具。今天我们破天荒地来聊聊性玩具的安全性。
+关注继续查看
本文讲的是从上手到“直播”,一次智能震动棒Hacking之旅近几年,物联网安全事件频出,不过大家的关注点大多停留在电子设备上,少有人关注过玩具,特别是成人玩具。今天我们破天荒地来聊聊性玩具的安全性。

首先聊聊几个问题:

1.震动棒应该去连Wi-Fi吗?
2.如果带内窥摄像头呢?
3. 还包含连接到Skype的隐藏功能?
4.可以将视频自动保存到网络文件共享?
5.还可以用电子邮件发送图片?
6.如果它的Web界面存在代码注入,怎么办?

看完这6个问题,小盆友们,你们是不是懵逼了,什么东东会有这么好玩的功能?

比如这款带内窥摄像头的震动棒:SVAKOM Siime Eye。SVAKOM是全球高端知名情趣生活方式的品牌服务商,成立于2012年,主要研发智能情趣用品。

从上手到直播,一次智能震动棒Hacking之旅

本文将重点关注其内置摄像头是如何被黑客攻破的。

SVAKOM Siime Eye是如何运行的

Siime Eye需要iPhone或Android应用配合使用,启动硬件后,手机使用默认密码(88888888)连接到WiFi(SSID“Siime Eye”),然后你就可以通过应用控制拍照、视频了。

它的Android应用内部结构是这样:

从上手到直播,一次智能震动棒Hacking之旅

如上图所示,里边提到“wingedcamlib”和“skyviper”这两个名字,看着很像专门为无人机应用编写的库文件。

从上手到直播,一次智能震动棒Hacking之旅

我和SkyViper(可以拍摄高清视频的无人机)的开发人员聊了聊,对方像我一样感到惊讶,公司内部代码怎么会在一个性玩具的应用上运行呢?他们怀疑开发Sky Viper控制应用早期版本和编写Siime Eye应用的是同一个人。

这样想并非没有根据的,“com.SiimeEye”源代码包含的一些硬编码及其IP地址和端口非常能说明问题:

从上手到直播,一次智能震动棒Hacking之旅

有一个名为“admin”的帐户,密码为空

在使用笔记本电脑连接到Siime Eye AP时,我尝试使用192.168.1.1:80的服务器,这时服务器弹出验证框,提示输入用户名和密码:

从上手到直播,一次智能震动棒Hacking之旅

这看起来很像平时所见的登录身份验证。我输入用户名“admin”后,直接进入了AP的Web控制界面。

这里需要注意,由于登录凭据在官方应用程序中是硬编码的,任何准备使用Siime Eye的用户都不能更改这些凭据。如果有人可以进入无线AP,那他就可以随时访问此Web应用程序中的所有内容,此Web应用允许多个并发连接。

通过APP可以看到震动棒内置摄像头所拍摄的画面,由于是Wi-Fi AP,黑客可以轻而易举地找到使用震动棒的用户。

鉴于传输视频所需的带宽,大部分震动棒都被配置成Wi-Fi客户端而不是接入点运行,Siime Eye的这个选择让我感觉无法理解。

在正常使用情况下,无线AP名称很少会被更改。这意味着我们可以查询wigle.net等Wi-Fi数据网站,查找可能出现“Siime Eye”的位置。以下是我在东京看到的示例图:

从上手到直播,一次智能震动棒Hacking之旅

以上这些都是小意思,下面我们来看黑客是怎么获得震动棒的Root Shell权限,以及提权后如何进行持久性控制的。

软件

Siime Eye震动棒应用之所以会和无人机的一些代码相似,那是因为对于编写无人机相机程序的开发人员来说,附加到震动棒上的相机和无人机上的相机是没有区别的。也就是说只要是这类相机,不管用途是什么,它们背后的程序代码都是通用的,因此我可以利用这个通用的程序代码来做一些我希望做的修改,比如黑客行为:

从上手到直播,一次智能震动棒Hacking之旅

其中有一些NFS服务器设置、运动检测设置等等。正如我们在嵌入式设备Web界面中经常看到的,所有设置请求都由.cgi文件处理。很多要更改设置的请求将发送到/set_params.cgi,而它所做的只是返回表示成功或失败的JSON数据,如果我发送GET请求,sibling 文件 /get_params.cgi会在响应中发回许多配置数据,其中就包括“skype_pwd”,“smtp_pwd”,“ddns_pwd”等参数。因此,我可以假设Siime Eye有发送电子邮件、更改DNS设置、甚至添加Skype帐户的功能。

一个.cgi文件的典型响应如下所示:

从上手到直播,一次智能震动棒Hacking之旅

它似乎有着跨域资源共享(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之旅

我不能像上图那样对数据进行扫描,因为这样,浏览器会认为我打破了SOP而得不到预期的响应, RTSP协议也似乎在80端口上运行。

然而,所有.cgi文件都允许我在每个请求中指定JSONP回调,这意味着SOP仍然无用。 JSONP可以指定变量名称,将生成的JSON数据导入脚本,并像其他任何JSON数据一样使用。

我写了一小段PoC来从设备中使用JSONP转储一些信息,包括可以看到的本地Wi-Fi网络列表和视频。由于视频流是受保护的,我必须先得到一个登录凭证,然后才能查看视频。但是使用JSONP仍然意味着我可以将它们复制出来,大家可以在Github上看到编写的代码

从上手到直播,一次智能震动棒Hacking之旅

我从网上搜索到一些.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之旅

所以,我现在还没有固件,没有shell,只有一个Web界面问题,下一步我必须解决它。

硬件

Siime运行了一个Ralink RT5350F WiSoC,里边有一颗MIPS处理器。它通常用于诸如Wi-Fi扩展器之类的东西,功能相对强大,还有Winbond W9825G6JH-6 SDRAM和一个Winbond 25Q64FVSIG闪存芯片,用来保存文件系统。

MIPS处理器有一些方便操作的外露UART接口,我把它与BusPirate连接,尝试将错误波特率设置为57600,并获得了一个无用的调试信息,不过同时我也碰到了禁止访问的telnet登录提示和一个限制超多的uBoot shell。

从上手到直播,一次智能震动棒Hacking之旅

现在,我决定尝试转储固件,我设法读取了Winbond 25Q64FVSIG芯片。

从上手到直播,一次智能震动棒Hacking之旅

大约读取了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之旅

从上手到直播,一次智能震动棒Hacking之旅

破解hash加密不需要使用密码暴力破解,由于Web应用程序以root身份运行,我将自己写入/etc/passwd作为另一个root用户,并通过telnet登录。

甚至不需要破解哈希,我检查了运行的进程,并在一些自定义系统二进制文件中进行了替换:/bin/reecam和/bin/camera。从前面转储的固件中运行/bin/camera上的字符串,使用root权限即可打印出硬编码的telnet密码。

从上手到直播,一次智能震动棒Hacking之旅

至此,经过以上尝试过程,我已经完全控制Siime Eye的每个内置功能,轻松访问内置摄像机的视频。

具体分析过程我还录制了视频,感兴趣可以点击这里查看(YouTube)。

最后

如果用户不会使用某个功能,那么请不要暴露出来,因为利用官方这些内置功能进行攻击真是太简单了。

在SVAKOM Siime Eye的案例中,我可以编写针对性的攻击程序,连上设备并执行未授权操作,比如让设备连上WiFi作为视频流直播。只需要在设备附近,极大可能(用户未修改设备WiFi信息)我可以立马获取root权限和视频流。

如果各位曾经购买过SVAKOM Siime Eye或者类似产品,请务必修改设备WiFi名和密码,密码需要设置得复杂些。

由于运气不太好,我多次尝试联系SVAKOM均未得到回应,最终决定公开漏洞。




原文发布时间为:2017年4月10日
本文作者:xiaohui
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里基础设施的智能监控
IDC、网络、服务器等基础设施承载了一次又一次的双十一奇迹。随着阿里集团业务全球化、多元化发展,作为整个集团之根本的基础设施,其运营水平显得愈发重要,智能监控成为了重中之重。
1503 0
图说报告|云:智能经济时代的基础设施
【图说报告】“智能+”系列继续聚焦“智能+”时代的核心驱动力——智能技术,及其对社会和产业的影响。
1108 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
25020 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
18553 0
“刺激的”2017双11 阿里安全工程师首度揭秘智能风控平台MTEE3
“太刺激了,太刺激了!如果那个48%真出问题,整个安全部的双11就可能是3.25!”
5849 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
13810 0
基础设施助力双11(三):阿里智能流量调度(NetO)
为此阿里网络攻城狮还专门打造了阿里智能流量调度(NetO)系统来保障丝般顺滑的用户体验,下面就让我们一起来了解一下它是怎么来保障的吧。
926 0
+关注
玄学酱
这个时候,玄酱是不是应该说点什么...
20709
文章
438
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载