Open Source Netflow sFlow 流量 分析 攻擊 駭客 安全

結合sFlow與Snort建置自動化檢查及告警系統(上)

2012-04-17
之前曾經介紹過如何運用Netflow來找出網路裡的嫌疑犯,但對於忙碌的網管人而言,要一筆一筆去檢查使用者是否有異常行為,不僅浪費人力,更會犧牲寶貴的時間。其實,結合sFlow與Snort來自動抓出惡意的網路行為,就可以讓這些檢查動作自動化。
在本篇文章中,將介紹如何結合sFlow與Snort自動抓出惡意的網路行為,並且自動發出告警信來通知管理者,以減少人力的負擔。

首先先介紹sFlow。sFlow和Netflow聽起來很相似,但在骨子裡卻不一樣。Netflow會針對所有流經的網路封包去取得其特徵,包含Source IP address、Destination IP address、Source port for UDP or TCP, 0 for other protocols、Destination port for UDP or TCP, type and code for ICMP, or 0 for other protocols、IP protocol、Ingress interface (SNMP ifIndex)、IP Type of Service這些資訊。

由於Netflow會對所有流經的封包進行處理,若網路流量極大時,Netflow所提供的資料量亦會隨之增加,若資料量太大,後端分析引擎可能會不堪負荷,進而影響資料判讀時的正確性。

sFlow的作法和Netflow不同,sFlow以取樣的方式取出資料的摘要,使用者可以自訂其取樣大小及取樣週期,即使流經大量網路流量,但sFlow經取樣後的資料相對於Netflow而言會大量的減少,如此一來就可以兼顧資料正確性並確保後端分析引擎處理能力。

在實務上,sFlow較常運用於高速網路的環境,也是因為其具有此特性的關係。sFlow提供的資料格式在之後實作的階段會加以展示,在此不多作說明。

在實作時,會遭遇到許多的困難,這是因為sFlow僅在部分設備上提供,也不像Netflow,在Linux中可使用nfdump套件來產生符合其格式的流量。

在幾經研究後,於「http://www.sflow.org/products/network.php」網頁內找到相關線索,可以使用Open vSwitch來產生sFlow流量,因此之後的安裝流程會先示範如何安裝Open vSwitch,並產生sFlow流量。


安裝Open vSwitchx

本文的安裝環境為使用Linux Ubuntu 11.10 Server版本,Apache及MySQL在安裝Linux時已預先安裝。由於必須自行編譯(Compile)程式,因此先安裝build套件:


