一个linux的样本分析
不久前收到的一个linux样本,之前linux平台下的样本见得并不多,正好做个记录。
样本启动之后,会将自身重命名拷贝到/usr/bin下,并删除自身,如此处就将自身文件amdhzbenfi命名为usnfpnglab。
运行中的样本进程。
/bin目录下的样本文件
该样本在运行的开始会通过fork进行一定的反调试,具体步骤是fork出一个子进程,然后父进程退出,子进程继续运行。从而导致gdb附加上之后无法调试运行,因为此时gdb的目标是父进程,所有运行之后会报错,此处可以通过gdb中的命令解决(只试用与gdb6.0以上哦)。
set follow-fork-mode child
该命令运行之后告知gdb会跟进fork子进程,但是需要注意的是,样本中用不少地方调用了类似system()这样的函数,如果此时该设置依然存在的话,gdb就会跑飞,所以此时可以通过以下两条命令来将这个设置关闭。
set follow-fork-mode parent
set detach-on-fork [on|off]
首先调用函数encrypt_code解密服务端对应的指令号。
解密算法为简单的一系列异或操作。
如下图为其中解密出的一系列指令的对应号。
之后调用addsernvice函数将自身添加为linux系统的自启动程序。
实际的添加操作。
之后会调用函数decrypt_remotestr,该函数会解密本地一段加密存储的数据,该数据包含了第一次与远端通信时的远端机器的信息,解密方法与指令解密一致。
解密之后的服务器信息,此处的服务器信息为第一次认证的远程机,之后的主控机使用的是另一个ip地址。
最后,开启监听,与远端162.212.182.116主机进行通信。
建立连接之后,会首先获取肉鸡的信息,如cpu等。
随后接受服务器的返回包,通过函数exec_packet执行返回包中来自主控机的命令。
在exec_packet中解析返回包的数据,执行相应的ddos攻击操作,规则如下:
5:syn,10:ack,4:dns
发送的http攻击包。
最后将自身分别拷贝到/usr/bin,/bin,/tmp三个目录下,并删除自身。