2.3通信协议设计
自从1990年以来,人们就用Http协议进行Web数据传输,Http协议是一种在TCP/IP之上的request/response型协议。多数Http数据传输由请求服务器上的某种资源开始,通过网络上的一些中介,如代理、网关等到达服务器,而后服务器处理请求并送回应答。但是Http 1.0并不完全支持各层代理、缓冲、持续的连接以及虚拟主机等技术。Http请求及应答数据包如图2所示。
对于目标系统Web漏洞扫描,使用渗透性的探测方法,渗透性探测方法主要通过更改Http请求信息包中的某些信息,从目标系统的应答信息包中获取状态信息及相关内容以判断目标系统的输入或软件错误,或其他一些配置信息,所以要求开发者可以自定义Http请求信息包。
Libwhisker是一个全面的API,是由一些不同的与Web应用程序相交互的功能模块构成的数据库,它有如下的特点:
(1)可以与Http 0.9,1.0以及1.1相通信;
(2)可以建立持续的连接;
(3)能有效地支持代理;
(4)支持Anti-IDS技术;
(5)支持SSL;
(6)支持Basic和NTLM认证。
所以使用Libwhisker与Http通信,以通过Libwhisker来自定义Http协议信息包以及提供相应的支持。
2.4特征信息数据库
此漏洞扫描系统的核心就是特征信息数据库,特征信息数据库保存了远程Web系统可能存在的各类Web隐患和漏洞的获取或攻击信息或代码。通过给远程Web系统发送此数据库中的数据以获得目标Web系统的安全性。
考虑到信息的共性与个性、方便性等因素,特征数据库信息大体分为以下几类:
(1)Web系统软件版本信息数据库:此类信息以检测当前Web系统相应软件的版本隐患及其漏洞信息,以及Web系统相应软件版本最新信息,并给出相关的提示。
(2)Web系统授权信息:此类信息以检测当前Web相应系统资源的授权情况以及漏洞信息。
(3)漏洞控测信息数据库:此类数据库是最主要的信息数据库,包含各类Web服务器中存在的各种隐患和漏洞探测信息。具体而言分为以下几个大类:认证攻击、授权攻击、识别“支持”文件、识别包含文件、目录攻击、识别错误、一般的输入验证、源代码泄露、URL编码、Unicode编码、Base64编码、识别请求方法、SQL注入、会话攻击、目录遍历攻击以及跨站点脚本攻击等。
特征信息数据库各记录分别为:
Web服务器类别、检测目标URI、预设返回信息、Http方法、描述信息。
2.5 Web漏洞扫描系统的实现
由于允许多用户同时使用服务器端,要求针对不同目标的扫描、检测任务同时进行,所以执行扫描机制就成了服务器端设计中的首要问题。根据服务器并行处理的理论,而且使用B/S的总体结构,考虑到开发语言和开发环境,对于扫描服务器的构架选择Linux平台下的PERL开发语言,使用并发服务器的模型。
并发服务器的思想是每一个客户的请求并不由服务器直接处理,而是由服务器创建相应的子进程进行处理。对于每一个子进程而言,客户可以设定其扫描范围包括不只一个目标地址,同样由服务器创建相应的子进程(即二级进程)来处理,以提高系统的扫描速度。利用Linux下的fork函数来完成一、二级进程处理功能。其流程如图3所示。
另外,由于PERL本身的效率问题,为进一步提高漏洞扫描系统的性能,对目标系统首先利用现阶段已经非常成熟的工具NMAP进行端口扫描,以获得开放的端口,在此基础上进行进一步的端口扫描,以判断在此端口上是否提供的是Web服务。
为进一步加快扫描速度,系统使用扫描知识库来保存已扫描过的主机信息,在获取用户请求以后,首先检测知识库,若有知识库中保存相关信息,则不进行新的扫描工作,只需调用相关的知识库信息返回给用户即可。
在对端口渗透性探测的实现方式上,使用插件脚本的方式来进行。用户可以通过参数选取相应的插件执行,以进行更为完整的漏洞扫描。插件可以动态地升级,其实现方式是每次升级插件时都将已升级的插件根据既定的顺序添加在插件调用清单当中,在插件执行过程中,主控程序根据插件调用清单中的插件执行顺序依次调用插件。插件的执行结果扩充了各类数据库探测信息,这样即可以增加各类特殊的信息,进行更为深入的扫描目标Web系统以发现更新、更多的漏洞信息。
3结语
提出对Web系统进行安全扫描的必要性,以及Web漏洞扫描的基本原理,在此基础上提出并设计了一个完整的Web漏洞扫描系统,介绍了它的协议基础以及组成模块。
本文设计的Web漏洞扫描系统已经完全实现,并经过测试,该扫描器基于浏览器/服务器结构,可以扫描UNIX/Windows等多种平台下的Web系统,与同类产品相比,可以看出该扫描器具有如下特点:利用多进程/知识库等技术加快了扫描速度;扫描封装在插件中使系统具有可扩展性;使用B/S结构使得用户操作方便,扫描结果详尽。此扫描系统实现了Web隐患扫描和漏洞检测,并可以提供漏洞的修补建议,将会在很大程度上确保Web系统安全。