从上手到“直播”,一次智能震动棒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
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。
目录
相关文章
|
4月前
|
小程序 前端开发 JavaScript
(保姆教程及高级玩法及坑)微信同声传译插件-语音识别
(保姆教程及高级玩法及坑)微信同声传译插件-语音识别
136 0
|
7月前
|
物联网 芯片 SoC
聊聊身边的嵌入式,自拍神器自拍杆
聊聊身边的嵌入式,自拍神器自拍杆
|
8月前
|
搜索推荐
最新体育赛事直播安装源码下载哪里找
体育直播平台作为人们追逐比赛精彩的重要方式之一,无论是在家中还是在工作场所,体育迷们都可以通过体育直播平台亲临现场般的观赛体验。但是,对于想要搭建平台获取最新体育直播源码的人来说,该如何获取源码呢?本文将为您探讨两种选择。
|
11月前
|
缓存 小程序 数据库
微信小游戏开发最全系列教程
嗨!大家好,我是小蚂蚁。 最近有非常多的新朋友关注了我,再加上这一段时间里,我又写了很多的原创教程,所以,更新一下这篇“微信小游戏开发最全系列教程”,做了很多的补充,希望能够对你有帮助,可以把这篇文章收藏一下,以便在需要的时候可以找得到,因为很可能这是全网最好的微信小游戏开发系列教程资料了。 这里的教程文章已经帮助过很多人做出了自己的第一款游戏,希望它们还能够继续帮助更多想要做游戏的朋友,进入游戏开发世界的大门。
119 0
|
11月前
|
物联网
【HaaS Hands-On】全新视频节目上线 创意案例我们一起上手做 第一期E01: 物联网工程师 和你一起上手做遥控机械臂
【HaaS Hands-On】全新视频节目上线 创意案例我们一起上手做 第一期E01: 物联网工程师 和你一起上手做遥控机械臂
|
11月前
|
人工智能 网络协议 网络性能优化
【毕设参考】HaaS Python 云端一体AI【手势识别】窝在家里看电视不想动?想换台懒得找遥控器?试试解锁智能设备新玩法
【毕设参考】HaaS Python 云端一体AI【手势识别】窝在家里看电视不想动?想换台懒得找遥控器?试试解锁智能设备新玩法
119 0
|
Linux 程序员 开发者
分享一款移动开发者必备神器
分享一款移动开发者必备神器
分享一款移动开发者必备神器
|
自然语言处理 程序员 语音技术
一键完成对话需求?这款插件你不能错过(Unity3D)(二)
Dialogue System是一个分支式的统一会话系统。它不需要任何脚本,但它是设计为易于由程序员扩展。 Unity对话系统让你: • 用分支逻辑编写交互式对话。 • 在灵活的、完全可自定义的UI系统中显示会话。 • 定义玩家要完成的任务/任务。 • 播放镜头序列,如相机剪辑和音频。 • 保存和加载游戏,并在场景更改中持久化数据。 • 使用本地化来显示文本,并在不同的语言中播放剪裁场景。 • 导入和导出各种格式,如:draft、Chat Mapper和CSV。
|
存储 自然语言处理 程序员
一键完成对话需求?这款插件你不能错过(Unity3D)(三)
Dialogue System是一个分支式的统一会话系统。它不需要任何脚本,但它是设计为易于由程序员扩展。 Unity对话系统让你: • 用分支逻辑编写交互式对话。 • 在灵活的、完全可自定义的UI系统中显示会话。 • 定义玩家要完成的任务/任务。 • 播放镜头序列,如相机剪辑和音频。 • 保存和加载游戏,并在场景更改中持久化数据。 • 使用本地化来显示文本,并在不同的语言中播放剪裁场景。 • 导入和导出各种格式,如:draft、Chat Mapper和CSV。
|
存储 XML JSON
一键完成对话需求?这款插件你不能错过(Unity3D)(四)
Dialogue System是一个分支式的统一会话系统。它不需要任何脚本,但它是设计为易于由程序员扩展。 Unity对话系统让你: • 用分支逻辑编写交互式对话。 • 在灵活的、完全可自定义的UI系统中显示会话。 • 定义玩家要完成的任务/任务。 • 播放镜头序列,如相机剪辑和音频。 • 保存和加载游戏,并在场景更改中持久化数据。 • 使用本地化来显示文本,并在不同的语言中播放剪裁场景。 • 导入和导出各种格式,如:draft、Chat Mapper和CSV。