Home > Archives > Linux下随机10字符病毒的清除

Linux下随机10字符病毒的清除

Publish:

故障表现

登陆服务器执行sar –n DEV,查得向外流量输出达到120Mbit/s多,cacti显示占满总出口流量

故障判断

  1. 关闭所有对外应用服务,即tomcat、nginx、vsftp,但关闭之后发现流量依然非常高
  2. 使用Ps –ef和netstat -ntplua检查可疑进程和端口,发现有进可疑进程netstat ps lsof等系统命令跑在/usr/bin/dpkgd目录里,而原系统命令已失效,得知系统已中木马病毒程序

故障排查

  1. 用其他服务器上相同系统版本的命令替换回netstat ps lsof等系统命令
  2. 凭经验查看tomcat的目录内容是否存在木马程序,发现果然有L26_1000的异常程序存在,但删除之后,立马又重新生成。

还有木马病毒在top里面表现为随机的10位字母的进程,看/proc里面的信息,则为ls,cd之类常见的命令。杀死该进程后,会再随机产生一个新的进程,删除这些木马文件后,会再重新生成新的木马文件。由此可以判断,木马病毒会自动修复,多个进程之间会互相保护,一旦删除和被杀,立即重新启动和复制。

  1. 被感染的文件路径列表:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    /boot    中有随机的10位字母的进程执行文件,且有部分系统命令被替换
    /bin     中有随机的10位字母的进程执行文件,且有部分系统命令被替换
    /sbin     中有随机的10位字母的进程执行文件,且有部分系统命令被替换
    /usr/bin   中有随机的10位字母的进程执行文件,且有部分系统命令被替换
    /usr/sbin   中有随机的10位字母的进程执行文件,且有部分系统命令被替换
    /u02/apache-tomcat-6.0.41/bin  中有L26_1000的异常程序
    /etc/init.d   中有随机的10位字母的进程执行文件
    /etc/rc.d/rc[0-6]d  中有随机的10位字母的进程执行文件
    /etc/rc.local  木马已被写入启动项
    /etc/crontab   木马已被写入crontab中,每3分钟执行一次
    /etc/cron.hourly  木马已被写入cron每小时执行的脚本中
    
  2. 木马程序处理时的具体表征:

1) /proc/_pid/cmdline里面都是伪造的信息,ps显示的内容也一样,基本上为下面一些常见的命令,混淆管理员眼光查询线索,核验这一个,可以尝试把who等不常见的命令禁用执行权限,但随后却会发现该命令不停地出现在ps -Af里面:

1
2
3
4
5
6
7
8
9
10
11
12
   gnome-terminal
   ls -a
   route -n
   netstat -antop
   ifconfig
   sh
   cd /etc
   bash
   who
   cat resolv.conf
   ps -ef
   cat resolv.conf  

2) ps -AfH,显示为以上的命令,但是ppid(父id)为1,则为init,所以这个应该是跟某个服务相关的。

1
2
3
4
5
6
7
8
9
10
    ps-AfH
    root     17796    1  0 11:54 ?        00:00:00   route -n
    root     18008    1  0 11:55 ?        00:00:00   netstat -antop
    root     18011    1  0 11:55 ?        00:00:00   ifconfig
    root     18014    1  0 11:55 ?        00:00:00   sh
    root     18015    1  0 11:55 ?        00:00:00   cd /etc
    root     18016    1  0 11:55 ?        00:00:00   bash
    root     18028    1  0 11:55 ?        00:00:00   who
    root     18031    1  0 11:55 ?        00:00:00   cat resolv.conf
    root     18033    1  0 11:55 ?        00:00:00   ps -ef

用pstree可以看到真实的名字:

1
2
3
4
5
6
7
8
9
10
|-irqbalance--pid=/var/run/irqbalance.pid
|-jbguikdekd
|-jbguikdekd
|-jbguikdekd
|-jbguikdekd
|-mingetty/dev/tty2
|-mingetty/dev/tty3
|-mingetty/dev/tty4
|-mingetty/dev/tty5
|-mingetty/dev/tty6

3) 凭经验检查crontab,经查找在/etc/cron.hourly/里面写入以下内容:

