本文共 1829 字,大约阅读时间需要 6 分钟。
没得说,被***后最直接的办法就是找到了入口点封堵后直接重装搞定。今天要说的机器却因为某些原因不能重装,只有干掉***,清理得干干净净。
一、使用chattr 配合 touch 空文件/echo 杜绝周期任务不曾是一种办法。
以/var/spool/cron/root为例子:/root/chattr -i /var/spool/cron/root;echo > /var/spool/cron/root;/root/chattr +i /var/spool/cron/rootps:chattr 命令最好从bin 移出来 因为别人同样可以使用chattr来释放权限ps:这条语句不一定一次就成功,需要多次执行,因为别人的循环速度也是很快的
二、同样是用chattr 来解决掉 user/.ssh 的免密登陆(不做过多介绍这里使用移动目录也是可以的)
三、杜绝了免密登陆之后who -a (可以查看进程号 以及ip)配合netstat 的内容 使用iptable 封杀远程登陆的ip 以及kill掉已经登陆的非自身ip
四、其实之前的处理完毕后,基本上机器已经不会很卡,现在要处理的就是隐藏的小马(大马*** 小马隐藏嘛)
先贴张图
可以看见22 和9033的pid是看不到的显而易见有东西隐藏了进程,这里参照下边的链接
虽然看不懂不要紧,这里总结三大类:
1.ps netstat 等命令被替换导致的无法显示解决方案:直接stat 判断下命令更改事件,直接从未中***机器复制命令替换即可2.基于lib导致的无法现在解决方案:centos7 使用 strace ls /proc 2>&1 |grep open 与未中***机器对比加载的so内容即可判断(巧的是本次遇到的就属于这一类 废话不多说上图)
此图可以看到比正常情况多了2个so/etc/ld.so.preload/usr/local/lib/libevent_extra-9.5.so这里我们来看看2个的目录情况
已知的文件都被隐藏了没关系,直接mv 走即可 这里先要做/usr/local/lib/ 后做/etc/ld.so.preload
然后清理掉/etc/ld.so.preload
恢复正常,最后清理下残余文件即可。注意(周期任务 用户登陆调用脚本 开机调用脚本 关机调用脚本 用户退出调用脚本 一定要清理干净)
3.基于内核模块导致的无法显示解决方案:lsmod 命令列表 与为中***机器对比即可,不过就算找出来了,若不能rmmod掉,需要重启机器且启动过程的脚本要全面排查,阻止mod的加载。(若是内核加载 常见的被安装了 kernel-devel 等包 因为需要根据机器编译,mod一旦生效 包含自身文件目录,都会被隐藏得干干净净)第1大类很好做,直接stat 判断下命令更改实
写得比较粗了清理持续了3天中途去研究了下netstat 的原理得如下脚本:
#!/bin/bashecho -n > /tmp/inode.tmpfor((i=0;i<66666;i++));doif [[ -d /proc/$i ]];then ls -l /proc/$i/fd|grep "socket"|awk -F 'socket:' -v a=$i '{print "i_"$2"="a}'|sed 's;\[;;g'|sed 's;\];;g' >> /tmp/inode.tmpfidonesource /tmp/inode.tmpwhile read line doecho -n $lineinode=`echo $line|awk '{print $10}'`v="i_"$inodeecho -n " "eval echo -n $`echo $v`echo " "$vdone < /proc/net/tcp
这个是干嘛的呢,简单解释下,实际上netstat 的内容是取的/proc/net/tcp tcp6 udp udp6的内容,但-p命令实际上是扫描的/proc/进程id/fd 的socket 软连接对应的 inode (php命令的话用fileinode直接可以获取)再使用/proc/net内容的inode 对应得到的进程id , 这段内容参照netstat源码
转载于:https://blog.51cto.com/qidai/2408312