XX大學XX學院
《網絡攻擊與防御》
實驗報告
實驗報告撰寫要求
實驗操作是教學過程中理論聯系實際的重要環節,而實驗報告的撰寫又是知識系統化的吸收和升華過程,因此,實驗報告應該體現完整性、規范性、正確性、有效性。現將實驗報告撰寫的有關內容說明如下:
1、 實驗報告模板為電子版。
2、 下載統一的實驗報告模板,學生自行完成撰寫和打印。報告的首頁包含本次實驗的一般信息:
組 號:例如:2-5 表示第二班第5組。
實驗日期:例如:05-10-06 表示本次實驗日期。(年-月-日)……
實驗編號:例如:No.1 表示第一個實驗。
實驗時間:例如:2學時 表示本次實驗所用的時間。
實驗報告正文部分,從六個方面(目的、內容、步驟等)反映本次實驗的要點、要求以及完成過程等情況。模板已為實驗報告正文設定統一格式,學生只需在相應項內填充即可。續頁不再需要包含首頁中的實驗一般信息。
3、 實驗報告正文部分具體要求如下:
一、實驗目的
本次實驗所涉及並要求掌握的知識點。
通過該實驗可以加深理解Snort的系統架構以及工作原理,掌握Snort與Iptables聯動的實現方法。
二、實驗環境
實驗所使用的設備名稱及規格,網絡管理工具簡介、版本等。
服務器:snort-host( Centos6.5),IP地址: 10.1.1.12
Snort版本: 2.9.7.6(最新) Guardian版本:1.7(最新)
操作主機:host(WinXp), IP地址: 隨機
測試主機:test(WinXp), IP地址: 隨機
下載路徑:http://tools.hetianlab.com/tools/X-Scan-v3.3-cn.rar
下載路徑:http://tools.hetianlab.com/tools/Xshell.rar
圖1 snort實驗環境
三、實驗內容與實驗要求
實驗內容、原理分析及具體實驗要求。
實驗內容、原理分析及具體實驗要求。
- Snort簡述
Snort是一個強大的輕量級網絡入侵檢測系統,它能夠檢測到各種不同的攻擊方式,對攻擊進行實時報警。此外,Snort具有很好的擴展性和可移植性,並且這個軟件遵循GPL,這意味着只要遵守GPL的任何組織和個人均可以自由使用這個軟件。
Snort具有實時流量分析和日志IP網絡數據包的能力,能夠快速地檢測網絡攻擊,及時地發出報警。Snort的報警機制很豐富,例如:Syslog、用戶指定的文件、一個Unix套接字,還有使用samba協議向Windows客戶端發出WinPoup消息。利用XML插件,Snort可以使用SNML把日志存放到一個文件或者實時報警。Snort能夠進行協議分析、內容的搜索/匹配。目前Snort能夠分析的協議有TCP、UDP、ICMP,將來可能支持ARP、OSPF、IPX、RIP等協議,它能夠檢測多種方式的攻擊和探測,例如:緩沖區溢出、CGI攻擊、端口暴力破解、SMB探測以及web應用程序的攻擊現在也已經有簡單規則的支持。Snort自帶的檢測攻擊的規則數量有限,但Snort支持用戶自定義規則的加載,這對有能力的大型企業而言是個不錯的IDS選擇。
Snort體系架構
1.Snort工作原理與應用場景
Snort是一個基於模式匹配的的網絡入侵檢測系統,實際上目前現在市場上的大多商業入侵檢測系統都是基於模式匹配的,即將惡意行為和惡意代碼預定成入侵規則特征庫,然后將實際數據源於規則庫的特征碼進行匹配,以判斷其中是否包含了入侵行為。
IDS的應用場景一般如下圖所示:
圖2 IDS使用場景
Snort的大致處理流程如下圖所示:
圖3 snort處理網絡數據包內部流程
2. Snort的主體架構
Snort系統總體上是由規則集及Snort可執行程序兩大部分組成。
1)Snort規則集
Snort規則集是Snort的攻擊特征庫,每條規則是一條攻擊標識,Snort通過它來識別攻擊行為。
2)Snort可執行程序
可執行程序由4個重要的子系統構成:
數據包捕獲和解碼子系統、檢測引擎、日志/報警子系統、預處理器。
Snort的總體結構:
圖4 snort內部結構
3. Snort的插件機制
1)預處理插件
預處理插件在規則匹配之前運行,完成的功能主要為:
(1)模擬tcp、ip堆棧功能的插件,如IP碎片重組、TCP流重組插件;
(2)各種解碼插件:http解碼插件、unicode解碼插件、rpc解碼插件、Telnet解碼插件等;
(3) 規則匹配無法進行攻擊檢測時所用的插件:端口掃描插件、spade異常入侵檢測插件、bo檢測插件等
2)處理插件
處理插件在規則匹配階段的parse rule options中被調用,輔助完成基於規則的匹配庫。每個規則處理函數通常對應規則選項中的一個關鍵字,實現對這個關鍵字的解釋。其主要功能為:
(1)檢查協議各字段,如TCPflag、ICMPtype、Fragbits、RPC、Dsize等;
(2)輔助功能,例如關閉連接、會話記錄、攻擊響應等
3)輸出插件
輸出插件在規則匹配過程中和匹配過程結束后調用,以便記錄日志和告警。
4.總體流程
Snort的入侵檢測流程分成兩大步:
第一步是規則的解析流程,包括從規則文件中讀取規則和在內存中組織規則。其過程為:
(1)讀取規則文件;
(2)依次讀取每條規則;
(3)解析規則;
(4)在內存中對規則進行組織,建立規則語法樹;
第二步是使用這些規則進行匹配的入侵流程。其過程為對從網絡上捕獲的每一條數據報文和在第一步建立的規則樹進行匹配,若發現存在一條規則匹配該報文,就表示檢測到一個攻擊,然后安裝規則規定的行為進行處理;若搜索完所有的規則都沒有找到匹配的規則,則視此報文正常。
Snort與Iptables的聯動
- 概述
為什么要讓Snort與Iptables聯動呢?根據前面的介紹我們已經了解了Snort的工作方式與原理,聰明的你一定發現了Snort最致命的密碼——不能阻斷攻擊!Snort的主要作用是對整個網絡起到預警作用,從它的旁路部署模式也可以看出,它並不能阻斷網絡里的攻擊行為。誰能阻斷攻擊呢?——Iptable。可為什么不采用Iptables呢?因為Iptables的規則過於固定,並且Iptables並不能識別網絡里的攻擊行為。那能不能綜合一下它們二者的優點互補對方的缺點,而達到檢測到攻擊即切斷攻擊連接這樣的效果呢。答案是可以! - 實現方式和實現原理
通過前面的知識我們了解到,Snort有個插件機制提供了預處理插件和處理插件等方式。而這種插件在Snort里是支持自定義開發並加載的。因此第一種實現方式就是自定義開發插件,當檢測到規則匹配時則調用遠程或對應主機的防火牆,將有入侵行為的ip和端口,建立對應的一條Iptables規則丟棄這個連接、端口的數據包或將此ip的所有包都丟棄。
相對於Snort的插件方式,第二種的實現方式非常簡單且易於實現,很適合本次實驗。這種方式就是利用一個簡單的腳本實時讀取告警日志,將記錄到的Ip和端口,創建對應的一條Iptables規則,加入到遠程或對應主機的防火牆規則中,也就是實現了同第一種方式相同的功能,雖然后者在處理速度上沒有第一種方式及時,但整體防護能力上並未有太大什么區別。
實現方式總結如下:
(1).利用Snort的擴展功能,自定義開發集成插件(目前有snortsam)。
(2).利用Snort的告警日志,自定義開發腳本。(本次實驗所采用,腳本為guardian)
實現原理大致流程圖:
圖5 兩種實現方式流程
四、實驗過程與分析
根據具體實驗,記錄、整理相應命令、運行結果等,包括截圖和文字說明。
詳細記錄在實驗過程中發生的故障和問題,並進行故障分析,說明故障排除的過程及方法。
- Snort安裝與配置
SSH登錄centos6.5主機
用戶名:root
password:123456
① 下載Xshell並接入服務器,具體操作如下圖所示:
圖6 下載xshell,接入服務器
2.接入服務器:
IP地址: 10.1.1.12
用戶名:root
password:123456
3.安裝相關環境
命令:
cd /usr/local/src/
wget http://tools.hetianlab.com/tools/snort+IPtables.tar.gz
tar zxvf snort+IPtables.tar.gz
具體操作截圖如下:
圖7 安裝環境
由於接下來的操作步驟較多,不再給出截圖,只展示操作代碼:
安裝libdnet
cd /usr/local/src/snort+IPtables
tar zxvf libdnet-1.12.tgz
cd libdnet-1.12
./configure --with-pic
make && make install
cd /usr/local/lib/
ldconfig -v /usr/local/lib
安裝DAQ
cd /usr/local/src/snort+IPtables
tar zxvf daq-2.0.6.tar.gz
cd daq-2.0.6
./configure
make && make install
cd /usr/local/lib/
ldconfig -v /usr/local/lib
安裝snort
cd /usr/local/src/snort+IPtables/
tar zxvf snort-2.9.7.6.tar.gz
cd snort-2.9.7.6
./configure -enable-sourcefire
make && make install
cd /usr/local/lib/
ldconfig -v /usr/local/lib
Snort配置
創建snort系統必要的文件夾,導入規則庫,建立黑名單和白名單文件
mkdir /etc/snort
mkdir /var/log/snort
cd /etc/snort
cp /usr/local/src/snort+IPtables/snort-2.9.7.6/etc/* .
tar zxvf /usr/local/src/snort+IPtables/snortrules-snapshot-2976.tar.gz
cp ./etc/* .
touch /etc/snort/rules/white_list.rules /etc/snort/rules/black_list.rules
為snort添加一個用戶和組
groupadd -g 40000 snort
useradd snort -u 40000 -d /var/log/snort -s /sbin/nologin -c SNORT_IDS -g snort
cd /etc/snort
chown -R snort.snort *
chown -R snort.snort /var/log/snort
vi /etc/snort/snort.conf
ipvar HOME_NET 10.1.1.0/24
ipvar EXTERNAL_NET any
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
preprocessor sfportscan: proto { all } memcap { 10000000 } sense_level { low }
include $PREPROC_RULE_PATH/preprocessor.rules
include $PREPROC_RULE_PATH/decoder.rules
include $PREPROC_RULE_PATH/sensitive-data.rules
為snort的文件在另一個位置創建一個同步鏈接
ln -s /usr/local/bin/snort /usr/sbin/snort
修改snort及daq等相關目錄和文件權限
cd /usr/local/src/snort+IPtables
chown -R snort.snort daq-2.0.6
chmod -R 700 daq-2.0.6
chown -R snort.snort snort-2.9.7.6
chmod -R 700 snort-2.9.7.6
cd /usr/local/src/
chown -R snort.snort snort_dynamicsrc
chmod -R 700 snort_dynamicsrc
cd /var/log
chown -R snort.snort snort
chmod -R 700 snort
cd /usr/local/bin
chown -R snort.snort daq-modules-config
chmod -R 700 daq-modules-config
chown -R snort.snort u2*
chmod -R 700 u2*
cd /etc
chown -R snort.snort snort
chmod -R 700 snort
配置動態規則
mkdir -p /usr/local/lib/snort_dynamicrules
cp /etc/snort/so_rules/precompiled/RHEL-6-0/x86-64/2.9/.so /usr/local/lib/snort_dynamicrules
導出動態規則文件
snort -c /etc/snort/snort.conf --dump-dynamic-rules=/etc/snort/so_rules
設定告警文件權限
touch /var/log/snort/alert
cd /var/log/snort
chown snort.snort alert
chmod 700 alert
snort -T -c /etc/snort/snort.conf -i eth0
啟動snort
snort -c /etc/snort/snort.conf -i eth0
停止snort
ps -ef |grep snort
kill -9 pid號 即可結束進程
詳細截圖展示如下:
圖8 snort環境配置
- 安裝配置guardian
安裝配置
cd /usr/local/src/snort+IPtables
tar zxvf guardian-1.7.tar.gz
cd guardian-1.7
touch /etc/snort/guardian.ignore
touch /etc/snort/guardian.target
touch /var/log/snort/guardian.log
cp guardian.pl /usr/local/bin/
cp scripts/iptables_block.sh /usr/local/bin/guardian_block.sh
cp scripts/iptables_unblock.sh /usr/local/bin/guardian_unblock.sh
cp guardian.conf /etc/snort
編輯guardian配置文件
vi /etc/snort/guardian.conf
Interface eth0
LogFile /var/log/snort/guardian.log
AlertFile /var/log/snort/alert //alert文件的位置
IgnoreFile /etc/snort/guardian.ignore //白名單
targetFile /etc/snort/guardian.target //黑名單
TimeLimit 120 //阻斷時間,以秒為單位
guardian啟動:
/usr/bin/perl /usr/local/bin/guardian.pl -c /etc/snort/guardian.conf
啟動成功會出現如下示例:
Guardian 停止
ps -ef|grep guardian
kill -9 pid號即可殺死該進程
3. 聯機測試
Snort與本地iptables聯動
測試規則是否加載生效
vi /etc/snort/rules/local.rules
添加下面兩條規則
alert tcp $HOME_NET any -> $EXTERNAL_NET any (msg:"OUT"; sid:5000005)
alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"IN"; sid:5000006)
規則說明:
告警外網和內網之間的所有tcp流量,用來測試你的snort.conf配置是否有問題
啟動snort,查看alert是否有日志
snort -c /etc/snort/snort.conf -i eth0
cd /var/log/snort
tail -f alert
如果可以看到日志,則表明snort.conf配置沒有問題,可以繼續下面的測試,否則請檢查snort.conf的配置,以及snort目錄和文件權限設置。
聯動測試
如果之前的測試沒有問題,請將/etc/snort/rules/local.rules你所添加的兩條規則刪除或注釋掉。
vi /etc/snort/rules/local.rules
alert tcp $HOME_NET any -> $EXTERNAL_NET any (msg:"OUT"; sid:5000005)
alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"IN"; sid:5000006)
登錄另一台windows 測試主機(注意:如果用本機掃描很有可能導致snort主機無法登陸),打開瀏覽器,登錄http://tools.hetianlab.com/tools/X-Scan-v3.3-cn.rar下載x-scan並解壓,雙擊文件夾,使用x-scan設置參數。設置參數截圖示意如下:
圖9 x-scan參數設置
點擊“掃描參數”按鈕,將指定IP范圍設置成你的snort主機ip地址,在“全局設置”的“掃描模塊”中選中“全選”,“插件設置”的“SNMP相關設置”、“NETBIOS相關設置”、“漏洞檢測腳本設置”均選擇全部選中。
點擊開始按鈕,開始掃描
圖10 掃描過程
觀察alert是否有告警日志
cd /var/log/snort
tail -f alert
圖11 檢測告警日志
發現告警日志,啟動guardian與iptables聯動
/usr/bin/perl /usr/local/bin/guardian.pl -c /etc/snort/guardian.conf
在snort主機上執行,iptables -L即可看到新加入的規則。至此,單台防火牆聯動已經成功實現。
五、實驗結果總結
對實驗結果進行分析,完成思考題目,總結實驗的心得體會,並提出實驗的改進意見。
實驗結果分析:
本實驗利用snort告警腳本,開發guardian腳本,實現Snort和Iptables聯動,使得使用者可以識別網絡中的攻擊,同時使用這種方式也可以有效阻斷網絡攻擊對於使用者的影響。
思考題:
1、 請查閱相關資料了解snortsam插件,分析並簡述snortsam與guardian的優缺點。
Snort:不能阻斷攻擊。Snort主要起預警作用,不能阻斷攻擊。
Iptables:因為Iptables的規則過於固定,Iptables不能識別網絡中的攻擊。
2、你認為snortsam和guardian的這種聯動方式有哪些弊端?
第一種實現方式使用自定義插件的方法,當檢測到特定行為時調用對應的防火牆,將有入侵行為的ip和端口,建立對應的一條Iptables規則丟棄這個連接、端口的數據包或將此ip的所有包都丟棄。
相對於Snort的插件方式,第二種的實現方式非常簡單且易於實現,這種方式就是利用一個簡單的腳本實時讀取告警日志,將記錄到的Ip和端口,創建對應的一條Iptables規則,加入到遠程或對應主機的防火牆規則中,后者在處理速度上不如前者,但是防護效果基本相當。
心得體會:
本次實驗使得我對於snort的架構和工作原理有了基本的了解,同時也掌握了snort和iptables聯動的方法。從這個實驗中學習到了比課本上更加實際更加深入的知識,對於了解信息安全有重要的意義。
改進意見:
無