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

下載本文檔

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

文檔簡介

1、SNORT原理簡介與優(yōu)化及GNORT初探,劉斐然,主要內(nèi)容,Snort原理是什么?Snort在實(shí)際應(yīng)用中的缺陷有哪些?如何對Snort進(jìn)行優(yōu)化?Gnort初探。,入侵檢測系統(tǒng)的基本結(jié)構(gòu),入侵檢測系統(tǒng)通常包括三功能部件:信息收集,其來源如下:系統(tǒng)或網(wǎng)絡(luò)的日志文件網(wǎng)絡(luò)流量系統(tǒng)目錄或文件的異常變化程序執(zhí)行中的異常行為信息分析模式匹配統(tǒng)計(jì)分析完整性分析結(jié)果處理對異常進(jìn)行記錄/報(bào)警等,入侵檢測系統(tǒng)分類,Snort--

2、基于特征檢測的NIDS,在1998年,Martin Roesch先生用C語言開發(fā)了開放源代碼(Open Source)的入侵檢測系統(tǒng)Snort.直至今天,Snort已發(fā)展成為一個(gè)多平臺(tái)(Multi-Platform),實(shí)時(shí)(Real-Time)流量分析,網(wǎng)絡(luò)IP數(shù)據(jù)包記錄等特性的強(qiáng)大的網(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)路入侵檢測模式是最復(fù)雜的,而且是可配置的。我們可以讓snort分析網(wǎng)絡(luò)數(shù)據(jù)流以匹配用戶定義的一些規(guī)則,并根據(jù)檢測結(jié)果采取一定的動(dòng)作。,Snort的結(jié)構(gòu)組成,Snort主要包含以下模塊:數(shù)據(jù)包捕獲模塊:通過DAQ調(diào)用底層函數(shù)庫,捕獲來自網(wǎng)絡(luò)的數(shù)據(jù)包解碼模塊對捕獲的

4、數(shù)據(jù)包進(jìn)行協(xié)議解碼預(yù)處理模塊以插件形式存在,對IP分片進(jìn)行重組,防止ARP欺騙等等規(guī)則匹配模塊根據(jù)設(shè)置的規(guī)則對數(shù)據(jù)包進(jìn)行匹配輸出模塊以插件形式存在,當(dāng)匹配成功時(shí)進(jìn)行記錄或報(bào)警,Snort原理分析--數(shù)據(jù)包解碼,在Snort內(nèi)部用Packet數(shù)據(jù)結(jié)構(gòu)表示一個(gè)數(shù)據(jù)包。數(shù)據(jù)包解碼模塊負(fù)責(zé)根據(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ù)包預(yù)處理簡介,解碼后的數(shù)據(jù)包還需經(jīng)過預(yù)處理才能被主探測引擎進(jìn)行規(guī)則匹配。預(yù)處理器的主要用來應(yīng)對一些IDS攻擊手段。其作用包括:針對可以行為檢查包或修改包,以便探測引擎能對其正確解釋。負(fù)責(zé)對流量標(biāo)準(zhǔn)化,以便探測引擎能精確匹配特征。目前已知的IDS逃避技術(shù)主要有:多態(tài)URL編碼;多態(tài)shellcode;會(huì)話分割;IP碎片;,Sno

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

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

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

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

10、來源與目地的端口等。規(guī)則選項(xiàng)(Rules Options)包含匹配內(nèi)容,匹配位置,報(bào)警信息,引用說明等等。例: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ī)則選項(xiàng)由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負(fù)責(zé)初始化。首先讀入一行規(guī)則,傳給ParseRule函數(shù)進(jìn)行分析。ParseRule函數(shù)會(huì)將規(guī)則頭取出并進(jìn)行拆分,然后執(zhí)行如下函數(shù)對RTN進(jìn)行初始化: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ù)標(biāo)志位不同可選用如下幾個(gè):CheckSrcPortNotEq/CheckSrcPortEq/CheckDstPortNotEq/CheckDstPortEqualCheckSrcIP/CheckDstIPRuleListEnd:rule_func的鏈結(jié)尾函數(shù)匹配RTN時(shí)會(huì)依次執(zhí)行r

15、ule_func鏈表中的函數(shù)進(jìn)行匹配,如匹配不成功則返回0。最終如果執(zhí)行到RuleListEnd函數(shù)則表明匹配成功。,Snort原理分析--OTN初始化,與檢測RTN不同,系統(tǒng)檢測OTN時(shí)會(huì)用到規(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ī)則鏈,進(jìn)行關(guān)鍵字匹配,如匹配成功則執(zhí)行其對應(yīng)的檢測初始化函數(shù)檢測初始化函數(shù)負(fù)責(zé)將需要的數(shù)據(jù)指針添加到OTN的ds_list中,并將檢測函數(shù)

17、插入OTN的opt_func鏈表中最后將OptListEnd插入到opt_func鏈的末尾,Snort原理分析--快速規(guī)則匹配初始化,fpCreateFastPacketDetection:構(gòu)建快速規(guī)則匹配結(jié)構(gòu):第一層是由四個(gè)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ù)包進(jìn)行規(guī)則檢測,首先判斷是TCP,UDP或者ICMP協(xié)議,然后調(diào)用相關(guān)函數(shù):fpEvalHeaderTcp,fpEvalHeaderUdp,fpEvalHeaderIcmp進(jìn)行處理。如均不是則調(diào)用fpEvalHeaderI

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

