2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quá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--

2、基于特征檢測的NIDS,在1998年,Martin Roesch先生用C語言開發(fā)了開放源代碼(Open Source)的入侵檢測系統(tǒng)Snort.直至今天,Snort已發(fā)展成為一個多平臺(Multi-Platform),實時(Real-Time)流量分析,網(wǎng)絡(luò)IP數(shù)據(jù)包記錄等特性的強大的網(wǎng)絡(luò)入侵檢測/防御系統(tǒng)(Network Intrusion Detection/Prevention System),即NIDS/NIPS.Snort

3、有三種工作模式:嗅探器、數(shù)據(jù)包記錄器、網(wǎng)絡(luò)入侵檢測系統(tǒng)。嗅探器模式僅僅是從網(wǎng)絡(luò)上讀取數(shù)據(jù)包并作為連續(xù)不斷的流顯示在終端上。數(shù)據(jù)包記錄器模式把數(shù)據(jù)包記錄到硬盤上。網(wǎng)路入侵檢測模式是最復雜的,而且是可配置的。我們可以讓snort分析網(wǎng)絡(luò)數(shù)據(jù)流以匹配用戶定義的一些規(guī)則,并根據(jù)檢測結(jié)果采取一定的動作。,Snort的結(jié)構(gòu)組成,Snort主要包含以下模塊:數(shù)據(jù)包捕獲模塊:通過DAQ調(diào)用底層函數(shù)庫,捕獲來自網(wǎng)絡(luò)的數(shù)據(jù)包解碼模塊對捕獲的

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

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

6、rt原理分析--預處理器簡介,Snort主要包含以下預處理器:包重組預處理器:Frag3:IP分片重組和攻擊監(jiān)測。Stream5:維持TCP流狀態(tài),進行會話重組。協(xié)議規(guī)范化預處理器:HttpInspect:規(guī)范HTTP流,如將Unicode或hex翻譯成snort可以識別的字符集。RpcDecode:規(guī)范RPC調(diào)用。異常檢測預處理器:ARPspoof:檢測ARP欺騙。SfPortscan:檢測端口掃描。在Snort

