近日,一款名为“ELF Linux/Mirai”的新型ELF木马后门,攻占了大量物联网设备,全球由其控制的BOT多达500万以上。关键是它开放源码了~!
那么这款开源恶意代码究竟干了什么?从获取的内容看,这款恶意代码包含了:loader、dlr和mirai三部分,这次“一行”分析的是Mirai部分。
0x01 概览
木马程序Mirai是基于Linux的恶意样本,该样本主要包含attack模块、killer模块、scanner模块和CNC模块,分别完成对某一批特定目标进行DDoS攻击、对受控制机器知名端口的占用、TELNET连接口令的猜解,以及从控制端获取并执行更多指令,等。
在程序运行中,Mirai多处进行信息隐藏,如关键字符串隐藏、进程隐藏等,还添加了抗GDB调试的方法,避免自身被分析从而导致数据泄露的风险。
0x02 attack模块
attack模块的主要功能是对某一批特定目标IP(targs)做永真循环的数据包发送,位于僵尸网络中的大量Mirai受控结点通力合作,将具备对目标主机进行DDoS攻击的能力。
attack模块所针对的DDoS攻击类型是多样化的,既可选择对使用TCP或UDP协议的端口进行攻击,也可选择对HTTP、DNS、VSE等使用特定端口的服务进行攻击,在TCP的攻击中还有基于不同类型数据包的多种攻击方法。
首先Mirai会对攻击方法进行初始化,将不同的攻击函数加入数组attack_table中,在使用中使用函数指针动态进行调用,该方法也可以增加反汇编分析的难度。
在具体的攻击函数中,函数结构是类似的,主要通过linux下的套接字socket编程来实现的,根据不同的攻击方法和攻击目的进行调整。
普通的UDP攻击中的参数设置代码,其中数据是随机的。而在DNS的攻击代码中,就调整为特定长度的数据。
如果没有指定没有指定IP或者端口,则在设定范围内随机定义IP和端口号。
0x03 killer模块
killer模块主要功能是将多个知名端口的服务禁止掉,即杀掉该进程并建立一个套接字绑定到该端口将其占用。
Killer锁禁止的端口包括23(telnet)、22(SSH)、80(http),主要意图可能是阻止管理员从远程对该Linux设备通过telnet或SSH进行操控,或从网页访问更改设备配置。实现的具体方法是调用kill函数杀死端口对应的进程,随后建立一个套接字并绑定到该端口,导致被杀死的进程无法重新启动。
killer模块对给定端口号,找到对应进程的实现如下。
首先从/proc/net/tcp中读取所有开放的TCP端口对应的进程列表元信息inode,然后从inode中获取对应进程号pid,在获取pid后,即可通过Linux C中的kill函数将对应进程杀掉。
0x04 scanner模块
scanner模块主要针对telnet登录口令的猜解,尝试登录到某一其他设备上并控制该设备。scanner模块首先建立一个auth_table列表,并将保存在mirai中的常用用户名和口令加载到列表中。而后使用随机函数选取一个IP尝试进行连接。
mirai的telnet连接与交互完全由socket编程实现。如果该IP的设备是活动的且开放了telnet端口,那么mirai开始尝试用用户口令列表进行猜解。
如果登录获得成功,将会生成在受控设备上获得shell。
0x05 CNC模块
CNC是远程命令和控制服务,是木马中常见的控制端服务程序,在mirai中的功能主要也用于获取控制端的相关命令。
在mirai的初始化过程中给出了一个明文的CNC服务器的FAKE_IP,以迷惑分析人员。但实质的CNC服务器IP并没有存放在mirai中,而是首先通过DNS访问IP为8.8.8.8的DNS服务器,从该DNS服务器中再获取一个域名为cnc.changeme.com的IP。从而实现与CNC服务器的连接。
0x06 隐藏模块
mirai为了保证自身不被轻易发现,使用了不少隐藏方法。
首先是对args[0]的隐藏,args[0]也就是可执行文件在运行是自身的名字,mirai生成一段随机字符串将其覆盖掉。
接着是修改进程名。使用的是prctl()函数。
对大量重要的关键字符串,mirai也进行了加密,在文件中是不可见的,只有加载到内存后,需要使用时,才调用table_unlock_val()函数进行解密,用table_retrieve_val()函数进行使用,使用结束后又马上使用table_lock_val()函数进行加密,覆盖掉明文信息。
在解析CNC服务器域名时,mirai还使用了反GDB调试的方法。
为了避免设备看门狗watchdog重启设备,导致mirai对设备失去控制,mirai还对wtachdog进行了篡改。主要修改了dev文件夹下的watchdog文件。
以上操作都使mirai能够较隐蔽的运行在受害设备上,并长期控制该设备,不易被清除。
综上,可见mirai的编写者对Linux系统的了解较为透彻,在编写mirai样本中对信息的加密和对自身的隐藏都非常谨慎小心,编写经验充足。管理员也不易发现mirai的入侵和控制,给许多分析人员都带来了分析难度。这也是mirai横行物联网的主要原因吧。
Pr0.s说:值得注意的是mirai公开前后,犹如打开了潘多拉盒子,基于mirai的恶意代码家族繁衍不断,据malwarebenchmark的初步估计境外被控设备不下几十万台~!~!
这不容轻视,基于这些设备不仅可以实施大规模拒绝服务攻击,还可以作为进一步向“纵深”渗透攻击的中间节点、网络监听节点等等... ... 想想,你经常链接的wifi路由被黑客控制了、重点机构的摄像头被黑客侵入了... ...呵呵
订阅号内相关文章(点解可阅读)
互联网设备大规模被"bot"感染,CNBC发布遭受感染的国家排名
威胁工控设备的经典Linux后门Backdoor.Wirenet分析
我来说两句排行榜