天天看點

Snort企業部署實戰

Snort企業部署實戰

1 背景

      我們知道企業網絡目前威脅來自兩個位置:一個是内部,一個是外部。來自外部的威脅都能被防火牆所阻止,但内部攻擊都不好防範。因為公司内部人員對系統了解很深且有合法通路權限,是以内部攻擊更容易成功。IDS為資訊提供保護,已經成為深度防禦政策中的重要部分。IDS與現實世界裡的防竊報警裝置類似。他們都對入侵進行監控,當發現可疑行為時,就向特定的當事人發出警報。IDS分為兩類:主機IDS(HIDS)和網絡IDS(NIDS)。HIDS安裝在受監控主機上,擁有對敏感檔案的通路特權。HIDS利用這一通路特權對異常行為進行監控。NIDS存在于網絡中,通過捕獲發往其他主機的流量來保護大量網絡設施。HIDS和NIDS都有各自的優點和缺點,完整的安全解決方案應包括這兩種IDS,對于這一點比較難做到。不了解這一領域的人常常認為IDS就像一把***,能解決所有安全問題。例如有的機關花了大筆的錢購置了商業IDS由于配置不當反而搞得練練誤報一下子就把資料庫塞滿了,大量丢包,進而崩潰。這種态度使人們以為隻要将IDS随便安放在網絡中就萬事大吉了,不必擔心任何問題,實際上遠非如此。沒有人會認為Email伺服器直接連在Internet上就能正确運作。同樣,你也需要正确的計劃IDS政策,傳感器的放置。下文以開源軟體Snort的安裝與維護為例,介紹正确地安裝和維護IDS的思路和方法。

2 安裝Snort

2.1安裝準備工作

我們在安裝前我們要知道我們需要監控的内容,理想的狀況是對一切進行監控。所有網絡裝置和任何從外部到企業的連接配接都處在Snort的監視之下。盡管這一計劃對小公司隻有幾十台機器是很可能實作的,但是當大型企業中連接配接上天台網絡裝置時,這成了難以施展的艱巨任務。為了加強snort檢測的安全性,最好能為監控網段提供獨立的智能交換機,如果你需要配置分布式的配置,可以吧伺服器和控制台接在一個交換機上,二其他傳感器放置在不同的實體位置,但這樣的成本會有所增加。Snort IDS的維護問題是無法回避的。你遲早要對Snort特征更新并編寫定制的規則,是以你還需要一個懂得維護IDS的專業人士。

2.2深入Snort

Snort包含很多可配置的内部元件,它們對誤報、漏報以及抓包和記錄日志等的性能都有很大影響。能深入了解Snort的内幕有助于有效地利用Snort監控人侵。還會幫助你根據自己的網絡定制Snort,并且避免它的一些常見缺陷。

2.2.1用Libpcap輸送Snort包

Snort沒有自己的捕包工具,它需要一個外部的捕包程式庫:libpcap。Snort利用libpcap獨立地從實體鍊路上進行捕包,它可以借助libpcap的平台為一個真正的與平台無關的應用程式。直接從網卡捕包的任務由libpcap承擔。這一捕獲原始包的工具是由底層作業系統提供給其他應用程式使用的。Snort需要資料保持原始狀态,它利用的就是原始包所有的協定頭資訊都保持完整,未被作業系統更改的特性來檢測某些形式的攻擊。由于利用libpcap擷取原始包,一次隻能處理一個包,這不是最好的方法,這也制約了它對千兆網絡進行監控的瓶頸。

2.2.2包×××

包一被收集到Snort必須對每一個具體的協定元素進行解碼。在包通過各種協定的×××時,解碼後的包資料将堆滿一個資料結構。包資料一被存人資料結構中,就會迅速被送到預處理程式和檢測引擎進行分析。 

2.2.3預處理程式

Snort的預處理分為兩類。它們可以用來針對可疑行為檢查包或者修改包以便檢測引擎能對其正确解釋。預處理的參數可以通過snort.Conf配置檔案調整。

預處理器:

 Frag2

 Stream4

 Stream4_reassemble

 Http_decode

 RPC_decode

 BO

 Telnet_decode

 ARPspoof

 ASNI_decode

 Fnord

 Conversation

 Portscan2

 SPADE

2.2.4檢測引擎

