0 引 言
CNCERT/CC 2006年的工作报告中显示,随着互联网的快速发展,我国公共互联网用户数量已超过1.37亿。在网络发展的同时,互联网作为一个运行系统和一个社会公共环境,所面对的和隐藏的安全威胁也越来越复杂,越来越严重。报告显示,2006年CNCERT/CC接收国内26 476件非扫描类网络安全事件报告中有24 477件是由于Web引起的。从2003年~2006年中国Web攻击事件统计中不难发现,通过Web漏洞进行攻击事件正在逐年迅速的增长。通过Web漏洞进行攻击成了网络漏洞攻击的主要方式与手段。
国内外的许多学术机构、企业和标准化组织在Web漏洞探测方面做了大量的工作。Web漏洞探测系统日趋成熟,当前,比较成熟的漏洞扫描工具有Whisker及Nikto和Nessus。但由于安全产品特殊应用需求以及各个组织的工具自身的技术与安全防护问题,使得这些产品不能很好地被推广或普及。对具体项目需求,设计并实现一个Web漏洞扫描系统是非常必要的。
1 Web漏洞扫描原理
Web漏洞扫描方法主要有两类:信息获取和模拟攻击。信息获取就是通过与目标主机TCP/IP的Http服务端口发送连接请求,记录目标主机的应答。通过目标主机应答信息中状态码和返回数据与Http协议相关状态码和预定义返回信息做匹配,如果匹配条件则视为漏洞存在。模拟攻击就是通过使用模拟黑客攻击的方法,对目标主机Web系统进行攻击性的安全漏洞扫描,比如认证与授权攻击、支持文件攻击、包含文件攻击、SQL注入攻击和利用编码技术攻击等对目标系统可能存在的已知漏洞进行逐项进行检查,从而发现系统的漏洞。远程字典攻击也是漏洞扫描中模拟攻击的一种,其原理与其他攻击相差较大,若攻击成功,可以直接得到登陆目标主机系统的用户名和口令。
Web漏洞扫描原理就是利用上面的扫描方法,通过分析扫描返回信息,来判断在目标系统上与测试代码相关的漏洞是否存在或者相关文件是否可以在某种程度上得以改进,然后把结果反馈给用户端(即浏览端),并给出相关的改进意见。
2 Web漏洞扫描系统设计与实现
Web漏洞扫描系统设计的基本要求是能够找到Web应用程序的错误以及检测Web服务器以及CGI的安全性,其中也包括认证机制、逻辑错误、无意泄露Web内容以及其环境信息以及传统的二进制应用漏洞(例:缓冲区溢出等)。同时要求漏洞扫描功能能够更新及时。本系统结合国内外其他Web漏洞扫描系统设计思想的优点,采用Browser/Server/Database(浏览器/服务器/数据库)和模块化的软件开发思路,通过渗透性检测的方法对目标系统进行扫描。
2.1 系统总体结构设计
本文设计开发的是一个B/S模式的Web漏洞扫描系统。它包括客户端及服务端两个部分,运行环境为Linux系统。首先:使用B/S结构使得用户的操作不再与系统平台相关,同时使得客户操作更方便、直观。其次,系统把漏洞扫描检测部分从整个系统中分离出来,使用专门的文件库进行存放(称为插件)。如果发现新的漏洞并找到了新的检测方法,只要在相关文件夹中增加一个相应的新的攻击脚本记录,即可以实现对漏洞的渗透性测试,同时也实现了及时的升级功能。最后,系统从多个角度来提高漏洞扫描系统的扫描速度以及减少在用客户端与服务端之间的信息传输量,以提高系统的运行效率。其总体结构设计如图1所示。
图1中给出了漏洞扫描系统模型的系统结构图。该漏洞检测系统主要分成四部分:
(1)主控程序。采用多线程处理方式,它接收多个客户端提交的用户指令后,再次利用多线程技术调用相关的插件脚本,利用渗透性测试对目标系统进行检测,并将结果和进程信息传回客户端显示并保存在客户端本地,以方便用户查看详细信息。
(2)客户端,即控制平台。B/S结构比传统的C/S结构优越的地方在于方便性和与平台无关性,用户通过Web浏览器设定扫描参数,提交给服务器端,控制服务器端进行扫描工作。同时,对服务器返回的各种检测结果进行相应的显示、汇总和保存。
(3)插件系统。它保存现在已知各种漏洞检测方法的插件,合理安排插件之间的执行顺序,使扫描按既定的顺序进行,以加快扫描速度提高扫描的效率与准确性。
(4)数据库,即探测数据库,是系统的核心。它保存已知各类Web漏洞的渗透性的探测数据即攻击代码或信息获取代码,比如SQL注入攻击、跨站点脚本攻击、会话攻击或输入验证编码信息等,逐条给目标发送探测数据,通过把返回信息与预先设定的“返回信息”和状态码进行匹配,进而获得目标返回系统的健壮信息。
在规划系统体系组成部分的基础上,如何把这些组成模块有机地集成为一个系统也是设计本系统的重点。我们要求服务器端同时处理多用户的连接,因此首先要进行多线程处理。在进行单用户处理中,当用户登陆时,检测服务器对用户的用户名和密码进行认证,判断用户是否具有使用权限。用户认证通过后,检测服务器给客户端发送可使用的基本检测信息。客户端接收到服务器的这些信息后,根据具体的使用要求选择和填写各种检测脚本要求的参数,或使用默认参数,然后返回给服务器端。服务器端建立新的进程,开始一个新的漏洞检测任务,对目标系统进行扫描。
2.2客户端的实现
网络的发展要求在任何地点进行登陆并进行扫描工作,并且漏洞检测参数繁多、设置扫描参数具有很高的复杂性,所以选择现在流行的Web页面作为客户端。这样就可以在世界的任何地点,任何环境使用客户端,用简单的图形化界面进行参数设定和系统的控制工作。
客户端在认证通过后,开始接收服务器发送过来的各种待设定的参数及相关信息以供用户选择。用户根据相关帮助信息及自己相关的要求设定参数,同时设定目标系统的IP地址(或主机名)和端口号等参数。根据客户端的参数设定,服务端建立扫描任务,对目标系统进行检测扫描。
检测过程中,客户可以自行设定是否实时显示服务端扫描状态信息及结果信息,以及在客户端是否保存相关信息,便于用户对扫描任务进行实时的控制,从而制定相应的安全策略。