一个WEB漏洞扫描系统的设计与实现(一)

来源:互联网 发布:办公软件系统 编辑:程序博客网 时间:2024/06/05 02:31

一个WEB漏洞扫描系统的设计与实现(一)

一、关于我以及本文的背景
    文章的标题有点唬人的味道。
    首先,作为一个毕业还不到3年的普通本科生,我还没修炼成为WEB安全方面的行家;其次,作为一个总代码行数还不到5万的平凡开发人员,我也不是系统设计方面的能手。但是毕业后我到了一家大型的互联网公司,做了一段时间的WEB安全方面的工作,也确实积累了一些经验和心得,我是想借此机会来好好总结一番的。

    我最开始的任务是为公司的WEB站点做渗透测试--通俗点说就是找漏洞--也许你已经开始在想了:找网站的漏洞,多简单啊,打开浏览器在网站上转悠一会,抓抓包,用工具扫两下,或者来点Google Hacking之类的高级技巧,完了写一份测试报告,不就大功告成了?事实上也的确如此,找一个站点的漏洞已经简单到会两下计算机的小朋友都能玩了(他们多数比我玩得还好),这个工作又有何难呢?

    是呀,从技术的角度来说,对一个站点做一次WEB渗透测试是没有太大的难度。但是对很多个站点做很多次呢?我所在的公司有近万台WEB服务器,一千个以上的域名,活跃的域名过百,活跃的业务数数百,它们从静态的页面到复杂的WEB2.0应用都有,分属于几个不同的业务系统数十个开发小组,每周都在迭代开发与版本发布的过程中。而我们的任务,就是长期确保公司所有的WEB业务都没有安全漏洞。

    现在你可以看到了,这是一个大规模的技术性重复的以及长期持续的工作,牵涉到安全部门、各个业务部门的开发、测试以及他们的管理者。仅仅地靠个人的技术和力量,已经不可能承担这种工作的。最开始的时候,我们的老大对我说:你要成为WEB安全方面的专家,至少得手工测试一万个页面以上。可是在检测了数百个页面之后,我就已经倦怠得不行了。我开始寻思能够偷懒的办法,最开始是想做一个辅助的扫描工具,后来这想法又慢慢发展成为做一个自动化的系统。这个想法后来得到老大们的支持,初生牛犊不怕虎,我单枪匹马做了起来,得到了一个雏形,然后有新的同事加进来,把它发展和改进。到现在,一个覆盖公司所有WEB站点、24小时不间断检查、支持BU上线前自测、漏洞工单流程化、漏洞趋势统计视图的平台已经初步建立,公司的WEB安全形势得到了很大的改观。而我也在这个系统的开发过程中收获良多。

    诚然,这个系统还是很简陋的,我一直想对它进行重构(但对一个已经在运营的系统进行重构实际上是困难重重的),写这系列文章的目的,其实是想帮自己进行总结,厘清设计与实现的思路,也有助于锻炼系统的思维。其次,我希望借助重构后的扫描器做一些研究,比如说对一个区域的互联网站点做些安全性上的评估,形成一个类似于“安全数据库”的东西。

二、为什么重新发明车轮?
    业界已经有很优秀的WEB漏洞扫描器了,比如说AppScan、WebInspect、Acunetix等,为什么我们还要费力地去自己实现一个呢?
    从技术以及产品的角度来看,它们的确非常出色,我们的测试人员有时候也用它们来做辅助的检查。也有过一些厂商来我们公司推销他们的安全产品,但是都没有成功----它们实在是不适合我们的环境。对于单使用者单次单个目标的渗透测试来说,它们可说是无可挑剔。不过一旦你已经从上文了解了我们的应用背景,也就明白为什么它们为什么不适合了:
    (1)它们不支持大规模并发任务(无法应对数千个域名的扫描任务)
    (2)它们需要太多的复杂的人工交互(意味着需要为不同的业务配备很多熟练的测试人员)
    (3)对于漏洞管理提供的支持非常有限。例如它们通常只能为每次扫描提供一份独立的专业测试报告。但在企业中,一个漏洞往往牵涉到从安全部门到业务部门多个层面的人员,要对它进行管理,必须流程化之后,才能够得到有效的解决。
    (4)授权与服务支持的问题。商业软件的授权往往很贵,比如WebInspect的一个License就要6位数,只能在数个域名或IP上使用,要是想覆盖我们公司上万台服务器,光License就上亿元了。另外,一个定型了的软件,升级与维护也是个大问题,往往会滞后应用环境很多,特别是对于快速变化的互联网行业来说,更是如此。

    我还可以列举出更多的原因,但是这上面四条已经足够了。一个软件产品是否优秀实际上并不太重要,关键是看它能不能帮我们解决大部分的问题。对于个人使用者或者小型的公司来说,它们足够好了;但是对于一个大型互联网企业来说,需要一个更合适的“轮子”。

原创粉丝点击