如何監(jiān)控和保護(hù)Linux下進(jìn)程安全
通過(guò)綜合采用用戶級(jí)別的top、ps等系統(tǒng)工具以及Linux內(nèi)核防護(hù)技術(shù),我們可以從用戶/內(nèi)核兩個(gè)層次全方位地保護(hù)Linux系統(tǒng)中重要系統(tǒng)進(jìn)程以及用戶進(jìn)程的安全性,從而達(dá)到保護(hù)Linux系統(tǒng)安全的目的。
經(jīng)典的信息保密性安全模型Bell-LaPadula模型指出,進(jìn)程是整個(gè)計(jì)算機(jī)系統(tǒng)的一個(gè)主體,它需要通過(guò)一定的安全等級(jí)來(lái)對(duì)客體發(fā)生作用。進(jìn)程在一定條件下可以對(duì)諸如文件、數(shù)據(jù)庫(kù)等客體進(jìn)行操作。如果進(jìn)程用作其他不法用途,將給系統(tǒng)帶來(lái)重大危害。在現(xiàn)實(shí)生活當(dāng)中,許多網(wǎng)絡(luò)黑客都是通過(guò)種植“木馬”的辦法來(lái)達(dá)到破壞計(jì)算機(jī)系統(tǒng)和入侵的目的,而這些“木馬”程序無(wú)一例外的是需要通過(guò)進(jìn)程這一方式在機(jī)器上運(yùn)行才能發(fā)揮作用的。另外,許多破壞程序和攻擊手段都需要通過(guò)破壞目標(biāo)計(jì)算機(jī)系統(tǒng)的合法進(jìn)程尤其是重要系統(tǒng)進(jìn)程,使得系統(tǒng)不能完成正常的工作甚至無(wú)法工作,從而達(dá)到摧毀目標(biāo)計(jì)算機(jī)系統(tǒng)的目的。作為服務(wù)器中占絕大多數(shù)市場(chǎng)份額的Linux系統(tǒng),要切實(shí)保證計(jì)算機(jī)系統(tǒng)的安全,我們必須對(duì)其進(jìn)程進(jìn)行監(jiān)控和保護(hù)。
用戶級(jí)進(jìn)程監(jiān)控工具
Linux系統(tǒng)提供了who、w、ps和top等察看進(jìn)程信息的系統(tǒng)調(diào)用,通過(guò)結(jié)合使用這些系統(tǒng)調(diào)用,我們可以清晰地了解進(jìn)程的運(yùn)行狀態(tài)以及存活情況,從而采取相應(yīng)的措施,來(lái)確保Linux系統(tǒng)的安全。它們是目前在Linux下最常見(jiàn)的進(jìn)程狀況查看工具,它們是隨Linux套件發(fā)行的,安裝好系統(tǒng)之后,用戶就可以使用。
1.who命令:該命令主要用于查看當(dāng)前在線上的用戶情況。系統(tǒng)管理員可以使用who命令監(jiān)視每個(gè)登錄的用戶此時(shí)此刻的所作所為。
2.w命令:該命令也用于顯示登錄到系統(tǒng)的用戶情況,但是與who不同的是,w命令功能更加強(qiáng)大,它不但可以顯示有誰(shuí)登錄到系統(tǒng),還可以顯示出這些用戶當(dāng)前正在進(jìn)行的工作,w命令是who命令的一個(gè)增強(qiáng)版。
3.ps命令:該命令是最基本同時(shí)也是非常強(qiáng)大的進(jìn)程查看命令。利用它可以確定有哪些進(jìn)程正在運(yùn)行及運(yùn)行的狀態(tài)、進(jìn)程是否結(jié)束、進(jìn)程有沒(méi)有僵死、哪些進(jìn)程占用了過(guò)多的資源等。ps命令可以監(jiān)控后臺(tái)進(jìn)程的工作情況,因?yàn)楹笈_(tái)進(jìn)程是不和屏幕鍵盤(pán)這些標(biāo)準(zhǔn)輸入/輸出設(shè)備進(jìn)行通信的,如果需要檢測(cè)其情況,可以使用ps命令。下面是一個(gè)ps命令的例子
$ ps x
PID TTY STAT TIME COMMAND
5800 ttyp0 S 0:00 -bash
5813 ttyp1 S 0:00 -bash
5921 ttyp0 S 0:00 man ps
5922 ttyp0 S 0:00 sh -c /usr/bin/gunzip -c /var/catman/cat1/ps.1.gz/
5923 ttyp0 S 0:00 /usr/bin/gunzip -c /var/catman/cat1/ps.1.gz
5924 ttyp0 S 0:00 /usr/bin/less -is
5941 ttyp1 R 0:00 ps x
4.top命令:top命令和ps命令的基本作用是相同的,顯示系統(tǒng)當(dāng)前的進(jìn)程及其狀態(tài),但是top是一個(gè)動(dòng)態(tài)顯示過(guò)程,可以通過(guò)用戶按鍵來(lái)不斷刷新當(dāng)前狀態(tài)。如果在前臺(tái)執(zhí)行該命令,它將獨(dú)占前臺(tái),直到用戶終止該程序?yàn)橹?。比較準(zhǔn)確地說(shuō),top命令提供了實(shí)時(shí)的對(duì)系統(tǒng)處理器的狀態(tài)監(jiān)視。它可以顯示系統(tǒng)中CPU最“敏感”的任務(wù)列表。該命令可以按CPU使用、內(nèi)存使用和執(zhí)行時(shí)間對(duì)任務(wù)進(jìn)行排序,而且它的很多特性都可以通過(guò)交互式命令或者在個(gè)人定制文件中進(jìn)行設(shè)定。下面是一個(gè)top命令的例子:
1:55pm up 7 min, 4 user, load average:0.07,0.09,0.06
29 processes:28 sleeping, 1 running, 0 zombie, 0 stopped
CPU states: 4.5% user, 3.6% system, 0.0% nice, 91.9% idle
Mem: 38916K av, 18564K used, 20352K free, 11660K shrd, 1220K buff
Swap: 33228K av, 0K used, 33228K free, 11820K cached
PID USER PRI NI SIZE RSS SHARE STAT LIB %CPU %MEM TIME COMMAND
363 root 14 0 708 708 552 R 0 8.1 1.8 0:00 top
1 root 0 0 404 404 344 S 0 0.0 1.0 0:03 init
2 root 0 0 0 0 0 SW 0 0.0 0.0 0:00 kflushd
3 root -12 -12 0 0 0 SW< 0 0.0 0.0 0:00 kswapd
需重點(diǎn)監(jiān)控的一些進(jìn)程
由上面的介紹可知,Linux提供的這些命令都能提供關(guān)于進(jìn)程的一些信息,可以通過(guò)它們查看系統(tǒng)當(dāng)前的進(jìn)程狀況,也可以找出那些占用了過(guò)多系統(tǒng)資源的進(jìn)程并結(jié)束該進(jìn)程。它們的優(yōu)點(diǎn)在于速度快,透明性好,直觀明了。下表給出了Linux系統(tǒng)中較為常見(jiàn)的重要的進(jìn)程(沒(méi)有完全列出,用戶可以參考相應(yīng)的資料),用戶可以采用上述工具來(lái)實(shí)時(shí)的監(jiān)測(cè)這些重要進(jìn)程的情況,并采取相應(yīng)的防護(hù)措施。
系統(tǒng)調(diào)用存在缺點(diǎn)
我們上述所介紹的進(jìn)程監(jiān)控方法和工具都是基于調(diào)用操作系統(tǒng)給我們提供的相應(yīng)的API接口函數(shù)或者系統(tǒng)調(diào)用來(lái)實(shí)現(xiàn)的。我們所得到的只是接口函數(shù)處理后的結(jié)果,不能夠主動(dòng)地從操作系統(tǒng)內(nèi)核的進(jìn)程數(shù)據(jù)結(jié)構(gòu)當(dāng)中獲取我們需要的信息。因而,它們具有如下缺點(diǎn):
1.傳統(tǒng)的進(jìn)程監(jiān)控方法運(yùn)行效率比較低,同時(shí)反應(yīng)時(shí)間也比較長(zhǎng),實(shí)時(shí)性能差。
2.不能夠?qū)崟r(shí)、高效地向用戶報(bào)告當(dāng)前系統(tǒng)運(yùn)行的安全狀況,就算系統(tǒng)中有不法進(jìn)程在運(yùn)行,系統(tǒng)也不能識(shí)別出來(lái)。
3.不能給用戶捕捉不法進(jìn)程的行為提供證據(jù)和進(jìn)程的活動(dòng)軌跡。當(dāng)一個(gè)不法進(jìn)程運(yùn)行并對(duì)系統(tǒng)產(chǎn)生破壞時(shí),用戶即使通過(guò)察看進(jìn)程列表找到了不合法的進(jìn)程,也不清楚到底從進(jìn)程開(kāi)始運(yùn)行直到捕捉到這樣一個(gè)不法進(jìn)程這樣一段時(shí)間內(nèi),進(jìn)程都對(duì)系統(tǒng)造成了哪些破壞,比如說(shuō),訪問(wèn)、修改了哪些重要的系統(tǒng)文件,占用了哪些系統(tǒng)資源等等。這些都給以后的恢復(fù)和處理工作帶來(lái)了很大的問(wèn)題。
4.執(zhí)行程序工作在用戶態(tài),本身就不安全,入侵系統(tǒng)的黑客可以輕松地找到這些進(jìn)程監(jiān)控程序的磁盤(pán)映像,進(jìn)行刪除甚至替換,從而會(huì)給系統(tǒng)帶來(lái)不可估量的損失。這一點(diǎn)尤其需要強(qiáng)調(diào),比如說(shuō),黑客入侵系統(tǒng)成功,就可以植入他們所改寫(xiě)的ps程序以替換原來(lái)系統(tǒng)的ps程序,這樣就使得用戶不能通過(guò)該工具得知系統(tǒng)中當(dāng)前運(yùn)行的不法進(jìn)程,這樣無(wú)論黑客如何植入木馬或者其他程序,用戶都無(wú)法知道,從而無(wú)法采取措施終止這些行為。不言而喻,這樣的后果是很嚴(yán)重的。而在我們下面所要介紹的一種運(yùn)行于內(nèi)核的進(jìn)程監(jiān)控程序當(dāng)中,黑客根本無(wú)法或者很難深入內(nèi)核來(lái)破壞該進(jìn)程監(jiān)控程序,從而使其能夠很好地保證自身的安全。
內(nèi)核的實(shí)時(shí)監(jiān)控技術(shù)
基于上述種種不足,我們提出了在Linux內(nèi)核中實(shí)現(xiàn)進(jìn)程實(shí)時(shí)監(jiān)控的原理和技術(shù)。該技術(shù)主要分為以下幾個(gè)步驟:
首先,在“干凈”的系統(tǒng)環(huán)境下,全面地運(yùn)行系統(tǒng)中的安全進(jìn)程,分析和搜集Linux環(huán)境下這些進(jìn)程的相關(guān)信息(包括進(jìn)程ID號(hào)、進(jìn)程名稱、進(jìn)程可執(zhí)行映像、進(jìn)程的開(kāi)始時(shí)間、進(jìn)程的父進(jìn)程等主要信息),形成一張“系統(tǒng)安全進(jìn)程列表”,作為進(jìn)程監(jiān)控的依據(jù)。
接著,監(jiān)控代碼在進(jìn)程調(diào)度過(guò)程中實(shí)時(shí)地搜集系統(tǒng)中運(yùn)行進(jìn)程的信息。如果發(fā)現(xiàn)進(jìn)程不在“系統(tǒng)安全進(jìn)程列表”當(dāng)中,則馬上通過(guò)終端輸出該進(jìn)程的PID號(hào)、名稱、進(jìn)程的可執(zhí)行映像等信息,或者通過(guò)聲音向用戶報(bào)警,等待用戶處理,在這個(gè)等待的過(guò)程中,終止調(diào)度該進(jìn)程,直到用戶做出響應(yīng)(放行該進(jìn)程或者殺死該進(jìn)程)。
在第二步當(dāng)中,如果超級(jí)用戶(系統(tǒng)管理員)放行了該進(jìn)程,則可以將該進(jìn)程加入“系統(tǒng)安全進(jìn)程列表”,以完善該列表;如果是一般用戶在使用過(guò)程當(dāng)中放行了某個(gè)進(jìn)程,那么,需要將該用戶的用戶名和身份記錄下來(lái),并且將放行的進(jìn)程記錄下來(lái)存為日志,那么,當(dāng)超級(jí)用戶(系統(tǒng)管理員)無(wú)論是在審核用戶行為還是在修改“系統(tǒng)安全進(jìn)程列表”時(shí),都是一個(gè)有力的依據(jù)。
另外,在系統(tǒng)運(yùn)行過(guò)程當(dāng)中,如果發(fā)現(xiàn)“系統(tǒng)安全進(jìn)程列表”當(dāng)中的某些重要的進(jìn)程(包括kswapd、bdflush等)不在運(yùn)行,則馬上將該進(jìn)程“遺失”的信息存入文件,以備在系統(tǒng)的恢復(fù)過(guò)程當(dāng)中,對(duì)它們進(jìn)行針對(duì)性的恢復(fù),根據(jù)不同的情況,有的需要馬上停機(jī),恢復(fù)進(jìn)程,有的則可以現(xiàn)場(chǎng)恢復(fù)。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評(píng)論