檢測引擎将流量與規則按其載人記憶體的順序依次進行比對。是Snort的一個主要部件。

2.2.5輸出插件

Snort的輸出插件接收Snort傳來的入侵資料。輸出插件的目的是将報警資料轉儲到另一種資源或檔案中。

2.2.6 Snort的性能問題

Snort有效工作的性能可能會受到以下幾種選擇的限制:硬體、作業系統和連網的元件。

對snort的性能影響最大的是snort的配置設定以及規則集設定。内部瓶頸則主要出現在包解碼階段,要snort檢查包的容,那麼它比一般的規則都要更加耗費系統資源。啟用的檢查包内容的規則越多,snort的運作就需要越多的系統資源。如果要激活預處理程式中的某些設定選項,就會需要消耗額外的系統資源。最明顯的例子就是啟用在frag2預處理程式和stream4預處理程式中的“最大存儲容量(memcap)”選項。如果您打算激活大量耗費資源的預處理程式選項,最好确定有足夠的硬體資源的支援。我曾經遇到過一個使用者花了大筆的錢購買了最先進的 IDS由于配置不當,連檢測100M網都出現了丢包現象。

1)SPAN端口監控

在監控時我們必然需要做SPAN,SPAN端口監控是另外一種在現有網絡結構中引入監控網段的方法。Cisco交換機的中高端産品都有SPAN端口或鏡像端口。Span端口既可以是一個專用端口,也可以通過該端口實作交換機上所有的端口的配置選項設定。利用SPAN端口的特點實作監控功能是一種實用的方法。使用SPAN端口監控法并不會給所要監控的網絡引入單點錯誤的問題。與網内Hub監控法相比,這是使用SPAN端口監控最大的優點。

注意:鏡像順序問題:當所監控的網絡要更新為高帶寬網絡時,可以先是隻鏡像一個端口,對snort的性能觀察一段時間,并根據需要進行調整。當snort的這個端口調整好了之後,可以切合實際的、循序漸進的增加别的端口,要注意的是,千萬不能一下子增加過多的端口。用SPAN端口監控法将會降低本生交換裝置的性能用SPAN端口會使交換裝置的記憶體負擔過重,進而使裝置的性能下降。對流量的映是一個非常耗費記憶體的過程,

2.2.7.安裝Snort 

作業系統:Red Hat Enterprise Linux 5.5 

資料庫:MySQL:mysql-5.1

Web伺服器:Apache:httpd-2.2

WEB語言:PHP:php-5.4

首先我們需要安裝MySQL 、Apache(必須安裝mod_ssl子產品) 、PHP、并進行配置Apache,其詳細安裝過程可以參見《Linux企業應用案例精解》

1)安裝主程式

#tar zxf snort-2.8.5.2.tar.gz

#cd snort-2.8.5.2

#./configure --with-mysql=/usr/local/mysql & make & make install

建立配置檔案目錄mkdir /etc/snort

建立日志目錄mkdir /var/log/snort

2)安裝snort規則

tar zxf snortrules-snapshot-2860.tar.gz

tar zxf snortrules-snapshot-CURRENT.tar.gz

mv rules/ /etc/snort

cp * /etc/snort/

修改/etc/snort/snort.conf檔案

監聽的本地網段var HOME_NET 192.168.150.0/24

有五行以output database: 開頭的行,将其“#”号去掉。

知識點:Snort規則資訊是由Sourcefire VRT(Sourcefire Vulnerability Research Team)開發和維護,Sourcefire VRT由一組研究網絡安全前沿技術的專家組成,他們時時刻刻發現、評估、處理黑客活動、入侵嘗試、惡意軟體和系統漏洞的最新型動向。

Snort規則資訊又叫Sourcefire VRT規則.

3) 建立snort資料庫

mysql> create database snort;

mysql> connect snort;

mysql> source /usr/local/src/snort-2.8.5.2/schemas/create_mysql;

mysql>grant CREATE,INSERT,SELECT,DELETE,UPDATE on snort.* to snort;

mysql>grant CREATE,INSERT,SELECT,DELETE,UPDATE on snort.* to snort@localhost;

另外有興趣的讀者可以嘗試使用phpMyadmin這一工具,phpMyAdmin是一個基于web的MySQL資料庫管理工具。它能夠建立和删除資料庫,建立/删除/修改表格,删除/編輯/新增字段,執行SQL腳本等。

