当前位置 : 首页 > 徐州网络安全技术论坛 > 小米智能家居设备流量分析及脚本控制

小米智能家居设备流量分析及脚本控制

作者:徐州软件公司  文章来源:徐州软件公司   阅读次数:66 次
2018-08-29

此文章是徐州软件公司整理的技术资料,由徐州软件公司总务部发布,邮箱:zongwu@xuzhousoft.com

江苏徐软信息科技有限公司江苏徐软信息科技有限公司

*本文作者:scu-igroup,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。

前言

万物互联的时代即将来临,而现阶段,我们能感触到的,当属智能家居设备了。目前,IoT智能家居设备可谓种类繁多,琳琅满目,我们房间也按照实际需要买了些小米智能家居设备,使用相当方便,下载米家APP,手机上就能操控。那它到底是怎么实现的操控呢,既然,我们是搞流量分析的,那就先从流量开始吧。

当我们开始吧

这次实验主要分析了三款小米的智能家居设备,如下为:

小米空气净化器

小米LED智能台(也可以下载yeelightAPP进行操作)

小米多功能网关

我们就先从空气净化器开始吧,首先需要知道IoT设备的IP地址,这里有两种比较直接的方法知道设备IP地址,第一种是在APP中添加好设备后,查看设备信息;如查看不到,采用第二种方法,即用小米提供的工具miio查看(这部分后门在介绍)。

找到设备的IP之后,就得想办法获取到进出设备的流量数据包,由于是在同一个局域网中,我们采用ARP欺骗攻击,扮演中间人角色,让设备流量从我的主机经过。攻击的工具为著名的ettercap,攻击命令为:

ettercap -ienp3s0 -T -q -M ARP:remote /192.168.9.253// /192.168.9.150//

运行这条命令,会让网关认为我的主机是IoT设备,让设备认为我的主机是网关,以达到窃听流量的目的。该工具在Ubuntu16.04上可直接安装,更多高级用法,读者可自行搜索。

我们首先来看看抓到的数据包,以IP地址为条件过滤一下,如下图所示:

抓到的数据包

徐州网络信息安全公司徐州徐软信息科技有限公司从图中可以看出,设备的命令控制包为UDP传输,既然是UDP协议传输,那么是否可以通过命令包重放攻击来对设备进行控制?

带着这样的疑问,我们先来写一个数据包重放的脚本试一试:

数据包重放的脚本

脚本如上所示,红框黄字部分为开\关空气净化器命令字符串的16进制转码,重放开\关空气净化器设备的脚本,运行该程序,发现净化器没有相应。开wireshark抓包,确认数据包已经发送出去,但命令没有生效,怀疑是设备自身有验证。要解决这个问题,只有分析下应用层协议了。分析应用层协议,最好是能拿到网络通信代码,否则将会是一个费时费力的工作。

幸运的是,了解到在homeassistant中可实现对小米设备的集成,并在其中对设备进行管理和操作。Homeassistant,主要以Python语言开发,既然它能操控小米设备,那它底层肯定有相关的函数调用库。带着这个线索,我开始研究homeassistant,在安装的过程中,发现了miio库,由它可实现对小米部分设备的操作,主要参考这篇文章。Github上分享有miio的开源项目,大喜,不由自主先点了个赞。

首先看看这个库中支持的设备有哪些呢,如下图所示:

库中支持的设备

可以看到,支持的智能家居种类还是不少,但要使用它,还是需要安装一些依赖包,这些依赖包可以用pip3直接安装:

sudo pip3 install -r requirements.txt

再来看看它的源码程序,在miio文件夹下,发现了airpurifier.py和protocol.py,这两个文件,不是我正想要的么,分析之,并了解它们之间的调用关系。

在AirPurifier中,继承了Device类,主要的应用层数据封装和发送都是在Device类中完成。

据封装和发送都是在Device类中完成

上图为Device类的初始化函数,由图中看,只需要知道设备的IP地址和token传入即可。先通过miio工具获取ip和token。

在Ubuntu下,先安装miio,再进行设备发现:

npminstall -g miio

 

miiodiscover

先安装miio,再进行设备发现

如上图所示,为扫描到空气净化器相关参数,而用到的传输协议可以在protocol.py的message封装中窥探一二。

message封装

如上图所示,为应用层各字段封装,data字段为加密字段,这说明想要通过中间人攻击的方式修改该字段的内容,看来不容易。

那么如何用miio的Python库程序,用脚本完成对空气净化器的控制。如下脚本所示:

Python脚本

运行脚本,不一会儿,听到了空气净化器清脆的响声,并且是开一次,关一次,这样循环,刚好同我的程序逻辑一样。直接用miio库开关空气净化器的程序,那再来分析下小米台灯呢。

先来看看miio库是否支持小米智能台灯yeelight,如下所示:

miio库是否支持小米智能台灯

看来是支持的,但仅仅提供很有限的支持,完整的支持要用python-yeelight库。这个库可直接安装,操作也十分方便,如下为开启等操作:

>>> from yeelight import Bulb

>>> bulb = Bulb(“192.168.0.5″)

>>> bulb.turn_on()

但要使用这个库,需要用YeeLightAPP将台灯设置为开发者/局域网模式。代码如下所示:

将台灯设置为开发者/局域网模式

初始运行这个脚本,发现存在socket连接不上的错误,原因是小米智能台灯采用的是TCP连接,如果已经有设备连接到台灯,我们再去连接,就会存在连接不上的错误。

解决方法是:

我这里采用了try, except的错误处理方式,遇到错误,继续循环连接。这样可以将原来的连接挤下去,从而只响应脚本的控制命令。果然,这个脚本运行一段时间后(大概40秒左右),台灯开始有规律开关,符合我的脚本逻辑。

