入侵檢測系統(tǒng)分類Snort課件_第1頁
入侵檢測系統(tǒng)分類Snort課件_第2頁
入侵檢測系統(tǒng)分類Snort課件_第3頁
入侵檢測系統(tǒng)分類Snort課件_第4頁
入侵檢測系統(tǒng)分類Snort課件_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、SNORT原理簡介與優(yōu)化及GNORT初探劉斐然主要內(nèi)容Snort原理是什么?Snort在實際應(yīng)用中的缺陷有哪些?如何對Snort進行優(yōu)化?Gnort初探。入侵檢測系統(tǒng)的基本結(jié)構(gòu)入侵檢測系統(tǒng)通常包括三功能部件:信息收集,其來源如下:系統(tǒng)或網(wǎng)絡(luò)的日志文件網(wǎng)絡(luò)流量系統(tǒng)目錄或文件的異常變化程序執(zhí)行中的異常行為信息分析模式匹配統(tǒng)計分析完整性分析結(jié)果處理對異常進行記錄/報警等入侵檢測系統(tǒng)分類Snort-基于特征檢測的NIDS在1998年,Martin Roesch先生用C語言開發(fā)了開放源代碼(Open Source)的入侵檢測系統(tǒng)Snort.直至今天,Snort已發(fā)展成為一個多平臺(Multi-Platf

2、orm),實時(Real-Time)流量分析,網(wǎng)絡(luò)IP數(shù)據(jù)包記錄等特性的強大的網(wǎng)絡(luò)入侵檢測/防御系統(tǒng)(Network Intrusion Detection/Prevention System),即NIDS/NIPS.Snort有三種工作模式:嗅探器、數(shù)據(jù)包記錄器、網(wǎng)絡(luò)入侵檢測系統(tǒng)。嗅探器模式僅僅是從網(wǎng)絡(luò)上讀取數(shù)據(jù)包并作為連續(xù)不斷的流顯示在終端上。數(shù)據(jù)包記錄器模式把數(shù)據(jù)包記錄到硬盤上。網(wǎng)路入侵檢測模式是最復(fù)雜的,而且是可配置的。我們可以讓snort分析網(wǎng)絡(luò)數(shù)據(jù)流以匹配用戶定義的一些規(guī)則,并根據(jù)檢測結(jié)果采取一定的動作。Snort的結(jié)構(gòu)組成 Snort主要包含以下模塊:數(shù)據(jù)包捕獲模塊:通過DAQ調(diào)

3、用底層函數(shù)庫,捕獲來自網(wǎng)絡(luò)的數(shù)據(jù)包解碼模塊對捕獲的數(shù)據(jù)包進行協(xié)議解碼預(yù)處理模塊以插件形式存在,對IP分片進行重組,防止ARP欺騙等等規(guī)則匹配模塊根據(jù)設(shè)置的規(guī)則對數(shù)據(jù)包進行匹配輸出模塊以插件形式存在,當(dāng)匹配成功時進行記錄或報警Snort輸出數(shù)據(jù)包規(guī)則匹配數(shù)據(jù)包預(yù)處理數(shù)據(jù)包解碼DAQ(Data Acquisition library)PCAPPFPACKETNFQIPFWSnort原理分析-數(shù)據(jù)包解碼在Snort內(nèi)部用Packet數(shù)據(jù)結(jié)構(gòu)表示一個數(shù)據(jù)包。數(shù)據(jù)包解碼模塊負責(zé)根據(jù)捕獲到的數(shù)據(jù)包初始化Packet數(shù)據(jù)結(jié)構(gòu)。(該結(jié)構(gòu)定義在decode.h中)數(shù)據(jù)包解碼函數(shù)均定義在decode.c中,由gr

4、inder指針指向其入口函數(shù)。解碼流程如右圖所示。最后生成完整的Packet結(jié)構(gòu)。Snort原理分析-數(shù)據(jù)包預(yù)處理簡介解碼后的數(shù)據(jù)包還需經(jīng)過預(yù)處理才能被主探測引擎進行規(guī)則匹配。預(yù)處理器的主要用來應(yīng)對一些IDS攻擊手段。其作用包括:針對可以行為檢查包或修改包,以便探測引擎能對其正確解釋。負責(zé)對流量標(biāo)準(zhǔn)化,以便探測引擎能精確匹配特征。目前已知的IDS逃避技術(shù)主要有:多態(tài)URL編碼;多態(tài)shellcode;會話分割;IP碎片;Snort原理分析-預(yù)處理器簡介Snort主要包含以下預(yù)處理器:包重組預(yù)處理器:Frag3:IP分片重組和攻擊監(jiān)測。Stream5:維持TCP流狀態(tài),進行會話重組。協(xié)議規(guī)范化預(yù)

5、處理器:HttpInspect:規(guī)范HTTP流,如將Unicode或hex翻譯成snort可以識別的字符集。RpcDecode:規(guī)范RPC調(diào)用。異常檢測預(yù)處理器:ARPspoof:檢測ARP欺騙。SfPortscan:檢測端口掃描。在Snort中,捕獲的數(shù)據(jù)包要經(jīng)過所有已經(jīng)打開的預(yù)處理器。預(yù)處理器是由插件來實現(xiàn)的,這樣的好處為:可以根據(jù)實際環(huán)境啟動或停止一個預(yù)處理插件,提高Snort效率。可以靈活添加自己編寫的預(yù)處理插件,預(yù)防新型的IDS逃避手段。(如何編寫預(yù)處理插件在源碼doc/README.PLUGINS中有初步介紹)Snort原理分析-預(yù)處理器初始化Snort預(yù)處理器初始化流程如下:首先

6、調(diào)用RegisterPreprocessors函數(shù),將所有預(yù)處理插件注冊進全局preproc_config_funcs鏈表中,內(nèi)容包括:關(guān)鍵字及相關(guān)預(yù)處理插件的初始化函數(shù)等。調(diào)用ConfigurePreprocessors函數(shù),根據(jù)配置文件和命令行參數(shù)遍歷preproc_config_funcs鏈表,比對關(guān)鍵字。如相同則運行預(yù)處理插件的初始化函數(shù)。預(yù)處理插件的初始化函數(shù)通過調(diào)用AddFuncToPreprocList將其實際的預(yù)處理函數(shù)添加到preproc_eval_funcs鏈表中,插入時會根據(jù)預(yù)處理插件的priority進行排序。當(dāng)程序捕獲到數(shù)據(jù)包時,首先通過grinder指向的函數(shù)進行解

7、碼。然后執(zhí)調(diào)用preproc_eval_funcs鏈中的預(yù)處理程序進行預(yù)處理。Snort原理分析-規(guī)則簡介Snort規(guī)則分為Rules Headers和Rules Options,格式為:rule headers ( rule options )規(guī)則頭(Rules Headers)包含結(jié)果處理模式,協(xié)議,來源與目地的IP地址,來源與目地的端口等。規(guī)則選項(Rules Options)包含匹配內(nèi)容,匹配位置,報警信息,引用說明等等。例:alert tcp $EXTERNAL_NET any - $HTTP_SERVERS $HTTP_PORTS (msg:WEB-PHP Opt-X header

8、.php remote file include attempt; flow:to_server,established; content:/header.php; nocase; http_uri; content:systempath=;.)Snort原理分析-規(guī)則表現(xiàn)形式在Snort中,規(guī)則頭由RuleTreeNode(RTN)結(jié)構(gòu)表示,規(guī)則選項由OptTreeNode(OTN)表示。RTN結(jié)構(gòu)中主要包括:IpAddrSet *sip,*dip:源IP地址,目的IP地址。PortObject *src_portobject,*dst_portobject:源端口,目的端口。OptTree

9、Node *down:指向相關(guān)的OTN。RuleFpList *rule_func:規(guī)則匹配函數(shù)。OTN結(jié)構(gòu)中主要包括:OptFpList *opt_func:規(guī)則匹配函數(shù)。void *ds_listPLUGIN_MAX:插件需要的數(shù)據(jù)結(jié)構(gòu)指針。RuleTreeNode *proto_nodes:指向其關(guān)聯(lián)的RTN。Snort原理分析-RTN初始化RTN及OTN均由ParseRule負責(zé)初始化。首先讀入一行規(guī)則,傳給ParseRule函數(shù)進行分析。ParseRule函數(shù)會將規(guī)則頭取出并進行拆分,然后執(zhí)行如下函數(shù)對RTN進行初始化:ProcessIP函數(shù):將源IP地址,目的IP地址寫入RTN的*

