基於snort、barnyard2和base的 網路入侵檢測系統的部署與應用

不像話發表於2021-01-02

1、專案分析

1.1、專案背景

伴隨著網際網路產業的不迅猛發展,新興技術層數不窮,網際網路通訊技術逐漸成為了各行各業不可替代的基礎設施,越來越多的業務都是依靠網際網路來得以實現。隨著我國科技產業的飛速發展,很多過去無法想象的事物變成了現實,由計算機衍生的人工智慧等一系列高新技術,以不可阻擋的勢頭影響著人們的生活,這一切的一切都離不開網際網路的支撐,人們享受網路帶來的便捷與暢快的同時,也不得不面對網路入侵者對網路安全所帶來的威脅,近些年網路飛速發展的同時,資訊保安問題也顯得日益突出,人們對隱私保護的意識逐漸增強,因此計算機網路安全問題日益成為了社會各界所關注的熱點。擁有一個完備可靠的網路安全攻防系統以是個人、企業乃至國家所不懈追尋的目標。

1.2、需求分析

在網際網路飛速發展的當下社會,資訊保安問題尤為突出,任何試圖破壞網路活動正常化的事件都可成為網路安全問題。在網路安全問題產生的早期,人們通常使用的方法就是防火牆,但隨著網路攻擊技術手段的不斷提升,傳統的防火牆作為一種被動的防禦性網路安全工具,已經不足以防禦新型的網路攻擊。這種情況下逐漸誕生了網路入侵檢測系統,入侵檢測系統不僅能夠為網路安全提供及時的入侵檢測以及採取響應防護手段,還可以正確識別針對計算機網路的惡意行為,併為此做出響應和防護機制。它提供對系統內部攻擊和外部攻擊以及錯誤操作的實時防護,能夠自主的應對網路攻擊,良好的彌補了傳統防火牆的不足,有效的完善了網路安全的防護機制,入侵檢測及時做一種防禦手段,已經成為網路安全體系的重要組成部分。因此掌握網路入侵檢測系統的部署與應用以是計算機從業人員不可缺少的知識技能。

1.3、Snort體系分析

IDS是計算機的入侵監視系統,它通過實時的監視,對異常的網路行為發出警報。入侵檢測系統大致可分為兩大類,資訊來源一類是基於主機IDS的基於網路的IDS,檢測方法一類是針對異常入侵檢測和誤用的入侵檢測。Snort
IDS(入侵檢測系統)既是一個強大的網路入侵檢測系統。它具有實時資料流量分析和記錄IP資料網路資料包的能力,能夠進行協議分析,對資料包內容進行識別,檢測不同的攻擊方式,對攻擊進行實時監控和報警。此外,Snort是一個開源的入侵檢測系統,具有很好的移植性和可擴充套件性。Barnyard2作為IDS的前端工具,主要應用是讀取sonrt產生的資料並儲存到資料庫中,同時base的頁面變化,來測試應用成果與否。

Snort結構由四大模組組成,分別是:

  1. 資料包嗅探模組,負責監聽網路資料包,對網路進行分析。

  2. 預處理模組,用相應的外掛來檢查原始的資料包,資料包預處理後傳送到檢測引擎。

  3. 檢測模組,是Snort的核心模組;檢測引擎根據預先設定的規則檢測資料包,一旦發現規則匹配,就通知警報模組。

  4. 警報/日誌模組,經過檢測引擎檢測後資料輸出。如果出現異常則會發出報警

1.4、Snort三種工作模式

  1. 偵測模式:snort將在現有的網域內獲取資料包,並顯示在螢幕上。

  2. 資料包記錄模式:snort將已擷取的資料包存入儲存硬碟中。

  3. 上線模式: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安全分析引擎頁面。

http://192.168.60.180/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

5、專案總結

通過對網路安全課程的學習,我學到了很多有關計算機網路安全方面的知識和技能,對網路安全領域有了更深層次的理解。通過完成這個專案,使得我對snort網路入侵檢測系統有了一個具體的瞭解,Snort
IDS(入侵檢測系統)是一個強大的網路入侵檢測系統。它具有實時資料流量分析和記錄網路資料流包的能力。對目標網路從源IP源埠到目的IP和目的埠的整個過程進行整體監控,能夠進行協議分析,對網路資料包內容進行搜尋和匹配。它能夠檢測各種不同的網路攻擊方式,對異常資料流量實時監控和及時警報。

此外,Snort作為一個開源的入侵檢測系統,有著良好的擴充套件性和可移植性,在對基於snort、barnyard2和base的入侵檢測系統的部署於應用的過程中,也不乏出現各種各樣的問題,如:PHP外掛下載,snort對TCP/UDP等資訊的檢測配置等問題,通過對報錯原因和執行日誌的分析,結合藉助各種渠道獲取的相關知識經驗,最終所有問題得以解決,呈現出一個效能良好、穩定可持續執行的網路入侵檢測系統。

非常感謝老師能給我這次機會,讓我能夠獨立的完成一個入侵檢測系統的部署與應用的過程,以此來結合所學知識讓我對之前學到的知識有了更深層次的理解與感悟,對今後的學習與工作有著及其重要的意義。

相關文章