2014年10月23日 星期四

以sagan解析網站Log 即時監控惡意存取行為

把網站伺服器CLF通用記錄格式 轉為syslog比對規則
以sagan解析網站Log 即時監控惡意存取行為

檢視系統紀錄,透過異常的狀況找出惡意存取的行為,看似簡單其實非常複雜,若沒有相關工具輔助,猶如大海撈針。對此,本文將網站紀錄轉換成syslog格式,並傳遞給sagan比對,善用sagan所定義的規則來找出惡意的網站存取行為。

身為系統管理者,應該沒有人會忽視系統紀錄(Log)的重要性,隨時檢視系統紀錄來查看是否有異常的紀錄,相信也是系統管理者每天常態的工作項目之一,但原始的系統紀錄過於繁雜,如果沒有工具的輔助,是很難從中看出任何端倪,也因此有了sagan之類的工具。

sagan是一套利用即時監控系統Log紀錄來與所設定的規則(Rule)比對,並記錄符合規則樣式的主機型入侵偵測系統,但其美中不足的地方在於,sagan僅支援syslog格式的紀錄,對網站的紀錄格式則有力有未逮之憾,因此本文將介紹如何將網站紀錄轉換成syslog格式,並傳遞給sagan做為比對,利用sagan所定義的規則來辨識出惡意的網站存取行為。表1所示為本次所使用到軟體。

表1 實作所需軟體 


syslog說明

syslog是一種應用在網路中傳遞紀錄檔訊息的標準,採用主從式(Client-Server)的架構,其中用戶端(Client)利用UDP或TCP的通訊協定傳送出一個標準的文字訊息(小於1,024位元組)到伺服器端(Server)來進行儲存。

由於其採用主從式架構,所以可以很容易地實現遠端儲存的功能(將個別主機上的相關syslog資訊儲存到遠端的syslog伺服器上)。基本上,除非有做特殊的處理,不然相關syslog的日誌資料都是以明碼型態來傳送。

syslog將資訊分成四個欄位,如圖1所示。其中的「時間」欄位為記錄此syslog事件發生的日期與時間,「主機」欄位記錄發生此事件的主機名稱,如圖1中的spampc,「程式名稱」欄位則記錄發生此事件的服務名稱,如圖1內的sshd,而最後的「內文」欄位,則記錄訊息的實際描述資料內容。


▲圖1 syslog資訊內容格式。

在說明完syslog的格式後,接著介紹Linux常用的紀錄檔案名稱與說明,如表2所示,建議讀者平時就要多留意這些檔案的內容,以便能更詳盡地了解系統的情況。

表2 Linux常用紀錄檔案名稱與說明


一般描述事件時,通常都會描述兩種資料,一個是「這是什麼種類的事件」,另一個則是「這個事件有多麼的嚴重」,syslog也不例外,它利用facility(用來描述此事件是由那些種類的服務所產生的),而level是用來定義此事件的嚴重等級,支援的facility(事件類型)如表3所示。

表3 syslog相關事件類型 


而另一個level則是用來描述事件嚴重的程度,可區分下列嚴重級別,如表4所示是由嚴重程度最低至最高排序。

表4 level嚴重程度說明與排序 


在談完syslog的格式後,接下來說明網站紀錄的相關格式。

網站紀錄格式介紹

市面上林林總總的網站伺服器,如果都各自採用個別的紀錄格式,將會造成極大的不便,也因此有了共同紀錄格式(Common Log Format,CLF)的概念產生。

如此一來,不管是那一家廠商開發的網站伺服器,只要有支援「共同紀錄格式」的功能,就會產生標準化的紀錄格式,以方便管理。

本文所使用的Apache網站伺服器就有支援「共同紀錄格式」的功能。

共同紀錄格式的檔案內容如下所述,若該欄位沒有任何資訊,就會以「-」符號來代替。圖2為一個實際的網站紀錄範例。


▲圖2 網站紀錄實例。

共同紀錄格式(CLF)將相關的網站紀錄以空白為分界劃分成為下面的欄位,其相關欄位的說明如下所示:



Host:記錄客戶端的IP或主機位置。
Ident:如果允許執行indentityCHECK指令,而且在 客戶端機器執行identd的情況下,此欄位會記錄客戶端報告的身分資訊,否則即顯示「-」符號。
Authuser:如果HTTP的請求需要基礎的HTTP認證, 此欄位內容即為用戶名稱,否則即顯示「-」符號。
Date:HTTP客戶端瀏覽網頁的日期與時間。
Request:客戶端所發出的HTTP請求(圖2內即是 以http/1.1的通訊協定來存取test.php的網路),此欄位會以雙引號括起來。
Status:此欄位儲存的是網站伺服器處理完客戶端的 要求後所產生的HTTP狀態碼,例如常見的找不到網頁,狀態碼為404,而圖2中的200則表示存取成功。
Bytes:這個欄位儲存網站伺服器傳回給客戶端的位 元組數。

