漏洞扫描原理——将主机扫描、端口扫描以及OS扫描、脆弱点扫描都统一放到了一起

漏洞扫描原理及程序

1 引言

  网络扫描,是基于Internet的、探测远端网络或主机信息的一种技术,也是保证系统和网络安全必不可少的一种手段。主机扫描,是指对计算机主机或者其它网络设备进行安全性检测,以找出安全隐患和系统漏洞。总体而言,网络扫描和主机扫描都可归入漏洞扫描一类。漏洞扫描本质上是一把双刃剑:黑客利用它来寻找对网络或系统发起攻击的途径,而系统管理员则利用它来有效防范黑客入侵。通过漏洞扫描,扫描者能够发现远端网络或主机的配置信息、 TCP/UDP端口的分配、提供的网络服务、服务器的具体信息等。

  2 漏洞扫描原理

  漏洞扫描可以划分为ping扫描、端口扫描、OS探测、脆弱点探测、防火墙扫描五种主要技术,每种技术实现的目标和运用的原理各不相同。按照 TCP/IP协议簇的结构,ping扫描工作在互联网络层:端口扫描、防火墙探测工作在传输层;0S探测、脆弱点探测工作在互联网络层、传输层、应用层。 ping扫描确定目标主机的IP地址,端口扫描探测目标主机所开放的端口,然后基于端口扫描的结果,进行OS探测和脆弱点扫描。

  2.1 Ping扫描

  ping扫描是指侦测主机IP地址的扫描。ping扫描的目的,就是确认目标主机的TCP/IP网络是否联通,即扫描的IP地址是否分配了主机。对没有任何预知信息的黑客而言,ping扫描是进行漏洞扫描及入侵的第一步;对已经了解网络整体IP划分的网络安全人员来讲,也可以借助ping扫描,对主机的IP分配有一个精确的定位。大体上,ping扫描是基于ICMP协议的。其主要思想,就是构造一个ICMP包,发送给目标主机,从得到的响应来进行判断。根据构造ICMP包的不同,分为ECH0扫描和non—ECHO扫描两种。

  2.1.1 ECH0扫描

  向目标IP地址发送一个ICMP ECHOREQUEST(ICMP type 8)的包,等待是否收至UICMP ECHO REPLY(ICMP type 0)。如果收到了ICMP ECHO REPLY,就表示目标IP上存在主机,否则就说明没有主机。值得注意的是,如果目标网络上的防火墙配置为阻止ICMP ECH0流量,ECH0扫描不能真实反映目标IP上是否存在主机。

  此外,如果向广播地址发送ICMPECHO REQUEST,网络中的unix主机会响应该请求,而windows主机不会生成响应,这也可以用来进行OS探测。

  2.1.2 non-ECH0扫描

  向目的IP地址发送一个ICMP TIMESTAMP REQUEST(ICMP type l3),或ICMP ADDRESS MASK REQUEST (ICMP type l7)的包,根据是否收到响应,可以确定目的主机是否存在。当目标网络上的防火墙配置为阻止ICMP ECH0流量时,则可以用non.ECH0扫描来进行主机探测。

  2.2端口扫描

  端口扫描用来探测主机所开放的端口。端口扫描通常只做最简单的端口联通性测试,不做进一步的数据分析,因此比较适合进行大范围的扫描:对指定 IP地址进行某个端口值段的扫描,或者指定端口值对某个IP地址段进行扫描。根据端口扫描使用的协议,分为TCP扫描和UDP扫描。

  2.2.1 TCP扫描

  主机间建立TCP连接分三步(也称三次握手):

  (1)请求端发送一个SYN包,指明打算连接的目的端口。

  (2)观察目的端返回的包:

  返回SYN/ACK包,说明目的端口处于侦听状态;

  返回RST/ACK包,说明目的端口没有侦听,连接重置。

  (3)若返回SYN/ACK包,则请求端向目的端口发送ACK包完成3次握手,TCP连接建立。

  根据TCP连接的建立步骤,TCP扫描主要包含两种方式:

  (1)TCP全连接和半连接扫描

  全连接扫描通过三次握手,与目的主机建立TCP连接,目的主机的log文件中将记录这次连接。而半连接扫描(也称TCP SYN扫描)并不完成TCP三次握手的全过程。扫描者发送SYN包开始三次握手,等待目的主机的响应。如果收到SYN/ACK包,则说明目标端口处于侦听状态,扫描者马上发送RST包,中止三次握手。因为半连接扫描并没有建立TCP连接,目的主机的log文件中可能不会记录此扫描。

  (2)TCP隐蔽扫描

  根据TCP协议,处于关闭状态的端口,在收到探测包时会响应RST包,而处于侦听状态的端口则忽略此探测包。根据探测包中各标志位设置的不同,TCP隐蔽扫描又分为SYN/ACK扫描、FIN扫描、XMAS(圣诞树)扫描和NULL扫描四种。

  SYN/ACK扫描和FIN扫描均绕过TCP三次握手过程的第一步,直接给目的端口发送SYN/ACK包或者FIN包。因为TCP是基于连接的协议,目标主机认为发送方在第一步中应该发送的SYN包没有送出,从而定义这次连接过程错误,会发送一个RST包以重置连接。而这正是扫描者需要的结果— 只要有响应,就说明目标系统存在,且目标端口处于关闭状态。

  XMAS扫描和NULL扫描:这两类扫描正好相反,XMAS扫描设置TCP包中所有标志位(URG、ACK、RST、PSH、SYN、FIN),而NULL扫描则关闭TCP包中的所有标志位。

  2.2.2 UDP端口扫描

  UDP协议是数据包协议,为了要发现正在服务的UDP端口,通常的扫描方式是构造一个内容为空的UDP数据包送往目的端口。若目的端口上有服务正在等待,则目的端口返回错误的消息;若目的端口处于关闭状态,则目的主机返回ICMP端口不可达消息。因为UDP端口扫描软件要计算传输中丢包的数量,所以UDP端口扫描的速度很慢。

  2.3 0S探测

  OS探测有双重目的:一是探测目标主机的0S信息,二是探测提供服务的计算机程序的信息。比如OS探测的结果是:OS是Windows XP sp3,服务器平台是IIS 4.0。

  2.3.1二进制信息探测

  通过登录目标主机,从主机返回的banner中得知OS类型、版本等,这是最简单的0S探测技术。

  

  图1 二进制信息

 从图l可以看出,在telnet连上FTP服务器后,服务器返回的banner已经提供了server的信息,在执行ftp的syst命令后可得到更具体的信息。

  2.3.2 HTTP响应分析

  在和目标主机建立HTTP连接后,可以分析服务器的响应包得出OS类型。比如响应包中可能包含如下信息:

  

  图2 响应包分析

  从图2中对响应包中的数据分析,可以得到server的信息。

  2.3.3栈指纹分析

  网络上的主机都会通过TCP/IP或类似的协议栈来互通互联。由于0S开发商不唯一,系统架构多样,甚至是软件版本的差异,都导致了协议栈具体实现上的不同。对错误包的响应,默认值等都可以作为区分0S的依据。

  (1)主动栈指纹探测

  主动栈指纹探测是主动向主机发起连接,并分析收到的响应,从而确定OS类型的技术。

  1)FIN探测。跳过TCP三次握手的顺序,给目标主机发送一个FIN包。RFC793规定,正确的处理是没有响应,但有些OS,如MS Windows,CISC0,HP/UX等会响应一个RST包。

  2)Bogus标志探测。某些OS会设置SYN包中TCP头的未定义位(一般为64或128),而某些0S在收到设置了这些Bogus位的SYN包后,会重置连接。

  3)统计ICMP ERROR报文。RFCl812中规定了ICMP ERROR消息的发送速度。Linux设定了目标不可达消息上限为80个/4秒。0S探测时可以向随机的高端UDP端口大量发包,然后统计收到的目标不可达消息。用此技术进行OS探测时时间会长一些,因为要大量发包,并且还要等待响应,同时也可能出现网络中丢包的情况。

  4)ICMPERROR报文引用。RFC文件中规定,ICMP ERROR消息要引用导致该消息的ICMP消息的部分内容。例如对于端口不可达消息,某些OS返回收到的IP头及后续的8个字节,Solaris返回的 ERROR消息中则引用内容更多一些,而Linux比Solaris还要多。

  (2)被动栈指纹探测

  被动栈指纹探测是在网络中监听,分析系统流量,用默认值来猜测0S类型的技术。

  1)TCP初始化窗口尺寸。通过分析响应中的初始窗口大小来猜测OS的技术比较可靠,因为很多0S的初始窗口尺寸不同。比如AIX设置的初始窗口尺寸是0x3F25,而Windows NT5、OpenBSD、FreeBSD设置的值是0x402E。

  2)Don’t Fragment位。为了增进性能,某些0S在发送的包中设置了DF位,可以从DF位的设置情况中做大概的判断。

  3)TCPISN采样。建立TCP连接时,SYN/ACK中初始序列号ISN的生成存在规律,比如固定不变、随机增加 (Solaris,FreeBSD等),真正的随机(Linux 2.0.*),而Windows使用的是时间相关模型,ISN在每个不同时间段都有固定的增量。

  2.4脆弱点扫描

  从对黑客攻击行为的分析和脆弱点的分类,绝大多数扫描都是针对特定操作系统中特定的网络服务来进行,即针对主机上的特定端口。脆弱点扫描使用的技术主要有基于脆弱点数据库和基于插件两种。

  2.4.1基于脆弱点数据库的扫描

  首先构造扫描的环境模型,对系统中可能存在的脆弱点、过往黑客攻击案例和系统管理员的安全配置进行建模与分析。其次基于分析的结果,生成一套标准的脆弱点数据库及匹配模式。最后由程序基于脆弱点数据库及匹配模式自动进行扫描工作。脆弱点扫描的准确性取决于脆弱点数据库的完整性及有效性。

