這篇文章主要是關於適用於Linux的幾種基於主機的入侵檢測系統。特別的,我們將會覆蓋一些怎麼安裝這些軟件包的要素,已經它們的用處和什麼時候能夠用到這些東西。 系統安全101 本文將為大家展示一些基礎的系統安全知識。特別的,我假設很多常見的安全措施已經被用來抵抗來自Internet對主機的入侵。這些安全措施主要是: 防火牆,確定了系統的來自Internet的用戶對哪些TCP或者UDP端口有訪問的權限。例如:我們通過一些很簡單的Web Server防火牆的規則設置,就可以確定這台機器只有用來提供http服務的80端口向用戶開放。 系統是不需要沒有用處的守護進程的。例如:一個Web服務器一般只需要一個正在運行的進程來服務Web頁面。進程並不是就是和服務與Web頁面相關聯的,譬如RPC/Portmap服務,NFS服務,X Font服務,DNS域名服務,其他外來的或者是沒有什麼用處的應用軟件應該被關掉或者是禁用。在Red Hat Linux的系統中,通常我們用一種運行等級的編輯器來進行有關的設置,譬如我們可以用ntsysv 或者tksysv來禁用其中的那些沒有要求的守護進程。 通過編輯和修改/etc/inetd.conf可以屏蔽一些不用的端口。作為一個典型的默認值,我們安裝一個新的Linux系統的時候,/etc/inetd.conf默認的打開了很多端口。所有的系統都應該通過編輯/etc/inetd.conf,刪除或者是注釋掉其中的一些行,用來禁用那些沒有用處的端口,這是最基本的系統安全行為。 警戒線(Lines of Defense): 圖解一、多層系統安全 這一部分,我們將討論一個多層通道的系統安全問題。當其中一些安全層被破壞的時候,很多安全層能夠獨立的應用來提供一些額外的防衛。圖1就是一種多層結構的系統安全模型。 圖表中的每一層都會為自己的上一層提供額外的數據保護。例如:第一層是防火牆,如果防火牆沒有阻擋住外界的入侵嘗試,那麼第二層-端口守護程序就會提供額外的保護。進一步,裡面的安全系統是LIDS和LogCheck程序,在入侵嘗試沒有被第二層截獲的時候也會進行保護。 監控當前連接 防火牆後的第一防護層是用來監控當前與主機的連接嘗試的軟件包。端口守護程序包( http://www.psionic.com/abacus/portsentry/ )提供了一些簡潔和有用方式來完成這些事情。 端口守護(PortSentry)程序的作用 端口守護程序的主要作用監控一些特殊的TCP/IP端口的活動情況。PortSentry監視並報告一些端口的活動,其中的一種情況可能被選中,包括拒絕進一步的連接嘗試。這是一種很重要的防護措施,因為一般的黑客在入侵一個系統之前都會將會使用一些工具來探測系統的漏洞和弱點。察覺到探測器或者是端口掃描,就可以徹底的切斷一些潛在地黑客進一步的連接嘗試,中止一些帶有入侵意圖的進一步的端口掃描。 安裝PortSentry 對於Red Hat的用戶來說,Red Hat的FTP服務器上的RPM包裡面包含了這個程序。這個站點在全球都有它的鏡像,你可以在www.redhat.com上面查找距離你最近的站點。我還不能確定.deb格式的軟件包中間是PortSentry這樣的程序,但是我可以確認那裡肯定是有這個軟件的。對於其他Linux用戶來說,通過原碼來安裝這個軟件也是相當地簡單的。 推薦配置 PortSentry有很多運行模式,包括不同的UDP和TCP秘密運行的模式。我選擇的運行機制是把PortSentry綁定在那些沒有被使用的或者是認為有潛在的入侵可能的TCP端口上。例如:我將24小時連續的掃描我的web服務器上面的這些端口,port 143 (imap2), port 111 (portmap) 和port 23 (telnet)都是我的Internet系統上沒有使用的TCP端口。你可以通過這條命令: portsentry -tcp 在你的系統啟動的時候就使PortSentry進入基本的TCP運行模式。同時要保證PortSentry的配置文件portsentry.conf中包含了TCP_PORTS這行配置來掃描你需要進行掃描的端口。 反應選項 你能通過portsentry.conf中的"Response Options"部分來詳細的說明什麼樣的反應是PortSentry察覺了一些不期望的連接。通常我會使用ipchains來中斷那些來自於連接的源方的進一步連接。這個也可以通過portsentry.conf中下面這樣一行來進行配置: KILL_ROUTE="/sbin/ipchains -I input -s $TARGET$ -j DENY -l" 在接受來自高端口的掃描行為的時候,可以通過刪除上面一行中的-l這個選項來屏蔽這些進一步的連接,可以有效的維持系統日志空間。 監視系統日志 諸如防火牆系統、PortSentry這樣的軟件可以有效的監視或者是屏蔽一些端口的不期望的連接。這樣可以防止最典型的那種"掃描-入侵"的攻擊方式。 當系統需要運行特殊的服務(例如:Apache Web Server,或者是綁定了一個DNS服務)的時候,同時有黑客破解了這種服務中的一些攻擊點,這些程序就會很不幸運的不能保持把所有的入侵者拒之門外。綁定運行著一個容易受攻擊的程序的DNS服務器,這些端口最終總是要被一些黑客通過掃描很廣范圍的機器的特定的一個端口,並且會試圖通過這個端口來入侵系統。很不幸,防火牆或者是PortSentry程序會將這些入侵嘗試當作正常的合理的連接。 系統日志檢測(LogCheck) LogCheck是用來掃描系統日志文件的軟件(http://www.psionic.com/abacus/logcheck/ )。LogCheck會掃描系統日志文件(在Linux系統中,系統日志文件在/var/log/目錄下面),同時當系統出現一些異常的時候,LogCheck就會通過Email來通報給管理員。系統日志文件中的異常的消息通常是表示有一些黑客正在嘗試入侵或者是正在侵入系統。 安裝LogCheck LogCheck有四個主要的配置文件。在RPM版本中,這幾個配置文件在/etc/logcheck目錄下面。通常我們只需要配置logcheck.ignore和logcheck.violations.ignore這兩個文件。我在安裝完LogCheck後的程序一般是這樣的: 允許LogCheck在正常的運行模式下面運行一次,這樣將會一個巨大的輸出文件,不過我們可以把這個文件刪除算了。 24小時以後讓LogCheck再次運行一次,這次我們會在日志文件的入口處中發現產生了一些新的東西,同時也是一個很大的但是仍然可以計算大小的文件。仔細的閱讀這個文件。 在文件的入口處有一些不需要我們關心的特定的字符串,如果這些字符串時一些"違反安全"的片斷,我們可以將這些字符串片斷加入到logcheck.violations.ignore文件中;或者當他們是"異常系統事件"的時候,我們就將這些字符串加到logcheck.ignore中。 在這幾個星期中,每隔12~24小時就重復一下這些步驟。在這個階段中,我們反復的設置.ignore文件的過濾規則,最後剩下的就是我們的系統真正關心的了。 注意到RPM文件指定LogCheck每小時運行一次,但是我只需要每天運行一次,除非是在特定的需要監視的系統。這樣可以每天把/etc/cron.hourly/logcheck這個文件拷貝到/etc/cron中一次。 基於內核的入侵檢測 基於內核的入侵檢測是一種相當巧妙的新型的Linux入侵檢測系統。現在最主要的基於內核的入侵檢測系統叫做LIDS,並可以從http://www.lids.org/ 下載。 什麼是LIDS? LIDS是一種基於Linux內核的入侵檢測和預防系統。 LIDS的保護目的是防止超級用戶root的篡改系統重要部分的。LIDS主要的特點是提高系統的安全性,防止直接的端口連接或者是存儲器連接,防止原始磁碟的使用,同時還要保護系統日志文件。LIDS當然也會適當制止一些特定的系統操作,譬如:安裝sniffer、修改防火牆的配置文件。 LIDS文檔工程 LIDS比安裝PortSentry和LogCheck要復雜一點,但是很幸運的是,在LIDS的主頁上面有詳細的安裝和配置手冊。 安裝LIDS 首先,在安裝之前,我們需要大部分最新的LIDS軟件包(我使用的是0.9)和適當的內核版本。我現在使用的是從Red Hat主頁上下載的2.2.14-12版本的內核,因為其中包含一些安全補丁。同時你也需要你使用的內核的一些源代碼。 現在的LIDS主要是適用於2.2.14版本的內核。我安裝的在2.2.14的內核的Red Hat Linux 6.2上面安裝了LIDS。在安裝LIDS之前,我在ftp.redhat.com下載了最新的內核版本,並且依照http://www.redhat.com/support/docs/howto/kernel-upgrade/kernel-upgrade.Html 安裝了這個內核。 接著的事情就是升級內核源代碼。這裡我們是這樣做的: rpm -Uhv kernel-source-2.2.14-12.i386.rpm 然後就是編譯和安裝lidsadm這個程序: cd /usr/local/src/security/lids-0.9/lidsadm-0.9 make make install 生成一個RipeMD-160口令,這個以後將會在安裝進內核的: lidsadm -P 輸入口令是"anypass",得到秘鑰"d502d92bfead11d1ef17887c9db07a78108859e8"。接著,我把Redhat的配置文件拷貝到我的結構體系中,在/usr/src/linux目錄下面: cd /usr/src/linux/configs/ cp kernel-2.2.12-i686.config .. 下面我們就使用下面的命令來安裝LIDS: cd /usr/src patch -p0 同時我們應該注意到Red Hat所提供的內核和Linus發布的標准的2.2.14版本的內核有一些細微的差別,因為其中包含一些修改過的驅動程序。同樣lids-0.9-2.2.14-redhat.patch文件也是和LIDS發布的標准的lids-0.9-2.2.14.patch有一些細微的差別,不