最近对Linux.BackDoor.Gates.6的一个病毒样本进行了分析,通过调查发现Linux盖茨木马是一类有着丰富历史,隐藏手法巧妙,网络攻击行为显著的DDoS木马。这篇文章主要介绍了Linux盖茨木马的分析过程,同时会讲解在Linux环境下恶意软件分析的常用技巧和安全工具的使用方法。

盖茨木马整体情况

此类Linux木马主要恶意特点是具备了后门程序,DDoS攻击的能力,并且会替换常用的系统文件进行伪装。木马得名于其在变量函数的命名中,大量使用Gates这个单词。从网上公开资料可以看出,盖茨木马主要针对中国地区的服务器进行DDoS攻击,有95%的攻击目标都在中国,排名第二的是美国。接下来会对盖茨病毒的一个分支样本,进行更为细致的静态分析和动态分析。

静态分析

3.1.ELF文件信息

在静态分析中,首先会对文件类型进行判断,在Linux环境下,file工具[1]能够对ELF类型进行初步的判断。例如下表中,通过文件信息,能够得出该样本是32位ELF可执行程序,运行于IntelCPU上,静态链接。更重要的一个信息是,该样本没有除去符号表,这就为后续的逆向分析提供了丰富的调试信息。

MD5

6dfc7ea279b50b1f962523d517cd76fb

入口点

8048120

文件信息

ELF32-bitLSBexecutable,Intel80386,version1(SYSV),staticallylinked,forGNU/Linux2.2.5,notstripped

Tips:file命令可以识别文件类型。

3.2.导出符号分析

使用strings工具[2]可以从ELF文件中搜索ASCII字符串,可以发现一些IP信息,加载内核命令,恶意攻击函数名。

Tips:strings命令可以从二进制文件中提取字符串。

IP信息如下:

"abaec 61.132.163.68",

"abafa 202.102.192.68",

"abb09 202.102.213.68",

"abb18 202.102.200.101",

"abb28 58.242.2.2",

"abb33 202.38.64.1",

"abb3f 211.91.88.129",

"abb4d 211.138.180.2",

"abb5b 218.104.78.2",

"abb68 202.102.199.68",

"abb77 202.175.3.3",

"abb83 202.175.3.8",

... ...

加载内核模块命令如下:

"aa3f2insmod/usr/lib/xpacket.ko"

函数名中含有恶意网络攻击的名称:

{

"str": "11CAttackBase",

"offset": "a98fc"

},

{

"str": "13CPacketAttack",

"offset": "a990a"

},

{

"str": "10CAttackUdp",

"offset": "a9928"

},

{

"str": "10CAttackSyn",

"offset": "a9944"

},

{

"str": "11CAttackIcmp",

"offset": "a9960"

},

{

"str": "10CAttackDns",

"offset": "a997c"

},

这些IP信息和函数中的攻击名称很大程度会帮助杀毒软件识别已知的病毒。

后续的静态分析包括静态反汇编,查找导入导出表等,因为逆向的过程是一个动静结合的过程,反汇编部分计划通过后续的动态分析来展现。

动态分析

因为样本没有去掉符号信息,为反汇编和反编译提供了很好的支持。该样本从main()开始,共有4个主要的执行分支:

ccb5f17b98f6588b77694f2e7a214cf1.png

样本根据CSysTool::CheckGatesType()返回的结果分别会调用这4个函数。本文会首先分析CheckGatesType()的逻辑,然后主要对默认情况进行分析。

4.1.CheckGatesType()分析

在调用该函数之前,样本会将变量g_strMonitorFile赋值为”/usr/bin/pythno” 。

首先,调用CUtility::GetModuleFullPath()获得样本的全路径名称。通过readlink(“/proc/{getpid()}/exe”) 得到。这个动作会被strace[3]捕获。

304520:10:41.345483readlink("/proc/3045/exe","/root/workspace/websevrer",1024)=25

Tips:strace命令可以捕获程序使用的系统调用(包括参数、返回值和执行时间等)以及接收到的signal。

其次,调用CSysTool::GetBackDoorFile()拼接出backdoor文件全路径”/usr/bin/bsd-port/knerl”。

最后,CheckGatesType()的逻辑用表格表示为:

返回值

条件strcmp

0

样本路径==”/usr/bin/pythno”

2

样本路径==”/usr/bin/bsd-port/knerl”

3

样本路径==常用的系统工具

1

默认情况

这里可以看出,当样本替换系统命令之后,执行的行为和默认情况是不同的。这里说明样本具有伪装成系统工具的恶意能力。

e62d991e73f3c0bc12e550a412f8f0db.png

更多推荐