基于snort、barnyard2和base的 网络入侵检测系统的部署与应用
1、項目分析
1.1、項目背景
伴隨著互聯(lián)網產業(yè)的不迅猛發(fā)展,新興技術層數(shù)不窮,互聯(lián)網通訊技術逐漸成為了各行各業(yè)不可替代的基礎設施,越來越多的業(yè)務都是依靠互聯(lián)網來得以實現(xiàn)。隨著我國科技產業(yè)的飛速發(fā)展,很多過去無法想象的事物變成了現(xiàn)實,由計算機衍生的人工智能等一系列高新技術,以不可阻擋的勢頭影響著人們的生活,這一切的一切都離不開互聯(lián)網的支撐,人們享受網絡帶來的便捷與暢快的同時,也不得不面對網絡入侵者對網絡安全所帶來的威脅,近些年網絡飛速發(fā)展的同時,信息安全問題也顯得日益突出,人們對隱私保護的意識逐漸增強,因此計算機網絡安全問題日益成為了社會各界所關注的熱點。擁有一個完備可靠的網絡安全攻防系統(tǒng)以是個人、企業(yè)乃至國家所不懈追尋的目標。
1.2、需求分析
在互聯(lián)網飛速發(fā)展的當下社會,信息安全問題尤為突出,任何試圖破壞網絡活動正常化的事件都可成為網絡安全問題。在網絡安全問題產生的早期,人們通常使用的方法就是防火墻,但隨著網絡攻擊技術手段的不斷提升,傳統(tǒng)的防火墻作為一種被動的防御性網絡安全工具,已經不足以防御新型的網絡攻擊。這種情況下逐漸誕生了網絡入侵檢測系統(tǒng),入侵檢測系統(tǒng)不僅能夠為網絡安全提供及時的入侵檢測以及采取響應防護手段,還可以正確識別針對計算機網絡的惡意行為,并為此做出響應和防護機制。它提供對系統(tǒng)內部攻擊和外部攻擊以及錯誤操作的實時防護,能夠自主的應對網絡攻擊,良好的彌補了傳統(tǒng)防火墻的不足,有效的完善了網絡安全的防護機制,入侵檢測及時做一種防御手段,已經成為網絡安全體系的重要組成部分。因此掌握網絡入侵檢測系統(tǒng)的部署與應用以是計算機從業(yè)人員不可缺少的知識技能。
1.3、Snort體系分析
IDS是計算機的入侵監(jiān)視系統(tǒng),它通過實時的監(jiān)視,對異常的網絡行為發(fā)出警報。入侵檢測系統(tǒng)大致可分為兩大類,信息來源一類是基于主機IDS的基于網絡的IDS,檢測方法一類是針對異常入侵檢測和誤用的入侵檢測。Snort
IDS(入侵檢測系統(tǒng))既是一個強大的網絡入侵檢測系統(tǒng)。它具有實時數(shù)據(jù)流量分析和記錄IP數(shù)據(jù)網絡數(shù)據(jù)包的能力,能夠進行協(xié)議分析,對數(shù)據(jù)包內容進行識別,檢測不同的攻擊方式,對攻擊進行實時監(jiān)控和報警。此外,Snort是一個開源的入侵檢測系統(tǒng),具有很好的移植性和可擴展性。Barnyard2作為IDS的前端工具,主要應用是讀取sonrt產生的數(shù)據(jù)并存儲到數(shù)據(jù)庫中,同時base的頁面變化,來測試應用成果與否。
Snort結構由四大模塊組成,分別是:
數(shù)據(jù)包嗅探模塊,負責監(jiān)聽網絡數(shù)據(jù)包,對網絡進行分析。
預處理模塊,用相應的插件來檢查原始的數(shù)據(jù)包,數(shù)據(jù)包預處理后傳送到檢測引擎。
檢測模塊,是Snort的核心模塊;檢測引擎根據(jù)預先設置的規(guī)則檢測數(shù)據(jù)包,一旦發(fā)現(xiàn)規(guī)則匹配,就通知警報模塊。
警報/日志模塊,經過檢測引擎檢測后數(shù)據(jù)輸出。如果出現(xiàn)異常則會發(fā)出報警
1.4、Snort三種工作模式
偵測模式:snort將在現(xiàn)有的網域內獲取數(shù)據(jù)包,并顯示在屏幕上。
數(shù)據(jù)包記錄模式:snort將已截取的數(shù)據(jù)包存入存儲硬盤中。
上線模式:snort可對截取到的數(shù)據(jù)包做分析的動作,并根據(jù)一定的規(guī)則來判斷是否有網絡攻擊行為的出現(xiàn)。
2、概要設計
2.1、Snort功能介紹
Snort擁有三大基本功能:嗅探器,數(shù)據(jù)包記錄和入侵檢測。嗅探器模式從網絡上讀取數(shù)據(jù)包并作為連續(xù)不斷的數(shù)據(jù)流顯示在終端。數(shù)據(jù)包記錄器模式是把數(shù)據(jù)包記錄到硬盤上。網絡入侵檢測模式可配置使snort分析網絡數(shù)據(jù)流以匹配用戶定義的一些規(guī)則,并根據(jù)檢測結果采取一定的措施。
2.2、入侵檢測模塊分析
snort是一套開源的網絡入侵預防與網絡入侵檢測軟件。使用了以偵測簽名與通信協(xié)議的偵測方法。數(shù)據(jù)嗅探是基于Libpcap開發(fā)而成,Libpcap是一個跨平臺的報文抓取程序。數(shù)據(jù)嗅探器將網卡獲取的數(shù)據(jù)送入上層預處理組件進行處理。
預處理器介于檢測引擎和數(shù)據(jù)包嗅探器之間,主要功能有包重組、解碼協(xié)議和異常檢測,負責對數(shù)據(jù)包的進行預先處理。作為入侵檢測系統(tǒng),它能夠對網絡中數(shù)據(jù)包片段編排與組裝,還原原始的數(shù)據(jù)內容。因此預處理器對安全威脅的檢測和識別非常重要。
檢測引擎是Snort的核心部分,其中負責規(guī)則處理的規(guī)則庫是檢測引擎的重要組件,規(guī)則處理模塊主要負責規(guī)則的解析和規(guī)則檢測。檢測引擎通過讀取規(guī)則文件把規(guī)則鏈中,再與數(shù)據(jù)包進行對比,檢測判定是否存在安全威脅,并做出響應的處理,如:警報、記錄或者忽略等。針對大流量的數(shù)據(jù)中心存在系統(tǒng)檢測處理數(shù)據(jù)丟失等情況,這就表示在大規(guī)模的網絡應用中,對引擎算法的優(yōu)化和改進,有著相當大的必要。
從本質上說,Snort與tcpdump和snoop一樣,都是網絡數(shù)據(jù)包嗅探器。因此,嗅探器模式是Snort工作的基本模式。只要運行Snort時不加載規(guī)則,它就可以從網絡上讀取數(shù)據(jù)包并連續(xù)不斷地顯示在屏幕上。這時,Snort將顯示統(tǒng)計信息。Snort使用Libpcap網絡驅動庫。在這種模式下,Snort將網卡設置為混在模式,讀取并解析共享信道中的網絡數(shù)據(jù)包。在嗅探模式下,Snort也可以將這些信息記錄到日志文件中。這些文件隨后可以用Snort或者tcpdump查看。這種模式的用戶并非很大,因為現(xiàn)在很多可以記錄包的工具了。在這種模式下并不需要snort.conf配置文件。
入侵模式需要載入規(guī)則庫才能工作。在入侵模式下,Snort并不記錄所有捕獲的包,而是將包與規(guī)則對比,僅當包與某個規(guī)則匹配的時候,才會記錄日志或產生報警。如果包并不與任何一個規(guī)則匹配,那么它將會被悄悄丟棄,并不做任何記錄。運行Snort的入侵檢測模式的時候,通常會在命令行指定一個配置文件。
2.3、Snort工作流程分析
Snort在進入工作模式之前,首先要對其進行基礎設置,對結構組件進行初始化配置,根據(jù)規(guī)則文件生成相應的規(guī)則鏈表。通過調用Libpcap提供的數(shù)據(jù)函數(shù)抓取數(shù)據(jù)包,對數(shù)據(jù)進行預處理,sonrt調用完了協(xié)議的解析函數(shù),對數(shù)據(jù)包進行分層解析,從數(shù)據(jù)包中提取有效的檢測信息,然后將解析的數(shù)據(jù)轉存。由snort將解析結果和已知的規(guī)則進行比較,判斷是否存在入侵行為,當相匹配時則判定存在網絡安全問題,向管理員發(fā)出警報。如果不存在安全問題則直接通過。
Snort,對每個被檢測的數(shù)據(jù)包都定義了如下的三種處理方式alert(發(fā)送報警信息)Log(記錄該數(shù)據(jù)包),Pass(忽略該數(shù)據(jù))。這些處理方式其實是具體定義,在檢測規(guī)則中的,具體的完成是在日志或者報警子系統(tǒng)中。日志子系統(tǒng)允許將嗅探器,收集到的信息,以可讀的格式或者tcpdump格式記錄下來。
此外,Snort有兩種輸出方式,即日志和告警,輸出結果時,snort會按常規(guī)規(guī)則或預處理規(guī)則直接指定輸出類型。
2.4、ADODB功能分析
adodb是一種兼容各類數(shù)據(jù)庫應用程序的接口(API),各種數(shù)據(jù)庫都可以,MySQL、Informix、Oracle,MS
SQL
7、Foxpro、Access,ADO、Sybase、FrontBase、DB2等,不論后端是何種數(shù)據(jù)庫,存取數(shù)據(jù)的方式都是一致的,adodb作為一種PHP存取數(shù)據(jù)庫的中間函數(shù)組件,在本次項目種擔負著橋梁的責任。
2.5、snort組件分析
barnyard2是一個snort組件,通過與數(shù)據(jù)庫相聯(lián)系,用于數(shù)據(jù)的調取與存放。daq、libdnet、libpcap都是snort的安裝組件,需要編譯后配合snort使用。snortrules-snapshot是snort的規(guī)則匹配庫,主要功能就是用于數(shù)據(jù)的比對與識別判斷依據(jù)。base則是用于前端頁面數(shù)據(jù)的顯示。
2.4、安裝準備
工作環(huán)境
| 名稱 | 版本 |
|---|---|
| VMware Workstation Pro | 15 |
| MobaXterm | 10.4 |
| Centos | 6.7 |
| Mysql | 5.7 |
| adodb | 5.20.9 |
| barnyard2 | 1.9 |
| base | 1.4.5 |
| daq | 2.0.5 |
| libdnet | 1.12 |
| libpcap | 1.9.0 |
| snort | 2.9.9.0 |
| snortrules-snapshot | 2990 |
3、詳細設計
本次項目設計是基于centos6.7操作系統(tǒng),在系統(tǒng)上進行snort、barnyard2以及base的總體搭建,其中snort是主要部分,Barnyard2的作用是讀取snort產生的二進制事件文件并存儲到MySQL。同時根據(jù)base頁面的變化,來測試是否成功。
3.1、準備工作
安裝Centos6.7.iso鏡像到虛擬機,配置網絡設置確保連接互聯(lián)網。
3.1.1、安裝wget
3.1.2、更新yum源
# wget -O /etc/yum.repos.d/CentOS-Base.repo
http://mirrors.aliyun.com/repo/Centos-6.repo
# yum clean all
# yum makecache
3.1.3、安裝epel源
#yum install -y epel-release
3.1.4、下載安裝配置文件
3.2、安裝配置LMAP
3.2.1、安裝LAMP組件
# yum install -y httpd mysql-server php php-mysql php-mbstring php-mcrypt
mysql-devel php-gd
3.2.2、安裝php插件
#yum install -y mcrypt libmcrypt libmcrypt-devel
修改vim /etc/php.ini
error_reporting = E_ALL & ~E_NOTICE
3.2.3、安裝pear插件
# yum install -y php-pear
# pear upgrade pear
# pear channel-update pear.php.net
# pear install mail
# pear install Image_Graph-alpha Image_Canvas-alpha Image_Color Numbers_Roman
# pear install mail_mime
3.2.4、安裝adodb
# tar -zxvf adodb-5.20.9.tar.gz -C /var/www/html
# mv /var/www/html/adodb5 /var/www/html/adodb
3.2.5、安裝base
# tar -zxvf base-1.4.5.tar.gz -C /var/www/html/
# mv /var/www/html/base-1.4.5 /var/www/html/base
3.2.6、設置目錄權限
# chown -R apache:apache /var/www/html
# chmod 755 /var/www/html/adodb
3.2.7、配置mysql
解壓barnyard2(使用文件創(chuàng)建數(shù)據(jù)庫表)
# tar -zxvf barnyard2-1.9.tar.gz
啟動mysql
# service mysqld start
設置root密碼為123456
# mysqladmin -u root password 123456
# mysql -uroot -p123456
創(chuàng)建snort的數(shù)據(jù)庫,創(chuàng)建名為snort、密碼為123456的數(shù)據(jù)庫用戶并賦予名為snort數(shù)據(jù)庫權限。
mysql>create database snort;
mysql>grant create,select,update,insert,delete on snort.* to snort@localhost
identified by '123456';
退出數(shù)據(jù)庫,導入創(chuàng)建數(shù)據(jù)庫表。
# mysql -uroot -p123456 -D snort <
/root/test/barnyard2-1.9/schemas/create_mysql
3.3、配置base
# service mysqld start 啟動mysql
# service httpd start 啟動apache
# service iptables stop 關閉iptables
用瀏覽器打開http://192.168.60.180/base
點擊Continue,進入配置頁面,選擇顯示語言,設置adodb路徑。
點擊下一步,配置數(shù)據(jù)庫。
點擊下一步,自行配置用戶名和密碼,這里我設置為admin:admin
點擊繼續(xù)進入,再點擊“Create BASE AG”
如果顯示Successfully created的字樣則說明是成功了,點擊“step 5”
如此即說明安裝成功。
3.4、安裝配置snort
3.4.1、安裝依賴包
# yum install –y gcc flex bison zlib libpcap tcpdump gcc-c++ pcre* zlib*
libdnet libdnet-devel
3.4.2、安裝libdnet
# tar -zxvf libdnet-1.12.tgz
# cd libdnet-1.12
對libdnet進行編譯到/usr/local目錄
# ./configure && make && make install
3.4.3、安裝libcap
# tar -zxvf libpcap-1.9.0.tar.gz
# cd libpcap-1.9.0
# ./configure && make && make install
移動到/usr/local目錄下進行編譯
3.4.4、安裝DAQ
# tar -zxvf daq-2.0.5.tar.gz
# cd daq-2.0.5
# ./configure && make && make install
移動到/usr/local目錄下進行編譯
3.4.5、安裝snort
# tar -zxvf snort-2.9.9.0.tar.gz
# cd snort-2.9.9.0
# ./configure && make && make install
移動到/usr/local目錄下進行編譯
3.4.6、配置snort
首先創(chuàng)建文件目錄
# mkdir /etc/snort
# mkdir /var/log/snort
# mkdir /usr/local/lib/snort_dynamicrules
# mkdir /etc/snort/rules
# touch
/etc/snort/rules/white_list.rules /etc/snort/rules/black_list.rules
# cd /usr/local/snort-2.9.9.0
# cp gen-msg.map threshold.conf classification.config reference.config
unicode.map snort.conf /etc/snort
編輯配置文件
# vim /etc/snort/snort.conf
修改路徑
var RULE_PATH /etc/snort/rules
var SO_RULE_PATH /etc/snort/so_rules
var PREPROC_RULE_PATH /etc/snort/preproc_rules
var WHITE_LIST_PATH /etc/snort/rules
var BLACK_LIST_PATH /etc/snort/rules
設置日志目錄
config logdir: /var/log/snort
配置輸出插件
output unified2: filename snortlog, limit 128
3.4.7、配置規(guī)則庫
# tar -zxvf snortrules-snapshot-2990.tar.gz -C /etc/snort/
# cp /etc/snort/etc/sid-msg.map /etc/snort/
3.5、安裝barnyard2
# mv barnyard2-1.9 /usr/local
# ./configure --with-mysql --with-mysql-libraries=/usr/lib64/mysql/
# make && make install
3.5.1、配置barnyard2
創(chuàng)建文件目錄
# mkdir /var/log/barnyard2
# touch /var/log/snort/barnyard2.waldo
# cp /usr/local/barnyard2-1.9/etc/barnyard2.conf /etc/snort/
修改配置文件
# vi /etc/snort/barnyard2.conf
config logdir: /var/log/barnyard2
config logdir:/var/log/barnyard2
config hostname:localhost
config interface:eth0
config waldo_file:/var/log/snort/barnyard.waldo
output database: log, mysql, user=snort password=123456 dbname=snort
host=localhost
4、部署測試
4.1、測試snort
參數(shù)注解:
-T 指定啟動模式:測試
-i 指定網絡接口:eth0
-c 指定配置文件:/etc/snort/snort.conf
# snort -T -i eth0 -c /etc/snort/snort.conf
如此則測試成功。
4.2、測試barnyard2
參數(shù)注解:
-c 指定配置文件:/etc/snort/barnyard2.conf
-d 指定Log目錄:/var/log/snort
-f 指定Log文件:snort.log
-w 指定waldo文件:/var/log/snort/barnyard2.waldo
#barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort -f snort.log -w
/var/log/snort/barnyard2.waldo
如此即說明安裝成功,ctrl+c終止程序。
4.3、測試IDS
首先確保:httpd開啟,iptables關閉,mysql開啟。
# service httpd start
# service iptables stop
# service mysqld start
4.3.1、添加測試規(guī)則
#vim /etc/snort/rules/local.rules
添加一條檢查ping包的規(guī)則
alert icmp any any -> any any (msg: "IcmP Packet detected";sid:1000001;)
規(guī)則解釋:
4.3.2、測試運行
配置好后,我們依次啟動:-D為后臺運行
# barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort -f snort.log -w
/var/log/snort/barnyard2.waldo -D
# snort -D -T -i eth0 -c /etc/snort/snort.conf
同時我們使用主機ping測試虛擬機。
# ping 192.168.60.180 -t
當IDS命令執(zhí)行完畢后,用主機瀏覽器訪問base安全分析引擎頁面。
http://192.168.60.180/base
可以看到有檢測到IP數(shù)據(jù)。
4.3、配置IDS啟動腳本
# chmod 755 startids.sh
#!/bin/bash
echo
"*********************正在啟動服務************************"
barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort -f snort.log -w
/var/log/snort/barnyard2.waldo -D
snort -D -c /etc/snort/snort.conf -i eth0
echo
"*********************正在啟動完成************************"
4.4、啟動IDS
# service mysqld start 啟動mysql
# service httpd start 啟動apache
# service iptables stop 關閉防火墻
使用腳本啟動IDS:
手動啟動IDS:
#barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort -f snort.log -w
/var/log/snort/barnyard2.waldo -D
#snort –D -c /etc/snort/snort.conf -i eth0
4.5、測試IDS
使用ping命令向IDS所在IP發(fā)送數(shù)據(jù)包,base頁面會出現(xiàn)ICMP警告。
可以看到,在連續(xù)不斷的ping目標IP的情況下,基本安全分析引擎BASE就會源源不斷的收到數(shù)據(jù)包警報數(shù)據(jù),我們還可以對某個特定的數(shù)據(jù)包進行分析和查看。
接下來對TCP和UDP進行測試,首先添加規(guī)則到local.rules中。
# vim /etc/snort/rules/local.rules
在網站根目錄下添加一個自定義網頁。
使用另外一個臺機器訪問此網頁。
再打開安全分析引擎BASE主頁面,發(fā)現(xiàn)TCP和UDP已經有了數(shù)據(jù)。
下一步跟進數(shù)據(jù),可以看到協(xié)議類型等信息。
通過IP分析,可以清晰的看到IP間的通訊情況。
最后我們使用namp對端口進行掃面查看安全引擎的檢測情況。
首先對snort進行簡單配置。
# vim /etc/snort/snort.conf
修改此處配置信息
# preprocessor sfportscan: proto { all } memcap { 10000000 } sense_level { high
}
將如下注釋去掉
# include $PREPROC_RULE_PATH/preprocessor.rules
# include $PREPROC_RULE_PATH/decoder.rules
# include $PREPROC_RULE_PATH/sensitive-data.rules
首先看到BASE的端口掃描通信區(qū)域沒有顯示。
接下來使用使用Kali中的nmap命令對目標IP進行掃描。
同時打開BASE主頁面,發(fā)現(xiàn)流量監(jiān)控數(shù)據(jù)同步顯示。
打開端口掃描通信查看詳細信息。
可以看到掃描流量的詳細信息。
自此,snort測試工作成功,可以上線運行。
4.6、停止IDS服務
可以使用已經配置好的腳本停止IDS。
也可以手動停止服務。
killall -9 snort barnyard2
總結
以上是生活随笔為你收集整理的基于snort、barnyard2和base的 网络入侵检测系统的部署与应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BZOJ3448 : [Usaco201
- 下一篇: Java8对list集合进行排序、过滤、