20、opt_func鏈中的所有規(guī)則匹配函數(shù)。如均執(zhí)行成功,則繼續(xù)運(yùn)行其指向RTN中的rule_func鏈中的匹配函數(shù)。如均匹配成功,則最后會(huì)調(diào)用輸出插件進(jìn)行輸出。,Snort目前存在的問題,snort是一款輕量級(jí)的網(wǎng)絡(luò)入侵檢測系統(tǒng)。如果將其應(yīng)用在大規(guī)模、大流量的網(wǎng)絡(luò)中,snort的報(bào)警性能會(huì)非常低下??梢妔nort以下兩方面的效率還無法滿足我們的需求:數(shù)據(jù)包捕獲效率數(shù)據(jù)包分析處理效率改進(jìn)思路為:首先需保證snort可以捕獲到網(wǎng)

21、絡(luò)中的所有數(shù)據(jù)包。然后需要保證這些數(shù)據(jù)包可以及時(shí)得到處理。,高效的數(shù)據(jù)包捕獲接口--PF_RING,PF_RING是一個(gè)第三方的內(nèi)核數(shù)據(jù)包捕獲接口,類似于libpcap。它提供一種PF_RING類型的套接字,大大增加了數(shù)據(jù)包捕獲的效率。它包括三方面的內(nèi)容:網(wǎng)卡驅(qū)動(dòng)程序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隊(duì)列中置軟中斷位do_softirqnet_rx_actioniprecvIP層檢查數(shù)據(jù)有效性TCP/UDP協(xié)議處理喚醒用戶層進(jìn)程,PF_RING數(shù)據(jù)包捕獲流程,PF_RING有三種數(shù)據(jù)包捕獲模式,由插

23、入模塊時(shí)的參數(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ū)動(dòng),數(shù)據(jù)包捕獲優(yōu)化性能對比,首先進(jìn)行千兆網(wǎng)絡(luò)中小數(shù)據(jù)包高頻率的測試,單數(shù)據(jù)包大小選取6字節(jié),分別測試發(fā)送1000到20000個(gè)數(shù)據(jù)包,測試結(jié)果如下:,數(shù)據(jù)包捕獲優(yōu)化性能對比,然后進(jìn)行千兆網(wǎng)絡(luò)中大數(shù)據(jù)包高帶寬的測試,數(shù)據(jù)包發(fā)送個(gè)數(shù)1000,分別測試包大小從6B至1K時(shí)的報(bào)警數(shù)量,測試結(jié)果如下:,邁向萬兆網(wǎng)絡(luò),用PF_

25、RING優(yōu)化過的snort,已經(jīng)完全滿足了千兆網(wǎng)絡(luò)的要求。但是對于每秒幾十Gbit的網(wǎng)絡(luò)流量來說,千兆網(wǎng)絡(luò)還遠(yuǎn)遠(yuǎn)不夠。我們需要一種可以工作在萬兆網(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隊(duì)列分解為多個(gè),每個(gè)對應(yīng)一個(gè)核。MSI-X使得設(shè)備可以最多分配2048個(gè)中斷,而且每個(gè)都可以有獨(dú)立的地址。但是常規(guī)內(nèi)核無法發(fā)揮其優(yōu)勢,原因?yàn)椋翰僮飨到y(tǒng)合并多個(gè)RX到單個(gè)ethX接口,對于萬兆網(wǎng)絡(luò)是不可接受的多個(gè)線程將競爭同一個(gè)ethX,萬兆網(wǎng)絡(luò)數(shù)據(jù)包捕獲--TNAPI,TNAPI通過將內(nèi)核RX隊(duì)列直接暴露給用戶態(tài)程序。使得:流量真正分布到多個(gè)核同時(shí)從每個(gè)RX隊(duì)列輪詢包通過PF_RING,應(yīng)用層可以針對每個(gè)RX隊(duì)列分配一個(gè)

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

28、的問題,還通過開啟多個(gè)Snort進(jìn)程解決了數(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ū)動(dòng)模塊時(shí),設(shè)置IntMode參數(shù)為3:insmod ./.ko IntMo

29、de=3 (enables MSI-X)用ICC編譯snort程序(ICC會(huì)對將程序針對intel平臺(tái)進(jìn)行優(yōu)化)針對每塊萬兆網(wǎng)卡,啟動(dòng)12個(gè)snort進(jìn)程: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) 負(fù)責(zé)將數(shù)據(jù)包拷貝到ring中,大大節(jié)省了CPU資源。,Snort multiprocessing with PF_RING+DNA,DNA 也可以將網(wǎng)卡RX隊(duì)列分為多個(gè),但是每個(gè)隊(duì)列只能由一個(gè)用戶態(tài)進(jìn)程訪問。其RX隊(duì)列上限會(huì)被具體硬件所限制。(現(xiàn)代的NIC一般可分16個(gè)以上的RX隊(duì)列)安裝方法如下:編譯并插入

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

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

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論