1、項目分析
1.1、項目背景
伴隨着互聯網產業的不迅猛發展,新興技術層數不窮,互聯網通訊技術逐漸成為了各行各業不可替代的基礎設施,越來越多的業務都是依靠互聯網來得以實現。隨着我國科技產業的飛速發展,很多過去無法想象的事物變成了現實,由計算機衍生的人工智能等一系列高新技術,以不可阻擋的勢頭影響着人們的生活,這一切的一切都離不開互聯網的支撐,人們享受網絡帶來的便捷與暢快的同時,也不得不面對網絡入侵者對網絡安全所帶來的威脅,近些年網絡飛速發展的同時,信息安全問題也顯得日益突出,人們對隱私保護的意識逐漸增強,因此計算機網絡安全問題日益成為了社會各界所關注的熱點。擁有一個完備可靠的網絡安全攻防系統以是個人、企業乃至國家所不懈追尋的目標。
1.2、需求分析
在互聯網飛速發展的當下社會,信息安全問題尤為突出,任何試圖破壞網絡活動正常化的事件都可成為網絡安全問題。在網絡安全問題產生的早期,人們通常使用的方法就是防火牆,但隨着網絡攻擊技術手段的不斷提升,傳統的防火牆作為一種被動的防御性網絡安全工具,已經不足以防御新型的網絡攻擊。這種情況下逐漸誕生了網絡入侵檢測系統,入侵檢測系統不僅能夠為網絡安全提供及時的入侵檢測以及采取響應防護手段,還可以正確識別針對計算機網絡的惡意行為,並為此做出響應和防護機制。它提供對系統內部攻擊和外部攻擊以及錯誤操作的實時防護,能夠自主的應對網絡攻擊,良好的彌補了傳統防火牆的不足,有效的完善了網絡安全的防護機制,入侵檢測及時做一種防御手段,已經成為網絡安全體系的重要組成部分。因此掌握網絡入侵檢測系統的部署與應用以是計算機從業人員不可缺少的知識技能。
1.3、Snort體系分析
IDS是計算機的入侵監視系統,它通過實時的監視,對異常的網絡行為發出警報。入侵檢測系統大致可分為兩大類,信息來源一類是基於主機IDS的基於網絡的IDS,檢測方法一類是針對異常入侵檢測和誤用的入侵檢測。Snort
IDS(入侵檢測系統)既是一個強大的網絡入侵檢測系統。它具有實時數據流量分析和記錄IP數據網絡數據包的能力,能夠進行協議分析,對數據包內容進行識別,檢測不同的攻擊方式,對攻擊進行實時監控和報警。此外,Snort是一個開源的入侵檢測系統,具有很好的移植性和可擴展性。Barnyard2作為IDS的前端工具,主要應用是讀取sonrt產生的數據並存儲到數據庫中,同時base的頁面變化,來測試應用成果與否。
Snort結構由四大模塊組成,分別是:
-
數據包嗅探模塊,負責監聽網絡數據包,對網絡進行分析。
-
預處理模塊,用相應的插件來檢查原始的數據包,數據包預處理后傳送到檢測引擎。
-
檢測模塊,是Snort的核心模塊;檢測引擎根據預先設置的規則檢測數據包,一旦發現規則匹配,就通知警報模塊。
-
警報/日志模塊,經過檢測引擎檢測后數據輸出。如果出現異常則會發出報警
1.4、Snort三種工作模式
-
偵測模式:snort將在現有的網域內獲取數據包,並顯示在屏幕上。
-
數據包記錄模式:snort將已截取的數據包存入存儲硬盤中。
-
上線模式:snort可對截取到的數據包做分析的動作,並根據一定的規則來判斷是否有網絡攻擊行為的出現。
2、概要設計
2.1、Snort功能介紹
Snort擁有三大基本功能:嗅探器,數據包記錄和入侵檢測。嗅探器模式從網絡上讀取數據包並作為連續不斷的數據流顯示在終端。數據包記錄器模式是把數據包記錄到硬盤上。網絡入侵檢測模式可配置使snort分析網絡數據流以匹配用戶定義的一些規則,並根據檢測結果采取一定的措施。
2.2、入侵檢測模塊分析
snort是一套開源的網絡入侵預防與網絡入侵檢測軟件。使用了以偵測簽名與通信協議的偵測方法。數據嗅探是基於Libpcap開發而成,Libpcap是一個跨平台的報文抓取程序。數據嗅探器將網卡獲取的數據送入上層預處理組件進行處理。
預處理器介於檢測引擎和數據包嗅探器之間,主要功能有包重組、解碼協議和異常檢測,負責對數據包的進行預先處理。作為入侵檢測系統,它能夠對網絡中數據包片段編排與組裝,還原原始的數據內容。因此預處理器對安全威脅的檢測和識別非常重要。
檢測引擎是Snort的核心部分,其中負責規則處理的規則庫是檢測引擎的重要組件,規則處理模塊主要負責規則的解析和規則檢測。檢測引擎通過讀取規則文件把規則鏈中,再與數據包進行對比,檢測判定是否存在安全威脅,並做出響應的處理,如:警報、記錄或者忽略等。針對大流量的數據中心存在系統檢測處理數據丟失等情況,這就表示在大規模的網絡應用中,對引擎算法的優化和改進,有着相當大的必要。
從本質上說,Snort與tcpdump和snoop一樣,都是網絡數據包嗅探器。因此,嗅探器模式是Snort工作的基本模式。只要運行Snort時不加載規則,它就可以從網絡上讀取數據包並連續不斷地顯示在屏幕上。這時,Snort將顯示統計信息。Snort使用Libpcap網絡驅動庫。在這種模式下,Snort將網卡設置為混在模式,讀取並解析共享信道中的網絡數據包。在嗅探模式下,Snort也可以將這些信息記錄到日志文件中。這些文件隨后可以用Snort或者tcpdump查看。這種模式的用戶並非很大,因為現在很多可以記錄包的工具了。在這種模式下並不需要snort.conf配置文件。
入侵模式需要載入規則庫才能工作。在入侵模式下,Snort並不記錄所有捕獲的包,而是將包與規則對比,僅當包與某個規則匹配的時候,才會記錄日志或產生報警。如果包並不與任何一個規則匹配,那么它將會被悄悄丟棄,並不做任何記錄。運行Snort的入侵檢測模式的時候,通常會在命令行指定一個配置文件。
2.3、Snort工作流程分析
Snort在進入工作模式之前,首先要對其進行基礎設置,對結構組件進行初始化配置,根據規則文件生成相應的規則鏈表。通過調用Libpcap提供的數據函數抓取數據包,對數據進行預處理,sonrt調用完了協議的解析函數,對數據包進行分層解析,從數據包中提取有效的檢測信息,然后將解析的數據轉存。由snort將解析結果和已知的規則進行比較,判斷是否存在入侵行為,當相匹配時則判定存在網絡安全問題,向管理員發出警報。如果不存在安全問題則直接通過。
Snort,對每個被檢測的數據包都定義了如下的三種處理方式alert(發送報警信息)Log(記錄該數據包),Pass(忽略該數據)。這些處理方式其實是具體定義,在檢測規則中的,具體的完成是在日志或者報警子系統中。日志子系統允許將嗅探器,收集到的信息,以可讀的格式或者tcpdump格式記錄下來。
此外,Snort有兩種輸出方式,即日志和告警,輸出結果時,snort會按常規規則或預處理規則直接指定輸出類型。
2.4、ADODB功能分析
adodb是一種兼容各類數據庫應用程序的接口(API),各種數據庫都可以,MySQL、Informix、Oracle,MS
SQL
7、Foxpro、Access,ADO、Sybase、FrontBase、DB2等,不論后端是何種數據庫,存取數據的方式都是一致的,adodb作為一種PHP存取數據庫的中間函數組件,在本次項目種擔負着橋梁的責任。
2.5、snort組件分析
barnyard2是一個snort組件,通過與數據庫相聯系,用於數據的調取與存放。daq、libdnet、libpcap都是snort的安裝組件,需要編譯后配合snort使用。snortrules-snapshot是snort的規則匹配庫,主要功能就是用於數據的比對與識別判斷依據。base則是用於前端頁面數據的顯示。
2.4、安裝准備
工作環境
名稱 | 版本 |
---|---|
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操作系統,在系統上進行snort、barnyard2以及base的總體搭建,其中snort是主要部分,Barnyard2的作用是讀取snort產生的二進制事件文件並存儲到MySQL。同時根據base頁面的變化,來測試是否成功。
3.1、准備工作
安裝Centos6.7.iso鏡像到虛擬機,配置網絡設置確保連接互聯網。
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(使用文件創建數據庫表)
# tar -zxvf barnyard2-1.9.tar.gz
啟動mysql
# service mysqld start
設置root密碼為123456
# mysqladmin -u root password 123456
# mysql -uroot -p123456
創建snort的數據庫,創建名為snort、密碼為123456的數據庫用戶並賦予名為snort數據庫權限。
mysql>create database snort;
mysql>grant create,select,update,insert,delete on snort.* to snort@localhost
identified by '123456';
退出數據庫,導入創建數據庫表。
# 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路徑。
點擊下一步,配置數據庫。
點擊下一步,自行配置用戶名和密碼,這里我設置為admin:admin
點擊繼續進入,再點擊“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
首先創建文件目錄
# 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、配置規則庫
# 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
創建文件目錄
# 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
參數注解:
-T 指定啟動模式:測試
-i 指定網絡接口:eth0
-c 指定配置文件:/etc/snort/snort.conf
# snort -T -i eth0 -c /etc/snort/snort.conf
如此則測試成功。
4.2、測試barnyard2
參數注解:
-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、添加測試規則
#vim /etc/snort/rules/local.rules
添加一條檢查ping包的規則
alert icmp any any -> any any (msg: "IcmP Packet detected";sid:1000001;)
規則解釋:
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命令執行完畢后,用主機瀏覽器訪問base安全分析引擎頁面。
可以看到有檢測到IP數據。
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發送數據包,base頁面會出現ICMP警告。
可以看到,在連續不斷的ping目標IP的情況下,基本安全分析引擎BASE就會源源不斷的收到數據包警報數據,我們還可以對某個特定的數據包進行分析和查看。
接下來對TCP和UDP進行測試,首先添加規則到local.rules中。
# vim /etc/snort/rules/local.rules
在網站根目錄下添加一個自定義網頁。
使用另外一個台機器訪問此網頁。
再打開安全分析引擎BASE主頁面,發現TCP和UDP已經有了數據。
下一步跟進數據,可以看到協議類型等信息。
通過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的端口掃描通信區域沒有顯示。
接下來使用使用Kali中的nmap命令對目標IP進行掃描。
同時打開BASE主頁面,發現流量監控數據同步顯示。
打開端口掃描通信查看詳細信息。
可以看到掃描流量的詳細信息。
自此,snort測試工作成功,可以上線運行。
4.6、停止IDS服務
可以使用已經配置好的腳本停止IDS。
也可以手動停止服務。
killall -9 snort barnyard2