之後,到Open vSwitch網站(http://openvswitch.org/)下載原始程式。


下載後將之解壓縮,並加以編譯再進行安裝,在編譯過程中指定--with-linux參數以產生Kernel Module,以便載入Kernel中執行。在此使用的是最新版本1.3.0。


接著,將剛編譯產生的Kernel Module置入(Insert)Kernel中,若原先有安裝bridge模組,記得先將之rmmod(刪除模組)。


之後開始建立Open vSwitch的db檔。此步驟只須執行一次,之後若伺服器(Server)重開機,也不需要重新執行此步驟。


隨後啟動ovsdb-server,manager_options是ovs-vswitchd.conf.db檔中的column名稱,可能會隨著版本而改變,例如在1.1版本為managers。請注意,以下的步驟若碰到伺服器重開機,就必須重新執行。建議將之存檔為shell script檔,並於開機後執行。


然後,初始化資料庫。


接著就可以啟動ovs-vswitchd daemon,正常會如圖1所示:



▲圖1 ovs-vswitchd正常啟動後的情形。

然後,開始建立虛擬交換(Virtual Switch)。先產生一個br0的介面,並將之喚醒:


接著,將eth1及eth2加入br0的群組中。


可以執行下列的指令來確認是否有建立br0的群組:


也可以列出br0由哪些實體介面組成:


最後,再確認一下eth1和eth2都是屬於br0群組。


這個時候,便可測試一下Open vSwitch的輸出。分別在eth1和eth2介接設備,各自設定成192.168.1.1及192.168.1.2的網路位址,並且做傳檔測試。然後,使用tcpdump來觀察eth1的輸出,此時輸出如圖2所示。


▲圖2 Open vSwitch的輸出。

從圖2中可以看到流量相關的資訊,例如IP、MAC、IPSize、headerLen、vlan等。此時尚未產生sFlow格式的輸出,讀者可將此圖2和產生sFlow後的圖5做一個比較。

產生sFlow流量

接著到了重頭戲:sFlow的產生。在此建立一個Shell Script檔,以方便後續管理及維護,其內容如下:


由於這裡要透過本機來接收sFlow的封包,因此將AGENT_IP所屬的介面指定為lo,並指定Collector的IP為127.0.0.1,Port為UDP 6343,指定其每10秒Pooling一次,並指定取樣頻率(Sample Rate)為64(每隔64個Packet就取樣一次),之後再執行這個Script檔(記得執行chmod +x),讓br0可以送出sFlow records。

可以利用以下的指令查看剛剛的設定是否成功:


輸出結果如圖3所示,從中可以看出agent是lo,此外還有header長度、polling週期,取樣率及輸出目的等資訊,此外uuid也是一個觀察的重點。


▲圖3 sFlow輸出設定。

接著透過tcpdum指令來驗證是否可從lo介面收到sFlow records。圖4是得到的tcpdump輸出,可以驗證有收到sFlow封包。



▲圖4 tcpdump輸出結果。

隨後開始製造流量,讓它流經eth1和eth2,並利用tcpdump觀察其資料格式(圖5)。


▲圖5 sFlow record的輸出。

由此可以看出,sFlow的輸出字串和一般熟知的SNMP MIB的格式及命名方式相當接近。此外,也可以看出每一個sFlow是由Datagram開始的,中間有數個Sample,最後再由DataGram結束。中間Sample出現次數,端看當初取樣的頻率而定。

接著下載sflowTools,將sFlow的輸出轉化為tcpdump格式,以方便Snort處理。sflowtool的官方網頁為「http://www.inmon.com/technology/sflowTools.php」,讀者可自行參閱。

緊接著,切換至「/usr/src」目錄,並下載sflowtool原始檔。


將原始檔解壓縮,並編譯及安裝。


暫時不啟動sflowtool,待Snort安裝完成後再一併啟用。接著,動手安裝Snort。

安裝Snort

在Ubuntu 11.10的環境下,安裝Snort是很輕鬆的。若之後要自行更新rule檔,請自行到Snort官方網站註冊帳號並下載更新。


在安裝過程中會詢問所要監控的網段,在此可以任意輸入。之後可以編輯「/etc/snort/snort.debian.conf」檔案再做調整。

在本文中所規劃的是結合Snort與sFlow,因此無須特別指定其網段。安裝完成後,Snort已經自行啟動,記得將它關閉。


為了保險起見,避免重開機時Snort再次被啟動,所以把Snort的啟動程式移到「/root」目錄中。


此時就可以啟動sflottool,並將它的輸出作為Snort的輸入,指令如下:


-p 6343代表sflowtool接受UDP port 6343的輸入,-t代表以Binary檔的方式輸出符合tcpdump的格式,並且將之作為Snort的輸入,而Snort讀取「/etc/snort/snort.conf」之後啟動。

在此操作過程中,發現community-virus.rules這個檔案有兩行需要修改,因此須編輯「/etc/snort/rules/community-virus.rules」這個檔案。並在第19行及20行的最前面加上#號。以下為啟動Snort時的錯誤訊息:


接著,將要觀察的流量來源接在eth1(以Mirror Port的方式收集對外網路的流量)。開始做側錄之後,在「/var/log/snort」目錄內會有log檔案產生,產生的檔案會以「/etc/snort/snort.conf」檔案中所設定的格式輸出。預設會有alert及tcpdump.log. 1324615511(後面的數字是以Timestamp格式呈現)的檔案產生,如圖6所示。


▲圖6 成功啟動Snort後所儲存的log檔。

確定alert及tcpdump檔產生之後,可以看一下alert檔的內容,如圖7所示。


▲圖7 alert的內容。

在此alert檔案中,可以看出這是屬於SNMP public access的封包,可能是有電腦或設備嘗試用public這個Community去存取其他設備,這是中毒或被植入後門的徵兆之一。

讀者若有興趣的話,可以點擊Xref裡面的連結,會有相當豐富的說明。例如點擊「http://cve.mitre.org/cgi-bin/cvename.cgi?name=2002-0013」,將會告知這可能是基於SNMP version 1的漏洞,它用大量的SNMP request試圖去癱瘓設備,藉以取得權限。

除了CVE的連結外,Snort也提供其他知名網站的連結,例如SecurityFocus,它告知這可能是Multiple Vendor SNMP Trap Handling Vulnerabilities。

同樣一個訊息,各大資安網站可能都會有屬於自己的解讀,同一個網站也可能有不同的連結可以參考,例如CVE提供了2002-0013、2002-0012、1999-0514的連結供參考。不妨多方嘗試,並且觀察不同網站提供的訊息,多方比較,藉以找出可能的真正原因。

結語

本文簡單介紹了sFlow,並以簡單的例子示範如何結合sFlow與Snort自動解析(Parser)所有的流量,試圖以自動化的方式揪出可疑的IP來源,並且找出可能是惡意的攻擊或是病毒及蠕蟲的資訊。

本文的另一個重點是Snorby,Snorby是Snort的圖形化前台程式,它把Snort的log檔以圖形化的介面展現出來,減少使用者在使用和管理時的負擔,但是其安裝過程相較於一般人熟知的Acid Base而言,相當的困難及繁瑣,因此將Snorby安裝設定及教學的部分獨立於下一個章節介紹,若讀者有興趣的話,屆時不要忘記跟著把好看又好用的Snorby也架設起來,以達到節省人力並輕鬆做好網路管理的目標。


追蹤我們Featrue us

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

我知道了!