2.4.2基于插件的扫描

  插件是由脚本语言编写的子程序模块,扫描程序可以通过调用插件来执行扫描。添加新的功能插件可以使扫描程序增加新的功能,或者增加可扫描脆弱点的类型与数量。也可以升级插件来更新脆弱点的特征信息,从而得到更为准确的结果。插件技术使脆弱点扫描软件的升级维护变得相对简单,而专用脚本语言的使用也简化了编写新插件的编程工作,使弱点扫描软件具有很强的扩展性。

  2.5防火墙规则探测

  采用类似于traceroute的IP数据包分析法,检测能否给位于过滤设备后的主机发送一个特定的包,目的是便于漏洞扫描后的入侵或下次扫描的顺利进行。通过这种扫描,可以探测防火墙上打开或允许通过的端口,并且探测防火墙规则中是否允许带控制信息的包通过,更进一步,可以探测到位于数据包过滤设备后的路由器。

  3 常见漏洞扫描程序

  通常在制定漏洞扫描策略时,扫描者会考虑程序的操作系统、所应用的技术、易用性、准确性等因素。其中,程序的可用性是最重要的,也是最基本的,但是可控性和准确性同样不容忽视。

  3.1 Unix/Linux平台

  3.1.1 hping

  hping支持TCP、UDP、ICMP、RAW-IP多种协议。特点在于能进行ping扫描、端口扫描、0S探测、防火墙探测等多种扫描,并能自定义发送的ICMP/UDP/TCP包到目标地址并且显示响应信息。

  3.1.2 icmpush&icmpquery

  icmpush&icmpquery的特点在于完全应用了ICMP协议,可以定制ICMP包的结构以及种类。扫描者可以用这套工具把目标网络的各个子网全部查找出来,从而可以撇开广播地址而集中扫描某几个特定的子网。

  3.1.3 Xprobe 2

  是专业的端口扫描、OS探测程序。特点在于自身的0S特征数据库详细,进行OS探测的可靠性较好。

  3.1.4 THC-Anap

  OS探测程序。特点在于扫描速度快,扫描结果可靠。

  3.1.5 Whisker

  针对CGI的脆弱点探测程序。应用了多线程、多文件扫描技术,脆弱点数据库更新频繁,对扫描结果自行复核,从而扫描结果可靠性好。

  3.1.6 Nessus

  脆弱点探测程序。应用了主动扫描、高速扫描技术,可设置扫描过程。特点在于支持DMZ区以及多物理分区网络的大范围扫描。

  3.1.7 Firewalk

  防火墙探测程序。使用类似traceroute的技术来分析IP包的响应,从而测定防火墙的访问控制列表和绘制网络拓扑图。

  3.2 Windows平台

  3.2.1 Pinger

  是一个图形化的ping扫描工具。特点在于可以指定要ping的IP地址,以图形的形式显示扫描结果,并保存至文本文件。

  3.2.2 Fport

  是端口扫描程序。特点在于可以把扫描出的端口与使用该端口的程序相匹配,扫描速度快,匹配程度较好。

  3.2.3 SuperScan

  可以进行ping扫描、端口扫描、0S探测,并且白带一个木马端口列表,可以检测目标计算机是否有木马。

  3.2.4 GFILANguard

  脆弱点探测程序。特点在于集成了网络审计、补丁管理功能,可以自动生成网络拓扑图、自动补丁管理。

  上述漏洞扫描程序及特点如表1所示。

  4 结论

  一般而言,综合地应用多种扫描方法或扫描程序可以得到比较满意的结果。但是漏洞扫描从其技术原理上分析,有不可忽视的副作用。比如对大范围的 IP地址或者端口进行某种扫描,反复高速的发出特定的连接请求,所造成的结果就是目标网络及主机上存在大量的连接请求数据包,可以造成网络拥塞,主机无法正常使用,这正是DoS攻击的方法及表现。因此若要防范漏洞扫描以及可能的DoS攻击,要做到以下三点:

  1.在防火墙及过滤设备上采用严格的过滤规则,禁止扫描的数据包进入系统。

  2.主机系统除了必要的网络服务外,禁止其它的网络应用程序。

  3.对于只对内开放的网络服务,更改其提供服务的端口。

  此外,网络扫描时发送的数据或多或少都会含有扫描者自身相关信息,从而也可以抓取扫描时的数据包,对扫描者进行反向追踪,这也是一个值得研究的方向。

原文地址:https://www.cnblogs.com/bonelee/p/12687070.html

时间: 2024-08-02 19:10:22

漏洞扫描原理——将主机扫描、端口扫描以及OS扫描、脆弱点扫描都统一放到了一起的相关文章

Nmap扫描原理与用法

Nmap扫描原理与用法 2012年6月16日 1     Nmap介绍 Nmap扫描原理与用法PDF:下载地址 Nmap是一款开源免费的网络发现(Network Discovery)和安全审计(Security Auditing)工具.软件名字Nmap是Network Mapper的简称.Nmap最初是由Fyodor在1997年开始创建的.随后在开源社区众多的志愿者参与下,该工具逐渐成为最为流行安全必备工具之一.最新版的Nmap6.0在2012年5月21日发布,详情请参见:www.nmap.or

使用MSF发现主机和端口扫描

使用MSF发现主机和端口扫描 使用search命令查找需要的模块 MSF模块太多,记不住怎么办!!! 我们不需要记住所有模块,我们只要能找到我们想用的模块就行,平时积累使用的模块也行哦! 比如,我们通过扫描发现目标开放ftp服务,我们想查找关于ftp服务的模块 命令: search ftp 更多使用方法!自己多去研究哦! 使用db_nmap 命令和nmap用法一样,这里不做太多演示. 使用db_nmap用于主机发现 命令: db_nmap -sn 192.168.14.0/24 db_nmap

Nmap扫描原理(下)

转自:https://blog.csdn.net/qq_34398519/article/details/89055999 3     Nmap高级用法 3.1    防火墙/IDS规避 防火墙与IDS规避为用于绕开防火墙与IDS(入侵检测系统)的检测与屏蔽,以便能够更加详细地发现目标主机的状况. Nmap提供了多种规避技巧,通常可以从两个方面考虑规避方式:数据包的变换(Packet Change)与时序变换(Timing Change). 3.1.1    规避原理 3.1.1.1    分片

如何在linux使用nmap端口扫描工具扫描网段内开放的端口

linux一般不会自动安装nmap命令需要使用yum -y install nmap安装nmap命令,前提是您已经配置好了yum源. nmap特点: 主机探测 端口扫描 版本检测 系统检测 支持探测脚本的编写 nmap命令详解 nmap ip_address   #nmap默认发送一个arp的ping数据包,来探测目标主机1-10000范围内所有开放的端口 [[email protected] scanport]# nmap 10.132.71.1   Starting Nmap 6.40 ( 

深入解析跨站请求伪造漏洞:原理剖析

当存心不良的Web站点导致用户的浏览器在可信的站点上进行非意愿的活动时,我们就说发生了跨站请求伪造(CSRF)攻击.这些攻击被誉为基于Web的漏洞中的“沉睡的巨人”,因为互联网上的许多站点对此毫无防备,同时还因为这类攻击一直为web开发和安全社区所忽视. 一.概述 当存心不良的Web站点导致用户的浏览器在可信的站点上进行非意愿的活动时,我们就说发生了跨站请求伪造(CSRF)攻击.跨站请求伪造攻击亦称跨站引用伪造(XSRF),会话叠置和混淆代理人攻击.我们之所以使用术语CSRF,是因为它是描述这类