2.2.8啟動snort

正确安裝并配置完成以後,下一步我們需要啟動snort

#snort -c /etc/snort/snort.conf

為了snort安全應避免用root身份運作snort,這時需要建立專用的使用者群組

#useradd snort ,如果是redhat在建立使用者的同時就建立了snort組

#snort –u snort –g snort –U –d –D –c /etc/snort/snort.conf

接下來就需要安裝Acid+Adodb+Jpgraph, ACID(Analysis Console for Incident Databases)是snort使用的标準分析員控制台軟體。ACID是一個基于PHP的分析引擎,它能夠搜尋、處理snort産生的資料庫。下面是安裝及配置過程。這一過程也非常簡單将adodb和jpgraph的tar包複制到Apache根目錄下,解開acid包後,修改acid_conf.php配置即可。注意Acid配置參數都在acid_config.php檔案裡,所有的值都必須放在雙引号内(“),而且後面要加上分号(;)必須現已SSL模式啟動Apache,定位到ACID的首頁https://IP位址/acid/,如圖1所示。

Snort企業部署實戰

圖1 ACID界面

2.2.9提高性能

如果是監控10/100M的網絡還行,如果流量過大就需要提高snort的監控性能,目前最經濟的方法是,在雙網卡上運作Snort程式,可以配置Snort來偵聽多個網卡,問題是Snort每個指令行選項(-i)隻接受一個網卡。有種在多種網卡上運作Snort的方法:

 為每個網卡運作一個獨立的Snort程序;

 通過綁定Linux核心的特征将所有的網卡綁定在一起。

用Snort監控多個網卡時選擇哪種方法取決于你的環境和優先級等多種因素。運作多個Snort程序會增大工作量,并浪費大量的無法接受的處理器時間周期。如果你有可用的資源來運作兩個或多個Snort程序,那麼你應該考慮一下資料管理問題。假設所有的Snort執行個體以同樣的方式配置,那麼同樣的攻擊會被報告多次。這會令人侵檢測系統管理者頭疼,尤其是啟用時報警的時候。當你面對不同的網卡有不同的入侵檢測需求時,為每個網卡配置設定單個Snort程是最理想的。如果你為每個網卡都配置設定了一個獨立的Snort程序,那麼你就為每個網卡建立一個類似虛拟的傳感器。在一個機器上架設幾個“傳感器”,你就可以為每個獨立的Snort程序載入不同的配置、規則和輸出插件。這最适合于獨立的Snort程序。另一方面,如果你不能這樣、或者不想為每個網卡啟用額外的Snort程序,你可以将兩個網卡綁定在一起。這樣當你啟用Snort時,就能用 -i指令選項指定個已被綁定的網卡(如bond0)。

為了實作這個目的,請編輯/etc/modules.conf,加入如下行:

alias bond0 bonding

現在,每次重新開機機器,你都需要在将IP位址資訊配置設定給網卡之後輸入下而的侖今桌漸活綁定的網卡:

ifconfig bondup

ifenslave bond0 eth0

ifenflave bond0 eth1

注意,你可将這些指令放在一個腳本裡,在系統啟動時運作該腳本。當運作Snort時,可以按如下方式使用的bond0網卡:

snort < options> -i bond0

3 維護Snort 

當你安裝好系統後就必然會對系統進行維護,或是對Snort做一些重要的改動以保持它的相關性,比如更新規則集,修改配置選項,最後更新Snort應用程式本身。如果你運作的是多個傳感器構成的分布式系統,雖然這些手工方法也是可取的,但手工修改多個傳感器就會變得相當困難,還容易出錯。

這是我們需要管理助手SnortCenter,它是一款基于Web方式更新和維護Snort配置的管理應用軟體。是一款用于遠端管理Snort傳感器的應用軟體。它用的是PHP/MySQL Web界面,安裝完成啟動界面如圖2所示。

Snort企業部署實戰

圖2 SnortCenter 界面

特征:

l snort背景程序狀态螢幕;

l 遠端snort停止/啟動/重新開機;

l snortcenter使用者的通路控制;

l 傳感器組。

l ACID內建;