10、sip,*dip中。ParsePortList函數(shù):將源端口,目的端口寫入RTN的*src_portobject,*dst_portobject中。ProcessHeadNode函數(shù):調(diào)用SetupRTNFuncList函數(shù),將具體的規(guī)則匹配函數(shù)插入rule_func鏈表中,其函數(shù)根據(jù)標(biāo)志位不同可選用如下幾個:CheckSrcPortNotEq/CheckSrcPortEq/CheckDstPortNotEq/CheckDstPortEqualCheckSrcIP/CheckDstIPRuleListEnd:rule_func的鏈結(jié)尾函數(shù)匹配RTN時會依次執(zhí)行rule_func鏈表中的函數(shù)進行

11、匹配,如匹配不成功則返回0。最終如果執(zhí)行到RuleListEnd函數(shù)則表明匹配成功。Snort原理分析-OTN初始化與檢測RTN不同,系統(tǒng)檢測OTN時會用到規(guī)則檢測插件(例如針對TCP flags的匹配的檢測是由TCPFlagCheck插件中的CheckTcpFlags函數(shù)來完成的),所以先介紹一下規(guī)則檢測插件的初始化:通過調(diào)用RegisterRuleOptions函數(shù),將所有的規(guī)則檢測插件添加到rule_opt_config_funcs鏈表中,包括關(guān)鍵字與具體的檢測初始化函數(shù)。OTN初始化是由ParseRuleOptions函數(shù)完成的。其執(zhí)行如下操作:調(diào)用addRtnToOtn,將關(guān)聯(lián)的RT

12、N指針添加到OTN的proto_nodes中遍歷rule_opt_config_funcs規(guī)則鏈,進行關(guān)鍵字匹配,如匹配成功則執(zhí)行其對應(yīng)的檢測初始化函數(shù)檢測初始化函數(shù)負責(zé)將需要的數(shù)據(jù)指針添加到OTN的ds_list中,并將檢測函數(shù)插入OTN的opt_func鏈表中最后將OptListEnd插入到opt_func鏈的末尾Snort原理分析-快速規(guī)則匹配初始化fpCreateFastPacketDetection:構(gòu)建快速規(guī)則匹配結(jié)構(gòu):第一層是由四個PORT_RULE_MAP構(gòu)成,分別對應(yīng)TCP,UDP,ICMP及其他IP協(xié)議。第二層由PORT_GROUP結(jié)構(gòu)構(gòu)成,分別對應(yīng)源端口、目的端口及通用端

13、口三種第三層由RULE_NODE結(jié)構(gòu)構(gòu)成,分別對應(yīng)以下三類規(guī)則:uri-content:URI中的包含規(guī)則;Content:內(nèi)容包含規(guī)則;non-content:非content規(guī)則。Snort原理分析-規(guī)則匹配流程調(diào)用Detect(Packet * p)對數(shù)據(jù)包進行規(guī)則檢測,首先判斷是TCP,UDP或者ICMP協(xié)議,然后調(diào)用相關(guān)函數(shù):fpEvalHeaderTcp,fpEvalHeaderUdp,fpEvalHeaderIcmp進行處理。如均不是則調(diào)用fpEvalHeaderIp進行處理。fpEvalHeaderXXX的處理過程為首先通過對應(yīng)協(xié)議的PORT_RULE_MAP,根據(jù)源端口與目的

