用LIDS構(gòu)建LINUX的鋼鐵城堡
隨著類LINUX的操作系統(tǒng)不斷地推廣,在加上經(jīng)濟(jì)危機(jī)時(shí)期需要縮減IT總體擁有成本,越來(lái)越多的中小企業(yè)都把自己的重要服務(wù)向LINUX系統(tǒng)遷移。借著LINUX系統(tǒng)強(qiáng)大的安全性和較少的成本,架設(shè)在LINUX系統(tǒng)上的各種企業(yè)服務(wù)為這些中小企業(yè)提供了更大的發(fā)展和更強(qiáng)的競(jìng)爭(zhēng)力。
但是,在當(dāng)前網(wǎng)絡(luò)環(huán)境下,隨著黑客技術(shù)的不斷提高,以及黑客數(shù)量的不斷增加,網(wǎng)絡(luò)攻擊事件也越來(lái)越多。LINUX系統(tǒng)的安全性正在一次次地經(jīng)受著考驗(yàn),LINUX系統(tǒng)上的安全缺陷也越來(lái)越多突現(xiàn)出來(lái)。對(duì)于那些應(yīng)用LINUX系統(tǒng)的中小企業(yè)來(lái)說(shuō),如何保護(hù)這些服務(wù)器上的數(shù)據(jù)安全正是一個(gè)迫在眉急的問(wèn)題。
由此,許多中小企業(yè)都會(huì)使用網(wǎng)絡(luò)防火墻來(lái)阻止大部份的網(wǎng)絡(luò)攻擊,但是,一旦某些網(wǎng)絡(luò)攻擊穿透了防火墻,系統(tǒng)上的重要數(shù)據(jù)就有被攻擊者完全控制的危險(xiǎn)。因此,在LINUX系統(tǒng)上布置一種基于主機(jī)的入侵檢測(cè)系統(tǒng)是很有必要的。LIDS正是這樣的一種基于LINUX內(nèi)核補(bǔ)丁模式的入侵檢測(cè)系統(tǒng)。
LIDS全稱為L(zhǎng)INUX入侵檢測(cè)系統(tǒng)(Linux Intrusion Detection System),它集成在LINUX內(nèi)核中,可以用來(lái)進(jìn)一步加強(qiáng)LINUX內(nèi)核的安全性,為L(zhǎng)INUX內(nèi)核提供一種安全和強(qiáng)制存取控制模式,也可作為防火墻的一種后備保護(hù)方式而存在。并以此來(lái)保護(hù)LINUX系統(tǒng)上的重要目錄及文件不被復(fù)制、刪除,重要的服務(wù)不被刪除或停止,不能修改系統(tǒng)登錄方式等等。本文下面我們就一起來(lái)詳細(xì)了解在LINUX系統(tǒng)下如何應(yīng)用LIDS。
一、LIDS的主要功能
我們?cè)谑褂肔IDS時(shí),主要使用它的下列主要功能:
1、保護(hù)功能:LIDS可以保護(hù)硬盤上任何類型的重要文件(例如passwd和shadow等文件)和目錄(例如/bin、/sbin、/usr/bin、/usr/sbin、/etc/rc.d等),防止它們被未授權(quán)用戶(包括ROOT)和未授權(quán)的程序所訪問(wèn)和使用。 LIDS還可以保護(hù)系統(tǒng)中的重要進(jìn)程不被終止,啟用它的這個(gè)功能后,系統(tǒng)上的任何用戶包括root也不能殺死進(jìn)程,而且可以隱藏特定的進(jìn)程。另外,LIDS還可以防止非法程序的RAW IO 操作,保護(hù)硬盤,包括對(duì)硬盤的主引導(dǎo)記錄(MBR)進(jìn)行保護(hù)等等。
2、檢測(cè)功能:通過(guò)集成在內(nèi)核中的端口掃描器,LIDS能檢測(cè)到系統(tǒng)中正在監(jiān)聽(tīng)的端口,并可以將檢測(cè)到的內(nèi)容報(bào)告給系統(tǒng)管理員。 LIDS還可以檢測(cè)到系統(tǒng)上任何違反規(guī)則的進(jìn)程。
3、警報(bào)功能:當(dāng)LIDS檢測(cè)到有人違反設(shè)置的安全規(guī)則時(shí), 它就會(huì)在控制臺(tái)上顯示相應(yīng)的警告信息,并將非法的行為細(xì)節(jié)記錄到受LIDS保護(hù)的系統(tǒng)日志文件中。 LIDS還可以將日志文件發(fā)到我們?cè)O(shè)定的管理員電子郵箱中,與此同時(shí),LIDS還可以馬上關(guān)閉非法用戶的當(dāng)前會(huì)話。
#p#
LIDS是一個(gè)開(kāi)源免費(fèi)的LINUX內(nèi)核補(bǔ)丁包,要想完全使用LIDS,需要到它的官方網(wǎng)站www.lids.org上下載LIDS的內(nèi)核補(bǔ)丁包和LIDS工具包。但在下載時(shí),一定要保證下載的LIDS補(bǔ)丁包與我們當(dāng)前所使用的LINUX系統(tǒng)內(nèi)核版本相一致。LIDS補(bǔ)丁包現(xiàn)在的最新版本是lids-2.2.3rc7-2.6.28.patch,它是針對(duì)2.6.28LINUX內(nèi)核的。LIDS工具包現(xiàn)在的最新版本是lidstools-2.2.7.7。
1、 安裝LIDS的內(nèi)核補(bǔ)丁包
現(xiàn)在以上述最新版本的LIDS內(nèi)核補(bǔ)丁包為例說(shuō)明它的安裝。首先將下載的LIDS內(nèi)核補(bǔ)丁包保存到/usr/src目錄下,然后以根用戶的權(quán)限進(jìn)入字符終端模式。要注意的是,在LINUX系統(tǒng)下的命令是嚴(yán)格區(qū)分大小寫(xiě)的。
假設(shè)系統(tǒng)內(nèi)核文件在/usr/src/Linux目錄下,通過(guò)下列命令安裝LIDS內(nèi)核補(bǔ)丁包:
# cd /usr/src/Linux
# patch p1 < /usr/src/ lids-2.2.3rc7-2.6.28.patch
LIDS內(nèi)核補(bǔ)丁包安裝完成后,接著重新編輯內(nèi)核:
# make menuconfig
進(jìn)入內(nèi)核編譯菜單界面后,把有關(guān)LIDS的所有項(xiàng)都選中。這樣做的目的能讓不太熟習(xí)內(nèi)核編譯的用戶能省去很多不必要的麻煩,何況將所有的LIDS項(xiàng)都選擇上也不會(huì)占用多少的內(nèi)核空間,對(duì)加入LIDS后的內(nèi)核性能也不會(huì)產(chǎn)生多少的影響。
在選擇好要加入到內(nèi)核中的LIDS項(xiàng)后,就可以通過(guò)下列命令重新編譯內(nèi)核:
# make
# make install
完成上述內(nèi)核編譯工作后,一個(gè)加入了LIDS的內(nèi)核就重新編譯好了。要使加入了LIDS的新內(nèi)核工作,必需重新啟動(dòng)系統(tǒng)。
2、安裝LIDS的工具包。
現(xiàn)也以LIDS工具包的最新版本作例子說(shuō)明它的安裝。首先把下載的LIDS工具包保存的到/home/用戶名(用戶名是你系統(tǒng)上登錄的用戶名)目錄中后,按如下方式安裝它:
# cd /home/用戶名
# tar -zxvf lids-2.2.7.7.tar.gz
# cd lids-2.2.7.7
# ./configure
# make
# make install
這樣就會(huì)將Lidsadm和Lidsconf這兩個(gè)工具安裝到/sbin/目錄中,同時(shí)會(huì)創(chuàng)建一個(gè)/etc/lids的目錄,并會(huì)在此目錄下生成一個(gè)默認(rèn)的配置文件。在使用LIDS前應(yīng)先用“l(fā)idsadm –U”命令更新這個(gè)默認(rèn)的配置文件。
小提示:如果在編譯LIDS工具包時(shí)出現(xiàn)GCC報(bào)LIDSTEXT.h文件不存在的錯(cuò)誤提示,就需要修改LIDS工具包安裝目錄下的MAKEFILE文件,在在其中的CFLAGS選項(xiàng)中加入“-I/usr/src/Linux/include”,然后就可以重新編譯了。
3、Lidsadm和Lidsconf工具說(shuō)明
(1)、Lidsadm工具及其選項(xiàng):
Lidsadm是LIDS的管理工具單元,可以用它來(lái)管理系統(tǒng)中的LIDS。Lidsadm的作用主要就是啟用或停用LIDS,以及封存LIDS到內(nèi)核中和查看LIDS狀態(tài)。
使用下列命令可以列出Lidsadm的所有可用選項(xiàng):
# lidsadm -h
此命令會(huì)返回下列信息:
......
lidsadm -[s/I] -- [+/-] [LIDS_FLAG] [...]
lidsadm -v
lidsadm -h
命令參數(shù)解釋:
-s:開(kāi)關(guān)某些保護(hù)選項(xiàng)時(shí)指示應(yīng)提交密碼
-I:開(kāi)關(guān)某些保護(hù)選項(xiàng)時(shí)不提交密碼
LIDS_FLAG:為L(zhǎng)idsadm的標(biāo)志值
-v:顯示版本
-V:查看現(xiàn)在LIDS狀態(tài)
-h(huán):列出所有選項(xiàng)
Lidsadm常用的部分主要功能模塊:
CAP_CHOWN:修改目錄或文件的屬主和組
CAP_NET_BROADCAST:監(jiān)聽(tīng)廣播
CAP_NET_ADMIN:接口、防火墻、路由器改變
CAP_IPC_LOCK:鎖定共享內(nèi)存
CAP_SYS_M(jìn)ODULE:插入和移除內(nèi)核模塊
CAP_HIDDEN:隱藏進(jìn)程
CAP_SYS_RESOURCE:設(shè)置資源限制
CAP_KILL_PROTECTED:殺死保護(hù)進(jìn)程
CAP_PROTECTED:保護(hù)進(jìn)程為單用戶方式
Lidsadm可用的標(biāo)志值(Available flags):
LIDS:禁止或激活本地LIDS;
LIDS_CLOBAL:完全禁止或激活LIDS
RELOAD_CONF:重新加載配置文件
(2)、Lidsconf工具及其選項(xiàng):
Lidsconf主要用來(lái)為L(zhǎng)IDS配置訪問(wèn)控制列表(ACLS)和設(shè)置密碼。
輸入以下命令能顯示Lidsconf所有的可用選項(xiàng):
# lidsconf -h
此命令執(zhí)行后會(huì)返回以下信息:
......
lidsconf -A [-s subject] -o object [-d] [-t from-to] [-i level] -j Accept
lidsconf -D [-s file] [-o file]
lidsconf -E
lidsconf -U
lidsconf -L
lidsconf -P
lidsconf -v
lidsconf -[h/H]
命令參數(shù):
-A:增加一條指定的選項(xiàng)到已有的ACL中
-D:刪除一條指定的選項(xiàng)
-E:刪除所有選項(xiàng)
-U:更新dev/inode序號(hào)
-L:列出所有選項(xiàng)
-P:產(chǎn)生用Ripemd-160加密的密碼
-V:顯示版本
-h(huán):顯示幫助
-H:顯示更多的幫助
子對(duì)像(subject):
-s [--subject]:指定一個(gè)子對(duì)像,可以為任何程序,但必須是文件。
目標(biāo)(object):
-o[object]:可以是文件、目錄或功能(capabilities)和socket名稱。
動(dòng)作:
-j:它有以下幾個(gè)參數(shù):
DENY:禁止訪問(wèn)
READONLY:只讀
APPEND:增加
WRITE:可寫(xiě)
GRANT:對(duì)子對(duì)像授與能力
ignore:對(duì)設(shè)置的對(duì)像忽略所有權(quán)限
disable:禁止一些擴(kuò)展特性
其它選項(xiàng):
-d :目標(biāo)的可執(zhí)行domain
-i:繼承級(jí)別
-t:指定從某一時(shí)段到某一時(shí)段可以進(jìn)行怎樣的操作
-e:擴(kuò)展列表
#p#
1、LIDS的啟用與設(shè)置
首先, 要想使LIDS設(shè)置的ACLS發(fā)揮作用,應(yīng)在系統(tǒng)引導(dǎo)時(shí)把LIDS封裝進(jìn)內(nèi)核中,這樣每次系統(tǒng)啟動(dòng)到最后階段,此設(shè)置會(huì)根據(jù)我們系統(tǒng)上的/etc/lids/lids.cap文件中的內(nèi)容來(lái)設(shè)置全局功能。lids.cap文件中保存的就是我們?cè)O(shè)置ACLS項(xiàng)。
要想將LIDS封裝到內(nèi)核中,需要在/etc/rc.d/rc.local文件的未尾加入如下的內(nèi)容:
/sbin/lidsadm –I
另外,在開(kāi)始使用LIDS前,如果在安裝它的補(bǔ)丁包時(shí)沒(méi)有詢問(wèn)我們?cè)O(shè)置密碼,那么還應(yīng)為它設(shè)置一個(gè)進(jìn)入終端會(huì)話模式的密碼,可以通過(guò)如下命令來(lái)進(jìn)行:
# lidsconf -P
這個(gè)命令執(zhí)行后將提示我們輸入密碼,兩次密碼輸入相同后,系統(tǒng)就會(huì)將設(shè)置的密碼保存到/etc/lids/lids.pw文件中,此密碼已通過(guò)Ripemd-160加密。
當(dāng)設(shè)置了密碼后,如果我們想修改ACLS、Capabilities,或當(dāng)我們開(kāi)始LIDS會(huì)話時(shí),就需要我們提交此密碼。我們也可以在以后再次通過(guò)上述命令來(lái)修改設(shè)定的舊密碼,并且,在修改完成后,還需要用以下命令重新更新LIDS的配置文件:(注意:在修改密碼時(shí)不會(huì)提示輸入舊密碼。)
lidsadm -S -- +RELOAD_CONF
在這里,要特別注意的是,在對(duì)LIDS做了任何修改后,都應(yīng)使用上述命令重新更新LIDS的配置文件,它將重新加載下列所示的配置文件,然后重新啟動(dòng)系統(tǒng)服務(wù)使應(yīng)用改變生效。
/etc/lids/lids.conf #ACLS配置文件
/etc/lids/lids.cap #LIDS capabilities(功能)配置文件
/etc/lids/lids.pw #LIDS密碼文件
/etc/lids/lids.net # LIDS郵件警告配置文件 2、 使用LIDS來(lái)保護(hù)系統(tǒng)
在使用LIDS保護(hù)的LINUX的系統(tǒng)中,可以通過(guò)一個(gè)LIDS的自由會(huì)話終端模式來(lái)修改那些已經(jīng)加入到保護(hù)中的數(shù)據(jù),所有的LIDS設(shè)置工作也可在這個(gè)自由會(huì)話終端中進(jìn)行。
使用如下命令打開(kāi)一個(gè)LIDS終端會(huì)話:
# lidsadm -S -- -LIDS
在按提示輸入密碼后,就建立了一個(gè)LIDS自由會(huì)話終端,在此終端我們就可以啟用、停用LIDS和退出此終端。此時(shí),LINUX系統(tǒng)中的任何數(shù)據(jù)都是不受LIDS保護(hù)的。在完成對(duì)文件或數(shù)據(jù)的修改后,我們應(yīng)當(dāng)通過(guò)如下命令重新啟用LIDS:
# lidsadm -S -- +LIDS
另外要清楚的是,在一個(gè)增加了LIDS功能的LINUX系統(tǒng)中,一個(gè)名為/etc/lids/lids.cap的文件中包括了所有的功能描述列表。每一個(gè)功能項(xiàng)前通過(guò)使用“+”號(hào)來(lái)啟用此功能,使用“-”號(hào)來(lái)禁用此功能,完成設(shè)置后我們必須重新加載它的配置文件才能使修改生效。
下面我們就通過(guò)運(yùn)用這些功能項(xiàng),來(lái)對(duì)系統(tǒng)中要保護(hù)的重要數(shù)據(jù)進(jìn)行安全設(shè)置:
(1)保護(hù)文件為只讀
# lidsconf -A -o /some/file -j READONLY
此命令保證一旦LIDS被啟用,任何人都不能修改或刪除此文件。如果我們?cè)?LIDS的自由會(huì)話終端模式下,就可以修改“/some/file”指定的文件,只要此分區(qū)不是掛載為只讀方式就行。在實(shí)際操作時(shí),用實(shí)際的文件路徑代替“/some/file”。
(2)保護(hù)一個(gè)目錄為只讀
# lidsconf -A -o /some/directory -j READONLY
此命令用來(lái)保證一旦LIDS被啟用,任何人都不能列出或刪除此目錄及其中的內(nèi)容。如果我們?cè)贚IDS的自由會(huì)話終端模式下,我們就可以修改/some/directory目錄,只要分區(qū)不是掛載為只讀方式。例如,我們可以設(shè)置/etc/目錄為只讀方式:
# lidsconf -A -o /etc -j READONLY
這里要特別注意的是:當(dāng)我們?cè)O(shè)定/etc目錄為只讀后,再想掛載文件系統(tǒng)時(shí),我們應(yīng)該先刪除/etc/mtab文件,然后再使用它的一個(gè)符號(hào)連接/proc/mounts。同時(shí),我們必須修改我們的初始化腳本,使用“-n”選項(xiàng)來(lái)設(shè)置任何mount和umount命令。這個(gè)選項(xiàng)告訴mount和umount不更新/etc/mtab文件。例如,如果我們發(fā)現(xiàn)在初始化腳本中有一行:mount -av -t nonfs,nproc的項(xiàng),應(yīng)將它改為:mount -av -n -t nonfs,nproc。
(3)隱藏任何用戶都看不到的目錄或文件
# lidsconf -A -o /some/file_or_directory -j DENY
此設(shè)置將使任何系統(tǒng)用戶甚至root用戶都不能訪問(wèn)它。如果設(shè)置的是一個(gè)目錄,那么此目錄下的文件、目錄都將被隱藏,文件系統(tǒng)也是如此。
(4)指定某些特定的程序以只讀方式訪問(wèn)一些非常敏感的文件
比如在系統(tǒng)登錄時(shí)要訪問(wèn)/etc/shadow文件,我們可以指定某些程序能在系統(tǒng)認(rèn)證時(shí)使用它,這些程序包括login、ssh、su和vlock等。例如,我們可以只允許login以只讀方式訪問(wèn)/etc/shadow文件:
# lidsconf -A -s /bin/login -o /etc/shadow -j READONLY
(5)以根用戶身份指定一個(gè)服務(wù)在指定的端口上運(yùn)行
要想指定服務(wù)在1024及以下端口上運(yùn)行需要LIDS的CAP_NET_BIND_SERVICE功能。如果我們?cè)?etc/lids/lids.cap文件中沒(méi)有啟用此功能,那么就不能以根用戶身份啟動(dòng)任何一個(gè)服務(wù)運(yùn)行在指定的端口上。我們可以通過(guò)下列命令來(lái)授與某個(gè)程序有此功能:
# lidsconf -A -s /usr/local/bin/apache -o CAP_NET_BIND_SERVICE 80 -J GRANT
或者在LIDS_GLOBAL被禁止時(shí)啟用此服務(wù)。
(6)在LIDS啟用時(shí),保證X Windows系統(tǒng)能工作
X server必須使用LIDS的CAP_SYS_RAWIO功能后,才能在LIDS啟用時(shí)工作。通過(guò)下列所示命令達(dá)到此目的:
# lidsconf -A -s /path/to /your/x-server -o CAP_SYS_RAWIO -j GRANT
(7)為ssh和scp的遠(yuǎn)程連接指定端口
要為ssh和scp的遠(yuǎn)程連接指定端口,就需要LIDS的CAP_NET_BIND_SERVICE功能。我們可以通過(guò)下列命令將CAP_NET_BIN_SERVICE功能指定的端口授與給ssh:
# lidsconf -A -s /usr/bin/ssh -o CAP_NET_BIN_SERVICE 22 -J GRANT
(8)設(shè)置訪問(wèn)時(shí)間限制
例如,有時(shí)只允許用戶從早上8:00到下午6:00這段時(shí)間能登錄系統(tǒng),就可以用下列命令來(lái)完成:
# lidsconf -A -s /bin/login -o /etc/shadow -t 0800-1800 -j READONLY
我們也可以在“-t”選項(xiàng)中使用“!”參數(shù),它的意思就是指除指定時(shí)間外所有時(shí)間都能做某項(xiàng)工作。
(9)通過(guò)網(wǎng)絡(luò)發(fā)送安全警報(bào)
要實(shí)現(xiàn)LIDS的警報(bào)功能,我們可以在/etc/lids/lids.net文件中指定通過(guò)網(wǎng)絡(luò)發(fā)送安全警報(bào)的接收郵箱。要特別要注意的是:在指定電子郵箱的地址時(shí),應(yīng)當(dāng)確保E-Mail地址的前后不能有空格,同時(shí),在修改完后必須重新加載LIDS的配置文件。
LIDS是LINUX系統(tǒng)下一個(gè)非常強(qiáng)大的入侵檢測(cè)系統(tǒng),它的功能非常多,由于篇幅的限制,在本文中不能將它的所有功能全部描述出來(lái),它們也只能靠讀者自己慢慢去摸索了。
當(dāng)然,有些讀者可能趨向于使用功能更加強(qiáng)大的SNORT或其它主機(jī)型入侵檢測(cè)防御系統(tǒng)。但是,對(duì)于一般的LINUX服務(wù)器,通過(guò)LIDS完全可以滿足保護(hù)系統(tǒng)安全的絕大多數(shù)要求。做此文的目的也是希望能給哪些正在為如何解決LINUX系統(tǒng)安全的用戶有所幫助。
【編輯推薦】