SnortCenter包括基于PHP的管理應用軟體和SnortCenter代理。SnortCenter管理控制台安裝在Snort伺服器上,而SnortCenter傳感器代理被安裝在所管理的傳感器中。SnortCenter增強了可能安裝在分布式系統上的Snort,伺服器端需要如下的軟體包:

l MySQL;

l Apache;

l PHP;

l ADODB;

l OpenSSL;

l cURL

這裡,除了cURL軟體包,其他的軟體包應該都是大家比較熟悉的,因為絕大多數的作業系統都包括這些軟體包,SnortCenter管理控制台可運作在Windows、Linux和BSD系統上。SnortCenter傳感器代理需要安裝在基于UNIX作業系統的Perl上。該代理在一些附加的預編譯程式幫助下可以運作在基于Windows的傳感器上。

3.1 SnortCenter的安裝

前提是要安裝并配置好Acid,是以你應該預先在作為Snort伺服器的機器上安裝MySQL,Apache,PHP,ADODB和OpenSSL。你可以将SnortCenter安裝在Linux系統上了。

3.1.1 SnortCenter管理控制台

在安裝SnortCenter之前惟一還需要安裝的軟體包是cURL,這是一個不需要使用者幹涉通過URL傳輸檔案的指令行工具,它用于管理和控制Snort傳感器。你可以通過如下指令行檢查在Red Hat上是否安裝了該軟體包:

Rpm -qa | grep curl

該指令行将會查詢包含了curl字元串的軟體包,如果你沒有安裝cURL,可以去網上下載下傳。

下一步在WEB根目錄下建立snortcenter目錄,将下載下傳檔案包解壓到這個目錄裡,然後就通過配置config.php檔案來配置SnortCenter 。

對于這個配置檔案需要說明的有以下幾點:

l DBlib_path設定Adodb庫的位置。

l url_path該變量應設為cURL可執行檔案的位置。

l DBtype這裡設定你所安裝的資料庫的類型

l DB_dbname這是你在下一步中要建立的SnortCenter資料庫名

l DB_host DB_host是Snort伺服器的主機名。如果SnortCenter管理控制台和資料庫安裝在同一台計算機上,應将該參數設為localhost;

l DB_user SnortCenter登入資料庫所用的帳号。

l DB_ password資料庫—使用者的密碼;

l DB_ port DB_ port是資料庫運作的端口号。

儲存修改并關閉config.php,下一個任務是建立DB_dbname變量指定的資料庫,首先需要登入MysqL資料庫,然後建立SnortCenter資料庫,指令如下:

>create database snortcenter;

建立好資料庫之後,在Web浏覽器中就可以看到SnortCenter管理控制台(位址為https: //localhost/snortcenter)了。這裡建立了SnortCenter需要的所有表。你也可以用位于tarball的snortcenter db.Mysql腳本建立它們。這就完成了SnortCenter管理控制台部分的安裝。第一次登入時,你需修改使用者名admin和密碼。

3.1.2安裝SnortCenter傳感器代理

要完成SnortCenter的安裝,還需在你想用SnortCenter管理的傳感器上安裝SnortCenter傳感器代理。安裝基于UNIX的代理需要Perl、OpenSSL和Perl子產品Net::SSLeay。前面我們已經在傳感器上安裝了OpenSSL和Perl,現在隻需要進行Net::SSLeay子產品的安裝。你可以在網址http://search.cpan.org下載下傳該子產品。

下載下傳并安裝Net::SSLeay,首先在源目錄下執行下列指令:

Perl Makefile.pl

Make install

安裝好Net::SSLeay子產品後,需建立SnortCenter傳感器代理所用的目錄,即建立下列目錄:

l 程式目錄:/usr/local/snortcenter

l 配置目錄:/usr/local/snortcenter/conf

l 日志目錄:/usrAocal/snortcenter/log

l 政策目錄:/usr/local/snortcenter/rules

接着,你還需為SnortCenter建立一個SSL證書。用下面的指令行建立它:

#openssl req -new -x509 -days 365 -nodes -out snortcenter.pem -keyout snortcenter. pem

将snortcenter.pem檔案複制到/usr/local/snortcenter/conf目錄下。現在你就可以準備安裝SnortCenter傳感器代理了,在http://users.pandora.be/larc/download/下載下傳合适的版本。

将檔案解壓并移動到/usr/local/snortcenter/目錄下。運作安裝的shell腳本: