Web扫描器是一种可以对Web应用程序进行自动化安全测试的工具,它可以帮助我们快速发现目标存在的安全风险,并能够对其进行持续性安全监控。
本书详细讲述了Web扫描器的概念、原理、实践及反制等知识,笔者凭借多年的安全工作经验,站在安全和开发的双重角度,力求为读者呈现出一个完整的Web扫描知识体系。通过对本书的学习和实践,它可以让你快速建立自己的Web扫描体系,提高安全基础能力。
Web扫描首著问世 ,让你从零开始学习和开发属于自己的Web扫描器,并最终建立自己的Web扫描体系。
推荐序
非常荣幸受刘漩的邀请为本书写推荐序。
刘漩是安全宝第一位安全工程师,也是早期WAF规则的主要维护者,这六年多来,他一直在Web安全的最前线与黑客做斗争,从防御到漏洞挖掘,都有着丰富的经验,也正是因为如此,他眼中的扫描技术有着更为系统化的视角。
纵观网络安全的发展历史,扫描器是最早出现的工具,从著名的开源实现Nmap,到国人为之骄傲的流光FluXay,都是端口扫描的利器。而Web安全领域里的扫描器虽然原理类似,但实现却更为复杂,需要考虑扫描频率、扫描深度、爬虫对于HTML的解释能力,还要不断地积累POC。
记得我最早使用过的扫描器是IBM的AppScan,其爬取能力很强,但扫描速度却奇慢无比,基本上对URL要尝试所有扫描特征,最后还需要从大量的漏洞中去伪存真。
扫描器也是百度安全团队最早开发的工具之一,百度公司有数百个产品线,每天的发布量数不胜数,如果没有一个高效的漏洞扫描,安全几乎无从谈起。无论是新上线的业务,还是当出现0day时的大规模临检,扫描已经成为例行化工作。扫描结合被动的URL发现,目前已经成为最大的漏洞来源,同时扫描与工单系统联动,完成派单、巡检、复检也成为现代安全管理自动化流程的一部分。
扫描已经成为所有互联网业务中必不可少的安全工作。这本书将系统化地为读者讲解扫描原理与实现方法,我相信无论你是甲方安全工程师,还是乙方安全服务人员,都将受益匪浅。
百度云安全技术总监,百度云加速总负责人
冯景辉
序
我的安全路
本人第一次接触安全是在大学期间,有一次无意中读到室友买的一本《黑客防线》杂志,立刻就被里面的黑客技术深深吸引,从那以后,我就开始疯狂学习安全知识,而那时候大学还没有设立类似的课程,只能靠自己独立钻研,一方面我借助安全杂志学习入侵实践知识,另一方面则“泡”在图书馆里翻阅各类与安全相关的书籍补充理论知识,成长非常快。
但在大学毕业的时候,我却并没有选择进入自己感兴趣的安全类公司,反而进入了一家大型跨国公司,在里面做了一年的软件测试工作,感觉这段经历对我最大的改变就是,养成了喜欢用自动化方式去解决一些重复工作的习惯。
后来我还是希望遵从内心,决定找一份与安全相关的工作。在辞职前,我成功地入侵了公司的内部网络,拿到公司域控的管理权限,并在服务器的桌面上留下了善意的修复建议,目的只是为了证明自己的安全能力。
有着大公司的背景及对安全工作的执着追求,我顺利地加入瑞星公司,在这里开始进一步学习安全的知识。得益于瑞星宽松的工作环境和浓厚的安全氛围,在完成本职工作之外,我开始进行更多的学习和研究,同时也接触到很多新的安全产品。也是在那段时间,我写了自己第一款移动端的手机防火墙软件,不过此时我对安全的理解更多的是攻防学习和漏洞研究,所掌握的知识并不成体系。
再后来我加入安全宝创业。安全宝算是我最有感情的一家公司,它让我从零开始踏上一个公司的安全建设之路,对安全工作进行系统的规划,以闭环的方式来推进和完善每个工作流程,然后通过攻防对抗实践进行迭代式的改进。其实对于企业来讲,攻防对抗仍然可以作为企业安全建设中最有价值的应用实践之一。
之后我加入百度。虽然还是以乙方的视角做着安全服务工作,但甲方的工作氛围和技术培训也让我对攻防的理解更加全局化,更加工程化,也更加体系化。此时,我对扫描的看法也发生了变化:扫描作为攻击的一种方式,它应该更贴近真实的攻击;而真实的攻击其实是一种全视角、持续性、动态化的入侵行为,它会对目标进行全视角的信息和资产收集,然后通过持续性的漏洞测试,以及动态的情报能力发现其中的脆弱点。因此,如果我们想重塑扫描的价值,那么就应该以攻击者的视角,同时将更多的安全能力融入扫描中,并以攻击的全流程来对其进行改进和扩充,从而最终实现扫描的情报化、插件化,以及智能化。
我的安全观
我眼中的Web安全
还记得自己刚刚加入百度,小哥(程岩)在面试我的时候,问了一个问题,我至今依然记忆深刻:每个Web安全人员都有自己的安全体系,你眼中的Web安全是什么样子的?
当时我也是第一次被问到这么宏观的问题,第一感觉就是问题很大,一时又不知从何说起,现在我还记得自己当时的回答:我眼中的Web安全包含着我做的所有内容,比如:漏洞挖掘、漏洞分析、漏洞攻击和规则防御等。它们都是围绕漏洞的生命周期进行展开的,可以按照时间顺序将它们划分为4个阶段,如下。
? 漏洞的感知:我们需要从各个方面和渠道去关注Web漏洞,获取最新的漏洞资源和信息,如,漏洞监控、漏洞预警或漏洞挖掘等。
? 漏洞的分析:获取漏洞资源后,我们就需要对漏洞进行分析和研究,弄清楚漏洞的原理及成因,而这主要体现在两方面的价值,一方面是可以构造出漏洞的POC,并补充到扫描器中,对漏洞实现自动化检测和验证;另一方面则是深入理解漏洞原理后,能够写出对应的漏洞匹配特征,制作漏洞签名,并给WAF升级进行防护。
? 漏洞的响应:这里主要分为两部分,一部分是对内的响应,也就是自身的漏洞响应,对漏洞进行快速排查和修复;另一部分则是对外的响应,也就是对互联网的全网客户进行响应,评估漏洞对其影响,以及协助修复,并对全网的安全态势进行监控。
? 漏洞的沉淀:按照漏洞的描述、原理、场景,以及修复策略等相关信息,对每个漏洞进行编号和积累,形成有价值的漏洞知识库。
现在回想起来,对于当时的回答,我其实并不满意,只能算是勉强应付下来了。但事后自己却想得更多了,这个问题属于主观题,或许它没有标准的答案,也没有所谓的对与错,但它却可以让每个人按照自己的角度、自己的工作、自己的理解,重新去思考和审视自己的知识体系。从那以后,这个问题也就一直伴随着我,它也是我作为面试官必问的题目之一。因为我相信在不同的阶段,每个人对它的理解肯定是不一样的。
三个基础的安全认知
1.木桶原理
盛水的木桶是由多块木板箍成的,盛水量也是由这些木板共同决定的。若其中一块木板很短,则此木桶的盛水量就被限制,该短板就成了这个木桶盛水量的限制因素,若要此木桶盛水量增加,只有换掉短板或将其加长才行,这就是木桶原理。它表达的意思就是,一个水桶无论有多高,它盛水的高度取决于其中最短的那块木板。在信息安全领域中,目标系统就好比盛水的木桶,它的安全性完全取决于系统中最薄弱的那个环节。
举个例子,我们在给企业进行渗透测试服务时,发现弱口令的安全问题仍然是企业的一个重灾区,这些企业虽然在安全方面做了很多工作,而且也部署了一些安全设备,但往往却因为一个简单的弱口令导致整个系统被入侵和攻破,所以我们需要审视系统中的薄弱点,并进行加强。
2.攻防不对称,安全是相对的
攻防不对称其实很好理解,防御方需要保护的是一个整体,而攻击方却可以通过审视这个整体,选择其中一个薄弱的环节进行持续的攻击。在这个对抗的过程中,其实很多内容都是不对称的,如下。
? 技术不对称:攻击方可以针对目标使用的某个软件或组件进行深入的漏洞挖掘,然后通过新的0day漏洞完成攻击和入侵,而防御方却无法对系统每个部分的漏洞都有所了解。
? 成本不对称:攻击方可以选择成本低廉、破坏力强的DDoS拒绝服务攻击,而防御方却需要消耗巨大的成本进行整体的防御。
? 信息不对称:攻击方可以选择通过人员、社交、无线等与企业有依赖关系的入口制订攻击路径,而防御方却无法覆盖所有的关联入口。
因此不论是安全产品,还是安全设计,它们的目标从来都不是绝对安全的,而只是追求相对安全。但这个认知绝不是用来找借口或是逃避安全责任的,而是用来提醒我们:安全是一个动态的过程,当前的安全工作仍然还有提升的空间;攻防其实只是一种成本的博弈对抗,只需要在允许的成本范围内进行适度、有效的防御即可;在攻防不对称的面前,我们可以选择用攻击驱动的方式进行防御。
3.纵深防御
我们知道,当今所有的信息安全技术其实都是以“用户是好人”为信任前提,只有当确认他干了坏事之后,才会把他定义为“坏人”,然后开始对其进行响应或防御。只有当某个用户已被证明产生了危害后,才将其定位为黑客或攻击者,开始对他进行应急处置,这种防御方式显然存在天然的滞后性,也势必会导致安全人员处于被动、挨打的局面。
为了能够改变这种被动、滞后的劣势,就需要拉伸防御的纵深。其实一个完整的攻击并不是由单点完成的,它通常会由一系列的环节关联组成,属于一个持续、连贯的过程。因此,我们可以在攻击过程中的每个必要环节点设置防御,从而做到提前感知和防御,利用这种层层设防、联动防御的方式,就可以化被动为主动,在攻击产生危害之前对其进行应急响应和处置。
安全其实是一个动态、整体的概念,正如道哥所说,互联网本来是安全的,自从有了研究安全的人之后,互联网就变得不安全了;而研究安全的人归根结底可以分为攻与防两个大分支,不过这里所说的攻防不是单纯的攻击入侵与技术防御,它们会结合技术、业务、流程、人员、制度和管理,形成一个广义的攻防概念,并一起构成了安全这个整体。因此我们看待安全的时候需要从攻与防两个不同的角度来整体审视和博弈均衡;同时攻击和防御也会在不断碰撞和对抗的过程中得到发展和变化,攻击通常会选择系统相对薄弱的环节来实施,防御则需要从各个角度及不同维度进行整体防御,补齐系统的各个短板,但攻防它又是不对称的,因此我们需要利用纵深防御的理念,将完整的攻击链条进行拆分和细化,在每个环节进行深度分析和防御,从而建立起立体化的安全防御体系。
前言
随着互联网的高速发展,Web应用在其中所扮演的地位也越来越重要,因为很多业务都选择使用Web的形式来提供服务,但随之而来的Web安全问题也日渐凸显出来,企业往往会因此遭受巨大的损失,此时很多企业都会在Web应用上线前或运行中对其进行相应的安全测试来保证安全性,减少由于安全问题造成的损失。
通常而言,Web应用的安全测试技术主要有:黑盒测试和白盒测试,还有一种灰盒测试,它是介于黑盒和白盒之间的。这里我们主要说一下黑盒测试,它又称为动态调试,这种方法主要是测试应用的功能点。它不需要分析内部代码,也不需要测试代码实现的逻辑。在黑盒测试过程中,只需要通过网页爬虫模拟正常用户访问Web应用的全部路径,然后基于探测的路径生成安全测试用例即可。在该过程中,被测站点往往被视为一个黑盒,此时不用关心其内部如何运行,用何种语言编写,只需依赖于Web应用的可用性。因此,黑盒测试常常是安全人员首选的测试方法,同时它具有实施性强、兼容性好,以及测试效率高等特点,因而得到了广泛的应用。
本书所讲的Web扫描器,属于黑盒测试的范畴,在Web应用安全测试中起着至关重要的作用,同时它的价值也是显而易见的。
? 对于企业建设来说,它可以帮助企业快速建立起常态、持续的安全扫描和监控体系,尽早发现安全问题并修复,从而节省人力成本和避免安全损失。
? 对于安全测试来说,它可以通过自动化的方式提高测试人员的效率及业务的覆盖面。
? 对于安全技术来说,Web扫描器早已作为安全人员的必备工具,因此我们有必要了解其原理和思路,然后通过持续的安全研究和对漏洞库的积累打造属于自己的安全扫描器,提高安全能力。
因此,对于Web扫描器的学习和研究显得尤为重要。
本书适用的目标读者
? 甲方安全人员,
? 渗透测试人员,
? 安全测试人员,
? 安全开发人员,
? 技术负责人员,
? Web扫描器开发人员,
? 对Web扫描器感兴趣的安全从业人员。
为什么写这本书
我还记得,在2014年年中的时候,我受邀参加上海的QCon大会,并在安全分会场上做了一场关于云WAF的演讲,会后博文视点的编辑找到了我,希望我可以写一本关于云WAF的书,经过慎重考虑,主要由于工作和时间的诸多不确定性,没敢贸然答应,此事只好作罢。
然而,时至今日,写书的想法却在心中越发强烈起来,我也深知写书不易,尤其是写一本技术类的书籍更难,它需要耗费大量的精力和时间去研究、调试、测试,以及论证。本书没有选择以云WAF为主题,主要是因为现阶段它与公司的业务过于密切,而且由于近年来我的工作角色的转变,已基本没有负责WAF相关的事情,所以最终放弃了,但也因此有了新的选择。
在安全宝被百度全资收购后,我有幸加入了百度安全,转而负责公司对外的企业安全服务。由于工作的需要,我经常会去拜访企业客户。在这个过程中,发现甲方客户其实很少会像BAT那样把安全当成一种习惯来执行,大多数都是事后出现安全问题才会想到使用渗透测试或APP测试这类服务来帮助排查和解决问题。至于Web扫描器那就更惨了,几乎快被人遗忘了,主要是因为很多甲方人员用扫描器来检测漏洞的时候,经常不能发现高危的安全问题,时间一久就开始对Web扫描器的价值产生质疑。
其实Web扫描就好比日常生活中的健康体检,你需要对安全进行长期的监控和检测,只有把扫描当成一种习惯,同时真正建立起企业专属有效的扫描体系,把安全当成一种习惯来对待,你才能优于攻击者提前发现安全问题。
为了改变人们对扫描的一些误解,重新认识扫描特有的价值,所以,我决定写一本关于Web扫描的安全书籍。在写书之初,我就开始对之前自己所写的扫描类文章进行重构和整理,希望可以借此将更多有价值的内容详细地写出来,同时让读者有更多的收益或启示。
扫描器环境
操作系统:Debian 8 x64 账号:imiyoo/anquanbao
扫描测试:LNMP 1.2+ Wavesp 1.5
语言环境:Python 2.7.9
本书涉及的代码均以Python来实现,至于为什么选择Python语言?理由如下:
? Python简单易学,上手很快,而且跨平台,可移植性强。
? 除了内置的库外,还有大量的第三方库,减少重复“造轮”工作。
约定
本书所提到的扫描器特指Web扫描器,为了便于内容简洁和避免读者误解,所以书中会统一使用扫描器来代替Web扫描器;同时阅读本书需要读者有一定的安全和开发基础,本书对一些比较基础的名称和技术并没有做太多的解释,读者可以通过百度等搜索引擎自行查阅。
由于时间关系,书中所涉及的相关资源暂无法全部上传,后面会陆续上传到笔者的Github上,读者可以在https://github.com/imiyoo2010上获取。
导读
全书共分为9章,内容之间有一定的关联性,所以建议大家最好从头到尾地阅读和学习。
第1章为扫描器基础,主要介绍扫描器的一些基础和必备知识,帮助读者更快地进入扫描器的世界并开始有目标地学习。
第2章和第3章分别为Web爬虫基础和Web爬虫进阶。爬虫作为Web扫描器的重要组成部分,内容非常多,这里分两章来介绍,Web爬虫基础主要介绍Web爬虫的一些必要的理论知识;Web爬虫进阶则重点关注功能原理和代码实现,并对业界流行的Web 2.0爬虫进行思考和实践。
第4章为应用指纹识别,它也是Web扫描器必备的一个功能组成部分,主要介绍应用指纹识别的原理及实践。
第5章为安全漏洞审计,它是Web扫描器的核心,也是本书的重点内容之一,主要分为通用漏洞审计和Nday/0day漏洞审计,通过对漏洞进行场景化分析,由浅入深地介绍安全漏洞审计的原理和实践。
第6章为扫描器进阶,主要从整体的角度来设计和实现Web扫描器。
第7章为云扫描,主要介绍云扫描的知识及相关技术的具体实践。
第8章为企业安全扫描实践,主要介绍企业常用的扫描场景及实践。
第9章为防御,主要介绍扫描器的常见防御方式和手段。
致谢
我相信每一本书的完成都少不了身边亲人和朋友的支持, 需要感谢的人太多了。
感谢我的老婆,为我生了一个聪明可爱的小子,并一直操劳着这个家,让我有足够的时间和精力来写作,老婆辛苦了,我爱你。
感谢我的父母,他们不计回报地付出和关爱着我,只求我健康成长。
感谢我所在的公司百度,百度是一家以技术为导向的公司,宽松的工作环境和良好的技术氛围,让我很快地成长起来。
感谢博文视点的编辑及其团队,在书籍出版的过程中,他们给了我很多专业的意见和帮助。
特别感谢冯景辉为本书写推荐序,他是一个充满激情且令人敬佩的领导,能邀请到他为本书写序,我十分荣幸。在公司内部我们都喜欢称他为冯老板,他敏锐的洞察力和成熟的方法论,以及对问题抽丝剥茧的能力,让我们受益良多。
还有感谢那些在背后给我支持和帮助的朋友、同事,以及领导,他们分别是:刘文杰、石祖文、王胄、周永成、刘焱、耿志峰、李婷婷、程岩、马哲超、陈燕。
最后感谢所有对本书做出贡献的人,没有你们,这本书不会这么快面世。
谢谢你们!
本书的写作大部分是我利用业余时间来实践和完成的,匆忙中难免会有些问题或错误,欢迎各位读者提出意见和建议,笔者不胜感激。
刘 漩
2017年2月27日
“信收集息” 应改为 “信息收集”