Livers 智能家居 光环下的玄机
以下是Livers演讲全文:
大家好。第一次和大家见面心情非常紧张,我先说一下我自己。我之前主要专业还是搞Web的,我一直做乙方的工作,大约是两年前,业余的时候开始研究一些可编程的路由器,就一发而不可收拾,特别喜欢智能上的设备,但是研究的也不够多,大家知道后来替补上来的,有一些东西没准备好,时间太匆忙,如果后面有讲的不好的地方,请大家多多谅解。
这里先给大家看一个视频,这是一款智能插座,它有一个手机控制单可以控制开关,但是我发现了它的协议,发现里面是有问题的,所以我就用就简单地模拟了一下它的收发,这两个是在同一个网络上的,就是家里远程可以控制我的插座。
我先介绍一下背景,可能有些人对智能家居还不是很了解,智能家居很早就进入中国市场了,大约有十年的时间了,但一直不温不火,直到这两年才突然一下子迸发出来,而且出现了不少比较好玩儿的事,以前都是智能家居成套的系统,现在有一些智能家居的单体,像之前出了一些智能路由器,还有一些智能的插座,深受极客的喜爱,销量非常火。
但是纵观全局来看,传统的智能家居占有非常大的市场份额,我相信未来肯定会有越来越多的智能家居的产品出现,它形态也会越来越丰富,我也很期待。
我简单介绍一下智能家居整体框架,大家可以看到它中间有一个中心的部分,叫中控梯,它相当于枢纽,它控制了视频开关,还有红外的一些装置,还有基于Wifi的装置,它会和路由器进行交互,再通过手机终端或者电脑来控制。
但是按照目前的形式,渐渐的觉得中控梯太臃肿,就把中控梯和路由器做到一块,小米马上就上一些,把网关和路由器结合卖的路由器。
但是我是觉得,它们太过于追求创新,技术上的一些创新,对于产品的安全性考虑的不太周到,出现了一些安全问题。按照剑心的要求,他让我写一个技术框架,就整理了一套,把之前做的经验整理出来。
智能家居,我这边研究的主要是两大块:一块,智能路由器这部分;另一块,智能家居的配件。路由器这部分我主要是从它的固件,Web接口和云端的交互等去研究的,配件我主要分析了它的通信协议,还有客户端,包括它的云端控制,当然,很普通的例子就不讲了,我讲一些我碰到的坑儿,比较好玩儿的事。
可能有些智能设备的厂商,防止代码不被外漏,或者保护的作用,它会把自己的固件做加密。这里我看到了360智能路由器,我下载了它的固件,它是加密的,后来找到了它一个非常老的版本,就是未加密的,我把这个版本提取出来,搜索它里面可能很固件更新有关的东西,我发现在它的设计页面里有一个(阿不路)的函数,我反汇编它的程序,它里面硬编码了一个BUS文件,这个BUS文件调用了另外一个,这个BUS调用了解压固件的。
我就反汇编这个,大家可以看到图上,有一个非常明显的加密的密钥,其实就是被类似解密出来,可以直接当做AESK传进来,我又跟着程序往下走,发现它又调用了RSA的加密,上面可以看到一个非常大的整数串,这就是RSA的密钥,就是科普一下小知识,片入式的系统,为了更精细化没有采用OPELL,如果对照里面加密库的话,就是参照了IPI。
我又顺着程序往下走,把程序完全理出来,它整体就是这样,先读取了128字节,用RSA解密这128字节,剩下的就是用AS,每次循环4096次节,进行解密,前面它会有一个版本限期,我图上标注了,上面13,然后是长度,把这个去掉,然后做RMB5验证,如果相同就刷入固件,如果不相同,就把解密出来的东西删除,这样的话我们就可以完全模拟程序,写一套自己的解密程序,来发现它固件里面的各种问题。
另一种比较好玩儿的,就是变形压缩的东西,这里小路路由,我后来又看了一下小路路由,它是内部有一些不常规的压缩,你用普通工具是无法把它踢出来,这就需要用精彩文件分析的功力。当你解到这三层,你会发现它有一个(插队)的压缩包,它以XZ开头,以YZ结尾,你去掉多余的代码才能把它顺利地解压出来。
前面我是从软件的部分来讲,像我这样的无业游民,对一些设备不可能花很多的财力去购买,更多的是自己从网上下载一个固件去分析,但是如果你有能力购买一些硬件的话,你会发现硬件的(漏洞)更多。
像智能路由器经常用的OTW系统,它本身的串口会够你一个ROOT终端,你直接用TTL转USB,就可以直接控制了你整个的路由器。除了这个串口,还有像GTAK口,这个完全可以调节GPU,像有些不需要加密的,你就可以用GTAK口去破解它的加密,也可以读写它的里面的Flash内容,把文件直接提取出来。当然还有更暴力的,可以直接把Flash拆除下来。
说完了固件我再说说接口,之前提路由,在乌云也测过,它里面的版本就是被自身变异了,变的没法儿看,相当于提高了一个难度。从网上搜索也搜索不到任何这种反变异程序。我自己尝试了一下,发现了可以把变异过的程序反变异过来。
我看了一下官方的PACH,官方的PACH打的LNO,嵌入式对浮点数的运算非常处理的,所以它本身会把浮点数转换成整形。LUWA本身不到200K,这时候我就把π值π出来,可以反变异出LUWA的代码。后面我会把工具分享给大家。
还有比较特殊的情况,有些不是把代码加密,它把代码给隐藏了,这里我看了一下华为的智能路由器,它本身的Web目录是空的,我就觉得很神奇,它怎么没有Web的接口?
page
我提取了它的固件,找到它的Web调用相关的程序,我反变异了它Web,发现的一个很神奇的配置,它里面保存了所有的文件的名称、大小还有偏移,直接从Web值里给提取出来,这样我们就能进行Web上的审计。
说到审计,尤其像LUWac这样的程序,可能之前不是经常用,很多程序员在用的时候不太熟悉,往往会犯一些非常低级的错误,像直接读取,加到字符串中直接执行。
这里我就把它全部整理了一下,这里就说一下接口认证,它的接口认证比较奇特的,Luwas节点分多层次的,上层节点如果设置了就需要登录验证了,如果没有设置就没有登录验证的环节。
如果上层节点设置,下层节点也不会登录验证。还有从弹出声明,官方是四个参数,但是后面加了一个,当有第五个的时候就可以直接访问。
后面我又研究了一下其他的,就是前一段时间刚出来的华为荣耀立方,大约这个固件是八月二十几号的版本,我把它提取出来,然后查找里面的问题,我这里碰见了一个非常神奇的地方,在它ETC目录下有一个PPT文件,这个文件可以任意文件上传,我又看了它LAT符,这样的话如果能访问到的话,就可以上传一个,通过系统的命令安装一些APK,可以做一些非常好玩儿的事。
对于智能路由器,业内人士的话比较喜欢它的各种APP的插件,也是它的一个比较大的卖点,但是由于这些插件可能是第三方开发的,或者自己又重新做的,所以在一些配置上没有做好处理的。
像这个非常常用的一个离线下载的插件,它本身没有登录验证,很多人直接拿来用了,包括一些大的厂商,这样的话如果对外网开放的话,你可以直接远程查勘它下载了什么,你也可以帮它下载一些东西。有的是硬编码直接在里面,也是非常奇葩。
前面说了这些路由器可能有密钥执行或者什么,大家可能只知道我能拿到控制权限,但到底我们拿到了它的权限之后,我们能做什么好玩儿的事或者邪恶的事?
按照我的经验想了一些,比如你拿到它的权限之后,你可以交叉变异,留一个后门,可以是免登录的SSH,还可以是后门的Web的万能密码,或者是像之前一些路由器的漏洞,把DNS的服务导向一些钓鱼网站,甚至流量去分析偷取一些帐号密码等。
前面都是一些传统的想法,当智能路由器和智能家居设备结合的时候,我们就不只可以控制它的路由器,我们还可以控制它的家用设备,比如说攻破对方的安防系统,偷拍声音、图像,或者我们自己搞一些非常有趣的视频,我这里就做了一个视频。
前面可以看到我一些东西用了不少的反汇编,现在嵌入式设备基本上都是MIPS构架,这个在网上的资料比较少,所以我总结了一些比较有特点的地方,比如它的寻址,它会有一个GK的计算器,这个是保持静态变量的寻址,本来我也想去搞一些溢出方面的,我发现它的溢出比X86下还要麻烦,X86本身参数可以直接压入对站,MIPS是完全通过计算器完成的,所以调整它的对站相对麻烦一些。
前面讲了我对路由器的小小的研究。下面我讲一些智能家居配件协议上的分析。很多传统的智能家居配件会基于315还有433频段,通过262的协议进行传输。如果淘宝去搜一下,几乎80%都是这样的配件,但是这个安全性非常差,算是上时代的产物了。
这里我为了让大家看一下,我也做了类似的视频。这里通过手机控制端控制一个遥控门铃,通过控制我的电灯的开关,我自己DIY了一些工具,用了它的收发器,还有发射装置,用PRS的单片写了一些262解码程序,我可以直接SNIF它的信号,然后点击。
当然这些东西完全可以用工具直接按,非常简单的完成,但是这个价格不菲,我自己搞了一套,成本大概也就十块钱,就可以直接进行收发,由于低成本的话,这样的话我们就可以做更大范围的事,因为它的传送范围是非常远的,大约有十米左右,所以我可以做很多,放在每个楼层,通过SNIF把抓取的数据存储到单片机里,最终传到我的电脑上,这样的话可以远程控制一栋大楼的智能设备,就是这种比较简单的智能开关。
大部分315、433的设备,基本上都是用的262的芯片,它发的基本上都是固定码和硬编码的一些东西。除了315还有433智能家居还常用一些红外,红外就是非常简单的,像控制电视机,空调,但是红外是多信号,无法穿墙,所以它经常做转发,像前面讲的315、433等进行转发,这样的话我们就可以间接地再来控制315或者Wifi的东西来控制红外,我可以远程地帮他调高空调,或者远程地帮他打开电视换频道。
前面都是讲的一些比较传统的,可能稍微有些科普了,这里我讲一些最近比较火的一些,主要是Wifi上的一些东西。传统的Wifi,就是物联网主要基于AP模式去,那些是各种包括传统的破解密码就可以了。
但是后面一些单品延用了一些新的技术,叫做闪联技术。我之前买过一些闪联设备的插座,我第一次配置的时候完全震惊到了,我直接输入Wifi就可以直接连入互联网,我当时还奇怪,我用的苹果,它怎么可以控制我切换网络呢?
所以我就觉得这个东西非常好玩儿,然后去研究它。等我理清了它的传输方法之后,我完全被它震撼到了。
它的过程其实比较简单,它的芯片刚开始的时候,它把它的网卡设为混杂模式,然后监听网络中所有的报文,像手机端配置帐号还有密码,它可以通过自定义算法把它编到数据包中,它接收了这些直接通过长度的算法,可以把传送的帐号还有密码给解码出来。
所以这个就非常好玩儿了,攻击者可以同样的也开一个网卡监听,掌握编码规则,就是你怎么解码的我也怎么解码,我可以在旁边SNIF解密到你加的Wifi帐号密码,它的编码稍微麻烦,都是易位操作,来减少CPU的预算。
这个问题之前老外研究者也提到过,他们做了一些收复方案,再传输的时候用UES加密然后再传输,但是AESK是直接硬编码到芯片里面的,所以用户输的时候每次都要输比较长的AESK。所以比以前更麻烦了。
前面是传输密钥,到了后面有一些其他的东西,就是通过Wifi进行传递。我又研究了一下它的插座,它的插座协议做的太不安全了,我可以直接伪造它的协议进行重放。
我分析了一下它的协议,它发了ulink数据报,然后指令,后面是它的六个字节,再到后面是Link空格,最后是操作指令,然后是开关,它也会进行验证,就是发送一个本身的密码,是默认的888,这样的话攻击者完全可以远程控制它的插座,就是理解了它的流程。
攻击者伪造它的MIKE,加密码发送到云端,云端再回击攻击者一个包,攻击者再发射到云端,就可以控制你的设备。
后面是蓝牙快速融入到物联网当中,它也推出了4.0,就是低速率的传输协议,但是因为安卓好像是4.3支持了这个协议,但是对协议站的实现却存在着一些缺陷,大家可以看到蓝牙连接设备往主机发送通知包的时候没有验证LES长度,结果导致了溢出。
我之前写过类似这样的程序,我之前接收一些游戏的数据包,大部分游戏数据包是四个字体,但是突然发一个空的过来,我的整个对站都跑飞了,调了一天才调好,所以这就非常感同身受。
再者,讲一些国外经常用的频段协议。在美国可能就是有80%都用的ZWAVE,它在密钥传输的时候有问题,它分了三个层:路由层、安全层和应用层。路由层在密钥传输的时候有缺陷,就是中间人可以直接劫持,大家可以看这里,这相当于协议来回收发的过程包。
它的设备为了组网方便,会在内部初始化一个16个0的初始密钥,但这个密钥,每个设备都一样,所以我在和设备建立加密通信的时候,中间人可以劫持两端,然后用初始化密钥把它发送的K给解密出来,然后通过这个K解密到它的一些通信。
之前Blackset上也有人发现,就是去年发现了一个实例,它和前面不太一样,它的设备在恢复出厂模式的情况下,它没有检查当前的密钥就直接恢复了,导致攻击者可以伪造密钥建立连接。
最后讲一下云端方面。这个我在乌云上也提交了,就是云端和客户端两个协议相结合,综合利用可能会造成更大规模的事件。它的云端存在一些Web上的漏洞,可以直接控制到权限,而且它的权限比较大,是直接Root权限。
我前面把协议分析清楚,有很多东西就可以远程控制它的设备。它的云端几乎就把设备上所有的信息全部存储,而且云端上还有DIBAT模式,它可以直接升级固件,甚至黑客可以直接编一个固件,然后升级到你的设备当中,而一直远程监控你。
可能这次题目选的不好,选的太大,很多细节的东西没法儿仔细去讲,前面的演讲就大致这些。这里我总结一下,传统的类似315、433的设备,安全性非常差的,越来越会出现这个设备的单体,它的安全问题会日益改善,像闪联的技术更多的采用到新的设备当中,我希望相关的一些厂商在追求新技术的同时,也要兼顾下安全。