网络扫描器的原理与分析袁治2020/4/1主要内容扫描器的基本概念扫描器的工作原理网络扫描的主要技术现有扫描器介绍及选择扫描器的实例分析一、扫描器的基本概念什么是网络扫描器为什么需要网络扫描器网络扫描器的主要功能什么是网络扫描器安全评估工具系统管理员保障系统安全的有效工具网络漏洞扫描器网络入侵者收集信息的重要手段为什么需要网络扫描器由于网络技术的飞速发展,网络规模迅猛增长和计算机系统日益复杂,导致新的系统漏洞层出不穷由于系统管理员的疏忽或缺乏经验,导致旧有的漏洞依然存在许多人出于好奇或别有用心,不停的窥视网上资源网络扫描器的主要功能扫描目标主机识别其工作状态(开/关机)识别目标主机端口的状态(监听/关闭)识别目标主机系统及服务程序的类型和版本根据已知漏洞信息,分析系统脆弱点生成扫描结果报告二、扫描器的工作原理TCP协议ICMP协议扫描器的基本工作原理TCP协议(一)TCP是一种面向连接的,可靠的传输层协议。一次正常的TCP传输需要通过在客户端和服务器之间建立特定的虚电路连接来完成,该过程通常被称为“三次握手”。TCP通过数据分段中的序列号保证所有传输的数据可以在远端按照正常的次序进行重组,而且通过确认保证数据传输的完整性。TCP协议(二)TCP数据包格式TCP协议(三)TCP标志位ACK:确认标志RST:复位标志URG:紧急标志SYN:建立连接标志PSH:推标志FIN:结束标志TCP协议(四)TCP连接建立示意图ICMP协议(一)InternetControlMessageProtocol,是IP的一部分,在IP协议栈中必须实现。用途:网关或者目标机器利用ICMP与源通讯当出现问题时,提供反馈信息用于报告错误特点:其控制能力并不用于保证传输的可靠性它本身也不是可靠传输的并不用来反映ICMP报文的传输情况ICMP协议(二)ICMP报文类型0EchoReply3DestinationUnreachable4SourceQuench5Redirect8Echo11TimeExceeded12ParameterProblem13Timestamp14TimestampReply15InformationRequest16InformationReply17AddressMaskRequest18AddressMaskReply扫描器的基本工作原理三、网络扫描的主要技术主机扫描技术端口扫描技术栈指纹OS识别技术主机扫描技术-传统技术主机扫描的目的是确定在目标网络上的主机是否可达。这是信息收集的初级阶段,其效果直接影响到后续的扫描。常用的传统扫描手段有:ICMPEcho扫描ICMPSweep扫描BroadcastICMP扫描Non-EchoICMP扫描ICMPecho扫描实现原理:Ping的实现机制,在判断在一个网络上主机是否开机时非常有用。向目标主机发送ICMPEchoRequest(type8)数据包,等待回复的ICMPEchoReply包(type0)。如果能收到,则表明目标系统可达,否则表明目标系统已经不可达或发送的包被对方的设备过滤掉。优点:简单,系统支持缺点:很容易被防火墙限制可以通过并行发送,同时探测多个目标主机,以提高探测效率(ICMPSweep扫描)。BroadcastICMP扫描实现原理:将ICMP请求包的目标地址设为广播地址或网络地址,则可以探测广播域或整个网络范围内的主机。缺点:只适合于UNIX/Linux系统,Windows会忽略这种请求包;这种扫描方式容易引起广播风暴Non-EchoICMP扫描一些其它ICMP类型包也可以用于对主机或网络设备的探测,如:StampRequest(Type13)Reply(Type14)InformationRequest(Type15)Reply(Type16)AddressMaskRequest(Type17)Reply(Type18)主机扫描技术-高级技术防火墙和网络过滤设备常常导致传统的探测手段变得无效。为了突破这种限制,必须采用一些非常规的手段,利用ICMP协议提供网络间传送错误信息的手段,往往可以更有效的达到目的:异常的IP包头在IP头中设置无效的字段值错误的数据分片通过超长包探测内部路由器反向映射探测异常的IP包头向目标主机发送包头错误的IP包,目标主机或过滤设备会反馈ICMPParameterProblemError信息。常见的伪造错误字段为HeaderLengthField和IPOptionsField。根据RFC1122的规定,主机应该检测IP包的VersionNumber、Checksum字段,路由器应该检测IP包的Checksum字段。不同厂家的路由器和操作系统对这些错误的处理方式不同,返回的结果也各异。如果结合其它手段,可以初步判断目标系统所在网络过滤设备的ACL。在IP头中设置无效的字段值向目标主机发送的IP包中填充错误的字段值,目标主机或过滤设备会反馈ICMPDestinationUnreachable信息。这种方法同样可以探测目标主机和网络设备以及其ACL。错误的数据分片当目标主机接收到错误的数据分片(如某些分片丢失),并且在规定的时间间隔内得不到更正时,将丢弃这些错误数据包,并向发送主机反馈ICMPFragmentReassemblyTimeExceeded错误报文。利用这种方法同样可以检测到目标主机和网络过滤设备及其ACL。通过超长包探测内部路由器若构造的数据包长度超过目标系统所在路由器的PMTU且设置禁止分片标志,该路由器会反馈FragmentationNeededandDon’tFragmentBitwasSet差错报文,从而获取目标系统的网络拓扑结构。反向映射探测该技术用于探测被过滤设备或防火墙保护的网络和主机。通常这些系统无法从外部直接到达,但是我们可以采用反向映射技术,通过目标系统的路由设备进行有效的探测。当我们想探测某个未知网络内部的结构时,可以构造可能的内部IP地址列表,并向这些地址发送数据包。当对方路由器接收到这些数据包时,会进行IP识别并路由,对不在其服务的范围的IP包发送ICMPHostUnreachable或ICMPTimeExceeded错误报文,没有接收到相应错误报文的IP地址会可被认为在该网络中。当然,这种方法也会受到过滤设备的影响。端口扫描技术当确定了目标主机可达后,就可以使用端口扫描技术,发现目标主机的开放端口,包括网络协议和各种应用监听的端口。端口扫描技术主要包括以下三类:开放扫描会产生大量的审计数据,容易被对方发现,但其可靠性高;隐蔽扫描能有效的避免对方入侵检测系统和防火墙的检测,但这种扫描使用的数据包在通过网络时容易被丢弃从而产生错误的探测信息;半开放扫描隐蔽性和可靠性介于前两者之间。开放扫描技术TCPConnect扫描TCP反向ident扫描TCPConnect扫描实现原理:通过调用socket函数connect()连接到目标计算机上,完成一次完整的三次握手过程。如果端口处于侦听状态,那么connect()就能成功返回。否则,这个端口不可用,即没有提供服务。优点:稳定可靠,不需要特殊的权限缺点:扫描方式不隐蔽,服务器日志会记录下大量密集的连接和错误记录,并容易被防火墙发现和屏蔽TCP反向ident扫描实现原理:ident协议允许看到通过TCP连接的任何进程的拥有者的用户名,即使这个连接不是由这个进程开始的。比如,连接到http端口,然后用identd来发现服务器是否正在以root权限运行。缺点:这种方法只能在和目标端口建立了一个完整的TCP连接后才能看到。半开放扫描技术TCPSYN扫描TCP间接扫描TCPSYN扫描实现原理:扫描器向目标主机端口发送SYN包。如果应答是RST包,那么说明端口是关闭的;如果应答中包含SYN和ACK包,说明目标端口处于监听状态,再传送一个RST包给目标机从而停止建立连接。由于在SYN扫描时,全连接尚未建立,所以这种技术通常被称为半连接扫描优点:隐蔽性较全连接扫描好,一般系统对这种半扫描很少记录缺点:通常构造SYN数据包需要超级用户或者授权用户访问专门的系统调用TCP间接扫描实现原理:利用第三方的IP(欺骗主机)来隐藏真正扫描者的IP。由于扫描主机会对欺骗主机发送回应信息,所以必须监控欺骗主机的IP行为,从而获得原始扫描的结果。扫描主机通过伪造第三方主机IP地址向目标主机发起SYN扫描,并通过观察其IP序列号的增长规律获取端口的状态优点:隐蔽性好缺点:对第三方主机的要求较高隐蔽扫描技术TCPFIN扫描TCPXmas扫描TCPNull扫描TCPftpproxy扫描分段扫描TCPFIN扫描实现原理:扫描器向目标主机端口发送FIN包。当一个FIN数据包到达一个关闭的端口,数据包会被丢掉,并且返回一个RST数据包。否则,若是打开的端口,数据包只是简单的丢掉(不返回RST)。优点:由于这种技术不包含标准的TCP三次握手协议的任何部分,所以无法被记录下来,从而必SYN扫描隐蔽得多,FIN数据包能够通过只监测SYN包的包过滤器。缺点:跟SYN扫描类似,需要自己构造数据包,要求由超级用户或者授权用户访问专门的系统调用;通常适用于UNIX目标主机,除过少量的应当丢弃数据包却发送RST包的操作系统(包括CISCO,HP/UX,MVS和IRIX)。但在Windows95/NT环境下,该方法无效,因为不论目标端口是否打开,操作系统都返回RST包。TCPXmas和TCPNull扫描实现原理:TCPXmas和Null扫描是FIN扫描的两个变种。Xmas扫描打开FIN,URG和PUSH标记,而Null扫描关闭所有标记。这些组合的目的是为了通过对FIN标记数据包的过滤。当一个这种数据包到达一个关闭的端口,数据包会被丢掉,并且返回一个RST数据包。否则,若是打开的端口,数据包只是简单的丢掉(不返回RST)。优点:隐蔽性好;缺点:需要自己构造数据包,要求由超级用户或者授权用户权限;通常适用于UNIX目标主机,而Windows系统不支持。TCPftpproxy扫描实现原理:FTP代理连接选项,其目的是允许一个客户端同时跟两个FTP服务器建立连接,然后在服务器之间直接传输数据。然而,在大部分实现中,实际上能够使得FTP服务器发送文件到Internet的任何地方。该方法正是利用了这个缺陷,其扫描步骤如下:1:假定S是扫描机,T是扫描目标,F是一个ftp服务器,这个服务器支持代理选项,能够跟S和T建立连接。2:S与F建立一个ftp会话,使用PORT命令声明一个选择的端口(称之为p-T)作为代理传输所需要的被动端口。3:然后S使用一个LIST命令尝试启动一个到p-T的数据传输。4:如果端口p-T确实在监听,传输就会成功(返回码150和226被发送回给S),否则S回收到425无法打开数据连接的应答。5:S持续使用PORT和LIST命令,直到T上所有的选择端口扫描完毕。优点:FTP代理扫描不但难以跟踪,而且可以穿越防火墙缺点:一些ftpserver禁止这种特性分段扫描实现原理:并不直接发送TCP探测数据包,是将数据包分成两个较小的IP段。这样就将一个TCP头分成好几个数据包,从而包过滤器就很难探测到。优点:隐蔽性好,可穿越防火墙缺点:可能被丢弃;某些程序在处理这些小数据包时会出现异常。栈指纹OS识别技术(一)原理:根据各个OS在TCP/IP协议栈实现上的不同特点,采用黑盒测试方法,通过研究其对各种探测的响应形成识别指纹,进而识别目标主机运行的操作系统。根据采集指纹信息的方式,又可以分为主动扫描和被动扫描两种方式。被动扫描通过Sniff收集数据包,再对数据包的不同特征(TCPWindow-size、IPTTL、IPTOS、DF位等参数)进行分析,来识别操作系统。被动扫描基本不具备攻击特征,具有很好的隐蔽性,但其实现严格依赖扫描主机所处的网络拓扑结构;和主动探测相比较,具有速度慢、可靠性不高等缺点。主动扫描采用向目标系统发送构造的特殊包并监控其应答的方式来识别操作系统类型。主动扫描具有速度快、可靠性高等优点,但