1
2
3
4
5
6
   #cat /etc/cron.hourly/kill.sh
   #!/bin/sh
   PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/X11R6/bin
   fori in `cat /proc/net/dev|grep :|awk -F: {'print $1'}`; do ifconfig $i up&done
   cp/lib/libudev.so /lib/libudev.so.6
   /lib/libudev.so.6

从这个地方可以看到病毒本体:/lib/libudev.so,这个文件看起来应该是一个库文件,但是用file查看,这个文件则为一个可执行文件,请注意下面的两个文件,一个为executable(可执行的),另一个则为正常的共享库(shared object):

1
2
#file libudev.so
libudev.so:ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked,for GNU/Linux 2.6.9, not stripped

正常的库文件应该为:

1
2
#file libutil-2.12.so
libutil-2.12.so:ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked(uses shared libs), for GNU/Linux 2.6.18, not stripped

把这个文件取消可执行权限,但是病毒故障依旧。

4) 因为这个病毒不断自我启动,并且父进程号为1,所以应该和init有关,所以查看/etc/init.d,发现里面果然有启动项,删除之。在/etc/rc.d/rc3.d/里面,也有类似的好几个启动项,一并删除。

删除后,发现仍然不能杀死,杀死后马上重建一个新的,用lsof 查看:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#lsof -R  | grep "/usr/bin"
top        9512 9478      root  txt      REG      253,0    63856    421158 /usr/bin/top
fhmlrqtqv17161     1      root txt       REG      253,0  625729     393335/usr/bin/fhmlrqtqvz
fgqnvqzzc17226     1      root txt       REG      253,0  625740     393427/usr/bin/fgqnvqzzck (deleted)
fgqnvqzzc17229     1      root txt       REG      253,0  625740     393427/usr/bin/fgqnvqzzck (deleted)
fgqnvqzzc17232     1      root txt       REG      253,0  625740     393427/usr/bin/fgqnvqzzck (deleted)
fgqnvqzzc17233     1      root txt       REG      253,0  625740     393427/usr/bin/fgqnvqzzck (deleted)
fgqnvqzzc17234     1      root txt       REG      253,0  625740     393427/usr/bin/fgqnvqzzck (deleted)
# lsof -R
fhmlrqtqv17161     1     root  cwd       DIR     253,0     4096          2 /
fhmlrqtqv17161     1      root rtd       DIR      253,0    4096          2 /
fhmlrqtqv17161     1      root txt       REG      253,0  625729     393335/usr/bin/fhmlrqtqvz
fhmlrqtqv17161     1      root   0u      CHR        1,3     0t0       4023 /dev/null
fhmlrqtqv17161     1      root   1u      CHR        1,3     0t0       4023 /dev/null
fhmlrqtqv17161     1      root   2u      CHR        1,3     0t0       4023 /dev/null
fhmlrqtqv17161     1      root   3u     IPv4      50163     0t0        UDP *:57331
ynmsjtlpw17272     1      root cwd       DIR      253,0    4096          2 /
ynmsjtlpw17272     1      root rtd       DIR      253,0    4096          2 /
ynmsjtlpw17272     1     root  txt       REG     253,0   625751     393426 /usr/bin/ynmsjtlpwp (deleted)
ynmsjtlpw17272     1      root   0u      CHR        1,3     0t0       4023 /dev/null
ynmsjtlpw17272     1      root   1u      CHR        1,3     0t0       4023 /dev/null
ynmsjtlpw17272     1      root   2u      CHR        1,3     0t0       4023 /dev/null
ynmsjtlpw17275     1      root cwd       DIR      253,0    4096          2 /
ynmsjtlpw17275     1      root rtd       DIR      253,0    4096          2 /

5) lsof再次查看:

再次快速重复查看:# lsof -R ‖ grep “/usr/bin”,发现主进程不变,总是产生几个辅进程,并且一直处于dedeted状态,这说明主进程会快速产生几个子进程,然后这些进程之间相互检测,一旦检测到病毒主体被删除或更改,就会再产生一个。

