用户
搜索
  • TA的每日心情
    郁闷
    2016-9-18 10:11
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    i春秋-见习白帽

    Rank: 3Rank: 3

    0

    主题

    5

    帖子

    277

    魔法币
    收听
    0
    粉丝
    0
    注册时间
    2016-8-12
    发表于 2018-2-7 23:52:09 523875
    本帖最后由 poyoten 于 2018-2-8 00:22 编辑

    小米多功能网关评测

    网关(Gateway)又称网间连接器、协议转换器。网关在网络层以上实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关既可以用于广域网互连,也可以用于局域网互连。 网关是一种充当转换重任的计算机系统或设备。使用在不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。与网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求。

    小米多功能网关则是互联网与使用zigbee协议的家庭智能设备之间的应用层面上的连接器。绑定上小米账户,使用米家手机app,就能异地获取智能硬件状态参数及控制。

    开箱试用

    对一切事物的认知都是秩序渐进的。一切深入都要从初识开始。

    外部结构

    网关从外部结构上分为顶盖、灯带及底座三部分。

    1.png
    2.png

    3.png

    顶盖的中间小孔为声音出孔。左右两侧还分别有5个小孔。左侧的应该是散热用,其下正对主控芯片;右侧为光线感应器透光用。顶盖下面有一椭圆形按钮,可控制灯的开关及设备重置等,具体如下:

    • 单击:开/关夜灯
    • 双击:警戒(开始/取消)
    • 长按:按住5秒后重置网关

    中部是灯带,实际上就是环形透光圈,灯光由底座发出。

    底座中部是三脚电源插头,使得网关比较占用插线排空间。

    内部器件

    拆解图盗用的官方图。我没有办法摆出这么骚的姿势。

    mi_gate.png

    内部主要由两块电路板及一块间隔层组成。
    上电路板为主控制器、zigbee模块所在。从其下面图中可以看出,左侧玻璃灯珠样的是光线感应器;左上的芯片为JN5169Zigbee芯片;右下带金属保护罩的是主控芯片及部分处围电路,可清晰看到mx213字样,应该是开了串口了,PCB印制的WIFI天线也清晰可见,还有个外接天线口。可惜手头没有热风枪,拆不了金属保护罩,不知道用的什么芯片,应该是marvell的。

    5.png
    16.png
    6.png
    7.png

    下电路板主要是电源电路及RGB LED灯组。

    14.png
    15.png

    上下两层板通过14针的DIP接口连接,通过此口,下层板向上层板输送电源,上层板向LED输出PWN。


    在我逆固件的过程中,发现确定用的marvell的东西,通过查资料,比较确定主控部分是以marvell的Wi-Fi Microcontroller Internet of Things Platform的基本模型设计制作的。

    marvell.png

    marvell1.png


    功能试用

    未绑定小米账号的网关设备,需要在米家app中进行设备添加,完成与小米账号的绑定。绑定完成后即可本地或远程对设备进行控制,包括通过zigbee连接到网关的设备。

    就网关本身而言,有网络电台、RGB全彩LED灯光、闹铃等功能。
    led.png

    intelli.png

    gate.png

    gateset.png

    至于警戒、感应夜灯功能是需要其它传感设备配合的。可以连接网关的子设备比较多,通过预设动作能灵活实现很多功能。

    equ2.png

    equ2.png

    折腾欢宴

    我的折腾切入点有以下:

    • 初步分析绑定过程及协议,探查过程有无逻辑问题
    • 逆向分析app,进行app通信协议的详细分析,有无利用可能
    • 搞到固件并进行逆向固件,从固件方向再探通信协议,并尝试挖掘二进制方面的漏洞
    • 其它后续过程中想到的

    绑定过程分析

    此绑定过程不限于小米网关,其它小米设备也是如此,比如小米扫地机器人。

    未绑定小米账号的设备,会建一个AP,AP名的格式是产品名+版本+标识+设备信息的格式,小米网关的AP名形如'lumi_gateway_v3-miap1111',其中的1111为wifi芯片MAC地址的后4个字符。如果用手机建一个名为'lumi_gateway_v3-miap1234'的AP,米家就会提示附近发现多功能网关1234

    fake_device.png

    米家选择添加设备后,先扫描附近的AP,选择AP1并填写好密码确定后,手机会连接网关AP,并进行信息交互,把刚填写的AP1信息传送给网关,然后断开网关AP重连到先前的AP,上报获取到的设备信息。网关连接AP1,解析ot.io.mi.com域名并进行定时地上报信息,米家获取到信息后更新设备状态。

    以上就是较完整的绑定过程,虽然抓包不完全,有部分是猜测,但应该大致不差,后面需确认。

    经测试,在绑定过程中,手机连接的AP和网关连接的AP可以不同,甚至手机可以不用连WIFI,只要WIFI打开能进行扫描即可,而并非说明书所说两者要在同一WIFI网内。

    所以,如果附近有上电且没有绑定的网关设备,是可以随意绑定的。对于有其它设备的环境,进而可以控制其它设备,比如zigbee协议的开关。当然,现阶段网关用户不够庞大,这样的机会很难找到,但毕竟有这样的可能性。

    协议初步分析

    协议分析的数据主要靠burp和wireshake抓包获得。

    米家在绑定设备及操作时主要请求如下地址,参数可能涉及出隐私就不上了,参数保护方式大致是对称加密加base64编码:

    http://api.account.xiaomi.com/pass/v2/safe/user/coreInfo(取用户信息)
    https://api.io.mi.com/app/home/device_list(取绑定设备列表)
    https://api.io.mi.com/app/home/device_new (添加新设备)
    https://api.io.mi.com/app/home/binddevice  (完成设备绑定)
    https://api.io.mi.com/app/homeroom/bind_device_to_room (设备在APP上放置的房间)
    /app/stat/stat_info (局域网模式,上报结果)
    https://act.account.xiaomi.com/pass/activator/getCloudControl(远程模式)
    http://data.mistat.xiaomi.com/mistats/v2
    ...

    burp.png

    但是相关数据都是进行过加密及编码的,确切通信内容只有分析了app才能得出。

    APP上报结果是不加密的,只是走SSL。

    米家对于网关的控制方式与网关工作模式有关。相对于控制手机当前网络来说,网关的工作模式分为两种:局域网模式、远程模式。

    局域网模式,米家能直接与网关通信进行控制指令下发,甚至米家可以不联外网的情况下对网关进行控制,前提是米家已经获取网关状态且确认为局域网模式。但如果是未联外网的情况,那设备栏的设备条目会很快消失,只能进行LED灯及警戒的控制。

    远程模式,米家的控制指令会通过服务器下发网关。

    对于网关来说,不管何种模式,网关都会向服务器发送心跳包。默认使用UDP,本地端口54321,远端端口8053,时间间隔15s。如果因为外网暂断或丢包严重而收不到UDP回包,则会改用TCP,目标端口80。

    udp.png
    tcp.png

    网关与服务器的通信数据同样进行了加密,并有固定的应用协议。以下为部分通信数据。

    21310020ffffffffffffffff0000053b0000000004b25e415845140090bd1200
    21310020ffffffffffffffff5a6e03d30000000004b25e415845140090bd1200
    213100200000000004b25e415a6e03d4a27d44e8e208e4d72f3bde8e9d02c57d
    213100200000000004b25e415a6e03d4a27d44e8e208e4d72f3bde8e9d02c57d
    213102100000000004b25e415a6e03d498a3aae7bbd2dca943c8183f7f186ab9a618bcc3a5ec39091fa93cfa08f5a86282895848c1784cf037ea34c8a9790235844d863f560b856dab11d1d760ce94a89deae216773c4852761a1087143aae852ee9d308c5ad412e06150039ec690590adc7df0246c6ef85f9ecb57418d06e980ab40633e0238786b61ddb9aec538bf2789b8aa4f17bbfb255486db3b4b8bba78bc0ad12dead378560b4773573746b74554f067fa6248eb7e3b006890b7dccc920a542a41c320ad22cb80bf5d745c90c025d4aff60dc16277953ddbf412b2e09ef42563025a30e1f9cd3f97b9db7eecdfb3314f53806b36058641fd59b202a232f7675755483d85c7c55e597ea826de68f337da5f0f9e2c0ef724b5f28b0dc8566e4a7d18dc9856437ec76152490a1bc05e9dfa3b6acebc180929ecfe0c3c39105ee756803a2957379aa2b4a37f0b459f1842d69e6895b3cbab10da26d3b9e64edb92f4db073227e7ac873756a3007676c22bc7925d06b6ea278c12d24f7bf76a17c3b356ba4bb1fd3807301707548bd5280e0285d78d5389c41e3238ad0f36e19943296de4c267d12b34bac4e61de703b593bf751087a5d9fd3f396e00fc610ce59a7f6a0cd8a2a99ce20209887df557d77d185fcba3ebc58ec78d140d70043a45b04538d11abc9e858e82a1eabd54b2e634ba5491044cc673e69a4f4fa749adeca56fa96a3fb1cc83d3786072f9f2d
    213100600000000004b25e415a6e03d41a0b82c8d587d1a9d5b3cdb2cffefe7c050a353f2deedd13c44e797122031cbc0553327198e9588e54289c56ba2a7425cfba163c6e716e271d7d2f9e8815b86855faef218bf00074036e8ae348be5429
    213101a00000000004b25e415a6e03d4a78bc629550af7d78f4b22ca0172f7462bb7a71da95b497935ed0d03193c47168c78f7e4e88c63797ab9ca74be0849aa32e706f315b0b209db13b81ce830ffaee9eea9f0345a300b52a215366b338116456550b1c185f2efff9069902c20accb3d960c5961e38082f1e16b735241ebd359d9064085d88ae06986a19e9e64a2f0e7392625a19ef0d1bf9c4632b7e550015fd9ce22606fd2ae0a505184f94424654f0fde6c6f4eeb92ac85f7c4a6b61500c859366b47f7db149303f7179a071003045639f0df7e57e1cc57bbf8faad42c1ac26a0cf74395b1f347be478f9da916c9c770bcc47d18e1508e466557014a8e073f87e933ffbc139c39496eb220b737cc16dedcc7193665553b1cdcaaa1602827d12fe4c60dd3a7c299803efdd4079049a766d4e53b67f56fb01d4b42db636bad98a2040613dd8db98fec048bad751abcde754d84f8eedc1ee223aed402474a721085c791550852d82b293043a74c7d64a22d6a3e142191b821ac9ac0b0a0a3b7a93a768fc39e7dcf3b695e56ac938317ff06eee1a1278da9071739d77832fcf
    213100400000000004b25e415a6e03d429f785397252522bb0b8a355bdabc5ed8b0293c20be1f9f92377091d62de40370365b94ab3686940c14f32bdd01c6396
    
    21310020ffffffffffffffffffffffffffffffffffffffffffffffffffffffff

    共有四类通信包,一是心跳包,不包含应用数据;二是应用包,有加密的应用数据;三是广播包,4字节后全为0xff;四是对时包,一般出现在设备重新加电丢失时。
    没有完全逆向APP或固件之前,其中的加密数据是解不出了。
    据分析,其结构如下:

    2byte 标识(magic number) 即数据中的2131
    2byte 数据长度(big endian)
    8byte DID或ffffffffffffffff
    4byte 时间戳(可能和密钥有关)或累加计时
    16byte checksum或DID加未知数据
    16byte分组的加密数据(不是必须)

    上面数据的前两行应该是同步时间。
    接着是心跳包。

    数据解密后是json。

    还有种解绑时的包。

    21310020ffffffffffffffff0000000000000000000000000000000000000001

    米家APP初步分析

    APP的分析有助于通信协议分析,且可能找到逻辑问题。
    无奈精力有限,一直未分析。留坑,能不能填得看时间了。

    固件初步分析

    由于不能确定芯片,串口引脚未能确定,怀疑的针脚有几个,且不能dump flash。

    好在网关固件版本升级了,是OTA方式升级,直接抓包得到固件主程序。

    从固件的格式来看,确定为marvell的芯片。
    firmware.png

    用工具将其转换成elf格式,开始静态分析。

    从代码来看,用的是Marvell的ez connect lite的SDK,正规官方宣传叫Marvell HomeKit SDK。从这也能大致确定芯片,但不能完全定型。按Marvell官方的推荐方案有两种:

    • 88MC200: Cortex-M3 Microcontroller in conjunction with:
      • 88W8801: IEEE 802.11n (1x1) single-band (2.4GHz) Wi-Fi SoC.
      • 88W8777: IEEE 802.11 b/g/n (1x1) Wi-Fi and Bluetooth 4.0 SoC.
    • 88MW30x:Integrated Single-Chip Cortex-M4 MCU with IEEE 802.11n (1x1) single-band (2.4GHz)Wi-Fi.

    经过在翻努力,函数识别工作已经过半,部分代码也研究过了。先给张取wifi参数的函数图。

    code0.png

    使用JENKINS开源的CLI。所以连上串口是能看到看很信息的。

    通信协议与上面分析的大致一样。应用数据使用AES加解密,md5checksum。

    code1.png

    解数据时还会检查DID,分工作模式检查IP,时间间隔等。

    加密时用的AES解密及IV由md5算法生成。

    code3.png

    code4.png

    时间紧张,能力有限,只能做到如此。

    个人感想

    其实也不能说是感想,算是交流吧。

    我也算这方面的新人吧。逆向学了有1年半,其它基本不会,所以也就从来没有挖过洞。这次也就想试试手。让各位失望了。

    交流我也只能谈谈二进制方面的了。本人业余人士,没进行过计算机相关专业的学历教育。所以在学习道路上很伤,理论基础不足,知识点不全面。结合我个人经验,说几点二进制方面的建议。

    • 不要一味看书,要多动手。二进制的实践性很强,书上得来终觉浅此事要躬行。遇到题了不会做,别人给了WP,对照看下,又用别人的payload试下,成了,感觉就OK了。其实不然,有很多时间别人把坑都给你过了,下次变换下,轮到你来又不行了。分析公布的漏洞原理也是一样。
    • 实践固然重要,但是理论体系的建立更为重要,实践之余,多总结,把翻资料举一反三。
    • 对于刚接触的童鞋,不要悲观,感觉身边的人强自己太多。我只想说,不要和别人比,就和自己比。别人的路可能已经走了很久了。而且各人情况不同,没有可比性。
    • 要耐得住性子,守得了寂寞。二进制分析工作,很多时候是乏味的,过程又是漫长的。如果有所得的那一刻,你会觉得一切付出都值得。这和web方向有些区别。

    评分

    参与人数 2积分 +200 魔法币 +205 收起 理由
    坏蛋 + 200 + 200 感谢你的分享,i春秋论坛有你更精彩!.
    pcat + 5 感谢发布原创作品,i春秋论坛因你更精彩!.

    查看全部评分

    本帖被以下淘专辑推荐:

    不错,其实已经有专门针对zigbee的测试框架Attify Zigbee Framework,过需要Atmel RZ RAVEN USB 棒硬件支持才行,楼主可以去玩玩
    使用道具 举报 回复
    wooyunvip 发表于 2018-2-8 10:49
    不错,其实已经有专门针对zigbee的测试框架Attify Zigbee Framework,过需要Atmel RZ RAVEN USB 棒硬件支持 ...

    哦。主要没接触过,不知道有这样的东西。谢谢。我这个主要工作放在主控芯片上,zigbee模块没想去整。
    使用道具 举报 回复
    发表于 2018-2-8 15:48:11
    前排顶帖支持~~
    先占着以后再编辑~
    使用道具 举报 回复
    发表于 2018-2-8 16:23:29
    po叔我也来凑凑热闹
    我欲将心向明月,奈何明月照沟渠。
                      天人照我本和兴,只是难易风化岩。
    使用道具 举报 回复
    发表于 2018-2-8 19:47:12
    po叔厉害啊 膜拜
    使用道具 举报 回复
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册