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