《Python工程應用-網絡信息安全》課件-chap8_第1頁
《Python工程應用-網絡信息安全》課件-chap8_第2頁
《Python工程應用-網絡信息安全》課件-chap8_第3頁
《Python工程應用-網絡信息安全》課件-chap8_第4頁
《Python工程應用-網絡信息安全》課件-chap8_第5頁
已閱讀5頁,還剩47頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

chap.8網絡安全編程網絡信息安全本章內容要點概述

網絡嗅探編程技術

網絡掃描編程技術

防火墻編程技術

入侵檢測編程技術計算機網絡技術產生源自于二戰(zhàn)后美國ARPA的網絡計劃。ARPA是美國國防部高級研究計劃局DARPA的前身,負責國防先進技術的研發(fā)。1968年ARPA為ARPAnet網絡項目立項。項目的主導思想是,網絡必須能夠經受住故障的考驗而維持正常工作,一旦發(fā)生戰(zhàn)爭,當網絡的某一部分因遭受攻擊而失去工作能力時,網絡的其它部分應當能夠維持正常通信。最初,ARPAnet主要用于軍事研究目的,并具有五大特點:(1)支持資源共享;(2)采用分布式控制技術(3)采用分組交換技術(4)使用通信控制處理機(5)采用分層的網絡通信協議。8.1.1計算機通信網TCP/IP傳輸協議,即傳輸控制/網絡協議,也叫做網絡通訊協議。它是在網絡的使用中的最基本的通信協議。

TCP/IP傳輸協議對互聯網中各部分進行通信的標準和方法進行了規(guī)定。并且,TCP/IP傳輸協議是保證網絡數據信息及時、完整傳輸的兩個重要的協議,是一個四層的體系結構,應用層、傳輸層、網絡層和數據鏈路層都包含其中。8.1.2TCP/IP協議TCP/IP協議能夠迅速發(fā)展起來并成為事實上的標準,完全適應了世界范圍內數據通信的需要。它有以下特點:(1)協議標準是完全開放的,可以供用戶免費使用,并且獨立于特定的計算機硬件與操作系統(tǒng)。(2)獨立于網絡硬件系統(tǒng),可以運行在廣域網,更適合于互聯網。(3)網絡地址統(tǒng)一分配,網絡中每一設備和終端都具有一個唯一地址。(4)高層協議標準化,可以提供多種多樣可靠網絡服務。實際上TCP/IP是一個協議簇,由多種協議組成,其中比較重要的有SLIP協議、PPP協議、IP協議、ICMP協議、ARP協議、TCP協議、UDP協議、FTP協議、DNS協議、SMTP協議等,如下圖所示8.1.3網絡安全技術網絡安全威脅互聯網是對全世界都開放的網絡,任何單位或個人都可以在網上方便地傳輸和獲取各種信息,互聯網這種具有開放性、共享性、國際性的特點就對計算機網絡安全提出了挑戰(zhàn)。互聯網的不安全性主要有以下幾項:(1)網絡的開放性(2)網絡的國際性(3)網絡的自由性因為這些缺陷,互聯網每時每刻都要遭受巨量的諸如:欺騙、越權、劫持、冒用、拒絕服務(DOS)、數據泄露等攻擊,造成損失無法估計的危害。2.網絡安全防御技術為了強化網絡安全,保護網絡數據安全,人們開發(fā)出各種安全技術,包括流量安全、防火墻、入侵防御、服務器安全幾個方面。(1)流量安全就是指通過監(jiān)聽、分析網絡節(jié)點流經的數流,進行安全保護。(2)防火墻技術屬于訪問控制的一種實現,訪問控制是保護與防范網絡安全的主要策略。(3)入侵檢測技術是近些年興起的網絡安全技術。該技術屬于一種動態(tài)安全技術,通過對入侵行為特點與入侵過程進行分析,然后做出實時響應。(4)服務器安全服務器是特殊的主機,主要用于實現信息、服務的網絡分發(fā)與共享。8.2.1網絡嗅探原理網絡嗅探亦稱為網絡監(jiān)聽技術,它本來是提供給網絡安全管理人員進行管理的工具,可以用來監(jiān)視網絡的狀態(tài)、數據流動情況以及網絡上傳輸的信息等。網絡嗅探器通過在網絡接口上監(jiān)聽數據包來實現。當數據包通過網絡接口時,嗅探器會捕獲它們并將其存儲在內存中以供進一步分析。嗅探器可以配置為捕獲特定類型的數據包,例如僅捕獲TCP數據包或僅捕獲來自特定IP地址的數據包。網絡嗅探器可以運行在多種設備上,包括計算機、路由器和交換機。它們可以使用硬件或軟件實現,例如Wireshark就是一款流行的開源網絡嗅探軟件。8.2網絡嗅探編程技術嗅探的操作按照如下步驟:(1)打開網卡,并設為混雜模式。(2)當調用的回調函數NetworkTap得到監(jiān)聽命令后,從網絡設備驅動程序處收集數據包把監(jiān)聽到的數據包負責傳送給過濾程序。(3)當Packetfilter監(jiān)聽到有數據包到達時,NDIS中間驅動程序首先調用分組驅動程序,該程序將數據傳遞給每一個參與進程的分組過濾程序。(4)然后由Packetfilter過濾程序決定哪些數據包應該丟棄,哪些數據包應該接收,是否需要將接收到的數據拷貝到相應的應用程序。(5)然后等待系統(tǒng)緩沖區(qū)滿后,再將數據包拷貝到用戶緩沖區(qū)。監(jiān)聽程序可以直接從用戶緩沖區(qū)中讀取捕獲的數據包。(6)關閉網卡。于python實施網絡流量嗅探,常用的第三方庫有:pylibpcap、pycapy、pypcap、impacket、scapy。其中,scapy是一個可用于網絡嗅探的非常強大的第三方庫,在這些庫中功能最強大使用也最靈活。它具有以下幾個特點:(1)支持交互模式,用作第三方庫。(2)可以用來做packet嗅探和偽造packet。(3)已經在內部實現了大量的網絡協議(DNS、ARP、IP、

TCP、UDP等等)。(4)可以用它來編寫非常靈活實用的工具。Scapy還能夠偽造或者解碼大量的網絡協議數據包,能夠發(fā)送、捕捉、匹配請求和回復包等等。Scapy的安裝可以使用pip工具,執(zhí)行如下命令安裝。Pipinstallscapy8.2.2網絡嗅探工具安裝8.2.3網絡嗅探編程1.網絡嗅探進行網絡嗅探首先要選擇一個本地存在的網絡接口,可以在scapy中使用ifaces指令查詢本地網絡接口,在cmd命令行窗口依次輸入“scapy”、“ifaces”命令查詢,效果如下圖

圖中顯示了本地IPv4的三個網絡接口。采用函數方法抓包,scapy抓包的主要函數sniff定義如下。prn指向一個回調函數,意為將收到的包丟給prn指向的函數處理(每收到一個包就丟到回調函數里執(zhí)行一下,執(zhí)行完了才再繼續(xù)抓包);filter為包過濾規(guī)則(語法參照tcpdump過濾規(guī)則)store為是否要存儲抓到的包(注意,如果沒有存儲則不會將抓到的包賦值給a,因為沒有存下就沒有東西可以賦,此參數默認開啟);timeout為抓包時長,比如抓30秒就結束(注意:如果沒有指定抓包時長,則會持續(xù)抓下去,程序會阻塞);iface為指定抓包的網絡接口??梢允褂煤瘮礗FACES.dev_from_index(INDEX)獲取接口,INDEX即為ifaces指令查到的接口索引值。抓包的代碼如下。fromscapy.allimport*

defpack_callback(packet):print(packet.show())ifpacket['Ether'].payload:print(packet['Ether'].src)print(packet['Ether'].dst)print(packet['Ether'].type)

ifpacket['ARP'].payload:print(packet['ARP'].psrc)print(packet['ARP'].pdst)print(packet['ARP'].hwsrc)print(packet['ARP'].hwdst)

filterstr="arp"sniff(filter=filterstr,prn=pack_callback,iface=IFACES.dev_from_index(12),count=0)2.數據包構造構造UDP數據包,并發(fā)送到網絡importsysimportstructfromscapy.allimport*

data=struct.pack('=BHI',0x12,20,1000)#?

pkt=IP(src='1',dst='0')/UDP(sport=12345,dport=5555)/data#?

print(pkt.show())#可以先通過pkt.show()函數查看數據包的構成部分send(pkt,inter=1,count=5)#?構造用戶數據為:0x12:unsignedshort;20:unsignedchar;1000:unsignedint?;然后由IP地址:1,端口12345,向IP地址0,端口5555發(fā)送UDP包?,間隔1s,共發(fā)送5次?。構造TCP數據包,并發(fā)送到網絡importsysimportstructfromscapy.allimport*

data=struct.pack('=BHI',0x12,20,1000)#?pkt=IP(src='1',dst='0')/UDP(sport=12345,dport=5555)/data#?整體封裝

print(pkt.show())#可以先通過pkt.show()函數查看數據包的構成部分send(pkt,inter=1,count=5)##?發(fā)送

3.流量監(jiān)控報警當局域網中有攻擊者運用ARP毒化,流量監(jiān)控報警就會在如果IP地址和MAC地址不對應時,就打印出不對應的字符,或者該局域網沒有的IP地址,也會打印沒有該主機。流量監(jiān)控報警代碼對于防黑客是有很大功效,當黑客發(fā)送一些異常數據報時,可以運用此段Python代碼來報警,告知管理員有異常數據報發(fā)來,并提示其做出相應的對策。相對wireshark抓包工具,這段代碼完全不需要網管員持續(xù)關注,代碼量極少,不但能抓包顯示,還能發(fā)出報警。8.3網絡掃描編程技術8.3.1網絡掃描基礎1.網絡掃描定義網絡掃描是探測遠端網絡或主機信息的一種技術。它是保證系統(tǒng)和網絡安全必不可少的一種手段。掃描可以協助網管人員洞察目標主機的運行情況和內在的弱點/漏洞。網絡安全掃描功能和步驟一般包括以下:首先,能夠探測一個主機或網絡的活動性。其次,探測何種服務正運行在這臺主機上,通常采用端口號的掃描進行識別。進一步可以對目標信息的服務軟件的版本、運行的服務、操作系統(tǒng)類型等進行搜索?;谶@些信息,可以了解目標系統(tǒng)的組成結構、網絡拓撲、網絡設備型號等;最后,掃描者根據線索做出判斷并且進一步測試網絡和主機系統(tǒng)存在的安全漏洞,可以通過各個步驟的掃描,搜索網絡、探測服務、發(fā)現漏洞,以此為依據,為漏洞提出解決方案。2.網絡掃描分類掃描技術按照掃描目標進行分類(1)主機掃描技術主機掃描技術也被稱為PING掃射,其目的是為了發(fā)現目標主機或網絡是否存活,采用的主要方法就是通過發(fā)送各種類型的ICMP或者TCP、UDP請求報文,通過報文發(fā)送結果判斷目標是否存活。(2)端口掃描技術端口掃描,顧名思義,就是逐個對一段端口或指定的端口進行掃描。通過掃描結果可以知道一臺計算機上都提供了哪些服務。(3)漏洞掃描漏洞掃描是對目標網絡或者目標主機進行安全漏洞檢測與分析,發(fā)現可能被攻擊者利用的漏洞。1.socke模塊socket(套接字)是應用層與傳輸層(TCP/UDP協議)的接口。它是對TCP/IP的封裝,也是操作系統(tǒng)的通信機制。2.Scapy模塊Scapy除了嗅探之外,還是一個功能強大的交互式數據包操作程序。3.

Impacket庫Impacket是一個Python類庫,用于對SMB1-3或IPv4/IPv6上的TCP、UDP、ICMP、IGMP、ARP、IPv4、IPv6、SMB、MSRPC、NTLM、Kerberos、WMI、LDAP等協議進行低級編程訪問的工具庫。4.Nmap等8.3.2掃描編程工具主機掃描主機掃描發(fā)現處于活動狀態(tài)的主機,是開展后續(xù)安全掃描的首要工作。使用ICMP詢問應答數據報(簡單主機掃描技術)是最常見的方法,具體步驟如下:(1)發(fā)送ICMPEchoRequest數據包到目標主機;(2)檢測回顯;(3)判斷主機存活情況。8.3.3掃描編程importos,sys,socket,struct,select,time

ICMP_ECHO_REQUEST=8#SeemstobethesameonSolaris.

defping(host,timeout=2,count=1):

#dest_addr=socket.gethostbyname(host)#?目標地址導入dest_addr=hostprint("ping%s..."%dest_addr)try:delay=do_one(dest_addr,timeout)exceptsocket.gaierrorase:print("failed.(socketerror:'%s')"%e)ifdelay==None:print("failed.(timeoutwithin%ssec.)"%timeout)else:delay=delay*1000print("getpingin%0.4fms"%delay)defdo_one(dest_addr,timeout):icmp=socket.getprotobyname("icmp")try:my_socket=socket.socket(socket.AF_INET,socket.SOCK_RAW,icmp)#?do_one函數進行ICMP包的發(fā)送exceptsocket.errorase:raise#raisetheoriginalerrormy_ID=os.getpid()&0xFFFFsend_one_ping(my_socket,dest_addr,my_ID)#?send_one_ping函數發(fā)送包delay=receive_one_ping(my_socket,my_ID,timeout)#?receive_one_ping函數接受目標的響應my_socket.close()returndelaydefsend_one_ping(my_socket,dest_addr,ID):my_checksum=0#?構造ICMP包header=struct.pack("bbHHh",ICMP_ECHO_REQUEST,0,my_checksum,ID,1)bytesInDouble=struct.calcsize("d")data=(192-bytesInDouble)*b"Q"data=struct.pack("d",cess_time())+datamy_checksum=checksum(header+data)header=struct.pack("bbHHh",ICMP_ECHO_REQUEST,0,socket.htons(my_checksum),ID,1)packet=header+datamy_socket.sendto(packet,(dest_addr,1))defchecksum(source_string):sum=0countTo=(len(source_string)/2)*2count=0whilecount<countTo:thisVal=(source_string[count+1]<<8)+source_string[count]sum=sum+thisValcount=count+2

ifcountTo<len(source_string):sum=sum+source_string[len(source_string)-1]sum=(sum>>16)+(sum&0xffff)sum=sum+(sum>>16)answer=~sumanswer=answer&0xffffanswer=answer>>8|(answer<<8&0xff00)returnanswerdefreceive_one_ping(my_socket,ID,timeout):timeLeft=timeoutwhileTrue:startedSelect=cess_time()whatReady=select.select([my_socket],[],[],timeLeft)howLongInSelect=(cess_time()-startedSelect)ifwhatReady[0]==[]:#超時Timeoutreturn

timeReceived=cess_time()recPacket,addr=my_socket.recvfrom(1024)icmpHeader=recPacket[20:28]type,code,checksum,packetID,sequence=struct.unpack("bbHHh",icmpHeader)iftype!=8andpacketID==ID:bytesInDouble=struct.calcsize("d")timeSent=struct.unpack("d",recPacket[28:28+bytesInDouble])[0]returntimeReceived-timeSent

timeLeft=timeLeft-howLongInSelectiftimeLeft<=0:return