故障解决

  1. 将被感染的文件路径列表中的木马文件设置成000权限,即chmod 000,确保不再执行
  2. 删除/etc/rc.local,/etc/crontab,/etc/cron.hourly里面的木马程序配置,保证不自动启动;
  3. 删除将被感染的文件路径列表中的木马文件
  4. 杀掉所有木马进程。
  5. 锁定将被感染的文件路径列表中的目录不可更改:如chattr +i /usr/bin这样保证新产生的病毒写不到里面去。
  6. ps –ef再次检查,发现木马进程后,重复以上步骤
  7. 当前已被我锁定的目录和文件如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    ----i-------- /etc/cron.hourly
    ----i--------/etc/crontab
    ----i--------/etc/rc.local
    ----i--------/etc/init.d
    ----i-------- /u02/apache-tomcat-6.0.41
    ----i-----I-- /u02/apache-tomcat-6.0.41/bin
    ----i--------/u02/apache-tomcat-6.0.41/webapps
    ----i--------/bin
    ----i--------/boot
    ----i-----I-- /usr/sbin
    ----i-----I--/usr//bin
    

一个例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
   [root@localhost sysconfig]# cd /etc/cron.hourly/
   [root@localhost cron.hourly]# ls
   0anacron 0yum-hourly.cron gcc.sh lztztvbjmnd.sh snapper
   [root@localhost cron.hourly]# vim lztztvbjmnd.sh 

   #!/bin/sh
   PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/X11R6/bin
   cp "/usr/bin/lztztvbjmnd" "/usr/bin/cfpajkkesm"
   "/usr/bin/cfpajkkesm"


   [root@localhost cron.hourly]# rm lztztvbjmnd.sh 
   rm: remove regular file ‘lztztvbjmnd.sh’? y
   [root@localhost cron.hourly]# ls
   0anacron 0yum-hourly.cron gcc.sh snapper
   [root@localhost cron.hourly]# 


   ---------------- /usr/bin/dnmjbvtztzl
   ---------------- /usr/bin/lztztvbjmnd
   ---------------- /usr/bin/lztztvbjmnd.sh
   ---------------- /usr/bin/ccbhdubloo

   [root@localhost bin]# chattr -i /usr/bin
   [root@localhost bin]# rm /usr/bin/dnmjbvtztzl
   rm: remove regular file ‘/usr/bin/dnmjbvtztzl’? y
   [root@localhost bin]# rm /usr/bin/lztztvbjmnd
   rm: remove regular file ‘/usr/bin/lztztvbjmnd’? y
   [root@localhost bin]# rm -f /usr/bin/lztztvbjmnd.sh
   [root@localhost bin]# rm -f /usr/bin/ccbhdubloo
   [root@localhost bin]# chattr +i /usr/bin


   [root@localhost cron.hourly]# ls
   0anacron 0yum-hourly.cron gcc.sh snapper
   [root@localhost cron.hourly]# vim gcc.sh 
   [root@localhost cron.hourly]# 


   #!/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/libudev.so /lib/libudev.so.6
   /lib/libudev.so.6
   ~ 
   [root@localhost cron.hourly]# vim gcc.sh 
   [root@localhost cron.hourly]# ll /lib/libudev.so
   -rwxr-xr-x. 1 root root 625867 Mar 21 15:45 /lib/libudev.so
   [root@localhost cron.hourly]# ll /lib/libudev.so.6
   ls: cannot access /lib/libudev.so.6: No such file or directory
   [root@localhost cron.hourly]# 

   [root@localhost cron.hourly]# vim gcc.sh 
   [root@localhost cron.hourly]# ll /lib/libudev.so
   -rwxr-xr-x. 1 root root 625867 Mar 21 15:45 /lib/libudev.so
   [root@localhost cron.hourly]# ll /lib/libudev.so.6
   ls: cannot access /lib/libudev.so.6: No such file or directory
   [root@localhost cron.hourly]# chmod 000 /lib/libudev.so 
   [root@localhost cron.hourly]# ll /lib/libudev.so
   ----------. 1 root root 625867 Mar 21 15:48 /lib/libudev.so
   [root@localhost cron.hourly]#

参考

Linux下随机10字符病毒的清除

声明: 本文采用 BY-NC-SA 授权。转载请注明转自: Ding Bao Guo