HackPwn:TCL智能洗衣机破解细节分析
上周结束的Hackpwn上,黑客们脑洞大开,破解了比亚迪汽车、小米手环、乐小宝、长虹电视、TCL洗衣机和九阳豆浆机等一系列最新的智能硬件,据黑客介绍,TCL是一家把家门“砌死”的企业,由于得到了将要被现场破解的消息,在HackPwn前一天,TCL就已经关闭了云服务器,在黑客童鞋以消费者身份苦苦哀求了一晚上以后,终于恢复服务,但是在Hackpwn当天又关闭了,又关闭了……
TCL的洗衣机在云端可以相互识别。但正常来说,一台洗衣机是无法给另一台洗衣机下命令的。不过,黑客团队发现了一招制敌妙计,那就是:把命令中禁止发送的字符换成小写字母,换成小写字母,换成小写字母。(重要的事情说三遍)
没错,绕过系统控制就是这么简单。通过此种方法可以通过模仿云端的控制器“京东微联”向任何一台洗衣机下达指令,指令可以精确到温度和转速。
所以,当你回家发现洗衣机已经以90度的设定温度,以1200转每分钟的转速转了一天的时候,请不要太惊讶哦,你的洗衣机只不过是“认贼作父”了。
通过京东微联手机APP,我们可以查看洗衣机的状态,可以选择多种洗衣模式,调整洗衣机的转速、洗衣的温度等参数。可以实现在任何地点只要洗衣机能接入互联网都可以控制。
对于洗衣机的攻击点分析
使用TCP智能洗衣机时需要对洗衣机进行配置,才能够接入网络,从而使用手机客户端进行远程控制。TCL洗衣机使用的是”京东微联”物联网平台,京东微联是京东旗下针对智能硬件产品专门推出的一项云服务,致力于打造一个多方共赢的智能硬件生态链。
我们可以通过简单的配置将设备通过wifi接入互联网,配置成功后就可以使用京东微联手机客户端来反向控制洗衣机,达到洗衣机设备能够通过手机远程控制的功能,这也就是为什么说这个型号的洗衣机是”智能洗衣机”的原因了。
通过对洗衣机上线流程的配置过程中,可以了解到手机下发控制指令的整个流程如下图:
.手机首先使用京东账号进行认证。 .认证成功后添加了设备和账号的绑定关系。 .手机下发设备控制指令给京东智能云。 .京东智能云在把控制指令转发给第三方平台。 .第三方平台将指令转发到设备,由设备来执行。 .设备执行成功后将状态返回给第三方平台,第三方平台在转发至京东智能云,反馈到手机APP中。
通过分析验证,在京东智能云和手机之间。都具备高强度的加密传输和身份认证的方案,在进行分析过程中,可以发现京东智能云在安全方面还是考虑的比较多的。在短时间要攻破京东智能云平台比较难。所以我把攻击点定位在第三方平台和设备之间。
模糊测试
首先使用360wifi将洗衣机接入到网络中,使用“京东微联”手机APP触发对洗衣机的控制,同时对无线网卡进行抓包分析如下:
洗衣机和第三方平台之间使用的是XMPP协议实现会话的控制和长连接保持在线的。XMPP一般是用来实现聊天工具的一个框架协议。因为智能硬件需要保持长时间在线的会话并且要接收消息,所以一些厂商会改用一些聊天工具来实现。图中标记的数据内容是洗衣机作为客户端登陆成功的状态。使用的登陆数据是用base64进行编码的。
将登陆数据进行解码后发现第一个字段是设备的ID,第二个字段是密码。也就是说洗衣机使用的是这段用户名和密码,登陆云服务器。然后等待京东云平台下发控制指令的。
通过分析数据包可以发现洗衣机主要使用TCP、UDP、XMPP/XML三种协议,通过对数据包内容观察,发现第三方平台到洗衣机之间的数据包没有进行传输加密,可以清晰的看到控制指令的格式和内容。
登陆测试
为了更直观的测试漏洞,选用了一款带有XMPP协议聊天功能的软件。来模拟洗衣机登陆。
使用从数据包分析出来的用户名和密码,登陆第三方云服务器。发现成功的用洗衣机账号登陆成功。
获取控制指令
模拟洗衣机账号登陆成功后,模拟在线的洗衣机接收控制指令。这时使用京东微联手机APP给在线的洗衣机发送一些控制指令。
smartjd@openfire-server:<msg:msgid="SetMessage"type="Control"seq="null"><SetMessage><TurnOn>on</TurnOn></SetMessage></msg>
目前已经成功的伪造洗衣机接收到了,京东智能云发送的开启洗衣机的控制指令。由于目前不知道洗衣机给京东微联响应的什么样的数据包,所以这时将聊天软件关闭,让洗衣机上线,发送启动指令。然后在手机APP客户端中可以进入下发控制指令的界面。然后在断开洗衣机连接,使用聊天软件继续获取其它的控制指令。
伪造洗衣机控制目标洗衣机
在知道了控制指令、登陆的ID和密码的情况下。一开始是想使用smartjd这个账号进行登陆,但是这个账号只有京东智能云里面会保存。所以无奈的情况下发现了一个意外惊喜。登陆洗衣机的ID是一设备的MAC地址+DEVICE为标识的。只要修改一下MAC就可以登录到另外一台洗衣机设备。给目标洗衣机设备发送控制指令。
使用修改后的ID和默认的口令。成功的登陆了另外的一台洗衣机。这时尝试给设备发送控制指令,发现目标设备没有任何响应。
绕过控制指令限制
通过了无数次横向测试,对比测试,各种无厘头的测试之后。怀疑是服务器对发送指令进行了过滤,在对标签和参数进行枚举的过程中发现服务器过滤了”Control”参数。然后机智的把”Control”改为”control”重新发送,奇迹出现了。
成功的使用另外一个洗衣机的账号,给目标洗衣机发送了控制指令。那么就说明目前已经对洗衣机有完全的控制权限。
再使用前面获得的控制指令,控制洗衣机以800的转速开始甩干。
为了验证影响范围,这里写了一个python脚本去遍历MAC地址的在线状态,可以发现很多在线洗衣机的MAC地址。
利用场景
1.通过MAC地址+DEVIVE和默认的密码登陆任意一台洗衣机。
2.通过事先抓取好的控制指令,来制定目标洗衣机的工作内容。
3.通过XMPP软件给目标洗衣机发送控制指令。
问题总结
1.洗衣机终端和第三方云平台之间使用的XMPP协议传输内容未进行加密。
2.使用base64编码洗衣机的ID和密码。
3.洗衣机与第三方平台认证时使用的是MAC+deivce字段作为用户名进行认证标识,这样容易能够通过枚举MAC地址遍历出更多的洗衣机。
4.使用相同的密钥进行洗衣机终端端的认证。
5.洗衣机终端与洗衣机终端通信未进行隔离。
6.未对京东智能云平台下发的控制会话内容为进行过滤,导致任意洗衣机都可以发送控制指令。
TCL智能洗衣机最主要的问题时能够绕过”京东微联”平台的统一管控,再利用传输未加密、使用单一因素作为身份鉴权标识,还有XMPP会话登陆机制等特性,最终实现可以通过任意账号横向控制TCL所有的智能洗衣机。在国内主流的一些智能家居设备,接入到大的IOT平台中也有可能存在同样的问题。
安全建议
1.使用具备一定强度的加密方式加密对XMPP协议传输的内容。
2.身份认证过程当中使用随机数或者无规律的串号进行验证,要求每个洗衣机有独立且不相同的密码。
3.对洗衣机和洗衣机直接的通信进行隔离。
4.使用访问控制过滤京东微联的控制会话请求,只允许京东微联账户发送控制指令。
HackPwn:TCL智能洗衣机破解细节分析的更多相关文章
- 萤石A1互联网报警盒子破解细节分析
攻击点分析: 萤石A1互联网报警盒子使用“全无线解决方案”,传感器的报警通过433.92MHz射频信号发送给报警主机,报警主机可以通过Wi-Fi联网,将报警上传萤石云端,云端会将信息推送到手机端的“ ...
- (转)Android 系统 root 破解原理分析
现在Android系统的root破解基本上成为大家的必备技能!网上也有很多中一键破解的软件,使root破解越来越容易.但是你思考过root破解的 原理吗?root破解的本质是什么呢?难道是利用了Lin ...
- rip路由协议 细节分析及实例配置【完整版】
rip路由协议 细节分析及实例配置[完整版] RIP呢,这是一个比较重要的知识点,所以它的知识覆盖面很广泛:但是呢,我将会对碰到的问题进行一些分析解刨(主要是为了帮助自己理清思维):也希望能够从中发现 ...
- Ext.create细节分析
var win1 = Ext.create('Ext.window.Window', { //实例化方法四 : 使用 完整的 Extjs 类名 width: 800, title: 'define t ...
- Android 系统 root 破解原理分析 (续)
上文<Android系统root破解原理分析>介绍了Android系统root破解之后,应用程序获得root权限的原理.有一些网友提出对于root破解过程比较感兴趣,也提出了疑问.本文将会 ...
- uboot 顶层makefile细节分析
uboot的源文件众多,学习庞然大物首先找到脊椎--顶层的makfile,逐一破解.但是,uboot的makefile同样是一个庞然大物,所以也要找到它的主线.倘若过分专注部分细节,很难做到把握全局, ...
- Android系统root破解原理分析
http://dengzhangtao.iteye.com/blog/1543494 root破解过程的终极目标是替换掉系统中的su程序.但是要想替换掉系统中su程序本身就是需要root权限的,怎样在 ...
- Android 系统 root 破解原理分析
现在Android系统的root破解基本上成为大家的必备技能!网上也有很多中一键破解的软件,使root破解越来越容易.但是你思考过root破解的 原理吗?root破解的本质是什么呢?难道是利用了Lin ...
- 获取root权限及破解原理分析
2012-03-18 17:58:45| 分类: android |字号 订阅 如今Android系统的root破解基本上成为大家的必备技能!网上也有非常多中一键破解的软件,使root破解越来越ea ...
随机推荐
- 【Coursera】SecondWeek(1)
全球互联网的始祖 APRANET APRANET 是 DARPA(美国国防部高级研究计划局) 开发的世界上第一个运营PacketSwitching(分包交换)的网络. 鉴于二战后世界格局两极化的历史背 ...
- NS3 fifth.cc 拥塞窗口实例
fifth.cc /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ /* * This progr ...
- python 字符串转变量方法
1.response=eval('requests.'+func.lower())(destURL, headers=requestHeaders, data=postData, params=que ...
- c++ 匹配A容器中最先出现的b容器中的元素,返回iterator,(find_first_of)
#include <iostream> // std::cout #include <algorithm> // std::find_first_of #include < ...
- HTML元素1: 基本元素,标题,段落,链接,图像等
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- threejs和3d各种效果的学习
写给即将开始threejs学习的自己,各种尝试,各种记忆.不要怕,灰色的年华终会过去. 一个技术学习的快慢,以及你的深刻程度,还有你的以后遇到这个东西的时候的反应速度,很大程度上,取决于你的博客的深刻 ...
- php 获取自己的公网IP
<?php $externalContent = file_get_contents('http://checkip.dyndns.com/'); preg_match('/Current IP ...
- 通过IIS寄宿WCF服务
WCF全面解析一书中的例子S104,直接将Service目录部署到iis是无法得到服务相应的,需要在项目中新建一个web项目,删除掉自动生成的所有文件之后,把Service目录下的Calculator ...
- POJ-1129 Channel Allocation (DFS)
Description When a radio station is broadcasting over a very large area, repeaters are used to retra ...
- iOS UI-Lable标签、NStimer定时器和RunLoop超级死循环
// 标签UILable -显示文字 // 1.创建标签 UILabel *lable = [[UILabel alloc] init]; // 2.设置标签的坐标和大小 [lable setFram ...