if__name__=='__main__':des=input("輸入目標IP")ping(des)端口掃描(1)全連接掃描這是最基本的TCP掃描方法,也稱為“全連接掃描”(一次完整的TCP連接包括三次握手和四次揮手,),這里是使用操作系統(tǒng)提供的connect()函數來與目標主機的特定TCP端口進行連接嘗試。如果目標端口處于監(jiān)聽狀態(tài),connect()就可以連接成功;若該端口沒有開放,則會提示連接失敗。優(yōu)點是,不需要任何特殊權限,系統(tǒng)中任何用戶都可以調用connect()函數。而且掃描速度快。缺點是容易被安防軟件過濾,而且在目標主機的日志文件中會產生一系列的有關該服務連接建立并馬上斷開的錯誤信息。(2)半連接掃描TCPSYN掃描技術也稱為“半連接的掃描”,這種掃描只發(fā)送一個SYN數據包,若返回SYN/ACK數據包則表示目標端口處于監(jiān)聽狀態(tài),若返回RST數據包則表示該端口沒有開放。如果收到SYN/ACK數據包,則掃描程序再發(fā)送一個RST數據包來終止該連接過程。這種方法的優(yōu)點是比較隱蔽,因為它不需要建立一個完整的TCP連接,即使日志中對掃描有所記錄,但是嘗試進行連接的記錄也要比全掃描少得多。缺點是在大部分操作系統(tǒng)下,發(fā)送主機需要對掃描所使用IP包進行構造,比較麻煩,而且構造SYN數據包需要超級用戶或者授權用戶來訪問專門的系統(tǒng)調用。(3)UDP掃描UDP端口掃描與TCP掃描不同,是基于面向非連接的UPD協議對端口發(fā)起的探測。UDP掃描對目標端口發(fā)送特殊定制的UDP數據報文,則開放端口的端口回發(fā)送UDP反饋,關閉端口網絡會導致響應ICMPportunreachable的報文。通過判斷UDP回顯的報文,就可以探知端口是否開放,3.漏洞掃描為了提高網絡主機的安全性,在獲得地址和端口信息后,就可以針對不同的漏洞展開掃描,發(fā)現是否存在目標漏洞,為后續(xù)打補丁、改進安全策略提供參考。漏洞掃描的基本方法是,根據漏洞主機對掃描請求發(fā)出的響應所存在的特征進行判斷。何種響應被認為是存在漏洞,是根據漏洞挖掘的發(fā)現得到的。各種漏洞的響應特征各不相同。8.4.1防火墻技術原理1.防火墻概念

防火墻是指設置在不同網絡或網絡安全域(公共網和企業(yè)內部網)之間的一系列部件的組合。防火墻能增強機構內部網絡的安全性,保護內部網絡不遭受來自外部網絡的攻擊和執(zhí)行規(guī)定的訪問控制策略。

