Linux系統(tǒng)中的入侵檢測
介紹
這篇文章集中討論Linux平臺上的幾種基于主機(jī)的入侵檢測系統(tǒng)。而且,我還會介紹一下如何安裝這些軟件包、它們有什么用處以及在什么情況下使用這些軟件包。
系統(tǒng)安全101
這篇文章假定你已經(jīng)有了一些系統(tǒng)安全的基本知識。而且,為了防止來自Internet的入侵也已經(jīng)采取了一些基本的安全防范措施。這些措施包括:
l防火墻,用來防止系統(tǒng)中的TCP和UDP端口不會被黑客利用。例如,用于Web服務(wù)器的一組基本的防火墻規(guī)則要保證只能通過TCP端口80(通常是HTTP協(xié)議的端口號)用TCP/IP協(xié)議來訪問這臺計算機(jī)。
l禁止不必要的daemon。例如,一個Web服務(wù)器在正常情況下只需要一個進(jìn)程用來處理網(wǎng)頁的請求。與處理網(wǎng)頁請求無關(guān)的進(jìn)程,如:RPC/Portmap服務(wù)、NFS服務(wù)、X字體服務(wù)、DNS域名服務(wù)以及其它用不著的程序必須被禁止運行。在Red Hat Linux系統(tǒng)中,通常使用象ntsysv或tksysv這樣的程序來禁止不必要的daemon或服務(wù)的。
l通過編輯“/etc/inetd.conf”,禁止不必要的端口。在一般情況下,系統(tǒng)安裝完之后在“/etc/inetd.conf”文件中許多端口都被設(shè)置成有效的。編輯這個文件并把不必要的行刪掉或注釋掉是最基本的安全防范措施,必須在所有的系統(tǒng)中都使用這樣的安全措施。
安全防線
在這篇文章中,我將討論保證系統(tǒng)安全的多層次的解決方案。如果任何一層安全防線被破壞了,其它安全防線也能夠?qū)ο到y(tǒng)提供保護(hù)。多層次的系統(tǒng)安全結(jié)構(gòu)就是如圖表1所示的這個例子。
圖中的每一層為其上面一層提供更多的數(shù)據(jù)保護(hù)。例如,第一層是防火墻。一旦防火墻被攻破,第二層,也就是Port Sentry程序,也還能夠提供保護(hù)。
在系統(tǒng)中第三第四層分別是LIDS和LogCheck程序,一旦Port Sentry對入侵者無能為力,它們將提供更進(jìn)一步的保護(hù)。
監(jiān)控連接請求
在防火墻之后的第一層是用來監(jiān)控連接請求的軟件包。PortSentry軟件包(http://www.psionic.com/abacus/portsentry/)提供了簡單而有效地完成這項任務(wù)的方法。
PortSentry是用來做什么的?
PortSentry是用來監(jiān)控TCP/IP端口活動的監(jiān)控器。被PortSentry監(jiān)控的端口活動都會被報告出來而且可以設(shè)置某些參數(shù),包括根據(jù)端口活動的來源禁止其對系統(tǒng)進(jìn)一步的訪問。這是一個很重要的防御措施,因為黑客在入侵之前都會試圖探查系統(tǒng)的弱點(通過端口掃描)。檢測“探查”或端口掃描,可以徹底地防止?jié)撛诘暮诳腿肭窒到y(tǒng),讓黑客不可能在掃描過端口之后發(fā)動真正的攻擊。
安裝PortSenty
對Red Hat Linux的用戶,PortSentry的RPM包可以在Red Hat contrib FTP站點找到。這個站點在世界各地都有鏡像,查看www.redhat.com找到離你最近的鏡像站點。我不能確定是否有.deb格式的PortSentry軟件包,但是我想可能會有吧。
對于其它Linux系統(tǒng),用源代碼來安裝PortSentry相對來說也很容易。
建議配置
PortSentry可以在很多種模式下運行,包括各種各樣的TCP和UDP“秘密”(stealth)模式。我喜歡把PortSentry和一些TCP端口綁定,這些端口是:(a)不在使用的;(b)眾所周知的很容易被攻擊的端口。例如,端口143(imap2),端口111(portmap)和端口23(telnet)都是很容易被攻擊的端口,因此我在自己的系統(tǒng)中都沒有使用這些端口,但是我的Web服務(wù)器的這些端口在24小時之內(nèi)已經(jīng)都被掃描過來了。
為了讓PortSentry在基本的TCP模式下運行,必須確保系統(tǒng)的啟動腳本中有這么一行:
portsentry –tcp
而且還要保證在PortSentry的配置文件(portsentry.conf)中包含有讓你需要監(jiān)控的端口生效的TCP_PORTS行。
反應(yīng)(response)選項
“portsentry.conf”文件中的“Response Options”部分允許你設(shè)定當(dāng)檢測到端口有異?;顒又驪ortSentry將采取怎樣的反應(yīng)。我使用的方法是讓ipchains阻塞更進(jìn)一步的攻擊。這只要在“portsentry.conf”文件中去掉下面這一行的注釋:
KILL_ROUTE="/sbin/ipchains -I input -s $TARGET$ -j DENY -l"
在端口被掃描的頻率很高的系統(tǒng)中,把上面這一行中末尾的“-l”去掉,可以不記錄連接請求,這樣就能節(jié)省日志文件所占的空間。
#p#監(jiān)控系統(tǒng)日志
用防火墻保護(hù)系統(tǒng)以及用類似PortSentry的軟件所起到的作用就是它們可以監(jiān)控和阻止連接到系統(tǒng)中空閑端口的企圖。這可以防止用“掃描-入侵”的方法對系統(tǒng)進(jìn)行攻擊。
如果系統(tǒng)需要運行一個特定的服務(wù)(例如,在Web服務(wù)器上運行Apache、在DNS服務(wù)器上運行BIND)而且黑客發(fā)現(xiàn)了服務(wù)軟件中的一個安全漏洞,那么防火墻和PortSentry就不能防止黑客對系統(tǒng)進(jìn)行攻擊。當(dāng)作為DNS服務(wù)器上運行的BIND軟件有安全漏洞,而且黑客通過掃描一定范圍內(nèi)計算機(jī)的某一個特定端口(DNS端口)發(fā)現(xiàn)了這臺有安全隱患的計算機(jī)并通過這個端口發(fā)動攻擊,防火墻和PortSentry都會把這樣的入侵看成是正常的對系統(tǒng)的訪問。
LogCheck
LogCheck(http://www.psionic.com/abacus/logcheck/)是一個非常有用的程序用來檢查系統(tǒng)日志查看有沒有什么異常的活動。LogCheck掃描不同的系統(tǒng)日志文件(在Linux系統(tǒng)中是在“/var/log”目錄下),一旦發(fā)現(xiàn)有異常情況就會用email通知系統(tǒng)管理員。如果有黑客企圖攻擊你的系統(tǒng)或者已經(jīng)攻擊了你的系統(tǒng)在日志文件中是可以找到一些蛛絲馬跡的。
安裝LogCheck
LogCheck的RPM軟件包象PortSentry一樣可以在Red Hat contrib FTP服務(wù)器上得到。安裝LogCheck的RPM軟件包或者用源代碼安裝(請看源代碼中提供的INSTALL文件)相對來說都是很簡單的。
配置LogCheck
LogCheck有四個主要的配置文件。在RPM的版本中,這些文件都保存在“/etc/logcheck”目錄下。正常情況下只有“l(fā)ogcheck.ignore”和“l(fā)ogcheck.violations.ignore”文件需要修改。安裝完LogCheck之后,還要做的事有:
l用標(biāo)準(zhǔn)的配置文件運行一次LogCheck。這將產(chǎn)生一個很大的輸出文件,這個文件可以刪掉。
l24小時之后,再運行一次LogCheck。這會檢測到上次運行之后日志文件中新增加的一些項,而且會生成一個小了一點但是還是很大的輸出文件。認(rèn)真讀一下這個輸出文件。
l對于日志文件中一些用不著考慮的消息(根據(jù)自己的判斷)找到可以標(biāo)識這些消息的某個特殊的字符串。對于“Security Violations”部分的消息,把這個標(biāo)識字符串加入“l(fā)ogcheck.violations.ignore”文件。對于其它的消息(在“Unusual System Events”部分),把標(biāo)識串加入“l(fā)ogcheck.ignore”文件中。
l在一周之內(nèi)每隔12-24小時重復(fù)上面的過程。直到通過在“.ignore”文件中不斷地加入標(biāo)識串把用不著的消息過濾掉,最后在LogCheck每天的報表中只剩下那些真正需要好好查看的消息為止。
注意,安裝完RPM的軟件包之后,LogCheck在默認(rèn)情況下被設(shè)置成每小時運行一次。但是在一般情況下,除了那些需要定期監(jiān)控的非常重要的系統(tǒng),只要每天運行一次就行了。只要把“/etc/cron.hourly/logcheck”文件移到“/etc/cron.daily”目錄下就解決問題了。
基于內(nèi)核的入侵檢測
基于內(nèi)核的入侵檢測對于Linux來說是一項很新的技術(shù)?,F(xiàn)在可以得到的基于內(nèi)核的入侵檢測系統(tǒng)是LIDS,在http://www.lids.org/。(譯者注:這可是中國人主持的項目,大家要好好支持)
什么是LIDS
LIDS是一個基于Linux內(nèi)核的入侵檢測與防范系統(tǒng)。
LIDS的防范措施包括限制root(通常能夠完全控制整個系統(tǒng))的權(quán)力,不讓他隨意地改變系統(tǒng)中的重要部分。LIDS的其它重要的特性還包括:經(jīng)過加強(qiáng)的文件系統(tǒng)保護(hù)、防止直接對端口或者內(nèi)存進(jìn)行訪問、防止直接訪問磁盤以及保護(hù)日志文件。LIDS還能夠阻止某些系統(tǒng)“動作”,例如,安裝sniffer軟件以及改變防火墻規(guī)則。
LIDS的文檔
相對PortSentry和LogCheck來說,LIDS會難安裝一些。幸運的是,LIDS的站點有關(guān)于LIDS項目的很好的文檔,包括安裝和配置指南。
安裝LIDS
首先,在安裝LIDS之前,必須確保有最新版本的LIDS的patch(我用的是0.9)以及正確的內(nèi)核版本。我使用從Red Hat Updates FTP站點的最新的內(nèi)核(2.2.14-12),因為這個版本修正了一些安全問題。你還要有正在使用的內(nèi)核的源代碼。
LIDS現(xiàn)在主要用于2.2.14版本的內(nèi)核。我在Red Hat 6.2系統(tǒng)中安裝了LIDS,這個Linux的發(fā)行版已經(jīng)包括了2.2.14的內(nèi)核了。在安裝LIDS之前,我下載了最新版的內(nèi)核(從ftp.redhat.com/updates/或其它鏡像站點下載)并根據(jù)http://www.redhat.com/support/docs/howto/kernel-upgrade/kernel-upgrade.html的指示進(jìn)行了安裝。
【編輯推薦】