phplogcon Logfmon rsyslog syslog Apache 開放原始碼 暴力攻擊 日誌

活用開源碼軟體打造日誌記錄分析系統及前端網頁介面 預算零元!自建即時log分析系統

2010-03-05
本文中以開源碼工具logfmon實作一個可即時監控log檔的變化,並利用正規表示法的條件設定將log資訊分類(以暴力攻擊法及登入稽核為例),即時將相關的log記錄備份到其他的檔案的日誌管理方案。透過這個web介面的log分析系統,一方面可以協助網管人員過濾數量龐大的log檔,另一方面也能避免攻擊者侵入系統後擅自消除相關log檔,導致事後追查無門。
知名企業家郭台銘曾強調過一句英文俗諺「魔鬼都在細節中」,相對於系統而言,則是「魔鬼都在log中」,很多系統的問題,都可以從log中找出蛛絲馬跡。也因此分析系統log往往是網管人員每天例行最重要的工作。

面對龐大數量的log資訊常常使人有無從下手的感覺。另一方面,log檔案易於消除的特性(一般攻擊者在成功的侵入到系統後,第一件事往往是消除相關的log檔,以避免被追蹤或留下證據),也常使網管人員事後追查無門。因此,一套能夠分類log事件並能即時將相關log檔儲存到別地的解決方案,相信是每個網管人員迫切需要的。

在本篇文章中,筆者將以開源碼資源實作一個可即時將log資訊分類(本文以暴力攻擊法及登入稽核為例),並儲存到其他檔案來解決資訊繁雜性及易於消除的問題。

實作說明與所需軟體

在本方案中希望能夠達到下列功能:

1. 能夠即時將暴力攻擊法相關log單獨存成另一個檔案,檔名為bruteforce-yymmdd,其中yymmdd為年月日。

2. 能夠即時將登入相關log檔單獨存成另一個檔案,檔案名稱為auth-yymmdd。

3. 能有一個Web介面的log分析系統,讓管理者可以輕鬆利用瀏覽器瀏覽相關的log。

下表即為本方案所需的軟體列表:

安裝rsyslog軟體

Linux作業系統一般是使用syslog的型式來記錄系統相關的記錄檔(log)。syslog是一種網際網路(TCP/IP)中傳遞送記錄的標準。其格式如下:

[時間] [主機名稱] [發生事件的程式名稱] [內文]

[時間]:表明本次事件發生的時間。
[主機名稱]:發生事件的主機名稱。
[發生事件的程式名稱]:記錄此事件的程式名稱。
[內文]:詳細描述事件的說明文字。

syslog以facility與level來區分區分事件的種類及嚴重等級,其中facility指的是那些種類的事件(如ftp、mail等類型事件),Linux系統將事件類型區分為下列幾項:

LEVEL則是用來描述事件嚴重的程度,可區分下列嚴重級別(由嚴重程度低至高):

簡單地說,log系統即是根據事件的種類再加上嚴重程度的等級來記錄相關的log,在Fedora 11系統上,系統預設使用rsyslog服務來代替傳統的syslog服務。兩者最大的差別在於,rsyslog服務可支援資料庫功能(可將產生的log匯入資料庫中,本文將不討論此類課題,請讀者自行研究),rsyslog預設的組態檔為「/etc/rsyslog.conf」,部分內容如下圖示:

上述設定表示,只要關於登入認證的相關log(level設為*,即表示所有等級的log)均須存進「/var/log/secure」中,同樣地,如果覺得不必儲存太多無關緊要的log,可利用調整level的方式,來減少log量。

例如,「authpriv.emerg /var/log/secure」,即表示只有在認證相關事件且嚴重等級為emerg以上,才會記錄在「/var/log/secure」檔案中,如此可大大減少log的資料量,但也可能錯失許多有用的資訊。

由於Fedora 11預設即安裝rsyslog軟體,因此無須另外安裝。僅須確認rsyslog程式正在運作中即可,下列指令可用來啟動或停止rsyslog:

/etc/init.d/rsyslog start?? #啟動rsyslog
/etc/init.d/rsyslog stop?? #停止rsyslog

安裝Logfmon軟體

Logfmon主要用來監控檔案的變動情況,一旦發現被監控的檔案有變動,就將變動的範圍與使用者自定義的正規表示法(Regular Expression,RE)規則比對,若比對成功(match),執行使用者自定義的指令或程式,如下頁圖示:

在Fedora 11系統中,系統預設將登入認證相關的log寫入「/var/log/secure」中,因暴力攻擊會不斷嘗試登入,所以secure檔案中會含有大量登入錯誤的log,而這些log可當成暴力攻擊的證據。同理可證,正常的登入作業也會將相關的log寫入該檔案中。因此,必須即時監控此檔案。一旦「/var/log/secure」發生變化,須利用正規表示法的條件式,立即將相關的log解析出來並儲存到其他的檔案中。

由於logfmon使用正規表示法來設定條件式,以下即簡單介紹正規表示法。由於本方案僅須模式比對即可達成要求,因此以下僅介紹模式比對。

正規表示法(Regular Expression)是利用一些含有特殊符號的字串,來描述或匹配符合某種句型的句子。左下表即說明正規表示法所使用的特殊符號。

安裝logfmon時,先到官方網站「http://sourceforge.net/projects/logfmon/」將logfmon最新版本下載回來。解壓縮後,直接使用make指令,在編譯的過程,可能會出現找不到y.tab.h的錯誤訊息。可先利用「make y.tab.c y.tab.h」指令先產生y.tab.h後,再重新使用「make && make install」將logfmon安裝到系統上。完裝完成後,設定相關的設定檔「/etc/logfmon.conf」,logfmon.conf參數意義如下表所示:

此時,在Fedora 11的系統上,相關登入的資訊,都會記錄在「/var/log/secure」,根據以往的經驗,只要電腦是公開在網際網路服務的主機。在「/var/log/secure」檔案中,通常會有大量如下圖所示的log紀錄(包含Failed password和invalid user等字眼)。若發現log中含有上述資訊,即表示有惡意的攻擊者正在使用暴力攻擊的軟體,嘗試著登入到目前的系統中。

因此可以根據樣式,設定下列相關的正規表示法的條件式,來過濾符合暴力攻擊法的log:

(.*)(Failed password)(.*)(from ) →只要列資料中含有Failed password ..from的樣式即符合條件
(.*)(invalid user)(.*)(from ) →只要列資料中含有invalid user..from的樣式即符合條件

同理,在使用者登入成功後,「/var/log/secure」檔案中會有下列的log紀錄,如下圖所示

根據此樣式,可設定下列相關正規表示法的條件式,來過濾符合登入紀錄的log:

(.*)(Accepted password for)(.*)(from )(.*) →只要列資料中含有Accepted password for..from?的樣式即符合條件

在取得相關的正規表示式後,由於希望可每日將暴力攻擊的log及登入稽核的相關log各別儲存在「/tmp/bruteforce-mmddyy」和「/tmp/auth-mmddyy」檔案中,可將下列資訊寫入至logfmon的組態檔「/etc/logfmon.conf」內,如下圖所示,以下列舉詳細說明:

1.初步過濾,log預設僅解析syslog型式的資訊。可利用logregexp來重新設定初步過濾的條件。在此使用(.*)即表示所有的字元都符合條件,亦即不使用初步過濾的功能。

2.設定欲監控的檔案,並給與secure的tag編號(後續的過濾條件即利用tag名稱來設定)。

3.過濾條件match in secure(針對tag為secure做過濾,即針對「/var/log/secure」檔案過濾)。(.*)(Accepted password)(.*)$代表只要每列的log資料含有Accepted password的字串即符合過濾條件。echo $0>>/tmp/auth-`date +%m-%d-%y`意指符合條件即將整列的log資料新增到檔名為auth-mmddyy的檔案。