对于小米多功能网关,同样具有开发库(见这里,小米真是一家“开放”的企业^^),它的通信协议也是采用的UDP协议,除了key部分用到了加密算法,其他部分为明文传输。也正因为key字段这部分,我们重放数据包却没有成功,返回的数据包中有Invalid key字段。如下图所示:

通信协议

在整个与网关的通信中,key会不断地进行交换,这可能就是导致我们重放攻击失败的原因。对于脚本控制小米网关设备,它的调用过程稍显复杂,主要是没有弄清它的传参的过程。感兴趣的朋友可以自己去安装一个homeassistant,看在这里面是如何调用相关函数的。到此为止,三款小米设备基本都介绍完了。本文证明了用脚本控制小米的智能家居设备是可行的,虽然只做了简单的开\关测试,但可以做一个抛砖引玉的作用,更多高级脚本的功能探索,感兴趣的朋友可以继续深入下去。

本次实验所有的代码和数据包,见项目:https://github.com/scu-igroup/ControlXiaomiDevices

总结

小米智能家居设备配合着APP确实方便好用,本想着研究下它的通信协议,没想到在此过程中,发现小米的这些设备都能利用公开的函数库,并编写脚本程序进行控制,实在是意外的收获。大家如果感兴趣,也可以来实验一把,如果有新的点子,欢迎一起交流。

*本文作者:scu-igroup,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。

江苏徐软信息科技有限公司(简称徐州软件公司)是徐州软件公司中成立时间最长、技术能力最强、经济实力最雄厚的徐州软件开发公司之一,专业的徐州软件开发团队,从事徐州软件开发10年,一直保持着徐州软件开发行业排头兵的地位。徐州软件公司徐州软件开发行业内的众多徐州软件开发公司保持着良好的合作关系,是徐州软件开发行业的领航者之一。徐州软件公司立足徐州软件开发市场,主攻徐州软件开发徐州APP开发徐州软件公司徐州ERP软件开发徐州OA软件开发徐州CRM软件开发等领域拥有大量经典案例。更多信息请访问徐州软件公司官方网站:

徐软com:http://www.xuzhousoft.com  徐软cn:http://www.xuzhousoft.com.cn
徐软app:http://app.xuzhousoft.com  淮北徐软:http://huaibei.xuzhousoft.com.cn
济宁徐软:http://jining.xuzhousoft.com.cn  亳州徐软:http://bozhou.xuzhousoft.com.cn
菏泽徐软:http://heze.xuzhousoft.com.cn  宿州徐软:http://suzhou.xuzhousoft.com.cn
枣庄徐软:http://zaozhuang.xuzhousoft.com.cn  宿迁徐软:http://suqian.xuzhousoft.com.cn
商丘徐软:http://shangqiu.xuzhousoft.com.cn  连云港徐软:http://lianyungang.xuzhousoft.com.cn
莱芜徐软:http://laiwu.xuzhousoft.com.cn  泰安徐软:http://taian.xuzhousoft.com.cn
日照徐软:http://rizhao.xuzhousoft.com.cn  开封徐软:http://kaifeng.xuzhousoft.com.cn
周口徐软:http://zhoukou.xuzhousoft.com.cn  盐城徐软:http://yancheng.xuzhousoft.com.cn
淮安徐软:http://huaian.xuzhousoft.com.cn  阜阳徐软:http://fuyang.xuzhousoft.com.cn
蚌埠徐软:http://bengbu.xuzhousoft.com.cn  临沂徐软:http://linyi.xuzhousoft.com.cn
邳州徐软:http://pizhou.xuzhousoft.com.cn  新沂徐软:http://xinyi.xuzhousoft.com.cn
沛县徐软:http://peixian.xuzhousoft.com.cn  睢宁徐软:http://suining.xuzhousoft.com.cn
丰县徐软:http://fengxian.xuzhousoft.com.cn  萧县徐软:http://xiaoxian.xuzhousoft.com.cn
砀山徐软:http://dangshan.xuzhousoft.com.cn  微山徐软:http://weishan.xuzhousoft.com.cn
永城徐软:http://yongcheng.xuzhousoft.com.cn  网络营销:http://www.f168yingxiao.com
徐州系统集成公司:http://www.0516app.com

关键字标签:徐州软件公司 徐州软件开发公司 徐州APP软件开发公司 徐州ERP软件开发公司 徐州CRM软件开发公司 徐州OA软件开发公司

下载DOC版 下载PDF版

* 以上内容由 徐州软件公司 整理


关于我们

    江苏徐软信息科技有限公司(简称徐州软件)位于国家大学科技园内,成立于2005年,注册资金1000万元,是徐州地区最具实力的集软件开发、电子商务技术服务、门户网站建设、系统集成、网络工程为一体的高科技IT技术公司之一。

技术支持

  • 售后服务电话:0516-83003411
  • 售后服务QQ:412110939
  • 售后服务邮箱:
    service@xuzhousoft.com
  • 售后投诉电话:18795428064
徐州软件公司
    扫描微信二维码即可获得
    免费信息化咨询服务

Copyright© 2005 江苏徐软信息科技有限公司 All Rights Reserved.
苏公网安备 32030302000144号  苏ICP备11059116号-5

地址:江苏省徐州市云龙区和平路57号江苏师范大学科技园4F  徐州软件公司
电话:0516-83737996 邮箱:sales@xuzhousoft.com

江苏徐软信息科技有限公司地图
江苏徐软信息科技有限公司地图
点这里关闭本窗口
×