Atitit. Xss 漏洞的原理and应用xss木马

Atitit. Xss 漏洞的原理and应用xss木马 1. XSS漏洞1 2. XSS的用途2 2.1. 盗取cookie2 2.2. 刷新流量 刷分3 2.3. DOS 窃取隐私”.“假冒身份”.“WEB蠕虫3 2.4. 广告植入 弹窗 .信息收集 .流量转发 甚至是路由劫持3 2.5. 钓鱼攻击,高级的钓鱼技巧.3 2.6. 删除目标文章.恶意篡改数据.嫁祸.3 2.7. 劫持用户Web行为,甚至进一步渗透内网.3 2.8. 爆发Web2.0蠕虫.3 2.9. 蠕虫式的DDoS攻击.3 2

Struts2漏洞利用原理及OGNL机制

Struts2漏洞利用原理及OGNL机制研究   概述 在MVC开发框架中,数据会在MVC各个模块中进行流转.而这种流转,也就会面临一些困境,就是由于数据在不同MVC层次中表现出不同的形式和状态而造成的: View层-表现为字符串展示 数据在页面上是一个扁平的.不带数据类型的字符串,无论数据结构有多复杂,数据类型有多丰富,到了展示的时候,全都一视同仁的成为字符串在页面上展现出来.数据在传递时,任何数据都都被当作字符串或字符串数组来进行. Controller层-表现为java对象 在控制层,数据

zabbix根据主机和端口列表自动发现监控远程MongoDB实例

在有些情况下,只能使用远程的MongoDB实例而不能登录到MongoDB实例所在的服务器上,这时可以在一台服务器上维护一个远程MongoDB实例的主机和端口列表,然后通过zabbix的自动发现功能去根据主机和端口自动添加相应的监控.

20155306 白皎 0day漏洞——漏洞利用原理之栈溢出利用

20155306 白皎 0day漏洞--漏洞利用原理之栈溢出利用 一.系统栈的工作原理 1.1内存的用途 根据不同的操作系统,一个进程可能被分配到不同的内存区域去执行.但是不管什么样的操作系统.什么样的计算机架构,进程使用的内存都可以按照功能大致分为以下4个部分: 代码区:这个区域存储着被装入执行的二进制机器代码,处理器会到这个区域取指并执行. 数据区:用于存储全局变量等. 堆区:进程可以在堆区动态地请求一定大小的内存,并在用完之后归还给堆区.动态分配和回收是堆区的特点. 栈区:用于动态地存储函