設定完成後,執行logfmon,即可即時監控「/var/log/secure」檔案並將相關的log資料新增到「/tmp/auth-mmddyy」(登入相關log)或「/tmp/bruteforce-mmddyy」(暴力攻擊相關log)。

執行logfmon後如果成功的話,會發現「/tmp/」下新產生兩個log檔,一個存放暴力攻擊相關的log資訊,如下圖所示:

而另一個檔案則如下圖存於登入相關的log資訊:

安裝phplogcon

phplogcon需要含有支援PHP程式的Apache網站伺服器。在此假設使用者已安裝Apache(支援PHP功能),而且網站根目錄為「/usr/local/apache2/htdocs」。

安裝phplogcon軟體相當容易。首先至官方網站下載最新版的phplogcon,解壓縮後,執行指令「cp –rf src/ /usr/local/apache2/htdocs/」將解壓縮後的src原始檔拷貝至Web目錄上。接著執行指令「touch /usr/local/apache2/htdocs/config.php」新增config.php並設定適當的權限,並使用指令「chmod 666 /usr/local/apache2/htdocs/config.php」設定可讀寫的權限。然後,開啟瀏覽器在網址列輸入「http://<你的IP>/src」,即可根據Web的安裝步驟一步一步安裝,由於安裝相當直覺,在此僅說明部分的步驟,如下圖示。

在步驟7需選擇一個log檔案當成資料來源,上圖即是選擇「/var/log/secure」當成資料來源。當然可以選擇其他檔案,但可能會發生權限無法讀取該檔的問題,可使用指令「chmod 644 <檔案>」,將該檔權限設為可讀,如本例可使用「chmod 644 /va/log/secure」來設定該檔案的權限。

設定完成後,即可使用瀏覽器連結至「http://<你的IP>/src」來查看log的相關資訊,如下圖示:

至此已設定單一資料來源(/var/log/secure)的Web log系統,那如果也想監看如「/var/log/maillog」等的log檔案,phplogcon也可以監看多個資料來源。

可以利用編輯器如vi編輯config.php(與phplogcon同樣的目錄)來新增下列的設定:

$CFG['Sources']['Source2']['ID'] = 'Source2';? #ID 需為唯一的
$CFG['Sources']['Source2']['Name'] = 'mail Log';? #顯示在資料來源的文字
$CFG['Sources']['Source2']['ViewID'] = 'SYSLOG'; $CFG['Sources']['Source2']['SourceType'] = SOURCE_DISK;
$CFG['Sources']['Source2']['LogLineType'] = 'syslog';???? #log的格式 $CFG['Sources']['Source2']['DiskFile'] = '/var/log/maillog';? #欲監看的檔案

接著重新以瀏覽器連結網址「http://<你的IP>/src」來查看,即會發現「資料來源」多了一個選項,如下圖示。此時,就可以選擇監看不同來源的log。

結語

在本方案中,利用logfmon即時地監控相關log檔的變化,並利用正規表示法的條件設定,即時將相關的log記錄備份到其他的檔案。如此可解決log資訊繁雜性及易於消除性的問題,但畢竟以文字檔的方式,日後較難以整合分析,也許讀者可思考加入資料庫功能,將相關的log記錄匯進資料庫中,以做更有效的應用。

從另一角度思考,log一向都是給人靜態稽核的印象,也許可以用一些小技巧賦與它動態防禦的角色,以暴力攻擊法為例,可利用一些定時的檢查匯出的log檔案(如本例中的bruteforce-yymmdd),判別是否有來源IP持續地嘗試登入目前的系統,設定門檻值(如一日同樣的IP密碼錯誤不能超過50次,超過即呼叫iptables封鎖來源IP)即可中斷正在進行中的暴力攻擊。

(原載於網管人第50期)


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!