基于net的端口检测技术的原理与实现终稿毕业论文设计.docx
《基于net的端口检测技术的原理与实现终稿毕业论文设计.docx》由会员分享,可在线阅读,更多相关《基于net的端口检测技术的原理与实现终稿毕业论文设计.docx(17页珍藏版)》请在冰豆网上搜索。
基于net的端口检测技术的原理与实现终稿毕业论文设计
基于.NET的端口检测技术的原理与实现
摘要
随着Internet日益广泛的应用,黑客攻击行为也是有增无减。
如何有效地抵御这种攻击行为,一直是信息安全领域的焦点。
而其中,端口扫描技术吸引了越来越多人的关注。
端口扫描是黑客搜集目标主机信息的一种常用方法。
为了有效地对付网络入侵行为,对端口扫描进行研究是非常有益和必要的。
攻击者在攻击一个目标时,首先要获取目标的一些基本信息,端口扫描就是其中最简单最重要的方法之一,它可以扫描目标机器中开放的端口,从而确定目标机器中提供的服务,为下一步攻击做准备。
针对端口扫描技术,相应的端口扫描检测技术显的越发重要,作为网络安全技术中的一个重要课题,端口扫描检测技术意义重大。
本文首先阐述了端口扫描技术以及端口扫描检测技术的基本原理和常用方法,然后在此基础上设计了一个对基于网络的端口进行扫描,能判断出目标主机端口开放情况的程序以及一个从网络信息的数据包的捕获和分析着手,再通过统计判断是否存在端口扫描行为的程序,最后从攻击和防御的角度对端口扫描和检测技术作了演示及分析。
关键词:
端口;端口扫描;数据包捕获;端口检测
TheRealizationofPortScanningandDetectingTechnology
Abstract
AsthewidelyapplyingofInternet,theattackingbehaviormadebyhackerisincreasingbutnotdecreasing.Howtoresistthiskindofattackingbehaviorisalwaysthekeypointofthedomainoftheinformationsecurity.
Andtheportscanningdrawspeople'sattentionmoreandmore.Portscanningisausualmethodwhichisusedbythehackertocollecttheinformationofthetargetmainprocessor.InordertodealwiththeinvadingbehavioroftheInterneteffectively,itisveryusefulandnecessarytoworkontheportscanning.Whenanattackerattackstoatarget,heorshewillfirstlygetssomebasicinformationaboutthetarget,andtheportscanningisoneofthemostsimpleandimportantmethodswhichcanscantheopeningPortofthetargetmachinetomakesuretheofferingservicemadebythetargetmachine,anditisapreparationtothenextattacking.Theportdetectingseemsmoreandmoreimportantreferringtotheportscanning.AsanimportanttaskofthesecuretechniqueofInternet,theportdetectingisofgreatsignificance.
Inthisthesis,itfirstlyelaboratesthebasicprinciplesandusualmethodsoftheportscanning.Onthisbasis,itthendesignsaprogramwhichcanscanthePortoftheInternet,andassesstheopeningsituationofthetargetmainprocessor,andtheotherprogramwhichbeginsoncapturingandanalyzingtheinformationpacketofInternet,andthenassesswhetherthereisabehavioraboutportscanningthroughstatisticanalyses.Lastly,itdemonstratesandanalysesthetechnologyofportscanningandportdetectingfromtheviewpointofattackingandresisting.
KeyWords:
port;portscanning;packetcapture;portdetecting
目录
论文总页数:
23页
1引言1
1.1本课题研究的意义1
1.2本课题的研究方法2
2端口扫描概述2
2.1基本概念2
2.2端口扫描原理3
2.3端口扫描技术简介5
3检测端口扫描概述7
3.1端口扫描检测的分析7
3.2普通端口扫描检测技术概述8
3.3慢速端口扫描检测技术概述9
3.4端口扫描的分布式检测概述9
3.5主流的端口扫描工具11
4端口扫描的实现12
4.1扫描程序的设计原理12
4.2程序流程图12
5检测端口扫描的实现13
5.1检测程序的设计原理13
5.2程序流程图13
5.3设计实现重点代码14
6性能测试18
6.1端口扫描程序性能测试18
6.2检测端口扫描程序性能测试19
结论20
参考文献21
1引言
随着科学技术的飞速发展,21世纪的地球人已经生活在信息时代。
20世纪人类的两大科学技术成果——计算机技术和网络技术,均已深入到人类社会的各个领域,Internet把“地球村”的居民们紧密联系在一起,“天涯若比邻”已然成为现实。
互联网之所以能这样迅速蔓延,被世人所接受,是因为它具备特有的信息资源。
无论对商人、学者,还是对社会生活中的普通老百姓,只要你进入网络的世界,就能找到其隐藏的奥妙,就能得到你所需要的信息。
近年来Internet的迅速发展,给人们的日常生活带来了全新的感受,“网络生存”已经成为时尚,同时人类社会诸如政治、科研、经济、军事等各种活动对信息网络的依赖程度已经越来越强,“网络经济”时代已初露端倪。
然而,网络技术的发展在给我们带来便利的同时也带来了巨大的隐患,尤其是Internet和Intranet的飞速发展对网络安全提出了前所未有的挑战。
技术是一把双刃剑,不法分子试图不断利用新的技术伺机攻入他人的网络系统,而肩负保护网络安全重任的系统管理员则要利用最新的网络技术来防范各种各样的非法网络入侵行为。
事实已经证明,随着互联网的日趋普及,在互联网上的犯罪活动也越来越多,特别是Internet大范围的开放以及金融领域网络的接入,使得越来越多的系统遭到入侵攻击的威胁。
而作为黑客入侵的前奏,端口扫描是最常见的信息获取手段,端口扫描的检测技术在当今已经越来越成为一个重要的课题。
本文首先对端口扫描技术进行研究,并开发一个能查询目标主机端口开放情况的程序;然后重点研究端口扫描的检测技术,从对数据包的捕获和分析着手,再定义一个判断是否扫描的条件,并通过统计由定义的扫描条件判断是否存在端口扫描行为,不但能对一般的扫描、快速扫描能够检测,且在一定程度上对慢速扫描也能很好的检测。
1.1本课题研究的意义
在今天快速发展的Internet中,黑客攻击方法层出不穷,网络的安全性已经越来越受到威胁。
要保证计算机资源的保密性、有效性、完整性也变得越来越困难。
端口扫描作为黑客攻击的一个重要方面,也在不停地向前发展,扫描手段已经变得越来越丰富,越来越隐蔽,越来越具有威胁性。
如何有效的对端口扫描行为进行检测,已经是越来越重要的一个课题,这对于保证我们网络的安全性有着重要的意义,也是入侵检测系统(IDS)和入侵预防系统(IPS)的一个重点。
1.2本课题的研究方法
本文分别对端口扫描技术以及端口扫描的检测技术作了研究,并设计出一个根据扫描者向目标主机的TCP/IP服务端口发送探测数据包,并记录目标主机的响应,通过分析响应来判断服务端口是打开还是关闭,进而得知端口的状态的端口扫描程序,以及一个从网络信息的数据包的捕获和分析着手,通过统计判断是否存在端口扫描行为的端口扫描检测程序。
2端口扫描概述
2.1基本概念
端口的含义:
在网络技术中,端口(Port)大致有两种意思:
一是物理意义上的端口,比如,ADSLModem、集线器、交换机、路由器用于连接其他网络设备的接口,如RJ-45端口、SC端口等等。
二是逻辑意义上的端口,一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。
我们这里将要介绍的就是逻辑意义上的端口。
端口分类:
逻辑意义上的端口有多种分类标准,下面将介绍两种常见的分类:
按端口号分布划分:
(1)知名端口(Well-KnownPorts)
知名端口即众所周知的端口号,范围从0到1023,这些端口号一般固定分配给一些服务。
比如21端口分配给FTP服务,25端口分配给SMTP(简单邮件传输协议)服务,80端口分配给HTTP服务,135端口分配给RPC(远程过程调用)服务等等。
(2)动态端口(DynamicPorts)
动态端口的范围从1024到65535,这些端口号一般不固定分配给某个服务,也就是说许多服务都可以使用这些端口。
只要运行的程序向系统提出访问网络的申请,那么系统就可以从这些端口号中分配出一个供该程序使用。
比如1024端口就是分配给第一个向系统发出申请的程序。
在关闭程序进程后,就会释放所占用的端口号。
不过,动态端口也常常被病毒木马程序所利用,如冰河默认连接端口是7626、WAY2.4是8011、Netspy3.0是7306、YAI病毒是1024等等。
按协议类型划分:
按协议类型划分,可以分为TCP、UDP、IP和ICMP(Internet控制消息协议)等端口。
下面主要介绍TCP和UDP端口:
(1)TCP端口
TCP端口,即传输控制协议端口,需要在客户端和服务器之间建立连接,这样可以提供可靠的数据传输。
常见的包括FTP服务的21端口,Telnet服务的23端口,SMTP服务的25端口,以及HTTP服务的80端口等等。
(2)UDP端口
UDP端口,即用户数据包协议端口,无需在客户端和服务器之间建立连接,安全性得不到保障。
常见的有DNS服务的53端口,SNMP(简单网络管理协议)服务的161端口,QQ使用的8000和4000端口等等。
2.2端口扫描原理
扫描者向目标主机的TCP/IP服务端口发送探测数据包,通过探测性数据包得到目标主机的响应并记录下来,通过分析响应来判断服务端口是打开还是关闭,进而得知端口的状态。
通常通过调用套接字函数connect()连接到目标计算机上,完成一个完整的3次握手程。
如果端口处于侦听状态,那么connect()就能成功返回。
否则,该端口不可用,即没有提供服务。
端口扫描的第一步是向目标主机的TCP/UDP端口发送探测数据包,然后根据对方的回应判断端口是否开放。
由于网络环境的差异以及操作系统对连接请求的应答并不一致,在端口扫描中支持多种扫描方式,以保证扫描的准确和快速。
大多数扫描技术要发送原始套接字包来进行探测。
因为只有原始套接字支持对IP报头的设置,即构造IP数据包。
同时,原始套接字也支持发送和接收IP数据包。
这样,原始套接字接口实际上成为网络层向上提供的接口。
实现时可通过调用Winsock2库中的函数setsockopt()来设置选项IP_HDRINCL,以获取自定义IP报头的权限。
由于Windows2000仅支持RawICMP和RawIGMP,不支持RawTCP,因此,发送TCP数据包,必须通过设置选项IP_HDRINCL来构造IP报头。
首先创建原始套接字,定义IP首部。
IPHEADER,TCP伪首部TCPSOCHEADER和TCP首部TCPHEADER,再填充IP首部和TCP首部,其中,TCP首部中的结构体变量tcpHeader的tcpHeade.th_flag=2,表示发送的是SYN数据包,修改它可以实现不同的标志位探测,如2是SYN,0是NULL,1是FIN,16是ACK探测等等。
因为是自己填充IP首部和TCP首部,所以还需定义一个计算校验和函数checksum来计算IP报头和TCP报头的校验和。
在填充TCP首部时,通过TCP伪首部填充TCP数据包的IP选项。
事实上TCP伪首部并不是真正存在的,只是用于填充TCP的一些选项和计算校验和。
调用setsockopt()设置选项IP_HDRINCL,根据填充TCP、IP报头的内容构造IP数据包。
设置侦听原始套接字的同步和超时之后,调用sendto()发送IP数据包。
发送原始套接字包流程图如图1所示:
图1发送原始套接字包流程图
原始套接字包发送完后,就可以接收目标主机的回应。
当发送原始套接字包时(如TCPSYN数据包),操作系统核心并不知道,也没有此数据发送或者连接建立的记录。
因此,当远端主机回应时,系统核心就把这些包都全部丢掉,从而到达不了应用程序上。
所以,程序中不能简单地使用接收函数来接收这些数据包。
要达到接收数据包的目的,必须采用嗅探,接收所有通过的数据包,然后进行筛选,留下符合需要的。
为此可以再定义一个原始套接字,用来接收数据,并在套接字I/0控制函数中设置SIO_RCVALL,表示接收所有的数据。
通过设置原始套接字的I/0控制命令,便可以调用recv()接收返回的数据包。
一般情况下使用的是TCPSYN半连接扫描,由于TCPConnect()全连接扫描拥有很好的稳定性,这种技术用得非常多。
通常通过调用套接字函数connect()连接到目标计算机上,完成一个完整的3次握手过程。
如果端口处于侦听状态,那么connect()就能成功返回。
否则,该端口不可用,即没有提供服务。
以上实现的端口扫描,可以得到每个端口的状态,此处的状态并非端口本身的性质,而是对扫描结果的描述。
端口状态可以分为5种:
open(开放的)、closed(关闭的)、filtered(被过滤的)、unfiltered(未被过滤的)和openfiltered(开放或者被过滤的)。
2.3端口扫描技术简介
常用的端口扫描技术主要有以下几种:
(1)TCPconnect()扫描
这是最基本的TCP扫描。
利用操作系统提供的connect系统调用,用来与每一个感兴趣的目标计算机的端口进行连接。
如果端口处于侦听状态,则connect就能成功。
否则,这个端口是不能用的,即没有提供服务。
这个技术的最大的优点是,用户不需要任何权限,系统中的任何用户都有权利使用这个调用。
另一个好处就是速度快。
如果对每个目标端口以串行的方式,使用单独的connect()调用,那么将会花费相当长的时间,用户可以通过同时打开多个套接字,从而加速扫描。
使用非阻塞I/O允许设置一个较低的超时时限,同时观察多个套接字。
但这种方法的缺点是很容易被发觉,并且被过滤掉。
目标计算机的logs文件会显示一连串的连接和连接是否出错的服务消息,并且能很快地使它关闭。
(2)TCPSYN扫描
这种技术通常认为是“半开放”扫描,这是因为扫描程序不必要打开一个完全的TCP连接。
扫描程序发送的是一个SYN数据包,好象准备打开一个实际的连接并等待反应一样(参考TCP的三次握手建立一个TCP连接的过程)。
一个SYN/ACK的返回信息表示端口处于侦听状态。
一个RST返回,表示端口没有处于侦听态。
如果收到一个SYN/ACK,则扫描程序必须再发送一个RST信号,来关闭这个连接过程。
这种扫描技术的优点在于一般不会在目标计算机上留下记录,但这种方法的缺点是,必须要有root权限才能建立自己的SYN数据包,不过这个条件一般都是很容易满足的。
(3)TCPFIN扫描
有的时候有可能SYN扫描都不够秘密。
一些防火墙和包过滤器会对一些指定的端口进行监视,有的程序能检测到这些扫描。
相反,FIN数据包可能会顺利通过。
这种扫描方法的思想是关闭的端口会用适当的RST来回复FIN数据包。
另一方面,打开的端口会忽略对FIN数据包的回复。
这种方法和系统的实现有一定的关系。
如果有的系统不管端口是否打开,都回复RST,那么这种扫描方法就不适用了。
但这种方法在区分Unix和NT时是十分有用的。
(4)IP段扫描
这种不能算是新方法,只是其他技术的变化。
它并不是直接发送TCP探测数据包,是将数据包分成二个较小的IP段。
这样就将一个TCP头分成好几个数据包,从而过滤器就很难探测到。
但一些程序在处理这些小数据包时会有些问题。
(5)FTP返回攻击
FTP协议的一个的特点是它支持代理FTP连接。
即入侵者可以从自己的计算机和目标主机的FTPserver-PI(协议解释器)连接,建立一个控制通信连接。
然后,请求这个server-PI激活一个有效的server-DTP(数据传输进程)来给Internet上任何地方发送文件。
对于一个User-DTP,这是个推测,尽管RFC明确定义请求一个服务器发送文件到另一个服务器是可以的,但当前的大多数实现并不支持,因为这个特性“能用来发送不能跟踪的邮件和新闻,给许多服务器造成打击,用尽磁盘,企图越过防火墙”。
利用FTP返回攻击的目的是从一个代理的FTP服务器来扫描TCP端口。
这样,用户能在一个防火墙后面连接到一个FTP服务器,然后扫描端口。
如果FTP服务器允许从一个目录读写数据,你就能发送任意的数据到发现的打开的端口。
对于端口扫描,这个技术是使用PORT命令来表示被动的UserDTP正在目标计算机上的某个端口侦听。
然后入侵者试图用LIST命令列出当前目录,结果通过Server-DIP发送出去。
如果目标主机正在某个端口侦听,传输就会成功,(产生一个150或226的回应)否则,会出现“425Can’tbuilddataconnection:
Connectionrefused.”。
然后,使用另一个PORT命令,尝试目标计算机上的下一个端口。
这种方法的优点很明显,难以跟踪,能穿过防火墙。
主要缺点是速度很慢,有的FTP服务器最终能得到一些线索,关闭代理功能。
(6)UDPICMP端口不能到达扫描
这种方法与上面几种方法的不同之处在于使用的是UDP协议。
由于这个协议很简单,所以扫描变得相对困难。
这是由于打开的端口对扫描探测并不发送一个确认,关闭的端口也并不需要发送一个错误数据包。
幸运的是,许多主机在你向一个未打开UDP端口发送一个数据包时,会返回一个ICMP_PORT_UNREACH错误。
这样你就能发现哪个端口是关闭的。
UDP和ICMP错误都不保证能到达,因此,这种扫描器必须还实现一个在包看上去是丢失的时候能重新传输。
这种扫描方法是很慢的,因为RFC对ICMP错误消息的产生速率作了规定。
同样,这种扫描方法需要具有root权限。
(7)UDPrecvfrom()和write()扫描。
当非root用户不能直接读到端口不能到达错误时,Linux能间接地在它们到达时通知用户。
比如,对一个关闭的端口的第二个write()调用将失败。
在非阻塞的UDP套接字上调用recvfrom()时,如果ICMP出错还没有到达时会返回EAGAIN-重试。
如果ICMP到达时,返回ECONNREFUSED-连接被拒绝。
这就是用来查看端口是否打开的技术。
(8)TCP反向ident扫描
ident协议(rfc1413)允许看到通过TCP连接的任何进程的拥有者的用户名,即使这个连接不是由这个进程开始的。
例如,扫描者能连接到Http端口,然后用ident来发现服务器是否正在以root权限运行。
这种方法只能在和目标端口建立了一个完整的TCP连接后才能看到。
总之,为了避过目标系统的日志审计和防火墙的阻截,为了避过目标系统的端口扫描检测,入侵者往往会采用一系列方法来改变正常的端口扫描方式,以达成端口扫描的隐蔽性,这些方法包括:
改变扫描端口的顺序、慢速扫描、端口扫描间隔随机化、随机化扫描包的其它区域、伪造源地址扫描和分布式扫描等。
3检测端口扫描概述
3.1端口扫描检测的分析
端口扫描是一台主机对多个目标端口进行试探,包括打开的和没有打开的端口。
这就为检测端口扫描提供了两条“线索”:
一是“是否存在试图连接已经关闭端口的行为”;二是“在一段时间内,是否存在从一个源地址发出的数据包到达多个目的地址的行为”。
检测端口扫描的方法主要有两种:
一种是对主机没有对外提供服务的端口进行监听,如果检测到有对这样的端口的连接请求,就认为有扫描发生;
另一种检测方法是对整个网络流量进行监控,检查网络中所有的数据,并对异常情况进行记录。
在本文中,为了便于对端口扫描检测进行研究,从端口扫描检测的角度出发,把端口扫描技术分为普通扫描,慢速扫描及分布式扫描,并在后面的介绍中分别对不同的检测方法作了介绍。
3.2普通端口扫描检测技术概述
目前比较常见的端口扫描就是一对一的扫描关系,如下图2所示,即只有一个扫描者,且扫描者从本身出发,不经过任何隐藏通过发送探测性数据包来判断目标主机的端口开放情况。
图2普通扫描技术
针对这种一对一的普通或快速的端口扫描技术,目前端口扫描的检测技术采用的方法有Snort方法、Watcher方法和PortSentry方法等三种,都能很好的检测出这种扫描。
它们进行端口扫描检测采用的算法大致可以概括如下:
在M秒内,监测从同一源端发出的数据包,如果其目的IP与目的端口的组合数目超出N的话,则认为是一次扫描。
Snort是一个轻量级的网络入侵检测系统。
它的探测引擎采用模块化的插件结构,允许开发者扩展Snort的功能,也可以使得用户可以按自己的需要定制功能。
Snort检测端口扫描的方法是:
在Y秒内,如果检测到从同一个源发出,目的为不同的主机和端口的组合的TCP或UDP包的数目超出阈值X,则认为是扫描。
其中X和Y的值可以由用户自己设定。
另外,Snort也同样可以检测有奇异标志的TCP包。
Watcher是一个比较完整的基于网络的入侵检测系统的设计代码。
它检测所有通过的信息包,并且将它认为是恶意的攻击行为记录在syslog中。
它的检测原理是:
如果在短时间内有超过7个以上的端口收到信息包(不管类型如何),那么这一事件就被当成端口扫描记录下来。
PortSentry是基于主机的网络入侵检测系统的一个组成部分,主要用来检测外部对主机的端口扫描,它能够对多种扫描方法进行检测。
它的检测原理是:
对没有开放服务的端口的访问有可能是一次扫描。
通过监测没有开放服务的端口,在最近n次连接里由同一个源发起的连接超过X次则判断为一次扫描。
以上几种扫描检测方法对端口扫描所采用的检测技术都比较简单,且存在以下缺点:
(1)无法检测慢速扫描,因为在检测中时间窗是个固定值,只要扫描速