本文將示範打造一個防駭的網站金鐘罩系統,利用SVN版本控管系統產生網站目錄的初始版本,並採用integrit建立基準狀態資料庫,然後定時透過integrit產生現存狀態資料庫來進行比對,這樣一來不但能夠保存網站目錄被不當變動時的資訊,還可即時地回復網站伺服器原有的內容。
身為網站管理者,心中最深沈的恐懼應該不是網站被攻擊而停止服務,而是因為網站的漏洞(可能是系統或程式上的漏洞)使得惡意攻擊者將惡意檔案上傳至網站伺服器,藉此危害其他人。最常見的狀況是,網站伺服器被放置了釣魚網頁或被植入XSS木馬,而此類的資安問題,通常都是要等到被通知之後,管理者才會警覺到網站伺服器上多了不速之客,但為時已晚,已經造成重大的傷害。
另一方面,受害的網站通常也會希望在被放置惡意檔案或程式被非法更改的當下,就能夠將相關檔案保存下來,而且最好是分歷程來保存,以便日後能追蹤分析,這樣每次在被更動網站伺服器上的檔案時,就可以分次地保存相關被更動的檔案。如果要滿足這樣的要求,需要以下兩項功能:
第一項功能是必須能夠即時監控網站伺服器上網站目錄內的檔案變動情形,包括「新增」、「刪除」、「修改」等,一旦有相關的變動情形發生,即觸發(Trigger)相關動作,將目前網站伺服器的狀態儲存起來。幸運的是,此類功能可利用開源碼社群中的檔案完整性監控軟體integrit程式完成。
第二項功能則要求,在網站的檔案發生變動的當下,要能分次保存網站伺服器的被更動檔案(例如被放置的惡意檔案)。而這個特性,就是版本控制系統的長處。一般在團隊共同開發程式時,程式設計師最常利用版本控制系統來控管程式開發的進度,並協調各個程式設計師的進度(通常以版本號碼來區分各階段的進度)。
如果換個角度來思考,將版本控制系統的第一個版本(以下簡稱v1,接下來的版本則為v2、v3……,以此類推)視為原始正常的網站檔案,而當integrit發現網站檔案被非法更動,就將被更動的檔案放入(Commit)版本控管系統,並賦予一個版本編號(如v2),之後再利用v1中的檔案來回復網站伺服器的原始檔案。
如此一來,從v1之後的各個版本,即是每次被非法更動的檔案歷程紀錄,藉此保存相關被變動的檔案。再搭配檔案完整性檢查軟體,偵測是否有變動。
一旦偵測到有變動的檔案,即取出原先儲存在版本控制系統的V0(網站的原始檔案)來回復,並且將目前的網站上的檔案快取(Snapshot)一份至版本控制系統,並給予一個版本號碼,日後只要取出此版本號的檔案,即可保留被更動檔案。本文將採用SVN(Subversion)版本控制系統來儲存相關的檔案。
什麼是SVN
隨著軟體專案的日益複雜,相關的開發工作早已非一己之力所能完成,也因此團隊合作的協同開發模式已成為軟體開發的常態,在團隊合作的過程中,最頭痛也最重要的事即是「協同」一事,必須用一種有效的方式控管軟體程式碼的撰寫。
控管得好,軟體開發會同心協力地往終點邁進,控管得不好,就會如同多頭馬車互相拉扯,相互抵銷彼此的研發能量,甚至造成軟體專案的失敗。
一般控管程式設計師所產出的程式碼,通常都會利用所謂的版本控制軟體來控管各階段(如Alpha測試版、Beta測試版、Release上線版)的程式碼,以版本編號如第一版、第二版等等的方式來管理。
在開源碼社群中,也有一個頗富盛名的版本控制軟體,名稱為Subversion,以下簡稱SVN。本文將利用SVN的特性,但不是應用於版本控管的工作,而是用在儲存差異性檔案上。
以下將簡介SVN常用的功能特性,首先說明SVN系統上常用相關名詞的定義,如表1所示。
表1 SVN常用名詞說明
在說明SVN定義的相關名詞後,接著介紹SVN常用的指令,如表2所示。
表2 SVN常用指令說明