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

來源:互聯網
上載者:User
現在,Tripwire自身已經完全就緒,接下來我們要做的事就是用它來執行完整性檢查。

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

產生有效設定檔

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


產生有效原則檔案

# cd /etc/tripwire# twadmin --print-polfile > twpol.txt

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

需要注意的是,儘管我們可以將twadmin的輸出重新導向到任何檔案當中,但安裝指令碼twinstall.sh卻要求明文形式的策略和設定檔名為twcfg.txt和twpol.txt。

修改策略檔案和設定檔如果想改變Tripwire所檢查檔案和目錄的話,或者想改變Tripwire的預設行為,那該怎麼辦呢?請按如下所示來進行:

首先,從明文檔案中提取出策略和配置:

# cd /etc/tripwire# twadmin --print-polfile > twpol.txt# twadmin --print-cfgfile > twcfg.txt


策略檔案twpol.txt和設定檔twcfg.txt的修改可以利用常見的文字編輯器來完成。對於修改過的策略檔案twpol.txt和設定檔twcfg.txt檔案,需要對他們進行再次簽名:

# 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對檔案作了快照以後,我們的檔案是否發生了變動,我們可以簡單通過以下命令來達到此目的:

# tripwire -check


這是一條最基本的命令,它能告訴我們系統是否被修改了。它根據在策略檔案中規定的規則,利用Tripwire資料庫跟檔案系統目前狀態加以對比,之後將比較結果寫入標準輸出,並將其加蓋時間戳記、簽名,然後作為一份Tripwire報告存放起來。另外,我們還可以針對資料庫中的單個或多個檔案進行完整性檢查。若Tripwire的策略中包括以下規則:

(  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"


也可以查看嚴重性大於等於特定值的所有規則,如下所示:

# tripwire --check --severity 40


關於策略檔案的有關文法,請參閱有關手冊或查看線上說明:

$ tripwire --check --help


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

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

1.把 site密鑰、local密鑰以及tripwire可執行檔本身複製到合適的磁碟上,開啟防寫保護後再裝載,比如將其安裝在目錄/mnt/cdrom。

# mount /mnt/cdrom# ls -l /mnt/cdromtotal 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/cdromSITEKEYFILE=/mnt/cdrom/site.keyLOCALKEYFILE=/mnt/cdrom/myhost-local.key

4.對修改後的設定檔進行簽名

# SITE_KEY=/mnt/cdrom/site.key# twadmin --create-cfgfile --cfgfile $DIR/tw.cfg --site-keyfile $SITE_KEY $DIR/twcfg.txt5.更新資料庫並卸載CD-ROM# /mnt/cdrom/tripwire --init# umount /mnt/cdrom現在,已經萬事具備,如果要進行完整性檢驗的話,只要插入光碟片並輸入命令就可以了:# mount /mnt/cdrom# /mnt/cdrom/tripwire --check# umount /mnt/cdromsite密鑰、local密鑰以及tripwire可執行檔之所以要加以保護,是因為它們極為重要並且可能受到攻擊。Tripwire的其他檔案,如資料庫、策略和配置等需要用這兩個密鑰和程式來簽名,如果site密鑰、local密鑰以及tripwire可執行檔是安全的,那麼用它們簽過名的檔案發生的任何變化都能被發現。另外,將/usr/sbin/tripwire拷貝到光碟片之前,一定要確保它是靜態連結的,也就是說該程式的執行不依賴任何動態共用程式庫,因為應用動態共用程式庫時,動態庫調用更容易被攻擊者所劫持。

$ ldd /usr/sbin/tripwirenot a dynamic executable


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

為了提高檢驗的安全性,關鍵的Tripwire檔案最好不要存放在被檢驗的機器上面。為此,我們在此引入兩台機器untrusty和trusty。前者是一台想要用Tripwire來檢查其完整性的"不可信"機器;後者是一台安全的機器,理想的情況下只能由它訪問網路,而其他機器這不能訪問它。此外,為了使其他機器不能訪問存放site密鑰、local密鑰以及tripwire可執行檔的遠程機器,通常使用rsync(SSH下的安全隧道技術)來驗證原件和拷貝的一致性從而觸發完整性檢驗。遠程機器trusty上的原始配置如下所示:

#!/bin/shREMOTE_MACHINE=untrustyRSYNC='/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_DIRfor file in $VITAL_FILESdo         $RSYNC ${REMOTE_MACHINE}:$file $SAFE_DIR/done


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

#!/bin/shcd $SAFE_DIRrm -f logfor file in $VITAL_FILESdo        base=`basename $file`        $RSYNC -n ${REMOTE_MACHINE}:$file . | fgrep -x "$base" >> logdoneif [ -s log ] ; then        echo 'Security alert!'else        ssh ${REMOTE_MACHINE} -l root /usr/sbin/tripwire --checkfi


rsync是一個常用來同步兩台機器上的檔案的公用程式。它實際上通過SSH建立了一條安全隧道,來為我們在兩台機器之間提供安全的鑒別功能,並為兩者之間的通訊提供Data Encryption Service,但前提是您已經在兩台機器之間設定了SSH設施,否則,rsync就不能提供上述的安全功能。

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

對於fgrep命令,主要用於刪除所有輸出,但可疑的檔案名稱除外。它的特點是用固定的字串而非Regex進行匹配,而檔案名稱中恰恰又包含常見於Regex的一些特殊字元,如"."等。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批處理任務來觸發重引導,因為這樣作更為合理一些.

相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。