对Linux.BackDoor.Gates.6的一个病毒样本进行了分析,通过调查发现Linux盖茨木马是一类有着丰富历史,隐藏手法巧妙,网络攻击行为显著的DDoS木马。这篇文章主要介绍了Linux盖茨木马的分析过程,同时会讲解在Linux环境下恶意软件分析的常用技巧和安全工具的使用方法。 盖茨木马整体情况此类Linux木马主要恶意特点是具备了后门程序,DDoS攻击的能力,并且会替换常用的系统文件进行伪装。木马得名于其在变量函数的命名中,大量使用Gates这个单词。从网上公开资料可以看出,盖茨木马主要针对中国地区的服务器进行DDoS攻击,有95%的攻击目标都在中国,排名第二的是美国。接下来会对盖茨病毒的一个分支样本,进行更为细致的静态分析和动态分析。 静态分析3.1.ELF文件信息在静态分析中,首先会对文件类型进行判断,在Linux环境下,file工具[1]能够对ELF类型进行初步的判断。例如下表中,通过文件信息,能够得出该样本是32位ELF可执行程序,运行于IntelCPU上,静态链接。更重要的一个信息是,该样本没有除去符号表,这就为后续的逆向分析提供了丰富的调试信息。
3.2.导出符号分析使用strings工具[2]可以从ELF文件中搜索ASCII字符串,可以发现一些IP信息,加载内核命令,恶意攻击函数名。
IP信息如下: 加载内核模块命令如下: 函数名中含有恶意网络攻击的名称: 这些IP信息和函数中的攻击名称很大程度会帮助杀毒软件识别已知的病毒。 后续的静态分析包括静态反汇编,查找导入导出表等,因为逆向的过程是一个动静结合的过程,反汇编部分计划通过后续的动态分析来展现。 动态分析因为样本没有去掉符号信息,为反汇编和反编译提供了很好的支持。该样本从main()开始,共有4个主要的执行分支: 样本根据CSysTool::CheckGatesType()返回的结果分别会调用这4个函数。本文会首先分析CheckGatesType()的逻辑,然后主要对默认情况进行分析。 4.1.CheckGatesType()分析在调用该函数之前,样本会将变量g_strMonitorFile赋值为”/usr/bin/pythno” 。 首先,调用CUtility::GetModuleFullPath()获得样本的全路径名称。通过readlink(“/proc/{getpid()}/exe”) 得到。这个动作会被strace[3]捕获。
其次,调用CSysTool::GetBackDoorFile()拼接出backdoor文件全路径”/usr/bin/bsd-port/knerl”。 最后,CheckGatesType()的逻辑用表格表示为:
这里可以看出,当样本替换系统命令之后,执行的行为和默认情况是不同的。这里说明样本具有伪装成系统工具的恶意能力。 从图中可以看到,样本对于常用的系统工具都可以进行替换并伪装,其中包括了进程查询工具ps和网络查询工具 netstat. 4.2.MainBeikong()分析对于样本处于非特定位置的默认情况,CheckGatesType()会返回1,然后样本会调用MainBeikong()。 首先,MainBeikong()会调用daemon()去创建一个后台进程。父进程会调用exit(0)退出,子进程会调用setsid(),脱离session,然后关闭stdin,stdout,stderr文件fd。此时子进程的父进程会变成1号进程。 daemon()调用成功后,样本会调用CSysTool::SelfInit()进行自检,这个过程还包含解密过程CRSA::Decrypt().密文是自检时传入的字符串。解密后的原文是一个域名: 后续将解密内容分别赋值给一些控制变量。 控制变量列表:
在函数MainBeikong()中,会调用两次CSysTool::KillPid,该函数会判断pid文件中存放的pid和当前运行的pid是否一致,如果不一致就kill掉当前的进程。文件名分别为:idus.log,apsh.conf. 接着会调用CFileOp::RemoveFile(“apsh.conf”)将文件删除掉。 随后会调用CSysTool::KillGatesIfExist(),同样是进行进程检测,文件名是vga.conf,不同点是这次会将当前pid写入文件。 从控制变量命名规则和函数的命名中,可以看出大量使用Gates这个单词,这也正是盖茨木马得名的原因所在。 4.3.自启动设置CUtility::SetAutoStart()会进行自启动设置。操作/etc/init.d/VsystemsshMdt文件。文件内容: 然后运行system(),继续进行自启动设置。 然后执行释放文件函数CSysTool::ReleaseGates()。内部使用system()进行实现。 进程的这些行为都会被Linux平台中系统监控程序sysdig[4]所捕获。
4.4.MainProcess()分析首先会读取/etc/resolv.conf,结合Google的公开DNS服务器,8.8.8.8更新dns服务器信息。然后通过CStatBase::Initialize()读取/proc文件系统,了解本机的信息。 相应的在sysdig中会监测到文件打开和读取等事件。 然后,样本会使用insmod加载一个内核模块/usr/lib/xpacket.ko,但是因为分析机内没有该模块,会报错。 接着会读取文件/usr/lib/libamplify.so,同样的原因没有能够找到该文件。 4.5.网络行为分析首先样本向DNS服务器,发送了查询bei[.]game918[.]me(112.224.48.28)的请求。获得IP地址后,尝试对端口21351进行TCP连接。 通过tcpdump[5]和wireshark工具,发现了第二个控制域名360[.]baidu[.]com[.]9kpk[.]com(8.5.1.43)。样本会连接45000端口。 可惜的是,目前这两个IP地址已经失效,所以无法进行后续协议的分析。
总结Linux.BackDoor.Gates.6样本使用了加密C&Cserver信息,运行时解密的策略,防止控制域名暴露,同时具备自启动,替换系统常用工具,进行DDoS攻击等恶意行为。 本文针对盖茨木马样本进行了细致的分析,同时介绍了多种在Linux环境下的安全工具。 | ||||||||||||||||||||||||||||||||||
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|