1、漏洞扫描器的扫描原理
网络漏洞扫描器对目标系统进行漏洞检测时,首先探测目标系统的存活主机,对存活主机进行端口扫描,确定系统听开放的端口,同时根据协议指纹技术识别出主机的操作系统类型。然后扫描器对开放的端口进行网络服务类型的识别,确定其提供的网络服务。漏洞扫描器根据目标系统的操作系统平台和提供的网络服务,调用漏洞资料库中已知的各种漏洞进行逐一检测,通过对探测响应数据包的分析判断是否存在漏洞。漏洞扫描的过程大致如图1所示。
现有的网络漏洞扫描器主要是利用特征匹配的原理来识别各种已知的漏洞。扫描器发送含有某一漏洞特征探测码的数据包,根据返回数据包中是否含有该漏洞的响应特征码来判断是否存在漏洞。例如,对于IIS中的Uncode目录遍历漏洞,扫描器只要发送含有特征代码%c1%1c的探测包;http://x.x.x.x/scrlpts/..%c1%1c../winnt/system32/cmd exe?/c+dir,如果应答数据包中含有200 OK则可以断定该漏洞存在。
因此,只要我们认真研究各种漏洞,知道它们的探测特征码和响应特征码就可以利用软件来实现对各种已知漏洞的模拟.
2、模拟漏洞的实现
现在常用的操作系统平台主要为Windows和LiDUX/Unix两大系列,漏洞扫描器的测试项目包含对扫描器跨平台、跨网段的扫描能力测试。测试环境中至少应该有两台目标主机,分别配置为Windows系统和Linux/Unix系统。因此,可以分别设计两个平台下的漏洞模拟软件,测试时将其安装在对应平台的目标主机上就可以方便、全面地模拟测试环境的拓扑和漏洞配置。下面以Windows平台为例说明模拟露洞的实现方法。
(1)漏洞的分类
由于漏洞数量繁多,为了便于组织管理把已知的漏洞分为应用软件漏洞和操作系统漏洞。应用软件漏洞主要是系统提供的网络服务软件的漏洞,如WWW服务漏洞,FTP服务漏洞、SMTP服务漏洞、Telnet服务漏洞等等。由于同一网络服务可由不同的服务程序提供,因此,除了一些共有的漏洞外,还存在各服务程序特有的漏洞。操作系统漏洞主要是 Windows系统中的一些常见的RPC漏洞,NET810S漏洞等漏洞。具体分类如图1。
(2)漏洞资料库的组织
由于漏洞模拟系统实际上是分析扫描器发出的探测包中的是否含有探测特征码并返回具有相应响应特征码的数据包。因此,对每一个漏洞,探测特征码和响应特征码是两项必需的描述。为了便于快速查找,我们把漏洞分类项也加入到描述项中,因此,一个漏洞可以用漏洞名称、服务类型、服务程序,探测特征码,响应特征码来完整地描述。例如,IIS的 Unicode目录遍历漏洞可以描述为
Unicode目录遍历漏洞" "WWW" " " "%1%1c" "200 OK"
采用数据库技术可以方便地向漏洞资料库中添加新发现的漏洞,使漏洞模拟软件能够不断地更新漏洞资料库,可以更加有效地测试扫描器对安全漏洞的检测能力。
(3)模拟漏洞编程实现
1)模拟网络服务漏洞的实现
对每一种网络服务,漏洞模拟软件都提供一个服务代理模块。在主界面上进行适当的配置(如网络服务类型的选择服务程序和服务端口的选择等)便可启动服务代理线程,使其在相应的端口进行监听。当建立连接后,代理模块分析接收到的数据包,查找数据包中是否存在漏洞探测特征码,如果存在,则返回含有响应特征码的应答包。如果不存在,则按服务协议进行正常应答。
2)模拟操作系统漏洞的实现
操作系统常见的漏洞主要集中在弱口令、远程共享服务和RPC服务上,这些服务也是与特定的端口相关联(如win- dows系统中的135、137,138,139、445等端口)。对操作系统的漏洞模拟比对网络服务漏洞的模拟要复杂一些,因为必须要屏蔽掉操作系统自身对于漏洞探测包的响应。在模拟漏洞实现中可以采用网络数据包截获技术,截获相应端口的数据包,判断是否属于已知漏洞的探测包。如果是漏洞探测包,则模拟漏洞应答,让扫描器认为漏洞存在。反之,则递交给操作系统,让操作系统做出响应。
python漏洞扫描器研究现状 漏洞扫描器的原理
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Nuclei:开源漏洞扫描器
基于简单 YAML DSL 的快速且可定制的漏洞扫描程序。
安全 扫描 漏洞 检测 工具