防火墻類似一堵城墻,將服務器與客戶主機進行物理隔離,并在此基礎上實現服務器與客戶主機之間的授權互訪、互通等功能。8.4防火墻編程技術2.防火墻功能防火墻的主要功能包括:(1)過濾不安全的服務和通信;(2)禁止未授權用戶訪問內部網絡;(3)控制對內網的訪問;(4)記錄相關的訪問事件。一個防火墻實現對整個網絡的分級訪問控制,將網絡分割成不同的安全等級區(qū)域。防火墻可以屏蔽部分主機,使外部網絡無法訪問,同樣可以屏蔽部分主機的特定服務,使得外部網絡可以訪問該主機的其它服務,但無法訪問該主機的特定服務。3.防火墻分類分組過濾(Packetfiltering):作用在網絡層和傳輸層,它根據分組包頭源地址、目的地址和端口號、協議類型等標志確定是否允許數據包通過。只有滿足過濾邏輯的數據包才被轉發(fā)到相應的目的地出口端,其余數據包則被從數據流中丟。應用代理(ApplicationProxy):亦稱應用網關,它作用在應用層,其特點是完全“阻隔”了網絡通信流,通過對每種應用服務編制專門的代理程序,實現監(jiān)視和控制應用層通信流的作用。實際中的應用網關通常由專用工作站實現。電路中繼(CircuitRelay):亦稱電路網關(CircuitGateway)或TCP代理(TCP-Proxy),其工作原理與應用代理類似,不同之處是該代理程序是專門為傳輸層的TCP協議編制的。Python的防火墻編程在Windows系統(tǒng)上實現可以采用兩種思路。方法一:基于Ctype調用系統(tǒng)API。ctypes是Python的一個外部庫,提供和C語言兼容的數據類型,可以很方便地調用DLL中輸出的C接口函數。Python的ctypes要使用C函數,需要先將C編譯成動態(tài)鏈接庫的形式,即Windows下的.dll文件。一般,在Windows下進行API函數的調用要經過:加載動態(tài)鏈接庫、從加載的動態(tài)鏈接庫訪問函數(在Windows上,有些dll不按名稱導出函數,而是按順序導出函數,可以通過使用序號索引導出函數)、調用函數三個步驟。fromctypesimport*msvcrt=cdll.LoadLibrary('msvcrt')foriin'love':msvcrt.printf(i)8.4.2防火墻編程工具方法二:基于Win10的Linux子系統(tǒng)?;赪SL可以展開基于Linux的防火墻編程,需要如下工具和規(guī)則支持。1.netfilter/iptables工具netfilter/iptables組成Linux平臺下的包過濾防火墻,可以代替昂貴的商業(yè)防火墻解決方案,完成封包過濾、封包重定向和網絡地址轉換(NAT)等功能2.iptables規(guī)則iptables是按照規(guī)則(rules)來檢測流經的數據包3.規(guī)則鏈與規(guī)則表防火墻的作用就在于對經過的報文匹配“規(guī)則”,然后執(zhí)行對應的“動作”進一步,可將實現相同功能的規(guī)則放在一起,就形成了規(guī)則表。則不同功能的規(guī)則,可以放置在不同的表中進行管理。iptables已經為我們定義了4種表,每種表對應了不同的功能。filter表:負責過濾功能,防火墻;內核模塊:iptables_filter;nat表:networkaddresstranslation,網絡地址轉換功能;內核模塊:iptable_nat;mangle表:拆解報文,做出修改,并重新封裝的功能;iptable_mangle;raw表:關閉nat表上啟用的連接追蹤機制;iptable_raw。有了鏈和表,就可以把二者聯系起來:PREROUTING的規(guī)則可以存在于:raw表、mangle表、nat表。INPUT的規(guī)則可以存在于:mangle表、filter表。FORWARD的規(guī)則可以存在于:mangle表、filter表。OUTPUT的規(guī)則可以存在于:raw表mangle表、nat表、filter表。POSTROUTING的規(guī)則可以存在于:mangle表、nat表。4.匹配條件與處理動作

基于鏈和表可以對流經的數據包進行匹配,匹配條件分為基本匹配條件與擴展匹配條件。1)基本匹配條件:源地址SourceIP,目標地址DestinationIP。2)擴展匹配條件:除了基本條件可以用于匹配,還有很多其他的條件可以用于匹配,這些條件泛稱為擴展條件,這些擴展條件其實也是netfilter中的一部分,只是以模塊的形式存在,如果想要使用這些條件,則需要依賴對應的擴展模塊。根據匹配結果實施處理動作。處理動作在iptables中被稱為target,動作分為基本動作和擴展動作。常用的匹配動作如下:ACCEPTDROPREJECTSNATMASQUERADEDNATREDIRECTLOGimportiptcimporttimeimportmyloggerfromSimpleXMLRPCServerimportSimpleXMLRPCServerfromapscheduler.schedulerimportScheduler

vmrouters=set()logger=mylogger.Logger(logname='myiptc.log',logger='myiptc').getlog()

deftask():logger.debug('rollingtask')formacinvmrouters:try:istarget=insert(mac)if(istarget==0):vmrouters.remove(mac)logger.debug('rollingtaskremovenotmatchtarget'+mac)exceptException,e:logger.error(e)

8.4.3防火墻編程技術defadd_rule(mac):logger.debug('add_rule'+mac)ret='success'try:istarget=insert(mac)#?調用insert函數為目標機添加規(guī)則if(istarget==1):vmrouters.add(mac)else:ret='error'logger.error('nomatchtarget'+mac)exceptException,e:logger.error(e)ret='error'returnret

