歡迎您光臨本站 註冊首頁

利用Tripwire檢測系統完整性(2)

←手機掃碼閱讀     火星人 @ 2014-03-24 , reply:0

現在,Tripwire自身已經完全就緒,接下來我們要做的事就是用它來執行完整性檢查。

四、維護策略文件和配置文件

如何查看策略和配置

如果您想瀏覽一下Tripwire的策略和配置情況,但他們是以二進位的形式存放或當前缺失,請用下列命令:

生成有效配置文件
QUOTE:
# cd /etc/tripwire
# twadmin --print-cfgfile > twcfg.txt

生成有效策略文件
QUOTE:
# cd /etc/tripwire
# twadmin --print-polfile > twpol.txt

因為有效配置文件和策略文件已經加密和簽名,所以他們是以密文的形式存放。如果想瀏覽他們的話,需要先解密:將其轉換成明文的形式。為安全起見,一般建議在對他們重新進行簽名之後將明文形式的配置和策略文件刪除。

需要注意的是,儘管我們可以將twadmin的輸出重定向到任何文件當中,但安裝腳本twinstall.sh卻要求明文形式的策略和配置文件名為twcfg.txt和twpol.txt。

修改策略文件和配置文件

如果想改變Tripwire所檢查文件和目錄的話,或者想改變Tripwire的默認行為,那該怎麼辦呢?請按如下所示來進行:

首先,從明文文件中提取出策略和配置:
QUOTE:
# cd /etc/tripwire
# twadmin --print-polfile > twpol.txt
# twadmin --print-cfgfile > twcfg.txt

策略文件twpol.txt和配置文件twcfg.txt的修改可以利用常見的文本編輯器來完成。對於修改過的策略文件twpol.txt和配置文件twcfg.txt文件,需要對他們進行再次簽名:
QUOTE:
# twadmin --create-cfgfile --cfgfile /etc/tripwire/tw.cfg \
--site-keyfile site_key etc/tripwire/twcfg.txt
# twadmin --create-polfile --cfgfile /etc/tripwire/tw.cfg \
--site-keyfile site_key etc/tripwire/twpol.txt

然後,我們需要重新初始化資料庫:

# tripwire --init
# rm twcfg.txt twpol.txt



需要注意的是,我們只能對明文形式的策略和配置文件進行編輯,所以除非已有明文文件,否則必須先將加密簽名的策略和配置文件轉換成明文形式。另外,當在修改文件時,可能會遇到以下消息:

### Error: File could not be opened



這說明Tripwire沒有找到目標文件,如果是該文件的確不存在的話,我們就需要從策略和配置文件中去掉對該文件的引用(或將其註釋出來也可以),並對策略文件重新簽名。如果只是在完整性檢查之後簡單地更新一下資料庫的話,那完全沒必要嚴格按上述步驟來處理;但是對策略或配置文件作了修改後卻必須這樣處理。

五、配置完整性檢測

基本的完整性檢測配置

完整性檢驗的目的在於檢查一下自從上次Tripwire對文件作了快照以後,我們的文件是否發生了變動,我們可以簡單通過以下命令來達到此目的:
QUOTE:
# tripwire -check

這是一條最基本的命令,它能告訴我們系統是否被修改了。它根據在策略文件中規定的規則,利用Tripwire資料庫跟文件系統當前狀態加以對比,之後將比較結果寫入標準輸出,並將其加蓋時間戳、簽名,然後作為一份Tripwire報告存放起來。另外,我們還可以針對資料庫中的單個或多個文件進行完整性檢查。若Tripwire的策略中包括以下規則:
QUOTE:
(
rulename = "My funky files",
severity = 50
)
{
/sbin/e2fsck -> $(SEC_CRIT) ;
/bin/cp -> $(SEC_CRIT) ;
/usr/tmp -> $(SEC_INVARIANT) ;
/etc/csh.cshrc -> $(SEC_CONFIG) ;
}

那麼您就可以用以下命令來查看選中的文件和目錄:

# tripwire --check /bin/cp /usr/tmp



若要查看一條規則所對應的所有文件,用以下命令:

# tripwire --check --rule-name "My funky files"



也可以查看嚴重性大於等於特定值的所有規則,如下所示:
QUOTE:
# tripwire --check --severity 40

關於策略文件的有關語法,請參閱有關手冊或查看聯機幫助:

$ tripwire --check --help