14、端口號,找到相關(guān)的PORT_GROUP。執(zhí)行fpEvalHeaderSW(),通過規(guī)則類型從PORT_GROUP中找到RULE_NODE,然后對相應(yīng)規(guī)則進行匹配。具體如下:對于url-content或content,執(zhí)行多模式匹配函數(shù)mpseSearch()進行匹配;對于非content規(guī)則,則逐一運行OTN中opt_func鏈中的所有規(guī)則匹配函數(shù)。如均執(zhí)行成功,則繼續(xù)運行其指向RTN中的rule_func鏈中的匹配函數(shù)。如均匹配成功,則最后會調(diào)用輸出插件進行輸出。Snort目前存在的問題snort是一款輕量級的網(wǎng)絡(luò)入侵檢測系統(tǒng)。如果將其應(yīng)用在大規(guī)模、大流量的網(wǎng)絡(luò)中,snort的報警性能會非常

15、低下??梢妔nort以下兩方面的效率還無法滿足我們的需求:數(shù)據(jù)包捕獲效率數(shù)據(jù)包分析處理效率改進思路為:首先需保證snort可以捕獲到網(wǎng)絡(luò)中的所有數(shù)據(jù)包。然后需要保證這些數(shù)據(jù)包可以及時得到處理。高效的數(shù)據(jù)包捕獲接口-PF_RINGPF_RING是一個第三方的內(nèi)核數(shù)據(jù)包捕獲接口,類似于libpcap。它提供一種PF_RING類型的套接字,大大增加了數(shù)據(jù)包捕獲的效率。它包括三方面的內(nèi)容:網(wǎng)卡驅(qū)動程序PF_RING-aware driversUser-space DNA (Direct NIC Access) drivers PF_RING內(nèi)核模塊用戶態(tài)函數(shù)庫Libpcap-ringpfring-da

16、q-module傳統(tǒng)數(shù)據(jù)包捕獲流程傳統(tǒng)的數(shù)據(jù)包捕獲流程如下(NAPI polling):網(wǎng)卡中斷處理程序網(wǎng)卡接收程序分配skb內(nèi)存將其放入softnet_data隊列中置軟中斷位do_softirqnet_rx_actioniprecvIP層檢查數(shù)據(jù)有效性TCP/UDP協(xié)議處理喚醒用戶層進程PF_RING數(shù)據(jù)包捕獲流程PF_RING有三種數(shù)據(jù)包捕獲模式,由插入模塊時的參數(shù)transparent_mode控制:ModeStandard driverPF_RING-aware driverPacket Capture Acceleration0Packets are received throug

17、h Linux NAPISame as Vanilla Linux1Packets are received through Linux NAPIPackets are passed to NAPI (for sending them to PF_RING-unaware applications) and copied directly to PF_RING for PF_RING-aware applications (i.e. PF_RING does not need NAPI for receiving packets)Limited2The driver sends packets

18、 only to PF_RING so PF_RING-unaware applications do not see any packetThe driver copies packets directly to PF_RING only (i.e. NAPI does not receive any packet)Extreme用PF_RING優(yōu)化SNORT網(wǎng)卡要求:1 Gigabit/sec:Intel 82575/82576/82580/I350-based(Linux driver igb )10 Gigabit/sec:Intel 82598/82599based(Linux dr

19、iver ixgbe)優(yōu)化步驟:安裝PF_RING的kernel模塊安裝PF_RING的用戶態(tài)庫安裝Snort的DAQ安裝PF_RING的pfring-daq-module安裝snort安裝PF_RING-aware網(wǎng)卡驅(qū)動數(shù)據(jù)包捕獲優(yōu)化性能對比首先進行千兆網(wǎng)絡(luò)中小數(shù)據(jù)包高頻率的測試,單數(shù)據(jù)包大小選取6字節(jié),分別測試發(fā)送1000到20000個數(shù)據(jù)包,測試結(jié)果如下:發(fā)包數(shù)量發(fā)包頻率(萬次/秒)實際帶寬(MB/s)未優(yōu)化前snort報警數(shù)PF_RING優(yōu)化后snort報警數(shù)100019.68.6100010001500209131615002000219.413162000400025111317

20、400080003113.6131680001000033141316100002000035.415131620000數(shù)據(jù)包捕獲優(yōu)化性能對比然后進行千兆網(wǎng)絡(luò)中大數(shù)據(jù)包高帶寬的測試,數(shù)據(jù)包發(fā)送個數(shù)1000,分別測試包大小從6B至1K時的報警數(shù)量,測試結(jié)果如下:數(shù)據(jù)包大小(Byte)發(fā)包頻率(萬次/秒)實際帶寬(MB/s)未優(yōu)化前snort報警數(shù)PF_RING優(yōu)化后snort報警數(shù)1020.49.76100010002020.211.5598310004020.4815.6379510008020.223.12582100010020.1726.93507100020020.5847.11313