了解相關的網站紀錄格式後,接下來說明Apache(組態檔名為httpd.conf)所提供的常用的相關Log紀錄的設定,如表5所示。

表5 httpd.conf組態檔內Log紀錄的設定 


系統安裝實作 

接下來的實作環境將預設讀者已經完成安裝Apache網站伺服器,並且安裝在「/usr/local/apache2」目錄下,另外也已安裝了rsyslog程式,而安裝的系統架構圖如圖3所示,相關流程如下所述:


▲圖3 實作系統架構圖。

(1) 使用者瀏覽網站後,網站以mod_log_syslog模組 將網站伺服器的紀錄轉換成syslog格式,並傳遞給rsyslog程式。
(2)及(3) rsyslog將所接受到的資料,利用FIFO裝置 將資料傳遞給sagan後進行比對。
(4) sagan利用規則(Rule)來比對是否有符合的紀 錄。
(5) 如果符合即將相關的資訊寫入檔案中。

在了解整個運作流程後,先來安裝sagan,執行如下指令(其中#為註解): 


由於sagan僅支援liblognorm 1.0.0以上的版本,所以必須至官方網站下載liblognorm 1.0.0以上的版本。 

下載並解壓縮後,以如下的指令開始編譯及安裝: 


在安裝完相關所需要的程式庫之後,接著安裝sagan: 


由於sagan是使用規則樣式(Rule)的方式來比對相關的惡意行為,所以必須先行至sagan的官方網站上取得最新版的規則檔案,並且解壓縮後將相關的檔案放置至規則目錄內,本文放置規則的目錄所在為「/usr/local/sagan2/rules」。 

sagan提供一個主程式(檔名為sagan)及單一的組態檔(sagan.conf)來提供服務,表6說明了組態檔中主要組態的意義。 

表6 sagan組態檔內主要組態說明 

安裝成功並結束安裝sagan後,繼續安裝可將網站伺服器的Log紀錄轉換成syslog格式的模組(mod_log_syslog)。 

mod_log_syslog是一個Apache的模組程式,可外掛在Apache中,將網站紀錄轉成syslog格式,所以必須使用apxs程式來編譯該模組。 

先至mod_log_syslog的官方網站下載最新版本,解壓縮後,再利用「make」及「make install」指令即可安裝該模組。 

在編譯成功後,可至Apache存放模組的目錄內(本文中為「/usr/local/apache2/modules/」)檢查是否有mod_log_syslog.so的檔案。如果安裝順利,在該目錄下將會有該檔案的產生。 

mod_log_syslog模組僅提供一個設定Log選項設定,如下所示: 


其中,是設定要轉換那些種類的事件。mod_log_syslog模組提供了local[0-7]及user選項,即為設定欲記錄的嚴重程度,符合此程度以上就記錄下來,而為記錄的格式,mod_log_syslog模組提供了combined與common兩個選項。 

在完成所需程式的安裝後,接下來設定相關的系統設定,執行如下指令(#為註解): 


接著設定rsyslog的組態(其組態檔的名稱為rsyslog.conf),設定如下的組態(#後為註解): 


再來設定sagan程式的組態(組態檔名為sagan.conf,更改下列選項,而其餘的選項使用預設的設定即可): 


最後,再設定Apache的組態檔(組態檔名稱為httpd.conf),請設定下列選項: 


在設定完成後,可依序啟動相關的程式: 


所有的服務全部啟動之後,官方所下載的規則檔案(檔名為apache.rules),會在來源端有存取phpinfo的動作且存取成功時即記錄該動作。 

▲圖4 出現警示資訊。

可利用連結網址「http://<網站伺服器位置>/phpinfo.php」的方式來測試。如果一切正常,sagan在「/var/log/sagan2/alert」檔案內將會記錄如圖4所示的警示資訊,記錄下曾經存取過phpinfo的網頁。 

至此,一個可監控惡意網站存取行為的主機型入侵偵測系統即告完成! 

<本文作者:吳惠麟,多年資安經驗,喜好利用開源碼建構相關解決方案,著有「資訊安全原理與實驗」等書。> 

轉載自《網管人