更高安全級別的完整性檢測

為了獲得更高的安全性,我們可以將Tripwire最關鍵的文件存放到諸如CD-ROM之類的只讀介質或有防寫的上磁碟上,這樣能防止它們被篡改。步驟如下:

1.把 site密鑰、local密鑰以及tripwire可執行文件本身複製到合適的磁碟上,打開防寫后再裝載,比如將其安裝在目錄/mnt/cdrom。
QUOTE:
# mount /mnt/cdrom
# ls -l /mnt/cdrom
total 2564
-r--r----- 1 root root 931 Jan 21 10:20 site.key
-r--r----- 1 root root 931 Jan 21 10:20 myhost-local.key
-r-xr-xr-x 1 root root 2612200 Jan 21 10:19 tripwire

2.生成明文形式的配置文件

# DIR=/etc/tripwire
# cd $DIR
# twadmin --print-cfgfile > twcfg.txt



3.編輯配置文件以使之指向這些拷貝

/etc/tripwire/twcfg.txt:
ROOT=/mnt/cdrom
SITEKEYFILE=/mnt/cdrom/site.key
LOCALKEYFILE=/mnt/cdrom/myhost-local.key



4.對修改後的配置文件進行簽名
QUOTE:
# SITE_KEY=/mnt/cdrom/site.key
# twadmin --create-cfgfile --cfgfile $DIR/tw.cfg \
--site-keyfile $SITE_KEY $DIR/twcfg.txt

5.更新資料庫並卸載CD-ROM
# /mnt/cdrom/tripwire --init
# umount /mnt/cdrom
現在,已經萬事具備,如果要進行完整性檢驗的話,只要插入光碟並輸入命令就可以了:
# mount /mnt/cdrom
# /mnt/cdrom/tripwire --check
# umount /mnt/cdrom



site密鑰、local密鑰以及tripwire可執行文件之所以要加以保護,是因為它們極為重要並且可能受到攻擊。Tripwire的其他文件,如資料庫、策略和配置等需要用這兩個密鑰和程序來簽名,如果site密鑰、local密鑰以及tripwire可執行文件是安全的,那麼用它們簽過名的文件發生的任何變化都能被發現。另外,將/usr/sbin/tripwire拷貝到光碟之前,一定要確保它是靜態鏈接的,也就是說該程序的執行不依賴任何動態共享庫,因為應用動態共享庫時,動態庫調用更容易被攻擊者所劫持。

$ ldd /usr/sbin/tripwire
not a dynamic executable



除了上面的方法外,我們還可以利用遠程進行完整性檢驗來提高安全強度。

為了提高檢驗的安全性,關鍵的Tripwire文件最好不要存放在被檢驗的機器上面。為此,我們在此引入兩台機器untrusty和trusty。前者是一台想要用Tripwire來檢查其完整性的"不可信"機器;後者是一台安全的機器,理想的情況下只能由它訪問網路,而其他機器這不能訪問它。此外,為了使其他機器不能訪問存放site密鑰、local密鑰以及tripwire可執行文件的遠程機器,通常使用rsync(SSH下的安全隧道技術)來驗證原件和拷貝的一致性從而觸發完整性檢驗。遠程機器trusty上的原始配置如下所示:
QUOTE:
#!/bin/sh
REMOTE_MACHINE=untrusty
RSYNC='/usr/bin/rsync -a --progress --rsh=/usr/bin/ssh'
SAFE_DIR=/usr/local/tripwire/${REMOTE_MACHINE}
VITAL_FILES="/usr/sbin/tripwire
/etc/tripwire/site.key
/etc/tripwire/${REMOTE_MACHINE}-local.key"

mkdir $SAFE_DIR
for file in $VITAL_FILES
do
$RSYNC ${REMOTE_MACHINE}:$file $SAFE_DIR/
done

在檢驗本地機器之前,需要首先將site密鑰、local密鑰以及tripwire可執行文件與它們在遠程機器上的拷貝比較一番,以確定這三個文件的完整性。然後在trusty上運行下列代碼(需要注意,這裡的各個變數如REMOTE_MACHINE要與前面腳本中的保持一致):

#!/bin/sh
cd $SAFE_DIR
rm -f log
for file in $VITAL_FILES
do
base=`basename $file`
$RSYNC -n ${REMOTE_MACHINE}:$file . | fgrep -x "$base" >> log
done
if [ -s log ] ; then
echo 'Security alert!'
else
ssh ${REMOTE_MACHINE} -l root /usr/sbin/tripwire --check
fi



