不自重者,取辱。不自长者,取祸。不自满者,受益。不自足者,博闻。
阿里云CentOS木马查杀--/lib/udev/udev 进入全屏
line

一、背景

这两天发现自己的阿里云服务器上CPU基本都是打满的,$> top查看了一下,尽是些乱七八糟命名的进程,也是醉了:

1.png

$> ll /proc/22303看了一下,擦,我啥时候在/usr/bin/下放过这东西了。。。

2.png

且杀之:

kill 22303
rm -f /usr/bin/lrzzxgbatw

以为一切都好了,过了两分钟再$> top看了一下,尼玛,又一个不认识的东西出来了,CPU又吃满了,重复之前的方式,再杀了一次。。。

repeat。。。repeat。。。repeat。。。

二、排查

写了一个简单的crontab程序来监控CPU占用最多的程序,都是啥:

#! sh

mail_to="xxx@xxx.com"
virus_found=1
log_path="/home/work/what-virus.log"
# 白名单进程
process_white_list="svn node mysql memcache redis nginx"
# 找到CPU占用最大的进程
process_result=$(ps auxw --sort=-%cpu | head -n 2 | tail -n 1 | awk '$3>50{print $0"\n"}')

for $w in $process_white_list;do
    gpr=$(echo $process_result | grep $w)
    if [[ x"$gpr" != x ]];then
        virus_found=0;
        break;
    fi
done

# 发现真的有异常进程,则邮件报警
if [[ $virus_found == 1 ]];then
    echo $process_result >> $log_path
    echo $process_result | mail -s "virus found!" $mail_to
fi

的确,短短的时间内,报警一直在持续,而且,从报警内容中能看到,真正在执行的命令,都太简单:

root     24000 63.7  0.0  21316   468 ?        Ssl  Jan13 275:03 pwd
root     24000 63.7  0.0  21316   468 ?        Ssl  Jan13 275:03 su
root     24000 63.7  0.0  21316   468 ?        Ssl  Jan13 275:03 ls

好吧,就是这些简单的命令,大批量执行,搞挂了。。。

三、重启

想着,实在懒得花时间去跟到底了,试一试万能的重启吧,结果,事不遂人愿,重启了还尼玛一个样,那没办法,我只能猜测,这玩意儿已经是自动启动了,于是检查了一下这两个东西:

1、chkconfig --list

lrzzxgbatw      0:关闭    1:启用    2:启用    3:启用    4:启用    5:启用    6:关闭
qzaclxgbjwo     0:关闭    1:启用    2:启用    3:启用    4:启用    5:启用    6:关闭

果然发现多出来这两个,什么鬼东西,果断chkconfig --del掉!

2、vi /etc/rc.local

cp /lib/udev/udev /lib/udev/debug && /lib/udev/debug

这又是什么东西,也不是我亲自加的啊,陌生的东西都删掉!

这尼玛一定有鬼,看来,是必须要花时间继续分析的了。。。

四、定位

猜测应该是用crontab定时拉起来的一堆木马,于是查了下crontab的内容,果然:

1、/etc/crontab

*/3 * * * * root /etc/cron.hourly/cron.sh
*/3 * * * * root /etc/cron.hourly/kill.sh

这两个定时任务,并非我亲自加的,那就应该有鬼了,继续看这两个*.sh文件

2、/etc/cron.hourly/cron.sh

#!/bin/sh

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/X11R6/bin
for i in `cat /proc/net/dev|grep :|awk -F: {'print $1'}`; do ifconfig $i up& done
cp /lib/udev/udev /lib/udev/debug
/lib/udev/debug

3、/etc/cron.hourly/kill.sh

#!/bin/sh

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/X11R6/bin
for i in `cat /proc/net/dev|grep :|awk -F: {'print $1'}`; do ifconfig $i up& done
cp /lib/libkill.so /lib/libkill.so.6
/lib/libkill.so.6

为毛别的系统都没有这两个东西,而且内容还这么古怪,单看cron.sh基本能分析出来它的毒害原理了,我的猜测:

  • /lib/udev/udev是病原体
  • 通过cron.sh每隔3min自动检测一次,如果木马程序不存在,就从病原体复制一份儿到/lib/udev/debug
  • 副本/lib/udev/debug执行,生成一个随机命名的程序,丢到/usr/bin//boot等目录
  • 同时修改了自启动配置chkconfig --add xxx
  • 同时修改自启动项/etc/rc.local

五、解决

问题定位了,就好解决了

  • 删除病原体/lib/udev/udev以及其副本`/lib/udev/debug
  • 删除/usr/bin//boot/下可疑的程序
  • 删掉自启动配置中可疑的item:chkconfig --del xxx
  • 删掉可疑的自启动项:vi /etc/rc.local
  • 删除/etc/crontab下可疑的任务
  • 删除/etc/cron.hourly/下可疑的sh脚本
  • 重启,这一步可能只是一个心理安慰

六、回头再想想

木马程序为毛会出现,而且是root账号下,应该是之前风靡的redis漏洞引起的吧,只怪我修复的太晚! 另外,从/var/log/sercure日志也能分析出来,系统的确存在root账号暴力破解,算了,root太危险,索性禁用掉吧!

趣店(原趣分期)技术学院
重点关注技术架构、服务化、优秀工具、自动化平台、开发全流程一体化解决方案、新人培养、工程师进阶之道等方面
这里环境优雅、氛围年轻、主要是福利还多,还等什么?我们敞开技术的大门,欢迎各种工程师加入!

评论区域

line
  • Alien 2016-01-17 17:52:41 回复
    回复 小武 : 哈哈,语言都是相通的
    
    小武 said:
    从小我就崇拜写shell脚本的大神~
  • 小武 2016-01-17 16:22:04 回复
    从小我就崇拜写shell脚本的大神~
  • Alien 2016-01-16 07:18:20 回复
    回复 傅小黑 : 是啊,已经改内网了
    傅小黑 said:
    redis不要放公网啊
  • 傅小黑 2016-01-14 20:18:00 回复
    redis不要放公网啊