网络端口扫描技术研究与实现.docx
- 文档编号:22826525
- 上传时间:2023-04-28
- 格式:DOCX
- 页数:20
- 大小:264.03KB
网络端口扫描技术研究与实现.docx
《网络端口扫描技术研究与实现.docx》由会员分享,可在线阅读,更多相关《网络端口扫描技术研究与实现.docx(20页珍藏版)》请在冰豆网上搜索。
网络端口扫描技术研究与实现
网络端口扫描技术研究与实现
0引言
网络出现故障时,人们总习惯先用ping命令检测目标系统是否有所反应,如果要进一步了解目标系统的网络连接情况,黑客最常使用的一种手段就是端口扫描。
ping命令只能检测目标主机是否是激活的(开机状态),而许多时候,如果目标主机或者其防护设备禁止了ping探测包,那么探测者甚至连对方是否处于激活状态都不得而知,这时候,对目标主机进行全面的端口扫描不仅是为了确定其开放的网络服务,而更基本的还在于确定其是否真正处于激活状态。
当然,端口扫描最大的作用是提供目标主机网络服务的清单,许多时候,扫描者不仅获得目标主机对外开放的TCP和UDP端口列表,而且还能通过一些连接测试得到监听端口返回的banners(旗标)信息。
这些信息,对于判断监听端口上开放的服务类型以及对应软件版本甚至操作系统类型都有重要作用。
总之,端口扫描是一种非常重要的预攻击探测手段,几乎是所有黑客攻击的通用手段。
同时通过端口扫描技术,可以在主机或系统在被攻击前得到一些警告和预报,尽可能在早期预测攻击者的行为并获得一定的证据,从而对攻击进行预警或采取一定的防御措施。
1端口介绍
1.1端口的概念
TCP/IP协议虽然规定了各个协议的实现细节,但却并没有确切地规定应用程序如何与协议软件进行交互。
因此实际上所说的服务器和主机之间没有一个一一对应关系,主机是一个硬件的概念,是一台物理设备,而服务器是指一组软件系统,一台主机上可以装多个服务器来提供服务,而某个服务器也可以由几台计算机通过软件进行捆绑后实现,一台主机可由IP地址区分,而主机上的服务则可以由端口实现。
端口通俗地讲就是一个通信通道的“门”,各种计算机服务和通信都是通过特定的端口与外部计算机进行通信,像常见的WWW、FTP、Telnet服务一样。
根据Berkeley套接字,端口共用16bits来表示,故其范围为0-65535共65536个,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等
1.2端口的分类
逻辑意义上的端口有多种分类标准,下面将介绍两种常见的分类:
(1)按端口号分布划分
公认端口(WellKnownPorts):
这类端口也常称之为“常用端口”。
这类端口的端口号从0到1023,它们紧密绑定于一些特定的服务。
通常这些端口的通信明确表明了某种服务的协议,这种端口不可再重新定义它的作用对象。
例如,80号端口实际上总是HTTP通信所使用的,而23号端口则是Telnet服务专用的。
这些端口像木马这样的黑客程序通常不会利用。
注册端口(RegisteredPorts):
端口号从1024到49151。
它们松散地绑定于一些服务。
也就是说有许多服务绑定于这些端口,这些端口同样用于许多其他目的。
这些端口多数没有明确的定义服务对象,不同程序可根据实际需要自己定义,一些远程控制软件和木马程序中都会有这些端口的定义的。
记住这些常见的程序端口在木马程序的防护和查杀上是非常有必要的。
动态和/或私有端口(Dynamicand/orPrivatePorts):
端口号从49152到65535。
理论上,不应为服务分配这些端口。
实际上,有些较为特殊的程序,特别是一些木马程序就非常喜欢用这些端口,因为这些端口常常不被引起注意,容易隐蔽。
(2)按协议类型划分
按协议类型划分,可以分为TCP、UDP、IP和ICMP(Internet控制消息协议)等端口。
下面主要介绍TCP和UDP端口:
TCP端口:
即传输控制协议端口,需要在客户端和服务器之间建立三次握手连接,这样可以提供可靠的数据传输。
常见的包括FTP服务的21端口,Telnet服务的23端口,SMTP服务的25端口,以及HTTP服务的80端口等。
UDP端口:
即用户数据报协议端口,无需在客户端和服务器之间建立连接,安全性得不到保障。
常见的有DNS服务的53端口,SNMP(简单网络管理协议)服务的161端口,QQ使用的8000和4000端口等。
1.3常见端口介绍
表1常见端口介绍
端口号
服务
传输方式
意义
7
Echo
UDP/TCP
回送
21
FTP
TCP
文件传输协议
22
SSH
UDP/TCP
远程登录协议(SSH)
23
Telnet
TCP
远程登录
25
SMTP
TCP
简单邮件传输协议
53
DNS
UDP/TCP
域名服务
80
HTTP
TCP
WEB服务
110
POP3
UDP/TCP
邮局协议—用于接收邮件
161
SNMP
UDP
简单网络管理协议
2端口扫描的概念
2.1端口扫描的原理
端口扫描,顾名思义,就是逐个对一段端口或指定的端口进行扫描。
通过扫描结果可以知道一台计算机上都提供了哪些服务,然后就可以通过所提供的这些服务的已知漏洞就可以进行攻击。
其原理是当一个主机向远端一个服务器的某一端口提出一个建立连接的请求,如果对方有此项服务,就会应答,利用这个原理,如果对所有熟知的端口或自己选定的某个范围内的熟知端口分别建立连接,并记录下远端服务器所给予的应答,通过查看记录就可以搜集到目标服务器上都安装了哪些服务,这就是端口扫描,通过端口扫描,就可以搜集到很多关于目标主机的各种很多有参考价值的信息,还可以发现一些漏洞。
通常进行端口扫描的工具目前主要采用的是端口扫描软件,也称之为“端口扫描器”。
端口扫描器也是一种程序,它可以对目标主机的端口进行连接,并记录目标端口的应答。
端口扫描器通过选用远程TCP/IP协议不同的端口的服务,记录目标计算机端口给予回答的方法,可以收集到很多关于目标计算机的各种有用信息(比如是否有端口在侦听,是否允许匿名登录,是否有可写的FTP目录,是否能用Telnet等)。
但扫描器并不是一个直接的攻击网络漏洞的程序,它仅仅能帮助我们发现目标主机的某些内在的弱点。
一个好的扫描器能对它得到的数据进行分析,帮助我们查找目标主机的漏洞,但它不会提供进入一个系统的详细步骤。
2.2端口扫描的目的
端口扫描主要是为三大类用户服务的:
网络管理员、黑客、普通用户。
他们对网络使用的角度不同,所以所进行端口扫描的目的也各不相同,具体的目的如表2所示。
表2端口扫描用户类型及目的
端口扫描服务类别
扫描目的
网络管理员
关掉不用的端口,安装有漏洞端口补丁程序
黑客
利用打开的端口获取信息,为进行攻击做准备
普通用户
查找服务器是否提供某一服务
3端口扫描技术
3.1端口扫描技术的基础
端口这个概念是在传输层提出的,是传输层标志服务的手段。
传输层有两个重要的协议:
传输控制协议(TCP)和用户数据报协议(UDP)。
3.1.1TCP报文格式
TCP是一种面向连接的、可靠的、基于字节流的运输层通信协议,它最主要的工作流程就是通过三次握手建立连接,通过面向连接来传输数据,最后再释放连接。
图1TCP报文段的格式
图1中的标志位的含义分别为:
SYN—用来建立连接,让连接双方同步序列号。
如果SYN=1,ACK=0,为连接请求;如果SYN=1,ACK=1,为接受连接。
FIN—用来释放一个连接。
RST—用来复位一个连接,当RST=1时,表明出现严重差错,必须释放连接,重建连接。
URG—紧急数据标志,URG=1时,表示数据包中含紧急数据,紧急指针有效。
ACK—确认标志位。
ACK=I时确认号有效,ACK=0时确认号无效。
PSH—如果置位,接收端应尽快把数据传送给应用层。
3.1.2TCP发送报文与响应报文的关系
(1)当一个SYN或者FIN数据包到达一个关闭的端口,TCP丢弃数据包同时发送一个RST数据包。
(2)当一个RST数据包到达一个监听端口时RST被丢弃。
(3)当一个RST数据包到达一个关闭端口时RST被丢弃
(4)当一个包含ACK的数据包到达一个监听口时,数据包被丢弃。
(5)当一个SYN位关闭的数据包到达一个监听端口时,数据包被丢弃。
(6)当一个SYN数据包到达一个监听端口时,正常的三阶段建链继续.回答一个SYNACK数据包。
(7)当一个FIN数据包到达一个监听端口时,数据包被丢弃。
(8)当一个RST数据包到达SYN_RCVD端口时,目标主机仅仅退回LISTEN状态,并且不向应用层发送任何信号,处理完毕。
3.2端口扫描的分类
端口扫描技术发展到现在,可以细分为许多类型。
端口扫描的分类可以参见图2所示。
图2端口扫描分类
3.3常见端口扫描技术
3.3.1TCPconnect扫描
这种方法也称之为“TCP全连接扫描”。
它是最简单的一种扫描技术,所利用的是TCP协议的3次握手过程。
它直接连到目标端口并完成一个完整的3次握手过程(SYN、SYN/ACK和ACK)。
操作系统提供的“connect()”函数完成系统调用,用来与目标计算机的端口进行连接。
如果端口处于侦听状态,那么“connect()”函数就能成功。
否则,这个端口是不能用的,即没有提供服务。
其扫描原理如图3-1及图3-2所示。
TCP连接扫描技术的一个最大的优点是不需要任何权限,系统中的任何用户都有权利使用这个调用。
另一个好处是速度快。
如果对每个目标端口以线性的方式,使用单独的“connect()”函数调用,那么将会花费相当长的时间,用户可以同时打开多个套接字,从而加速扫描。
使用非阻塞I/O允许用户设置一个低的时间以用尽周期,并同时观察多个套接字。
但这种方法的缺点是很容易被发觉,并且很容易被过滤掉。
目标计算机的日志文件会显示一连串的连接和连接出错的服务消息,目标计算机用户发现后就能很快使它关闭。
3.3.2TCPSYN扫描
若端口扫描没有完成一个完整的TCP连接,即在扫描主机和目标主机的一指定端口建立连接的时候,只完成前两次握手,在第三步时,扫描主机中断了本次连接,使连接没有完全建立起来,所以这种端口扫描又称为“半连接扫描”,也称为“间接扫描”或“半开式扫描”(HalfOpenScan)。
SYN扫描,通过本机的一个端口向对方指定的端口,发送一个TCP的SYN连接建立请求数据报,然后开始等待对方的应答。
如果应答数据报中设置了SYN位和ACK位,那么这个端口是开放的;如果应答数据报是一个RST连接复位数据报,则对方的端口是关闭的。
使用这种方法不需要完成Connect系统调用所封装的建立连接的整个过程,而只是完成了其中有效的部分就可以达到端口扫描的目的。
TCPSYN扫描过程如图4-1、图4-2所示。
此种扫描方式的优点是不容易被发现,扫描速度也比较快。
同时通过对MAC地址的判断,可以对一些路由器进行端口扫描,缺点是需要系统管理员的权限,不适合使用多线程技术。
因为在实现过程中需要自己完成对应答数据报的查找、分析,使用多线程容易发生数据报的串位现象,也就是原来应该这个线程接收的数据报被另一个线程接收后,这个数据报就会被丢弃,而等待线程只好在超时之后再发送一个SYN数据报,等待应答。
这样,所用的时间反而会增加。
3.3.3TCPFIN扫描
这种扫描方式不依赖于TCP的3次握手过程,而是TCP连接的“FIN”(结束)位标志。
原理在于TCP连接结束时,会向TCP端口发送一个设置了FIN位的连接终止数据报,关闭的端口会回应一个设置了RST的连接复位数据报;而开放的端口则会对这种可疑的数据报不加理睬,将它丢弃。
可以根据是否收到RST数据报来判断对方的端口是否开放。
其扫描过程如图5-1、图5-2所示。
此扫描方式的优点比前两种都要隐秘,不容易被发现。
该方案有两个缺点:
首先,要判断对方端口是否开放必须等待超时,增加了探测时间,而且容易得出错误的结论;其次,一些系统并没有遵循规定,最典型的就是Microsoft公司所开发的操作系统。
这些系统一旦收到这样的数据报,无论端口是否开放都会回应一个RST连接复位数据报,这样一来,这种扫描方案对于这类操作系统是无效的。
3.3.4TCPACK扫描
扫描主机想目标主机发送ACK数据包。
根据返回的RST数据包有两种方法可以得到端口的信息。
方法一是:
若返回的RST数据包的TTL值小于或等于64,则端口开放,反之端口关闭,如图6-1所示。
方法二是:
若返回的RST数据包的WINDOW值非零,则端口开放,反之端口关闭,如图6-2所示。
3.3.5TCPNULL扫描
扫描主机将TCP数据包中ACK、FIN、RST、SYN、URG、PSH标志位全部置空后发给目标主机。
若目标端口开放,目标主机将不返回任何信息,如图7-1所示;若目标主机返回RST信息,则表示端口关闭,如图7-2所示。
3.3.6TCPXMAS扫描
XMAS扫描原理和NULL扫描类似,它是将TCP数据包中ACK、FIN、RST、SYN、URG、PSH标志位全部置1后发给目标主机。
若目标端口开放,目标主机将不返回任何信息,如图8-1所示;若目标主机返回RST信息,则表示端口关闭,如图8-2所示。
3.3.7SYN/ACK扫描
这种扫描故意忽略了TCP的3次握手过程。
这里,扫描主机不向目标主机发送SYN数据包,而是先发送SYN/ACK数据包,目标主机将报错,并判断为一次错误的连接。
若目标端口开放,目标主机将返回RST信息,如图9-1所示;若目标端口关闭,目标主机将不返回任何信息,数据包会被丢掉,如图9-2所示。
3.3.8UDPICMP端口不可到达扫描
扫描主机发送UDP数据包给目标主机的UDP端口,等待目标端口的端口不可到达(ICMP_PORT_UNREACH)的ICMP信息。
若超时也未能收到端口不可到达的ICMP信息,则表明目标端口可能处于监听状态,如图10-1所示;若这个ICMP信息及时收到,则表明目标端口处于关闭状态,如图10-2所示。
这种扫描方法可以扫描非TCP端口,避免了TCP的入侵检测,但是由于基于简单的UDP协议,扫描相对困难,速度很慢而且需要root权限,同时这种方法十分不可靠。
3.3.9UDPrecvfrom()和write()扫描
当非root用户不能直接读到端口不可到达错误时,Linux能间接地在它们到达时通知用户。
例如,对一个关闭的端口的第二个write()调用将失败。
在非阻塞的UDP套接字上调用recvfrom()时,如果ICMP出错还没有到达时会返回eagain(重试)。
如果ICMP到达时,将会返回econnrefused(连接被拒绝),这样就能查看端口是否打开。
3.3.10IP段扫描
这种方法并不是直接发送TCP协议探测数据包,而是将数据包分成两个较小的IP协议段。
这样就将一个TCP协议头分成好几个数据包,从而过滤器就很难探测到。
但必须小心,一些程序在处理这些小数据包时会有些麻烦。
3.3.11ICMPecho扫描
其实这并不能算是真正意义上的扫描。
但有时的确可以通过支持Ping命令,判断在一个网络上主机是否开机。
Ping是最常用的,也是最简单的探测手段,用来判断目标是否活动。
实际上Ping是向目标发送一个回显(Type=8)的ICMP数据包,当主机得到请求后,再返回一个回显(Type=0)的数据包。
而且Ping程序一般是直接实现在系统内核中的,而不是一个用户进程,更加不易被发现。
3.3.12高级ICMP扫描
ping是利用ICMP协议实现的,高级的ICMP扫描技术主要利用ICMP协议最基本的用途—报错。
根据网络协议,如果接收到的数据包协议项出现了错误,那么接收端将产生一个“DestinationUnreachable”(目标主机不可达)ICMP的错误报文。
这些错误报文不是主动发送的,而是由于错误,根据协议自动产生的。
当IP数据包出现Checksum(校验和)和版本的错误的时候,目标主机将抛弃这个数据包;如果是Checksum出现错误,那么路由器就直接丢弃这个数据包。
有些主机比如AIX、HP/UX等,是不会发送ICMP的Unreachable数据包的。
3.3.13认证扫描
认证扫描(即TCPident扫描)基于认证Ident协议。
认证协议允许看到通过TCP连接的任何进程拥有者的用户名。
利用认证协议,可以获得运行在某个端口上的进程的用户名(userid)。
认证扫描同时也被称为反向认证扫描(即TCP反向ident扫描),因为虽然最初的RFC建议了一种帮助服务器认证客户端的协议,然而在实际中也还是考虑了反向应用,即用户认证服务器。
Ident用于确定某个TCP连接的发起用户身份,方法是与身份待验证方主机的TCP113端口建立连接并通信,许多版本的ident服务会响应并返回与某端口上服务进程相关联的用户属主。
3.3.14代理扫描
代理扫描(即FTP反弹攻击)基于文件传输协议。
其扫描原理为:
操作者在本地打开与一个FTPServer的控制连接(到其TCP21端口),然后用PORT命令向FTPServer提供一个欲扫描的目标主机端口号,继而发送LIST命令,这时,FTPServer会向目标主机指定端口发送连接请求,如果目标主机相应端口正在监听,则会返回成功信息,否则,会返回类似“425Can’tbuilddataconnetion:
Connectionrefused”的连接失败信息。
这种方法的优点很明显,难以跟踪,能穿过防火墙。
主要缺点是速度很慢,有的FTP服务器最终能得到一些线索,关闭代理功能。
3.3.15窗口扫描
窗口扫描技术是向目标端口发送窗口控制报文。
由于窗口控制报文总是以应答报文ACK的方式发送,所以可以和ACK扫描一样用来探测过滤性防火墙的过滤规则。
但有意思的是,一些网络实现,例如BSD4.3,在LISTEN状态对于到达的窗口控制报文,在发送的RST响应报文中还包含了当前的窗口大小。
这样,只要检查RST报文的SEQ、WND,就可通过窗口扫描获得目标端口的状态。
3.4逃避检测的几种方法
(1)改变检测的次序
将要扫描的IP地址和端口的次序打乱,可以躲避或降低检测的效率。
(2)降低扫描速度
降低扫描速度能使当前大部分扫描检测系统不产生报警,即使对一些能够检测慢速扫描的系统来说,要分析相当长时间的网络连接,并要在更多的正常连接中找出扫描行为,增加了检测的难度。
(3)扫描间隔随机化
确定的扫描时间间隔使得检测器能够比较高效地工作,随机化间隔能使之降低检测效率。
(4)随机化不太重要的字段
扫描数据包中的序列号、ACK号、IP序号、源端口号经常是一些较固定的值,很容易通过一些简单的运算产生,改变这些固有的数值会增加检测的难度。
(5)假冒源地址
源地址是一个比较难以改变的部分,因为扫描者需要接收对方的反馈以确定端口是否开放。
如果能够监视一个靠近目标的网络(如目标网络的ISP),就可以假冒一个源地址发送扫描的包,再从被监视的网络中获取回应的包。
(6)分布式扫描
从许多不同位置的真实主机发起扫描,扫描的痕迹也被分散到不同的主机上,这使扫描检测变得更加复杂。
大量的可发起拒绝服务攻击的代理可被用来实现分布式扫描。
4端口扫描的防御
4.1网络扫描的监测与处理
网络扫描监测系统从逻辑上可以分为三个部分:
即抓包模块、判定模块、处理模块。
同时还应该保留对处理模块的接口。
(1)抓包模块
这一模块一般只需要调用标准的网络接口,目前一般的开发工具都提供相应的WinsockAPI()。
(2)判定模块
本模块是处理由抓包模块提交的数据报文,根据预定义的过滤规则进行第一次匹配,选出非正常报文,提交给上层应用,对于选定的非正常报文,由于存在多种可能,如:
TCPSYN、TCPFIN等,则需要进行由用户定制的二次匹配,其中的特征值由用户根据相应的扫描特点定义。
那些仍然没有确定的报文,往往带有二义性,这就需要借助历史记录的数据库,或者报文(如ICMP报文)长度的阀值来加以判断。
(3)处理模块
这一模块是按照需要设置的各种实现方式和采取相对策略,并且要将相应记录存入日志。
需要注意的是对一般的扫描要设置有效的阀值,仅仅一次、二次的扫描不应该被视为网络扫描。
4.2端口扫描的防御措施
一般来说,扫描者并不是孤立地、单纯地使用某种扫描方法,而是综合地应用一系列扫描方法目前存在的扫描程序主要可分为基于主机和基于网络两种,前者主要关注软件所在主机上面的风险漏洞,而后者则是通过网络远程探测其它主机的安全风险漏洞。
现在反扫描的软件主要两种:
一种是伪装型的,即这个程序伪装打开所有的常用的端口,这样攻击者扫描会得到一个错误的结果,并且程序会记录攻击者扫描纪录;另一种是影视型的,即程序只能监视攻击者的扫描并且发出预警信息,但不能阻止扫描。
这两种反扫描的软件都无法对攻击者扫描行为进行拦截,但却可以记录下攻击者的扫描行为,只要定期查看或者在程序中实现一定的人工智能报警,就可以较大程度的防范攻击者的下一步攻击。
但是编写的再好的反扫描软件也没有防火墙的功能强大,这是因为反扫描本属于防火墙的一部分,防火墙本可以通过屏蔽外部非法连接等手段来防止扫描。
通过防火墙设定一定规则是完全可以拦截攻击者的扫描行为的,当然,防火墙也不是万能的,对于“端口反弹”式的木马和病毒,防火墙也有不少局限之处。
目前常用的扫描防御方法有以下3种:
(1)在防火墙(或NAT)上采用更严格的过滤规则,阻止大部分扫描数据报文进入系统。
(2)主机系统除了必要的网络服务外,关闭其他所有的网络服务。
例如,对于一台纯粹的WEB服务器而言,只需要开放其80端口,其余的FTP、Telnet等网络服务均可以全部关闭。
(3)对于不需要为公众所周知的网络服务,采用更改默认端口的方法。
例如,某UNIX只为某些特定的用户提供FTP服务,那么该FTP端口可以不用默认端口21,而选用另外一个值,这样非特定用户就无法使用该网络服务。
目前针对端口扫描的防御方法就是加强信息隐蔽。
扫描的目的是为了获取信息,因此,通过提高自身的安全系数,杜绝不必要信息的外泄,是目前网络扫描防御方法的实质。
对于一般的普通用户可以关闭不必要的系统服务,借助软件关闭电脑上的不必要端口,或者直接封杀所有常见的木马端口,加强电脑防护意识等。
5端口扫描的实现
5.1基于TCPconnect扫描原理的JAVA源代码
packagenet;
importjava.io.IOException;
import.Socket;
import.UnknownHostException;
publicclassPortScanner{
publicPortScanner(){//这是一个最常规的TCPconnect扫描端口的程序,
}//主要原理是TCP经过三次握手建立连接后表示目标端口开放,否则关闭
publicstaticvoidmain(String[]args){
Stringhost="10.1.184.122";//这里可以随便填某一IP地址
for(inti=20;i<25;i++){//这里的端口号也随便填
Sockets=null;
try{
s=newSocket(host,i);
System.out.println("目标主机"+host+"在端口"+i+"上有服务运行!
");
}catch(UnknownHostExceptione){
}catch(IOExceptione){
System.out.println("目标主机"+host+"在端口"+i+"上没有
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 端口扫描 技术研究 实现
