如何判斷自己的服務(wù)器是否被入侵了呢??jī)H僅靠?jī)芍皇质遣粔虻?,但兩只手也能起到一些作用,我們先?lái)看看UNIX系統(tǒng)上一些入侵檢測(cè)方法,以LINUX和solaris為例。
1、檢查系統(tǒng)密碼文件
首先從明顯的入手,查看一下passwd文件,ls–l/etc/passwd查看文件修改的日期。
檢查一下passwd文件中有哪些特權(quán)用戶,系統(tǒng)中uid為0的用戶都會(huì)被顯示出來(lái)。
順便再檢查一下系統(tǒng)里有沒(méi)有空口令帳戶:
2、查看一下進(jìn)程,看看有沒(méi)有奇怪的進(jìn)程
重點(diǎn)查看進(jìn)程:ps–aef|grepinetd
inetd是UNIX系統(tǒng)的守護(hù)進(jìn)程,正常的inetd的pid都比較靠前,如果你看到輸出了一個(gè)類似inetd–s/tmp/.xxx之類的進(jìn)程,著重看inetd–s后面的內(nèi)容。在正常情況下,LINUX系統(tǒng)中的inetd服務(wù)后面是沒(méi)有-s參數(shù)的,當(dāng)然也沒(méi)有用inetd去啟動(dòng)某個(gè)文件;而solaris系統(tǒng)中也僅僅是inetd–s,同樣沒(méi)有用inetd去啟動(dòng)某個(gè)特定的文件;如果你使用ps命令看到inetd啟動(dòng)了某個(gè)文件,而你自己又沒(méi)有用inetd啟動(dòng)這個(gè)文件,那就說(shuō)明已經(jīng)有人入侵了你的系統(tǒng),并且以root權(quán)限起了一個(gè)簡(jiǎn)單的后門(mén)。
輸入ps–aef查看輸出信息,尤其注意有沒(méi)有以./xxx開(kāi)頭的進(jìn)程。一旦發(fā)現(xiàn)異樣的進(jìn)程,經(jīng)檢查為入侵者留下的后門(mén)程序,立即運(yùn)行kill–9pid開(kāi)殺死該進(jìn)程,然后再運(yùn)行ps–aef查看該進(jìn)程是否被殺死;一旦此類進(jìn)程出現(xiàn)殺死以后又重新啟動(dòng)的現(xiàn)象,則證明系統(tǒng)被人放置了自動(dòng)啟動(dòng)程序的腳本。這個(gè)時(shí)候要進(jìn)行仔細(xì)查找:find/-name程序名–print,假設(shè)系統(tǒng)真的被入侵者放置了后門(mén),根據(jù)找到的程序所在的目錄,會(huì)找到很多有趣的東東
UNIX下隱藏進(jìn)程有的時(shí)候通過(guò)替換ps文件來(lái)做,檢測(cè)這種方法涉及到檢查文件完整性,稍后我們?cè)儆懻撨@種方法。
接下來(lái)根據(jù)找到入侵者在服務(wù)器上的文件目錄,一步一步進(jìn)行追蹤。
3、檢查系統(tǒng)守護(hù)進(jìn)程
檢查/etc/inetd.conf文件,輸入:cat/etc/inetd.conf|grep–v“^#”,輸出的信息就是你這臺(tái)機(jī)器所開(kāi)啟的遠(yuǎn)程服務(wù)。
一般入侵者可以通過(guò)直接替換in.xxx程序來(lái)創(chuàng)建一個(gè)后門(mén),比如用/bin/sh替換掉in.telnetd,然后重新啟動(dòng)inetd服務(wù),那么telnet到服務(wù)器上的所有用戶將不用輸入用戶名和密碼而直接獲得一個(gè)rootshell。
4、檢查網(wǎng)絡(luò)連接和監(jiān)聽(tīng)端口
輸入netstat-an,列出本機(jī)所有的連接和監(jiān)聽(tīng)的端口,查看有沒(méi)有非法連接。
輸入netstat–rn,查看本機(jī)的路由、網(wǎng)關(guān)設(shè)置是否正確。
輸入ifconfig–a,查看網(wǎng)卡設(shè)置。
5、檢查系統(tǒng)日志
命令last|more查看在正常情況下登錄到本機(jī)的所有用戶的歷史記錄。但last命令依賴于syslog進(jìn)程,這已經(jīng)成為入侵者攻擊的重要目標(biāo)。入侵者通常會(huì)停止系統(tǒng)的syslog,查看系統(tǒng)syslog進(jìn)程的情況,判斷syslog上次啟動(dòng)的時(shí)間是否正常,因?yàn)?span lang="EN-US">syslog是以root身份執(zhí)行的,如果發(fā)現(xiàn)syslog被非法動(dòng)過(guò),那說(shuō)明有重大的入侵事件。
在linux下輸入ls–al/var/log
在solaris下輸入ls–al/var/adm
檢查wtmputmp,包括messgae等文件的完整性和修改時(shí)間是否正常,這也是手工擦除入侵痕跡的一種方法。
6、檢查系統(tǒng)中的core文件
通過(guò)發(fā)送畸形請(qǐng)求來(lái)攻擊服務(wù)器的某一服務(wù)來(lái)入侵系統(tǒng)是一種常規(guī)的入侵方法,典型的RPC攻擊就是通過(guò)這種方式。這種方式有一定的成功率,也就是說(shuō)它并不能100%保證成功入侵系統(tǒng),而且通常會(huì)在服務(wù)器相應(yīng)目錄下產(chǎn)生core文件,全局查找系統(tǒng)中的core文件,輸入find/-namecore–execls–l{}\;依據(jù)core所在的目錄、查詢core文件來(lái)判斷是否有入侵行為。
7、.rhosts和.forward
這是兩種比較著名的后門(mén)文件,如果想檢查你的系統(tǒng)是否被入侵者安裝了后門(mén),不妨全局查找這兩個(gè)文件:
在某用戶的$HOME下,.rhosts文件中僅包含兩個(gè)+號(hào)是非常危險(xiǎn)的,如果你的系統(tǒng)上開(kāi)了513端口(rlogin端口,和telnet作用相同),那么任意是誰(shuí)都可以用這個(gè)用戶登錄到你的系統(tǒng)上而不需要任何驗(yàn)證。
Unix下在.forward文件里放入命令是重新獲得訪問(wèn)的常用方法在某一用戶$HOME下的.forward可能設(shè)置如下:
這種方法的變形包括改變系統(tǒng)的mail的別名文件(通常位于/etc/aliases).注意這只是一種簡(jiǎn)單的變換.更為高級(jí)的能夠從.forward中運(yùn)行簡(jiǎn)單腳本實(shí)現(xiàn)在標(biāo)準(zhǔn)輸入執(zhí)行任意命令(小部分預(yù)處理后).利用smrsh可以有效的制止這種后門(mén)(雖然如果允許可以自運(yùn)行的elm'sfilter或procmail類程序,很有可能還有問(wèn)題。在Solaris系統(tǒng)下,如果你運(yùn)行如下命令:
然后設(shè)置vacation有效,那么/var/mail/luser就會(huì)被拷貝到~/.forward,同時(shí)會(huì)附加"|/usr/bin/vacationme",舊的symlink被移到~/.forward..BACKUP中。
直接刪除掉這兩個(gè)文件也可以。
8、檢查系統(tǒng)文件完整性
檢查文件的完整性有多種方法,通常我們通過(guò)輸入ls–l文件名來(lái)查詢和比較文件,這種方法雖然簡(jiǎn)單,但還是有一定的實(shí)用性。但是如果ls文件都已經(jīng)被替換了就比較麻煩。在LINUX下可以用rpm–V`rpm–qf文件名`來(lái)查詢,國(guó)家查詢的結(jié)果是否正常來(lái)判斷文件是否完整。在LINUX下使用rpm來(lái)檢查文件的完整性的方法也很多,這里不一一贅述,可以manrpm來(lái)獲得更多的格式。
UNIX系統(tǒng)中,/bin/login是被入侵者經(jīng)常替換作為后門(mén)的文件,接下來(lái)談一下login后門(mén):
UNIX里,Login程序通常用來(lái)對(duì)telnet來(lái)的用戶進(jìn)行口令驗(yàn)證。入侵者獲取login的源代碼并修改,使它在比較輸入口令與存儲(chǔ)口令時(shí)先檢查后門(mén)口令。如果用戶敲入后門(mén)口令,它將忽視管理員設(shè)置的口令讓你長(zhǎng)驅(qū)直入:這將允許入侵者進(jìn)入任何賬號(hào),甚至是root目錄。由于后門(mén)口令是在用戶真實(shí)登錄并被日志記錄到utmp和wtmP前產(chǎn)生的一個(gè)訪問(wèn),所以入侵者可以登錄獲取shell卻不會(huì)暴露該賬號(hào)。管理員注意到這種后門(mén)后,使用”strings”命令搜索login程序以尋找文本信息。許多情況下后門(mén)口令會(huì)原形畢露。入侵者又會(huì)開(kāi)始加密或者更改隱藏口令,使strings命令失效。所以許多管理員利用MD5校驗(yàn)和檢測(cè)這種后門(mén)。UNIX系統(tǒng)中有md5sum命令,輸入md5sum文件名檢查該文件的md5簽名。它的使用格式如下:md5sum–b使用二進(jìn)制方式閱讀文件;md5sum–c逆向檢查MD5簽名;md5sum–t使用文本方式閱讀文件。
在前面提到過(guò)守護(hù)進(jìn)程,對(duì)于守護(hù)進(jìn)程配置文件inetd.conf中沒(méi)有被注釋掉的行要進(jìn)行仔細(xì)比較,舉個(gè)簡(jiǎn)單的例子,如果你開(kāi)放了telnet服務(wù),守護(hù)進(jìn)程配置文件中就會(huì)有一句:telnetstreamtcpnowaitroot/usr/sbin/in.telnetdin.telnetd
可以看到它所使用的文件是/usr/sbin/in.telnetd,檢查該文件的完整性,入侵者往往通過(guò)替換守護(hù)進(jìn)程中允許的服務(wù)文件來(lái)為自己創(chuàng)建一個(gè)后門(mén)。
LINUX系統(tǒng)中的/etc/crontab也是經(jīng)常被入侵者利用的一個(gè)文件,檢查該文件的完整性,可以直接cat/etc/crontab,仔細(xì)閱讀該文件有沒(méi)有被入侵者利用來(lái)做其他的事情。
不替換login等文件而直接使用進(jìn)程來(lái)啟動(dòng)后門(mén)的方法有一個(gè)缺陷,即系統(tǒng)一旦重新啟動(dòng),這個(gè)進(jìn)程就被殺死了,所以得讓這個(gè)后門(mén)在系統(tǒng)啟動(dòng)的時(shí)候也啟動(dòng)起來(lái)。通常通過(guò)檢查/etc/rc.d下的文件來(lái)查看系統(tǒng)啟動(dòng)的時(shí)候是不是帶有后門(mén)程序;這個(gè)方法怎么有點(diǎn)象查windows下的trojan?
說(shuō)到這里,另外提一下,如果在某一目錄下發(fā)現(xiàn)有屬性為這樣的文件:-rwsr-xr-x1rootrootxxx.sh,這個(gè)表明任何用戶進(jìn)來(lái)以后運(yùn)行這個(gè)文件都可以獲得一個(gè)rootshell,這就是setuid文件。運(yùn)行find–perm4000–print對(duì)此類文件進(jìn)行全局查找,然后刪除這樣的文件。
9、檢查內(nèi)核級(jí)后門(mén)
如果你的系統(tǒng)被人安裝了這種后門(mén),通常都是比較討厭的,我常常就在想,遇到這種情況還是重新安裝系統(tǒng)算了J,言歸正傳,首先,檢查系統(tǒng)加載的模塊,在LINUX系統(tǒng)下使用lsmod命令,在solaris系統(tǒng)下使用modinfo命令來(lái)查看。這里需要說(shuō)明的是,一般默認(rèn)安裝的LINUX加載的模塊都比較少,通常就是網(wǎng)卡的驅(qū)動(dòng);而solaris下就很多,沒(méi)別的辦法,只有一條一條地去分析。對(duì)內(nèi)核進(jìn)行加固后,應(yīng)禁止插入或刪除模塊,從而保護(hù)系統(tǒng)的安全,否則入侵者將有可能再次對(duì)系統(tǒng)調(diào)用進(jìn)行替換。我們可以通過(guò)替換create_module()和delete_module()來(lái)達(dá)到上述目的。另外,對(duì)這個(gè)內(nèi)核進(jìn)行加固模塊時(shí)應(yīng)盡早進(jìn)行,以防系統(tǒng)調(diào)用已經(jīng)被入侵者替換。如果系統(tǒng)被加載了后門(mén)模塊,但是在模塊列表/proc/module里又看不到它們,有可能是使用了hack工具來(lái)移除加載的模塊,大名鼎鼎的knark工具包就有移除加載模塊的工具。出現(xiàn)這種情況,需要仔細(xì)查找/proc目錄,根據(jù)查找到的文件和經(jīng)驗(yàn)來(lái)判斷被隱藏和偽裝的進(jìn)程。Knark后門(mén)模塊就在/proc/knark目錄,當(dāng)然可能這個(gè)目錄是隱藏的。
10、手工入侵檢測(cè)的缺陷
上面談了一些手工入侵檢測(cè)的方法,但這些方式有一定的缺陷,有的甚至是不可避免的缺陷,這就是為什么說(shuō)手工檢測(cè)是“體力活”的原因。我們先來(lái)看看這些缺陷:
1)手工入侵檢測(cè)只能基于主機(jī),也就是說(shuō)所有的入侵檢測(cè)工作只能在操作系統(tǒng)下面完成,這是它固有的缺陷;基本上所有凌駕于操作系統(tǒng)之外的入侵行為統(tǒng)統(tǒng)無(wú)法探測(cè)得到。網(wǎng)絡(luò)級(jí)的入侵,交換機(jī)、路由器上面的入侵和攻擊行為,作為服務(wù)器的操作系統(tǒng)都無(wú)法得知;信息已經(jīng)從主機(jī)發(fā)送出去了,如果在傳送的介質(zhì)當(dāng)中被攔截,主機(jī)的操作系統(tǒng)是永遠(yuǎn)無(wú)動(dòng)于衷的。
2)手工的入侵檢測(cè)要求精通操作系統(tǒng),并且漏洞庫(kù)資料的刷新要快;在做一個(gè)網(wǎng)管的同時(shí)要做一個(gè)黑客??梢哉f(shuō)經(jīng)驗(yàn)的積累永遠(yuǎn)跟不上全世界漏洞資料的更新,難保系統(tǒng)不被新的漏洞所侵入。
3)手工入侵檢測(cè)只是“就事論事”,根據(jù)發(fā)生的某一情況判斷入侵事件,再作出相應(yīng)的對(duì)應(yīng)和防范措施,而無(wú)法預(yù)先根據(jù)入侵者的探測(cè)行為作出對(duì)攻擊事件的描述,定義事件級(jí)別,在不防礙系統(tǒng)正常工作的情況下阻止下一步對(duì)系統(tǒng)的入侵行為。
4)可以通過(guò)手工入侵檢測(cè)發(fā)現(xiàn)主機(jī)上的某些漏洞,進(jìn)而作出相應(yīng)的安全措施。但卻避免不了一種現(xiàn)象:無(wú)法避免兩個(gè)入侵者利用同一個(gè)漏洞攻擊主機(jī),即無(wú)法判斷攻擊模式來(lái)切斷入侵行為。
5)綜上所述,手工的入侵檢測(cè)行為對(duì)于系統(tǒng)安全來(lái)說(shuō)只是治標(biāo)而不治本,多半還是依靠管理員的技巧和經(jīng)驗(yàn)來(lái)增強(qiáng)系統(tǒng)的安全性,沒(méi)有,也不可能形成真正的安全體系,雖然聊勝于無(wú),可以檢測(cè)和追蹤到某些入侵行為,但如果碰上同樣精通系統(tǒng)的入侵者就很難抓住蹤跡了。
11、入侵檢測(cè)系統(tǒng)的比較
搭建真正的安全體系需要入侵檢測(cè)系統(tǒng)—IDS,一個(gè)優(yōu)秀的入侵檢測(cè)系統(tǒng)輔以系統(tǒng)管理員的技巧和經(jīng)驗(yàn)可以形成真正的安全體系,有效判斷和切斷入侵行為,真正保護(hù)主機(jī)、資料。人們有時(shí)候會(huì)以為ISS的realsecure是優(yōu)秀的入侵檢測(cè)系統(tǒng),其實(shí)不然,realsecure帶有一定的缺陷,不談它對(duì)事件的誤報(bào)、漏報(bào)和錯(cuò)報(bào),首先它是一個(gè)英文的軟件,使用和熟悉起來(lái)有一定的難度。而且由于是外國(guó)人的軟件,很多hack對(duì)realsecure有深入的研究,已經(jīng)發(fā)掘出它的一些漏洞,甚至是固有漏洞,我就曾經(jīng)測(cè)試出有的攻擊手段可以令realsecure癱瘓。再者,realsecure也是架設(shè)在服務(wù)器操作系統(tǒng)之上的,操作系統(tǒng)停止工作,同樣令之停止工作,換句話說(shuō),很簡(jiǎn)單,攻擊者攻擊的目標(biāo)往往就是realsecure本身。設(shè)想,假設(shè)你的系統(tǒng)依賴于入侵檢測(cè)系統(tǒng),而入侵檢測(cè)系統(tǒng)被攻擊者搞掉,那你的系統(tǒng)將大門(mén)敞開(kāi),任由出入,后果不堪設(shè)想。