總的來說,要判斷主機(jī)是否正在或者已經(jīng)遭受了攻擊,需要以下幾個(gè)步驟。
1、終結(jié)非授權(quán)用戶。
2、找出并關(guān)閉非授權(quán)進(jìn)程。
3、分析日志文件,尋找入侵者曾經(jīng)試圖入侵系統(tǒng)的蛛絲馬跡。
4、檢查系統(tǒng)文件是否有潛在受損情況。
接下來說說具體操作。
1、首先以root登錄到tty下,用
root@mysun:~# w
14:14:10 up 43 days, 4:43, 1 user, load average: 0.13, 0.08, 0.04
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
lyychee pts/2 54.107.130.61.di 14:14 0.00s 0.01s 0.00s sshd: lyychee [priv] |
把所有當(dāng)前登錄到系統(tǒng)的用戶列出來,可以根據(jù)各用戶的用戶名以及用戶登錄的源地址和他們正在運(yùn)行的進(jìn)程來判斷他們是否為非法用戶,
2、如果一旦發(fā)現(xiàn)有可疑用戶,我們可以馬上把它鎖住
root@mysun:~# passwd -l username |
3、last命令是另外一個(gè)可以用來查找非授權(quán)用戶登錄事件的工具
lyychee pts/2 54.107.130.61.di Mon May 22 14:14 still logged in
lyychee pts/2 51.107.130.61.di Thu May 18 18:36 - 18:42 (00:05)
lyychee pts/2 61.130.107.51 Tue May 16 14:21 - 14:39 (00:18)
root pts/2 61.130.107.58 Sat May 13 15:40 - 15:43 (00:02)
lyychee pts/2 210.32.178.253 Fri May 12 00:53 - 01:16 (00:23)
root pts/2 58.107.130.61.di Wed May 10 15:33 - 15:35 (00:01)
root pts/2 61.130.107.58 Tue May 9 14:58 - 15:07 (00:08)
root pts/2 59.78.34.62 Sun May 7 07:40 - 07:45 (00:05)
lyychee pts/2 59.78.34.62 Sat May 6 23:50 - 00:27 (00:37)
lyychee pts/2 222.64.24.144 Sat May 6 10:56 - 10:56 (00:00)
root pts/2 192.168.0.111 Sat May 6 00:01 - 00:02 (00:01)
lyychee pts/2 222.64.22.144 Thu May 4 12:41 - 12:43 (00:0
root pts/2 59.78.34.62 Tue May 2 06:59 - 07:00 (00:00) |
last命令輸入的信息來自/var/log/wtmp。這個(gè)文件詳細(xì)地記錄著每個(gè)系統(tǒng)用戶的訪問活動(dòng)。但是有經(jīng)驗(yàn)的入侵者往往會(huì)刪掉/var/log/wtmp以清除自己非法行為的證據(jù),但是這種清除行為還是會(huì)露出蛛絲馬跡:在日志文件里留下一個(gè)沒有退出操作與之對(duì)應(yīng)的登錄操作(因?yàn)樵谀銊h除wtmp的時(shí)候,你的登錄記錄就沒有了,但是你待會(huì)兒登出,系統(tǒng)還是會(huì)把你記下來),不過再高明一點(diǎn)就用at或者cron等自己登出之后再刪文件。(但是這種方法也還是可以查,總之linux沒有一種操作是最強(qiáng)的,強(qiáng)到?jīng)]有紕漏。就像古龍的小說一樣,沒有一個(gè)人是天下第一。這樣看起來才有勁)
4、善于使用ps -aux跟netstat,這里有一個(gè)故事,曾經(jīng)在一臺(tái)被黑過的主機(jī)上,有人在/usr/lib里發(fā)現(xiàn)了一個(gè)貌似無害的文件,但在隨后的調(diào)查中發(fā)現(xiàn)系統(tǒng)上有個(gè)后門,系統(tǒng)管理員發(fā)現(xiàn)主機(jī)重新啟動(dòng)后不久,就會(huì)有一個(gè)明為sndme的進(jìn)程莫名其妙地開始運(yùn)行,在執(zhí)行了
root@mysun:~# netstat -ap |
之后發(fā)現(xiàn)了這么一條記錄
udp 0 0 *:32145 *:* LISTEN 1118/sndme |
這說明一個(gè)進(jìn)程正在UDP端口32145上監(jiān)聽什么。但是這個(gè)進(jìn)程究竟是怎么起來的呢?
后來發(fā)現(xiàn)就是在/usr/lib里的一個(gè)文本文件搞的鬼,在系統(tǒng)init的時(shí)候,有一個(gè)腳本,做了一件很天才的事情,
a:首先,傳見了一個(gè)名為/var/sndtmp的目錄
b:再把這個(gè)文本文件復(fù)制到那,并mv成snd.Z
c:執(zhí)行uncompress snd.Z
d:運(yùn)行sh snd命令把解壓得到的snd文件當(dāng)作一個(gè)shell腳本來執(zhí)行,這個(gè)腳本將提取出一個(gè)snd.c的文件
e:用gcc -o sndme snd.c對(duì)其進(jìn)行編譯,
f:把文件ln到/bin/sndme
g:執(zhí)行之
h:再把剛剛創(chuàng)建,解壓,編譯的文件夾、文件統(tǒng)統(tǒng)都刪除掉 |
sndme進(jìn)程在等待一條來自32145端口的UDP消息,在接收到消息的時(shí)候,它將在系統(tǒng)上打開一個(gè)具備root權(quán)限的后門,狠啊。
5、/var/log/messages文件是一個(gè)系統(tǒng)信息源,如果在里面有連續(xù)登錄失敗事件的記錄,往往就預(yù)示著有人在試圖入侵這臺(tái)主機(jī)。
我們就可以通過grep "fail"跟"repeat"這兩個(gè)關(guān)鍵字來追蹤:
root@mysun:~# grep fail /var/log/messages
root@mysun:~# grep repeat /var/log/messages |
6、檢查文件系統(tǒng)的完好性,在redhat或者suse的系統(tǒng)中我們可以很方便地實(shí)現(xiàn)這一點(diǎn)
root@mysun:~# rpm -Va > /tmp/rpmVa.log |
這條命令將以一個(gè)文件的形式把安裝到系統(tǒng)上的所有rpm包是否被改變輸出成一份清單,清單中的標(biāo)記含義如下:
S 文件長(zhǎng)度發(fā)生了變化
M 文件的訪問模式(包括權(quán)限和文件類型)發(fā)生了變化
5 MD5校驗(yàn)和發(fā)生了變化
D 設(shè)備節(jié)點(diǎn)的屬性發(fā)生了變化
L 文件的符號(hào)鏈接發(fā)生了變化
U 文件/子目錄/設(shè)備節(jié)點(diǎn)的owner發(fā)生了變化
G 文件/子目錄/設(shè)備節(jié)點(diǎn)的group發(fā)生了變化
T 文件最后一次的修改時(shí)間發(fā)生了變化 |
比如當(dāng)你看到下面這樣的輸出時(shí),就應(yīng)該采取行動(dòng)了:
. M . . . . . . /usr/write,就說明wirte的可執(zhí)行文件被篡改了,最簡(jiǎn)單的方法就是在確保其他安全工作已經(jīng)補(bǔ)救好了的情況下重裝該rpm
root@mysun:~# rpm -qf /usr/write // 找到文件所對(duì)應(yīng)的rpm
root@mysun:~# rpm -Uvh --nodeps --force XXX.rpm // 強(qiáng)制無關(guān)聯(lián)安裝 |
7、另外硬件故障也不容忽視,曾經(jīng)有一臺(tái)主機(jī),在用戶符合沒有上去的情況下性能下降了。于是就有人懷疑是遭到了外部攻擊,于是就買了臺(tái)防火墻,并且做了詳細(xì)的入侵檢測(cè),沒有發(fā)現(xiàn)任何不妥,最后發(fā)現(xiàn)是硬件出了故障。 我們可以通過
root@mysun:~# grep error /var/log/messages |
來查看關(guān)于硬件錯(cuò)誤的記錄。