版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
chap.8网络安全编程网络信息安全本章内容要点概述
网络嗅探编程技术
网络扫描编程技术
防火墙编程技术
入侵检测编程技术计算机网络技术产生源自于二战后美国ARPA的网络计划。ARPA是美国国防部高级研究计划局DARPA的前身,负责国防先进技术的研发。1968年ARPA为ARPAnet网络项目立项。项目的主导思想是,网络必须能够经受住故障的考验而维持正常工作,一旦发生战争,当网络的某一部分因遭受攻击而失去工作能力时,网络的其它部分应当能够维持正常通信。最初,ARPAnet主要用于军事研究目的,并具有五大特点:(1)支持资源共享;(2)采用分布式控制技术(3)采用分组交换技术(4)使用通信控制处理机(5)采用分层的网络通信协议。8.1.1计算机通信网TCP/IP传输协议,即传输控制/网络协议,也叫做网络通讯协议。它是在网络的使用中的最基本的通信协议。
TCP/IP传输协议对互联网中各部分进行通信的标准和方法进行了规定。并且,TCP/IP传输协议是保证网络数据信息及时、完整传输的两个重要的协议,是一个四层的体系结构,应用层、传输层、网络层和数据链路层都包含其中。8.1.2TCP/IP协议TCP/IP协议能够迅速发展起来并成为事实上的标准,完全适应了世界范围内数据通信的需要。它有以下特点:(1)协议标准是完全开放的,可以供用户免费使用,并且独立于特定的计算机硬件与操作系统。(2)独立于网络硬件系统,可以运行在广域网,更适合于互联网。(3)网络地址统一分配,网络中每一设备和终端都具有一个唯一地址。(4)高层协议标准化,可以提供多种多样可靠网络服务。实际上TCP/IP是一个协议簇,由多种协议组成,其中比较重要的有SLIP协议、PPP协议、IP协议、ICMP协议、ARP协议、TCP协议、UDP协议、FTP协议、DNS协议、SMTP协议等,如下图所示8.1.3网络安全技术网络安全威胁互联网是对全世界都开放的网络,任何单位或个人都可以在网上方便地传输和获取各种信息,互联网这种具有开放性、共享性、国际性的特点就对计算机网络安全提出了挑战。互联网的不安全性主要有以下几项:(1)网络的开放性(2)网络的国际性(3)网络的自由性因为这些缺陷,互联网每时每刻都要遭受巨量的诸如:欺骗、越权、劫持、冒用、拒绝服务(DOS)、数据泄露等攻击,造成损失无法估计的危害。2.网络安全防御技术为了强化网络安全,保护网络数据安全,人们开发出各种安全技术,包括流量安全、防火墙、入侵防御、服务器安全几个方面。(1)流量安全就是指通过监听、分析网络节点流经的数流,进行安全保护。(2)防火墙技术属于访问控制的一种实现,访问控制是保护与防范网络安全的主要策略。(3)入侵检测技术是近些年兴起的网络安全技术。该技术属于一种动态安全技术,通过对入侵行为特点与入侵过程进行分析,然后做出实时响应。(4)服务器安全服务器是特殊的主机,主要用于实现信息、服务的网络分发与共享。8.2.1网络嗅探原理网络嗅探亦称为网络监听技术,它本来是提供给网络安全管理人员进行管理的工具,可以用来监视网络的状态、数据流动情况以及网络上传输的信息等。网络嗅探器通过在网络接口上监听数据包来实现。当数据包通过网络接口时,嗅探器会捕获它们并将其存储在内存中以供进一步分析。嗅探器可以配置为捕获特定类型的数据包,例如仅捕获TCP数据包或仅捕获来自特定IP地址的数据包。网络嗅探器可以运行在多种设备上,包括计算机、路由器和交换机。它们可以使用硬件或软件实现,例如Wireshark就是一款流行的开源网络嗅探软件。8.2网络嗅探编程技术嗅探的操作按照如下步骤:(1)打开网卡,并设为混杂模式。(2)当调用的回调函数NetworkTap得到监听命令后,从网络设备驱动程序处收集数据包把监听到的数据包负责传送给过滤程序。(3)当Packetfilter监听到有数据包到达时,NDIS中间驱动程序首先调用分组驱动程序,该程序将数据传递给每一个参与进程的分组过滤程序。(4)然后由Packetfilter过滤程序决定哪些数据包应该丢弃,哪些数据包应该接收,是否需要将接收到的数据拷贝到相应的应用程序。(5)然后等待系统缓冲区满后,再将数据包拷贝到用户缓冲区。监听程序可以直接从用户缓冲区中读取捕获的数据包。(6)关闭网卡。于python实施网络流量嗅探,常用的第三方库有:pylibpcap、pycapy、pypcap、impacket、scapy。其中,scapy是一个可用于网络嗅探的非常强大的第三方库,在这些库中功能最强大使用也最灵活。它具有以下几个特点:(1)支持交互模式,用作第三方库。(2)可以用来做packet嗅探和伪造packet。(3)已经在内部实现了大量的网络协议(DNS、ARP、IP、
TCP、UDP等等)。(4)可以用它来编写非常灵活实用的工具。Scapy还能够伪造或者解码大量的网络协议数据包,能够发送、捕捉、匹配请求和回复包等等。Scapy的安装可以使用pip工具,执行如下命令安装。Pipinstallscapy8.2.2网络嗅探工具安装8.2.3网络嗅探编程1.网络嗅探进行网络嗅探首先要选择一个本地存在的网络接口,可以在scapy中使用ifaces指令查询本地网络接口,在cmd命令行窗口依次输入“scapy”、“ifaces”命令查询,效果如下图
图中显示了本地IPv4的三个网络接口。采用函数方法抓包,scapy抓包的主要函数sniff定义如下。prn指向一个回调函数,意为将收到的包丢给prn指向的函数处理(每收到一个包就丢到回调函数里执行一下,执行完了才再继续抓包);filter为包过滤规则(语法参照tcpdump过滤规则)store为是否要存储抓到的包(注意,如果没有存储则不会将抓到的包赋值给a,因为没有存下就没有东西可以赋,此参数默认开启);timeout为抓包时长,比如抓30秒就结束(注意:如果没有指定抓包时长,则会持续抓下去,程序会阻塞);iface为指定抓包的网络接口。可以使用函数IFACES.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数据包,并发送到网络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发送UDP包❷,间隔1s,共发送5次❸。构造TCP数据包,并发送到网络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)##❸发送
3.流量监控报警当局域网中有攻击者运用ARP毒化,流量监控报警就会在如果IP地址和MAC地址不对应时,就打印出不对应的字符,或者该局域网没有的IP地址,也会打印没有该主机。流量监控报警代码对于防黑客是有很大功效,当黑客发送一些异常数据报时,可以运用此段Python代码来报警,告知管理员有异常数据报发来,并提示其做出相应的对策。相对wireshark抓包工具,这段代码完全不需要网管员持续关注,代码量极少,不但能抓包显示,还能发出报警。8.3网络扫描编程技术8.3.1网络扫描基础1.网络扫描定义网络扫描是探测远端网络或主机信息的一种技术。它是保证系统和网络安全必不可少的一种手段。扫描可以协助网管人员洞察目标主机的运行情况和内在的弱点/漏洞。网络安全扫描功能和步骤一般包括以下:首先,能够探测一个主机或网络的活动性。其次,探测何种服务正运行在这台主机上,通常采用端口号的扫描进行识别。进一步可以对目标信息的服务软件的版本、运行的服务、操作系统类型等进行搜索。基于这些信息,可以了解目标系统的组成结构、网络拓扑、网络设备型号等;最后,扫描者根据线索做出判断并且进一步测试网络和主机系统存在的安全漏洞,可以通过各个步骤的扫描,搜索网络、探测服务、发现漏洞,以此为依据,为漏洞提出解决方案。2.网络扫描分类扫描技术按照扫描目标进行分类(1)主机扫描技术主机扫描技术也被称为PING扫射,其目的是为了发现目标主机或网络是否存活,采用的主要方法就是通过发送各种类型的ICMP或者TCP、UDP请求报文,通过报文发送结果判断目标是否存活。(2)端口扫描技术端口扫描,顾名思义,就是逐个对一段端口或指定的端口进行扫描。通过扫描结果可以知道一台计算机上都提供了哪些服务。(3)漏洞扫描漏洞扫描是对目标网络或者目标主机进行安全漏洞检测与分析,发现可能被攻击者利用的漏洞。1.socke模块socket(套接字)是应用层与传输层(TCP/UDP协议)的接口。它是对TCP/IP的封装,也是操作系统的通信机制。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扫描编程工具主机扫描主机扫描发现处于活动状态的主机,是开展后续安全扫描的首要工作。使用ICMP询问应答数据报(简单主机扫描技术)是最常见的方法,具体步骤如下:(1)发送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包的发送exceptsocket.errorase:raise#raisetheoriginalerrormy_ID=os.getpid()&0xFFFFsend_one_ping(my_socket,dest_addr,my_ID)#❸send_one_ping函数发送包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连接包括三次握手和四次挥手,),这里是使用操作系统提供的connect()函数来与目标主机的特定TCP端口进行连接尝试。如果目标端口处于监听状态,connect()就可以连接成功;若该端口没有开放,则会提示连接失败。优点是,不需要任何特殊权限,系统中任何用户都可以调用connect()函数。而且扫描速度快。缺点是容易被安防软件过滤,而且在目标主机的日志文件中会产生一系列的有关该服务连接建立并马上断开的错误信息。(2)半连接扫描TCPSYN扫描技术也称为“半连接的扫描”,这种扫描只发送一个SYN数据包,若返回SYN/ACK数据包则表示目标端口处于监听状态,若返回RST数据包则表示该端口没有开放。如果收到SYN/ACK数据包,则扫描程序再发送一个RST数据包来终止该连接过程。这种方法的优点是比较隐蔽,因为它不需要建立一个完整的TCP连接,即使日志中对扫描有所记录,但是尝试进行连接的记录也要比全扫描少得多。缺点是在大部分操作系统下,发送主机需要对扫描所使用IP包进行构造,比较麻烦,而且构造SYN数据包需要超级用户或者授权用户来访问专门的系统调用。(3)UDP扫描UDP端口扫描与TCP扫描不同,是基于面向非连接的UPD协议对端口发起的探测。UDP扫描对目标端口发送特殊定制的UDP数据报文,则开放端口的端口回发送UDP反馈,关闭端口网络会导致响应ICMPportunreachable的报文。通过判断UDP回显的报文,就可以探知端口是否开放,3.漏洞扫描为了提高网络主机的安全性,在获得地址和端口信息后,就可以针对不同的漏洞展开扫描,发现是否存在目标漏洞,为后续打补丁、改进安全策略提供参考。漏洞扫描的基本方法是,根据漏洞主机对扫描请求发出的响应所存在的特征进行判断。何种响应被认为是存在漏洞,是根据漏洞挖掘的发现得到的。各种漏洞的响应特征各不相同。8.4.1防火墙技术原理1.防火墙概念
防火墙是指设置在不同网络或网络安全域(公共网和企业内部网)之间的一系列部件的组合。防火墙能增强机构内部网络的安全性,保护内部网络不遭受来自外部网络的攻击和执行规定的访问控制策略。
防火墙类似一堵城墙,将服务器与客户主机进行物理隔离,并在此基础上实现服务器与客户主机之间的授权互访、互通等功能。8.4防火墙编程技术2.防火墙功能防火墙的主要功能包括:(1)过滤不安全的服务和通信;(2)禁止未授权用户访问内部网络;(3)控制对内网的访问;(4)记录相关的访问事件。一个防火墙实现对整个网络的分级访问控制,将网络分割成不同的安全等级区域。防火墙可以屏蔽部分主机,使外部网络无法访问,同样可以屏蔽部分主机的特定服务,使得外部网络可以访问该主机的其它服务,但无法访问该主机的特定服务。3.防火墙分类分组过滤(Packetfiltering):作用在网络层和传输层,它根据分组包头源地址、目的地址和端口号、协议类型等标志确定是否允许数据包通过。只有满足过滤逻辑的数据包才被转发到相应的目的地出口端,其余数据包则被从数据流中丢。应用代理(ApplicationProxy):亦称应用网关,它作用在应用层,其特点是完全“阻隔”了网络通信流,通过对每种应用服务编制专门的代理程序,实现监视和控制应用层通信流的作用。实际中的应用网关通常由专用工作站实现。电路中继(CircuitRelay):亦称电路网关(CircuitGateway)或TCP代理(TCP-Proxy),其工作原理与应用代理类似,不同之处是该代理程序是专门为传输层的TCP协议编制的。Python的防火墙编程在Windows系统上实现可以采用两种思路。方法一:基于Ctype调用系统API。ctypes是Python的一个外部库,提供和C语言兼容的数据类型,可以很方便地调用DLL中输出的C接口函数。Python的ctypes要使用C函数,需要先将C编译成动态链接库的形式,即Windows下的.dll文件。一般,在Windows下进行API函数的调用要经过:加载动态链接库、从加载的动态链接库访问函数(在Windows上,有些dll不按名称导出函数,而是按顺序导出函数,可以通过使用序号索引导出函数)、调用函数三个步骤。fromctypesimport*msvcrt=cdll.LoadLibrary('msvcrt')foriin'love':msvcrt.printf(i)8.4.2防火墙编程工具方法二:基于Win10的Linux子系统。基于WSL可以展开基于Linux的防火墙编程,需要如下工具和规则支持。1.netfilter/iptables工具netfilter/iptables组成Linux平台下的包过滤防火墙,可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能2.iptables规则iptables是按照规则(rules)来检测流经的数据包3.规则链与规则表防火墙的作用就在于对经过的报文匹配“规则”,然后执行对应的“动作”进一步,可将实现相同功能的规则放在一起,就形成了规则表。则不同功能的规则,可以放置在不同的表中进行管理。iptables已经为我们定义了4种表,每种表对应了不同的功能。filter表:负责过滤功能,防火墙;内核模块:iptables_filter;nat表:networkaddresstranslation,网络地址转换功能;内核模块:iptable_nat;mangle表:拆解报文,做出修改,并重新封装的功能;iptable_mangle;raw表:关闭nat表上启用的连接追踪机制;iptable_raw。有了链和表,就可以把二者联系起来:PREROUTING的规则可以存在于:raw表、mangle表、nat表。INPUT的规则可以存在于:mangle表、filter表。FORWARD的规则可以存在于:mangle表、filter表。OUTPUT的规则可以存在于:raw表mangle表、nat表、filter表。POSTROUTING的规则可以存在于: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函数为目标机添加规则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分钟)检测新增的规则是否还存在,如果不存在则添加sched.start()
server=SimpleXMLRPCServer(('2',4501),allow_none=True)logger.debug('Listeningonport4501...')server.register_function(add_rule,'add_rule')#❷添加规则调用add_rule函数server.serve_forever()8.5入侵检测编程技术8.5.1入侵检测技术原理入侵检测概念入侵(Intrusion)是指未经授权蓄意尝试访问信息、窜改信息,使系统不可靠或不能使用的行为。入侵检测(IntrusionDetection)是对入侵行为的发觉,而入侵检测技术(IntrusionDetectionTechnology)是指对入侵行为进行检测的技术。入侵检测系统(IntrusionDetectionSystem,IDS)是指进行入侵检测的软件与硬件的组合。入侵检测技术的提出与防火墙的局限性直接关系:防火墙不能防止通向站点的后门;防火墙一般不提供对内部的保护;防火墙无法防范数据驱动型的攻击;防火墙不能防止用户在Internet上下载被病毒感染的计算机程序或者电子邮件病毒附件的传输。2.入侵检测分类根据信息源的不同,分为基于主机的IDS和基于网络的IDS两大类。(1)基于主机的入侵检测系统(Host-BasedIDS,HIDS)HIDS的系统安装在主机上面,对本主机进行安全检测。优点:性能价格比高;审计内容全面;视野集中;适用于加密和交换环境。缺点:额外产生的安全问题;HIDS依赖性强;如果主机数目多,代价过大;不能监控网络上的情况。(2)基于网络的入侵检测系统(Network-BasedIDS,NIDS)NIDS的系统安装在比较重要的网段内。优点:检测范围广;无需改变主机配置和性能;独立性和操作系统无关性;安装方便。缺点:不能检测不同网段的网络包;很难检测复杂的需要大量计算的攻击;协同工作能力弱;难以处理加密的会话。3.入侵检测系统结构4.入侵检测的分析方式(1)异常检测异常检测是指根据使用者的行为或资源的使用情况来判断是否入侵,而不依赖于具体行为是否出现来检测。其优缺点是:与系统相对无关,通用性强、能检测出新的攻击方法、误检率较高。(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)#创建一个与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. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 湖南乐拓科技有限公司资金短缺的解决方案
- (正式版)DB12∕T 834-2018 《婚姻登记服务规范 》
- 深度解析(2026)《GBT 33403-2016胶粘剂自流平性能的试验方法》
- 网络安全渗透测试与防护 课件9.Metasploit 框架
- 医疗数据安全治理的区块链多方协同机制
- 医疗数据安全攻防演练生态协同发展策略
- 医疗数据安全成熟度:区块链绩效评估
- 医疗数据安全应急演练的参与者角色设计
- 医疗数据安全合规:区块链技术的监管适配
- 胖乎乎的小手课件
- 2025年幼儿教师之《幼儿游戏与指导》考试题库(附答案)
- 四川佰思格新材料科技有限公司钠离子电池硬碳负极材料生产项目环评报告
- 知道智慧树管理学(浙江财经大学)满分测试答案
- 2025年广西中考英语试卷真题(含答案解析)+听力音频
- 从大庆油田股权改革透视公司股权结构优化与治理创新
- 高压开关房管理制度
- 【基于PLC的自动卷缆机结构控制的系统设计10000字(论文)】
- 脑器质性精神障碍护理查房
- GB/T 45481-2025硅橡胶混炼胶医疗导管用
- 护理人员精神科进修汇报
- 2023核电厂射线照相底片数字化技术规范
评论
0/150
提交评论