definsert(mac):istarget=0try:existrule=0table=iptc.Table(iptc.Table.FILTER)forchainintable.chains:if(.startswith('neutron-openvswi-s')):breakforruleinchain.rules:formatchinrule.matches:if(match.mac_source==mac.upper()):istarget=1breakif(rule.src.startswith('/')andrule.dst.startswith('/0')and\=='RETURN'):existrule=1

if(istarget==1andexistrule==0):rule=iptc.Rule()rule.src='/'rule.dst='/'target=iptc.Target(rule,'RETURN')rule.target=targetchain.insert_rule(rule)

if(istarget==1andexistrule==1):logger.debug(mac+'rulealreadyadded')

exceptException,e:logger.error(e)returnistarget

if__name__=='__main__':sched=Scheduler(daemonic=False)sched.add_cron_job(task,day_of_week='*',hour='*',minute='*/5',second='*')#?定期(5分鐘)檢測新增的規(guī)則是否還存在,如果不存在則添加sched.start()

server=SimpleXMLRPCServer(('2',4501),allow_none=True)logger.debug('Listeningonport4501...')server.register_function(add_rule,'add_rule')#?添加規(guī)則調用add_rule函數server.serve_forever()8.5入侵檢測編程技術8.5.1入侵檢測技術原理入侵檢測概念入侵(Intrusion)是指未經授權蓄意嘗試訪問信息、竄改信息,使系統(tǒng)不可靠或不能使用的行為。入侵檢測(IntrusionDetection)是對入侵行為的發(fā)覺,而入侵檢測技術(IntrusionDetectionTechnology)是指對入侵行為進行檢測的技術。入侵檢測系統(tǒng)(IntrusionDetectionSystem,IDS)是指進行入侵檢測的軟件與硬件的組合。入侵檢測技術的提出與防火墻的局限性直接關系:防火墻不能防止通向站點的后門;防火墻一般不提供對內部的保護;防火墻無法防范數據驅動型的攻擊;防火墻不能防止用戶在Internet上下載被病毒感染的計算機程序或者電子郵件病毒附件的傳輸。2.入侵檢測分類根據信息源的不同,分為基于主機的IDS和基于網絡的IDS兩大類。(1)基于主機的入侵檢測系統(tǒng)(Host-BasedIDS,HIDS)HIDS的系統(tǒng)安裝在主機上面,對本主機進行安全檢測。優(yōu)點:性能價格比高;審計內容全面;視野集中;適用于加密和交換環(huán)境。缺點:額外產生的安全問題;HIDS依賴性強;如果主機數目多,代價過大;不能監(jiān)控網絡上的情況。(2)基于網絡的入侵檢測系統(tǒng)(Network-BasedIDS,NIDS)NIDS的系統(tǒng)安裝在比較重要的網段內。優(yōu)點:檢測范圍廣;無需改變主機配置和性能;獨立性和操作系統(tǒng)無關性;安裝方便。缺點:不能檢測不同網段的網絡包;很難檢測復雜的需要大量計算的攻擊;協同工作能力弱;難以處理加密的會話。3.入侵檢測系統(tǒng)結構4.入侵檢測的分析方式(1)異常檢測異常檢測是指根據使用者的行為或資源的使用情況來判斷是否入侵,而不依賴于具體行為是否出現來檢測。其優(yōu)缺點是:與系統(tǒng)相對無關,通用性強、能檢測出新的攻擊方法、誤檢率較高。(2)誤用檢測誤用檢測是指設定一些入侵活動的特征,通過現在的活動是否與這些特征匹配來檢測。這類分析檢測技術首先建立各類入侵的行為模式,對它們進行標識或編碼,建立誤用模式庫;在運行中,誤用檢測方法對來自數據源的數據進行分析檢測,檢查是否存在已知的誤用模式。誤用模式的缺陷在于只能檢測已知的攻擊。當出現新的攻擊手段時,一般需要在由人工得到新的攻擊模式并添加到誤用模式庫。IDS的構造需要考慮這方面的可擴展性和方便性。Snort工具2.sklearn庫8.5.2入侵檢測編程工具1.基于Snortimportsubprocess