21、100040020.0784.24182100080019.5106.761301000100018.65114.931251000邁向萬兆網(wǎng)絡(luò)用PF_RING優(yōu)化過的snort,已經(jīng)完全滿足了千兆網(wǎng)絡(luò)的要求。但是對于每秒幾十Gbit的網(wǎng)絡(luò)流量來說,千兆網(wǎng)絡(luò)還遠遠不夠。我們需要一種可以工作在萬兆網(wǎng)絡(luò)中的IDS系統(tǒng)。首先需解決數(shù)據(jù)包捕獲問題。目前支持萬兆線速包捕獲的方式有:TNAPI(Threaded NAPI)NIC(Direct NIC Access)萬兆網(wǎng)絡(luò)數(shù)據(jù)包捕獲-TNAPI支持MSI-X 中斷(Message Signaled Interrupts)的網(wǎng)卡可以將RX隊列分解為多個,每

22、個對應(yīng)一個核。MSI-X使得設(shè)備可以最多分配2048個中斷,而且每個都可以有獨立的地址。但是常規(guī)內(nèi)核無法發(fā)揮其優(yōu)勢,原因為:操作系統(tǒng)合并多個RX到單個ethX接口,對于萬兆網(wǎng)絡(luò)是不可接受的多個線程將競爭同一個ethX萬兆網(wǎng)絡(luò)數(shù)據(jù)包捕獲-TNAPITNAPI通過將內(nèi)核RX隊列直接暴露給用戶態(tài)程序。使得:流量真正分布到多個核同時從每個RX隊列輪詢包通過PF_RING,應(yīng)用層可以針對每個RX隊列分配一個線程系統(tǒng)結(jié)構(gòu)如右圖所示。Snort multiprocessing with PF_RING+TNAPI有了以上技術(shù)作為前提,我們設(shè)計出第一套針對萬兆網(wǎng)絡(luò)的IDS系統(tǒng)(處理性能將達到5Gbps以上):

23、Snort multiprocessing with PF_RING+TNAPI系統(tǒng)采用PF_RING+TNAPI的抓包方式線速獲取萬兆網(wǎng)絡(luò)的數(shù)據(jù)包,然后送給多個Snort進程進行處理。該系統(tǒng)的優(yōu)點為:不但解決了抓包效率的問題,還通過開啟多個Snort進程解決了數(shù)據(jù)包處理效率的問題。Snort multiprocessing with PF_RING+TNAPI系統(tǒng)硬件推薦如下:(雙路服務(wù)器)網(wǎng)卡:Intel 82598/82599萬兆網(wǎng)卡 x2CPU:Intel Xeon X5675 (6核心,12線程)x 2內(nèi)存:24G 該系統(tǒng)軟件構(gòu)建過程如下:插入網(wǎng)卡驅(qū)動模塊時,設(shè)置IntMode參數(shù)為

24、3:insmod ./.ko IntMode=3 (enables MSI-X)用ICC編譯snort程序(ICC會對將程序針對intel平臺進行優(yōu)化)針對每塊萬兆網(wǎng)卡,啟動12個snort進程:snort -daq-dir=/usr/local/lib/daq -daq pfring -daq-mode passive -i eth00 -c /etc/snort/snort.conf.萬兆網(wǎng)絡(luò)數(shù)據(jù)包捕獲-DNADNA (Direct NIC Access)是一種將NIC的內(nèi)存直接映射到用戶空間的技術(shù)。由NPU (Network Process Unit) 負責(zé)將數(shù)據(jù)包拷貝到ring中,大大節(jié)省了CPU資源。Snort multiprocessing with PF_RING+DNADNA 也可以將網(wǎng)卡RX隊列分為多個,但是每個隊列只能由一個用戶態(tài)進程訪問。其RX隊列上限會被具體硬件所限制。(現(xiàn)代的N

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論