7、中,捕獲的數(shù)據(jù)包要經(jīng)過所有已經(jīng)打開的預處理器。預處理器是由插件來實現(xiàn)的,這樣的好處為:可以根據(jù)實際環(huán)境啟動或停止一個預處理插件,提高Snort效率??梢造`活添加自己編寫的預處理插件,預防新型的IDS逃避手段。(如何編寫預處理插件在源碼doc/README.PLUGINS中有初步介紹),Snort原理分析--預處理器初始化,Snort預處理器初始化流程如下:首先調(diào)用RegisterPreprocessors函數(shù),將所有預處理插件注

8、冊進全局preproc_config_funcs鏈表中,內(nèi)容包括:關(guān)鍵字及相關(guān)預處理插件的初始化函數(shù)等。調(diào)用ConfigurePreprocessors函數(shù),根據(jù)配置文件和命令行參數(shù)遍歷preproc_config_funcs鏈表,比對關(guān)鍵字。如相同則運行預處理插件的初始化函數(shù)。預處理插件的初始化函數(shù)通過調(diào)用AddFuncToPreprocList將其實際的預處理函數(shù)添加到preproc_eval_funcs鏈表中,插入時會根據(jù)預處

9、理插件的priority進行排序。當程序捕獲到數(shù)據(jù)包時,首先通過grinder指向的函數(shù)進行解碼。然后執(zhí)調(diào)用preproc_eval_funcs鏈中的預處理程序進行預處理。,Snort原理分析--規(guī)則簡介,Snort規(guī)則分為Rules Headers和Rules Options,格式為:rule headers ( rule options )規(guī)則頭(Rules Headers)包含結(jié)果處理模式,協(xié)議,來源與目地的IP地址,

10、來源與目地的端口等。規(guī)則選項(Rules Options)包含匹配內(nèi)容,匹配位置,報警信息,引用說明等等。例:alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:"WEB-PHP Opt-X header.php remote file include attempt"; flow:to_server,established;

11、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地址。PortOb

12、ject *src_portobject,*dst_portobject:源端口,目的端口。OptTreeNode *down:指向相關(guān)的OTN。RuleFpList *rule_func:規(guī)則匹配函數(shù)。OTN結(jié)構(gòu)中主要包括:OptFpList *opt_func:規(guī)則匹配函數(shù)。void *ds_list[PLUGIN_MAX]:插件需要的數(shù)據(jù)結(jié)構(gòu)指針。RuleTreeNode **proto_nodes:指向其關(guān)聯(lián)的RT

13、N。,Snort原理分析--RTN初始化,RTN及OTN均由ParseRule負責初始化。首先讀入一行規(guī)則,傳給ParseRule函數(shù)進行分析。ParseRule函數(shù)會將規(guī)則頭取出并進行拆分,然后執(zhí)行如下函數(shù)對RTN進行初始化:ProcessIP函數(shù):將源IP地址,目的IP地址寫入RTN的*sip,*dip中。ParsePortList函數(shù):將源端口,目的端口寫入RTN的*src_portobject,*dst_portobje

14、ct中。ProcessHeadNode函數(shù):調(diào)用SetupRTNFuncList函數(shù),將具體的規(guī)則匹配函數(shù)插入rule_func鏈表中,其函數(shù)根據(jù)標志位不同可選用如下幾個:CheckSrcPortNotEq/CheckSrcPortEq/CheckDstPortNotEq/CheckDstPortEqualCheckSrcIP/CheckDstIPRuleListEnd:rule_func的鏈結(jié)尾函數(shù)匹配RTN時會依次執(zhí)行r

15、ule_func鏈表中的函數(shù)進行匹配,如匹配不成功則返回0。最終如果執(zhí)行到RuleListEnd函數(shù)則表明匹配成功。,Snort原理分析--OTN初始化,與檢測RTN不同,系統(tǒng)檢測OTN時會用到規(guī)則檢測插件(例如針對TCP flags的匹配的檢測是由TCPFlagCheck插件中的CheckTcpFlags函數(shù)來完成的),所以先介紹一下規(guī)則檢測插件的初始化:通過調(diào)用RegisterRuleOptions函數(shù),將所有的規(guī)則檢測插件添加到

16、rule_opt_config_funcs鏈表中,包括關(guān)鍵字與具體的檢測初始化函數(shù)。OTN初始化是由ParseRuleOptions函數(shù)完成的。其執(zhí)行如下操作:調(diào)用addRtnToOtn,將關(guān)聯(lián)的RTN指針添加到OTN的proto_nodes中遍歷rule_opt_config_funcs規(guī)則鏈,進行關(guān)鍵字匹配,如匹配成功則執(zhí)行其對應(yīng)的檢測初始化函數(shù)檢測初始化函數(shù)負責將需要的數(shù)據(jù)指針添加到OTN的ds_list中,并將檢測函數(shù)

17、插入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)源端口、目的端口及通用端口三種第三層由RULE_NODE結(jié)構(gòu)構(gòu)成,分別對應(yīng)以下三

18、類規(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)用fpEvalHeaderI

19、p進行處理。fpEvalHeaderXXX的處理過程為首先通過對應(yīng)協(xié)議的PORT_RULE_MAP,根據(jù)源端口與目的端口號,找到相關(guān)的PORT_GROUP。執(zhí)行fpEvalHeaderSW(),通過規(guī)則類型從PORT_GROUP中找到RULE_NODE,然后對相應(yīng)規(guī)則進行匹配。具體如下:對于url-content或content,執(zhí)行多模式匹配函數(shù)mpseSearch()進行匹配;對于非content規(guī)則,則逐一運行OTN中

20、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的報警性能會非常低下??梢妔nort以下兩方面的效率還無法滿足我們的需求:數(shù)據(jù)包捕獲效率數(shù)據(jù)包分析處理效率改進思路為:首先需保證snort可以捕獲到網(wǎng)

21、絡(luò)中的所有數(shù)據(jù)包。然后需要保證這些數(shù)據(jù)包可以及時得到處理。,高效的數(shù)據(jù)包捕獲接口--PF_RING,PF_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)函

22、數(shù)庫Libpcap-ringpfring-daq-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ù)包捕獲模式,由插

23、入模塊時的參數(shù)transparent_mode控制:,用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 driver ixgbe)優(yōu)化步驟:安裝PF_RING的kernel模塊安裝PF_RING的用戶態(tài)庫安裝Sn

24、ort的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é)果如下:,數(shù)據(jù)包捕獲優(yōu)化性能對比,然后進行千兆網(wǎng)絡(luò)中大數(shù)據(jù)包高帶寬的測試,數(shù)據(jù)包發(fā)送個數(shù)1000,分別測試包大小從6B至1K時的報警數(shù)量,測試結(jié)果如下:,邁向萬兆網(wǎng)絡(luò),用PF_

25、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)卡可以將

26、RX隊列分解為多個,每個對應(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ù)包捕獲--TNAPI,TNAPI通過將內(nèi)核RX隊列直接暴露給用戶態(tài)程序。使得:流量真正分布到多個核同時從每個RX隊列輪詢包通過PF_RING,應(yīng)用層可以針對每個RX隊列分配一個

27、線程系統(tǒng)結(jié)構(gòu)如右圖所示。,Snort multiprocessing with PF_RING+TNAPI,有了以上技術(shù)作為前提,我們設(shè)計出第一套針對萬兆網(wǎng)絡(luò)的IDS系統(tǒng)(處理性能將達到5Gbps以上):Snort multiprocessing with PF_RING+TNAPI系統(tǒng)采用PF_RING+TNAPI的抓包方式線速獲取萬兆網(wǎng)絡(luò)的數(shù)據(jù)包,然后送給多個Snort進程進行處理。該系統(tǒng)的優(yōu)點為:不但解決了抓包效率

28、的問題,還通過開啟多個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ù)為3:insmod ./.ko IntMo

29、de=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 eth0@0 -c /etc/snort/snort.conf.......,萬兆網(wǎng)絡(luò)數(shù)據(jù)包捕獲--DNA,DNA (Direct

30、NIC Access)是一種將NIC的內(nèi)存直接映射到用戶空間的技術(shù)。由NPU (Network Process Unit) 負責將數(shù)據(jù)包拷貝到ring中,大大節(jié)省了CPU資源。,Snort multiprocessing with PF_RING+DNA,DNA 也可以將網(wǎng)卡RX隊列分為多個,但是每個隊列只能由一個用戶態(tài)進程訪問。其RX隊列上限會被具體硬件所限制。(現(xiàn)代的NIC一般可分16個以上的RX隊列)安裝方法如下:編譯并插入

31、網(wǎng)卡的DNA驅(qū)動。針對每塊萬兆網(wǎng)卡,啟動12個snort進程:snort --daq-dir=/usr/local/lib/daq --daq pfring --daq-mode passive -i dna0@0 -c /etc/snort/snort.conf,Gnort--GPU簡介,目前,主流GPU的單精度浮點處理能力已經(jīng)達到了同時期的CPU的10倍左右,而其外部的存儲器帶寬則是CPU的5倍左右。近幾年來GPU的性能每一

32、年都可以翻一倍,大大超過了CPU遵循的摩爾定律。GPU在邏輯性處理上有很大不足,導致一般程序都需要CPU+GPU的異構(gòu)并行方式在GPU上執(zhí)行。2007年6月,NVIDIA推出了CUDA(Compute Unified Device Architecture,統(tǒng)一計算設(shè)備架構(gòu))。CUDA采用類c語言進行開發(fā)。,Gnort--NIDS using GPU,Gnort是一套采用CPU+GPU異構(gòu)并行的NIDS系統(tǒng)。其中CPU負責捕獲數(shù)據(jù)

33、包,并進行解碼與預處理等工作。而GPU負責具體的規(guī)則檢測。最終GPU將檢測結(jié)果發(fā)回CPU做進一步處理。(輸出)Gnort通過將數(shù)據(jù)包的模式匹配放到GPU上并行執(zhí)行,大大縮短匹配時間。實際測試中,其效率較CPU至少提升了一倍。,AC模式匹配算法簡介,AC算法思想:用多模式串建立一個確定性的樹形有限狀態(tài)機,以主串作為該有限狀態(tài)機的輸入,使狀態(tài)機進行狀態(tài)的轉(zhuǎn)換,當?shù)竭_某些特定的狀態(tài)時,說明發(fā)生模式匹配。AC模式匹配算法分為預處理階段與匹

溫馨提示

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

評論

0/150

提交評論