引言
Mirai事件一经曝出,立即引领了一轮研究IoT设备的热潮。目前,对Mirai的报告大多只是在对其功能实现上的介绍,却很少提及如何实现IoT设备程序开发的测试环境。本文在对Mirai的源码研究的基础上,实现了一个比较简单的IoT设备开发编译环境。该工具能自动配置交叉编译环境,使其可以满足简单的物联网开发测试。
编译环境搭建
采用脚本的方式,在git中为config.sh,可自动安装交叉编译工具安装包,并将可执行目录配置到环境变量中。具体步骤如下,采用wget到固定的网站上下载交叉编译安装包(需要其他交叉编译工具包,可自行添加),解压即可用,不用对安装包进行编译安装,并将安装包可执行文件目录写入/etc/profile的末尾,最后使用source /etc/profile使其生效,如未生效,手动执行命令source /etc/profile即可。
编译脚本
编译脚本在git上为build.sh,可根据情况对bot文件进行编译。编译分为release模式和debug模式,release模式对bot文件进行交叉编译,使其适用于不同的嵌入式架构;debug模式直接对bot文件进行编译,并在debug程序运行的过程中会打印出调试信息。
测试环境
小米路由器3一台,选择它,是因为它可以方便地安装SSH插件,具体的方法,可参照:
https://jingyan.baidu.com/article/624e7459ae65e834e8ba5afd.html
登陆上小米路由器,如图所示:
测试方法
下载该项目程序,git地址为:https://github.com/scu-igroup/IoT_bot
git上主要存放的是bot客户端程序,其中config.sh为交叉编译环境自动配置脚本,build.sh为程序编译脚本,需要先运行config.sh搭好交叉编译环境,才能对bot程序进行编译。
客户端程序编译及运行:
本项目的文件相当于实现了一个简单的是客户端,先在bot目录下的include.h中更改要连接的IP和port。运行build.sh 脚本编译程序,如:./build.sh debug
即可在debug目录下编译好所要的程序。由于小米路由器的CPU采用的是MIPS架构,系统为Linux,在测试过程中,只有用mipsel-gcc编译的程序才能正常运行,下面会做详细说明。因此,不同CPU架构的IoT设备,需要用对应的交叉编译工具,才能编译出能正常运行的可执行程序。下图中,即为编译出的适应于不同架构的可执行程序。
对于如何判断某个IoT设备适用哪种可执行程序,通过看路由器的cpuinfo,就可以知道cpu model的架构,为MIPS;通过查看路由器的系统版本,为linux2.6.36,即可查知该系统支持的库函数,在程序开发的时候,查明所用的库函数该系统是否支持非常重要,以免引起程序意外退出。如下图所示为小米路由器的cpuinfo和系统版本信息。
编译好程序后,在debug目录下找到./mirai.mipsel程序,用scp命令将该程序投放到路由器的tmp目录下(小米路由器支持scp命令,其他的IoT可能不支持,需要探测其支持的命令工具),运行该程序,如下图:
遇到的问题:
在投放可执行程序过程中,需要注意CPU是大端存储还是小端存储的问题,在实验过程,采用mips-gcc编译的程序,直接运行,会报如下错误:
排查后才知道,mips-gcc编译出的为大端存储的可执行程序;mipsel-gcc编译出的为小端存储的可执行程序。小米路由器为小端存储,故用mipsel-gcc编译的程序才能正常执行。
服务端程序:
服务端比较简单,采用的是现成的工具,找一台Linux主机(虚拟机即可),安装nc工具(精悍的小工具),在centos系统下可直接安装: yum install nc
在客户端程序已运行的情况下,运行:nc –l 9999 //监听9999端口
只要客户端运行该IP下的9999端口,即可建立通信。
服务端程序运行图为:
总结
该测试程序是在Mirai源码的基础上做的裁剪,已删除攻击模块,目的在于做一个针对IoT设备的程序开发测试。总的来说,Mirai到目前为止都还是一款先进的物联网程序,值得大家深入研究,并做相应的测试。最后,不足之处,大家多多提出来一起讨论。