本文將示範打造一個防駭的網站金鐘罩系統,利用SVN版本控管系統產生網站目錄的初始版本,並採用integrit建立基準狀態資料庫,然後定時透過integrit產生現存狀態資料庫來進行比對,這樣一來不但能夠保存網站目錄被不當變動時的資訊,還可即時地回復網站伺服器原有的內容。
接著,繼續討論網站內的檔案被不當變動的情況及其處理動作,相關流程如圖2所示。
|
▲圖2 網站內檔案被不當變動的情況及其處理方式。 |
網站內被不當新增檔案
這是常見於網站內被置入後門程式的情況,由於新增的檔案並未被SVN版本控管系統所控管,所以要先將該新增的檔案加進SVN版本控管系統,然後再回存至版本控管系統進行保存,之後再取出初始版本回復網站目錄即可。
網站內被不當修改檔案
常見於網站內的檔案被置入惡意程式碼的情況,由於檔案已被SVN版本控管系統所控管,所以將這個被修改的檔案回存至版本控管系統進行保存,之後再取出初始版本回復網站目錄。
網站內被不當刪除檔案
無須保存至版本控管系統,所以另外進行記錄後,再取出初始版本回復網站目錄。
根據圖2流程,筆者撰寫了一個簡單的Perl程式(檔名為protect.pl)來實現網站金鐘罩的功能,在執行此程式之前,必須先自行產生knowndb及SVN版本控管軟體的初始版本。
在本文,將以「/tmp/integrit」作為網站目錄的複本(目錄內有網站目錄的內容,是用來匯入成初始版本)為例,並以「/tmp/webroot」為網站目錄,步驟如下(其中#為註解):
執行指令「svnadmin create /tmp/newrepos」,在「/tmp/newrepos」產生一個檔案庫。
下達指令「svn import /tmp/integrit -m "initial" file:///tmp/newrepos」,將「/tmp/integrit」目錄內容匯入檔案庫當成初始版本,版本編號為1。
使用指令「svn checkout -r 1 file:///tmp/newrepos /tmp/webroot」,取出初始版本內的檔案存放至「/tmp/webroot」目錄內。
然後,在「/etc/integrit.conf」設定檔案內加入下列幾個設定:
隨即,利用指令「integrit -u -C /etc/integrit.conf -N /root/known.cdb」產生基準資料庫。
將protect.pl(該程式只是示範用程式,有許多的情況並未考慮到,讀者可以參考程式的概念再修正成可用的程式)加入crontab,讓它定時執行。一旦發現有異動,即會將異動的情況加入版本控管系統(基本上,v2之後所儲存的應是有異常的檔案)並以初始版本來回復,程式內容如下:
<本文作者:吳惠麟,多年資安經驗,喜好利用開源碼建構相關解決方案,著有「資訊安全原理與實驗」等書。>