rsync是一個常用來同步兩台機器上的文件的實用程序。它實際上通過SSH建立了一條安全隧道,來為我們在兩台機器之間提供安全的鑒別功能,並為兩者之間的通信提供加密服務,但前提是您已經在兩台機器之間設置了SSH設施,否則,rsync就不能提供上述的安全功能。

這裡有幾個常用的選項需要介紹一下:-progress通知rsync只有當本地和遠程文件不同時才產生輸出;-n選項的作用在於讓rsync不拷貝文件。

對於fgrep命令,主要用於刪除所有輸出,但可疑的文件名除外。它的特點是用固定的字元串而非正則表達式進行匹配,而文件名中恰恰又包含常見於正則表達式的一些特殊字元,如"."等。fgrep -x對整行(即文件名)進行匹配,因此,當且僅當本地文件和遠程文件完全一致時,log文件才為空,從而觸發完整性檢驗。

那麼是否要遠程存儲資料庫呢?實際上是沒有必要的,因為資料庫是用local密鑰來簽名的,而該密鑰又是"離機的",因此如果資料庫發生意外變化的話,Tripwire就會發出警報。

Trusty不僅要檢查這些重要的Tripwire文件,同時還必須趕在untrusty進行完整性檢查之前將他們拷貝給untrusty:

# scp -p tripwire untrusty:/usr/sbin/tripwire
# scp -p site.key untrusty-local.key untrusty:/etc/tripwire/
# ssh untrusty -l root /usr/sbin/tripwire --check



高強度完整性檢測

上面介紹的是常規強度的完整性檢測,但我們還可以繼續提高檢驗強度,但天下沒有免費的午餐,這需要付出速度與方便性為代價的。

因此,我們可以創建一個可引導的CD-ROM,並在其中放上一個微型的Linux系統、Tripwire程序以及您的local和site密鑰。然後,將您的機器與所有網路斷開,從上面製作的可引導光碟引導系統,接著利用光碟上的(而不是硬碟上的)可執行程序來檢查機器磁碟的完整性。之後還要經常備份您的Tripwire的資料庫、配置和策略,以備萬一它們被攻擊者刪除時之用。

這種方法至少需要兩台機器,其中一個必須是安全可信的機器(稱為trusty),另一個是被檢測的機器(稱為untrusty)。我們的目的是為後者進行安全的Tripwire檢測。


第一步是安全創建可引導CD-ROM,這要求:



在trusty上創建CD-ROM,trusty必須是一個潔凈的Linux系統,它可以是由可信的源或二進位軟體包構建而成,從來沒有連入網路或被第三方訪問過,此外還要為其打上最新的安全補丁。


配置CD-ROM的啟動腳本使其禁用所有網路。


直接用可信的源或二進位軟體包來燒制光碟。


在trusty上建立site和local密鑰。

然後,從CD-ROM引導untrusty,裝上本地磁碟並利用CD-ROM上的程序和密鑰來創建untrusty的Tripwire資料庫。因為資料庫、策略和配置文件已經用CD-ROM的密鑰簽過了名,所以這些文件在untrusty上的安全性是可信的。接著,您就可以在執行完整性檢查之前從光碟上引導untrusty。另外,若只是從untrusty上載入光碟並從光碟上運行untrusty的話,則會出現以下情況:


如果untrusty是動態鏈接的話,很難保證共享庫的安全性;


難以保證系統內核的安全性;


難以保證untrusty上掛載點的正確性;

雖然這種方法提供了非常高的安全級別,但做起來非常麻煩,所以只有有特殊安全需求的情況下才採取該措施。為方便起見,我們可以安排一個cron任務,使其在每晚規定的時間從光碟上重引導untrusty,來進行Tripwire檢驗,之後再重引導untrusty。然而,不要讓untrusty本身來執行該任務,因為untrusty是不安全的,所以在其上運行的cron也是不可靠的;相反,應將其安排給trusty來執行,如利用SSH批處理任務來觸發重引導,因為這樣作更為合理一些.


請繼續參看:利用Tripwire檢測系統完整性(3)

[火星人 ] 利用Tripwire檢測系統完整性(2)已經有477次圍觀

http://coctec.com/docs/linux/show-post-137389.html