因为Windows操作系统大多安装在个人用户的电脑上,而Linux系统则在服务器上应用较多,所以Linux系统上的木马相对Windows系统较少。又因MIPS架构的应用局限性,所以MIPS架构上的Linux木马更是少之又少。
近日哈勃分析平台发现了一批针对路由器的MIPS架构Linux木马。木马使用者首先尝试利用漏洞等方式,入侵用户路由器,然后在路由器中植入此木马。被植入木马的路由器就变成了“肉鸡”,可以接受远程服务器的控制命令,对指定网络IP发起DDoS攻击。
一. 基本信息
文件格式:ELF 系统平台:MIPS 32位系统
二. 危害简介
接受远程指令,进行flooding攻击。
三. 简要分析
MIPS api调用方式说明:
syscall的参数是一个api序列号,此样本中没有使用动态链接库的方式调用系统api,都是使用下述方式自己封装的,后续分析不再赘述。
4170查表可得是connect函数。
1. 获取IP地址和路由表信息
先发起一个向google的连接。
调用getsockname获取本地IP地址,并保存。
连接建立后读/proc/net/route中的连接信息,拿到路由表信息。
2. 通过ioctl获取mac地址
依靠ioctl 命令字SIOCGIFHWADDR获取mac地址。
远程服务器地址为:
4. 接受和预处理远程服务器的命令
接受远程服务器的信息。
进行字符串切分等预处理。
5. 最终的远程服务器命令字处理
a. PING: 远程服务器ping本地,检测连接是否有效。
本地处理:本地向远程服务器发送“PONG”作为回应。
b. GETLOCALIP:远程服务器要求本地上传IP。
本地处理:上传之前获取的IP地址。
c. Source : Source命令字负责向本地客户端传递被攻击的IP地址,调用atoi从字符串中转出目标IP。
本地处理:进行攻击,回传flooding信息。
d. SUDP : 设置flooding攻击方式
本地处理:如上图所示,根据是否接受到SUDP命令字,选择tcp和udp两种攻击方式。
其中udp的攻击方式会fork子进程,根据服务器传来的时间sleep,然后去调用sendto向目标发送数据进行flooding。
e. SYN : 使用TCP syn flooding的命令字(SUDP方式此命令字无效)
本地处理:进入入发送syn的分支。tcp攻击方式,创建SOCK_RAW的socket,将socket设置为IPPROTO_IP层传输。
自己填充IP头部。
计算tcp校验和。
最终发送这个数据包的方式和udp flooding是一致的。
f. KILLATTK:停止flooding攻击。
本地处理:flooding攻击都是采用fork子进程的方式,所以停止攻击就是杀掉fork出来的子进程。
向远程服务器发送成功杀掉子进程,停止flooding攻击的信息。
g. LOLNOGTFO:远程服务器由于没有拿到相应的回传数据或者停止攻击之后要求木马客户端恢复初始状态。
本地处理:若攻击子进程已经被杀掉了,拿到LOLNOGTFO重置初始状态,如果拿到的不是LOLNOGTFO,则说明木马客户端和远程服务器通信出现错误,木马客户端进程直接退掉。