command='snort-de-cC:\Snort\etc\snort.conf-lC:\Snort\log-rc:\Packets.pcap'process=subprocess.Popen(command,shell=True,stdout=subprocess.PIPE)process.wait()print(process.returncode)Snort記錄的事件均記錄在日志里,如下是Snort日志示例,可以通過對該種日志的分析實現入侵檢測。[**]INFO-ICQAccess[**][Classification:content:"MKD/"][Priority:1]05/10-10:02:31.953089.:54835->:80TCPTTL:127TOS:0x0ID:13690IpLen:20DgmLen:482DF***AP***Seq:0x112BDD12Ack:0x11B38D8AWin:0x4510TcpLen:208.5.2入侵檢測編程基于Snort日志,實現日志分析檢測defsnort_parse(logfile):header=Suppress("[**][")+Combine(integer+":"+integer+":"+integer)+\Suppress("]")+Regex(".*")+Suppress("[**]")cls=Optional(Suppress("[Classification:")+Regex(".*")+Suppress("]"))pri=Suppress("[Priority:")+integer+Suppress("]")date=integer+"/"+integer+"-"+integer+":"+integer+"."+Suppress(integer)src_ip=ip_addr+Suppress("->")dest_ip=ip_addrextra=Regex(".*")bnf=header+cls+pri+date+src_ip+dest_ip+extra

returnbnf

deflogreader(logfile):chunk=[]withopen(logfile)assnort_logfile:forlineinsnort_logfile:ifline!='\n':line=line[:-1]chunk.append(line)continueelse:yield"".join(chunk)chunk=[]returnchunk2.淺層特征分析importdpktimportsocket

defFindDDosAttack(pcap):pktCount={}#?建立一個計數字典pktCount記錄各訪問的次數fortimestamp,packetinpcap:try:eth=dpkt.ethernet.Ethernet(packet)ip=eth.datatcp=ip.datasrc=socket.inet_ntoa(ip.src)dst=socket.inet_ntoa(ip.dst)sport=tcp.sport#累計判斷各個src地址對目標地址80端口訪問次數ifsport==80:stream=src+":"+dstifpktCount.has_key(stream):#?記錄訪問并計數pktCount[stream]=pktCount[stream]+1else:pktCount[stream]=1exceptException:passforstreaminpktCount:pktSent=pktCount[stream]#?如果超過設置的檢測閾值500,則判斷為DDOS攻擊行為ifpktSent>500:src=stream.split(":")[0]dst=stream.split(":")[1]print("[+]源地址:{}攻擊:{}流量:{}pkts.".format(src,dst,str(pktSent)))#?對檢出的DDOS攻擊地址和訪問次數打印顯示

if__name__=="__main__":try:fp=open("D://data.pcap","rb")pcap=dpkt.pcap.Reader(fp)FindDDosAttack(pcap)except:print("數據包文件不存在或打開錯誤!")3.基于機器學習的入侵檢測

importnumpyasnpfromsklearn.linear_modelimportLogisticRegressionimportjoblibfromsklearn.model_selectionimporttrain_test_split

deftrain():feature,weight=ReadData(r'kddcup.data.corrected')#?讀取數據Classify(feature,weight)

defReadData(path):data=open(path).readlines()#按行讀,一行為列表的一個元素

data=np.array([i.split(',')foriindata])#?拆解成(n,42)的二維張量data[:,-1]=[i.replace('\n','').replace('.','')foriindata[:,-1]]#去掉末尾的回車符print("originaldata.shapeis",data.shape)data_r=np.zeros(shape=data.shape)#創(chuàng)建一個與data的shape一樣的空張量data_r[:,0]=[float(i)foriindata[:,0]]#data[:,i]表示矩陣第i列的值foriinrange(4,40):#進行參數整理data_r[:,i]=[float(j)forjindata[:,i]]#?記錄量化參量

#?對于非量化的

溫馨提示

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

最新文檔

評論

0/150

提交評論