---------------------------Metasploit渗透测试魔鬼训练营---------------------------
第1章魔鬼训练营——初识Metasploit
“欢迎来到渗透测试师的世界,在接下来的两周内,你们将见识到网络中最神奇的技术,但也会遭遇到最严酷的挑战,这就是我们赛宁公司渗透测试服务部门的魔鬼训练营!”
在北京中关村某写字楼的一个会议室里,一位其貌不扬但眼神中透露着睿智的讲师,正在眉飞色舞地对在座几位学生模样的年轻人进行着培训。而你正是其中的一位,刚刚迈出大学校园象牙塔,带着自认为还不赖的“黑客”技术和一些互联网上的“黑站”经验,怀抱着对安全职业的向往,通过面试进入了国内一家著名的安全公司——赛宁。当时面试你的主考官就是正在做培训的讲师——赛宁渗透测试服务部门的技术总监,国内黑客圈子中一个响当当的人物,也是你在大学期间所崇拜的几位技术偶像之一。
你带着崇敬的目光注视着技术总监,心里想:“什么时候我才能成为像他这样的技术大牛啊!”
1.1什么是渗透测试
“你以前使用过Metasploit这款渗透测试软件吗?”技术总监突然的提问将你从遐想中带回到魔鬼训练营中。
“Meta-s-ploit”,你用蹩脚的英文拼读着这个陌生的单词,笑嘻嘻地回答:“俺支持国货,不用洋工具!”其他几位接受培训的新员工哄堂大笑,技术总监一脸愠怒的神情,正色道:“别给我嬉皮笑脸的,黑客技术没有国界,只有充分吸收国外的先进技术,才能让我们自己变得更强,知道吗!Metasploit是国外安全开源社区的一款渗透测试神器,我们的魔鬼训练营就是围绕这款软件设计各种渗透技术专题,你会马上见识到它的强大威力!”
技术总监继续问道:“你们了解渗透测试的真正含义吗?”
台下默然。
“或许你们中有些人搞过黑站,有人植过木马,但这些都算不上渗透测试,你们都没有接触过真正的渗透测试流程,也还不太清楚这个安全专业词汇背后的意义,那么就让我从这个词汇的源头开始,逐步为你们解开它的神秘面纱吧。”
1.1.1渗透测试的起源与定义
如果大家对军事感兴趣,会知道各国军队每年都会组织一些军事演习来锻炼军队的攻防战术与作战能力。在信息科技的发源地——美国的军事演习中,将美军称为“蓝军”,将假想敌称为“红军”,而这种军事演习的方式也在20世纪90年代时,由美国军方与国家安全局引入到对信息网络与信息安全基础设施的实际攻防测试过程中。由一群受过职业训练的安全专家作为“红队”(Red Team),对接受测试的防御方“蓝队”(Blue Team)进行攻击,以实战的方式来检验目标系统安全防御体系与安全响应计划的有效性。为此,美军和国家安全局等情报部门专门组建了一些职业化的“红队”(也称为Tiger Team),比如著名的美国国家安全局Red Cell团队、美国海军计算机网络红队等。
这种通过实际的攻击进行安全测试与评估的方法就是渗透测试(Penetration Testing,Pentest)。在20世纪90年代后期逐步开始从军队与情报部门拓展到安全业界。一些对安全性需求很高的企业开始采纳这种方式来对他们自己的业务网络与系统进行测试,而渗透测试也逐渐发展为一种由安全公司所提供的专业化安全评估服务。
简而言之,渗透测试就是一种通过模拟恶意攻击者的技术与方法,挫败目标系统安全控制措施,取得访问控制权,并发现具备业务影响后果安全隐患的一种安全测试与评估方式。
. 渗透测试过程一般需要对目标系统进行主动探测分析,以发现潜在的系统漏洞,包括不恰当的系统配置,已知或未知的软硬件漏洞,以及在安全计划与响应过程中的操作性弱点等。而这一过程需要以攻击者的角度进行实施,通常涉及对大量发现安全漏洞的主动渗透与入侵攻击。渗透测试中发现的所有安全问题,它们所带来的业务影响后果评估,以及如何避免这些问题的技术解决方案,将在最终报告中呈现给目标系统的拥有者,帮助他们修补并提升系统的安全性。
渗透测试目前已经成为系统整体安全评估中的一个组件部分,例如银行支付行业数据安全标准(PCI DSS)等都将渗透测试作为必须进行的安全测试形式。
作为一种对抗性和定制要求都非常高的服务,渗透测试的完成质量依赖于实施人员即渗透测试者(Penetration Tester,Pentester)的技术能力、专业素养以及团队协作能力。提供渗透测试服务的安全公司或组织都需要由职业化渗透测试者组成的专业团队,这些渗透测试者一般被称为渗透测试工程师。
目前经济与信息化飞速发展,对于信息系统安全防御处于较低水平的中国而言,渗透测试工程师岗位数量缺口很大,高端人才极其稀缺,拥有很好的发展前景。而我们把熟练掌握渗透测试方法、流程与技术,面对复杂渗透场景能够运用自己的创新意识、技术手段与实践经验,从而成功取得良好渗透测试效果的技术专家称为渗透测试师(Penetration Test Expert),这应该是所有对渗透测试领域感兴趣的技术人员追求的目标。
1.1.2渗透测试的分类
渗透测试的两种基本类型包括:
黑盒测试:设计为模拟一个对客户组织一无所知的攻击者所进行的渗透攻击。
白盒测试:渗透测试者在拥有客户组织所有知识的情况下所进行的渗透测试。两种测试方法都拥有他们各自的优势和弱点。
1. 黑盒测试
黑盒测试(Black-box Testing)也称为外部测试(External Testing)。采用这种方式时,渗透测试团队将从一个远程网络位置来评估目标网络基础设施,并没有任何目标网络内部拓扑等相关信息,他们完全模拟真实网络环境中的外部攻击者,采用流行的攻击技术与工具,有组织有步骤地对目标组织进行逐步的渗透与入侵,揭示目标网络中一些已知或未知的安全漏洞,并评估这些漏洞能否被利用获取控制权或造成业务资产的损失。
黑盒测试还可以对目标组织内部安全团队的检测与响应能力做出评估。在测试结束之后,黑盒测试会对发现的目标系统安全漏洞、所识别的安全风险及其业务影响评估等信息进行总结和报告。
黑盒测试是比较费时费力的,同时需要渗透测试者具备较高的技术能力。在安全业界的渗透测试者眼中,黑盒测试通常是更受推崇的,因为它能更逼真地模拟一次真正的攻击过程。
2. 白盒测试
白盒测试(White-box Testing)也称为内部测试(Internal Testing)。进行白盒测试的团队将可以了解到关于目标环境的所有内部与底层知识,因此这可以让渗透测试者以最小的代价发现和验证系统中最严重的安全漏洞。如果实施到位,白盒测试能够比黑盒测试消除更多的目标基础设施环境中的安全漏洞与弱点,从而给客户组织带来更大的价值。
白盒测试的实施流程与黑盒测试类似,不同之处在于无须进行目标定位与情报搜集;此外,白盒测试能够更加方便地在一次常规的开发与部署计划周期中集成,使得能够在早期就消除掉一些可能存在的安全问题,从而避免被入侵者发现和利用。
白盒测试中发现和解决安全漏洞所需花费的时间和代价要比黑盒测试少许多。而白盒测试的最大问题在于无法有效地测试客户组织的应急响应程序,也无法判断出他们的安全防护计划对检测特定攻击的效率。如果时间有限或是特定的渗透测试环节(如情报搜集)并不在范围之内,那么白盒测试可能是最好的选项。
3. 灰盒测试
以上两种渗透测试基本类型的组合可以提供对目标系统更加深入和全面的安全审查,这就是灰盒测试(Grey-box Testing),组合之后的好处就是能够同时发挥两种基本类型渗透测试方法的各自优势。灰盒测试需要渗透测试者能够根据对目标系统所掌握的有限知识与信息,来选择评估整体安全性的最佳途径。在采用灰盒测试方法的外部渗透场景中,渗透测试者也类似地需要从外部逐步渗透进入目标网络,但他所拥有的目标网络底层拓扑与架构将有助于更好地决策攻击途径与方法,从而达到更好的渗透测试效果。
1.1.3渗透测试方法与流程
要想完成一次质量很高的渗透测试过程,渗透测试团队除了具备高超的具体实践技术能力之外,还需要掌握一套完整和正确的渗透测试方法学。
虽然渗透测试所面临的目标组织网络系统环境与业务模式千变万化,而且过程中需要充分发挥渗透测试者的创新与应变能力,但是渗透测试的流程、步骤与方法还是具有一些共性,并可以用一些标准化的方法体系进行规范和限制。
目前,安全业界比较流行的开源渗透测试方法体系标准包括以下几个。
1. 安全测试方法学开源手册
由ISECOM安全与公开方法学研究所制定,最新版本为2010年发布的v3.0。安全测试方法学开源手册(OSSTMM)提供物理安全、人类心理学、数据网络、无线通信媒介和电讯通信这五类渠道非常细致的测试用例,同时给出评估安全测试结果的指标标准。
OSSTMM的特色在于非常注重技术的细节,这使其成为一个具有很好可操作性的方法指南。
2. NIST SP 800-42网络安全测试指南
美国国家标准与技术研究院(NIST)在SP 800-42网络安全测试指南中讨论了渗透测试流程与方法,虽然不及OSSTMM全面,但是它更可能被管理部门所接受。
3. OWASP十大Web应用安全威胁项目
针对目前最普遍的Web应用层,为安全测试人员和开发者提供了如何识别与避免这些安全威胁的指南。OWASP十大Web应用安全威胁项目(OWASP Top Ten)只关注具有最高风险的Web领域,而不是一个普适性的渗透测试方法指南。
4. Web安全威胁分类标准
与OWASP Top Ten类似,Web应用安全威胁分类标准(WASC-TC)全面地给出目前Web应用领域中的漏洞、攻击与防范措施视图。
5. PTES渗透测试执行标准
2010年最新发起的渗透测试过程规范标准项目,核心理念是通过建立起进行渗透测试所要求的基本准则基线,来定义一次真正的渗透测试过程,并得到安全业界的广泛认同。
通过深入了解这些开放的渗透测试方法标准,将有助于你对渗透测试建立起一个整体的知识与技能体系,所有这些方法标准背后的基本想法就是你的渗透测试过程应该按步骤实施,从而确保更加精确地评价一个系统的安全性。我们无法在这里细致地介绍每一个标准的细节,只是简要地介绍最新的PTES标准中定义的渗透测试过程环节。当你更加深入地了解渗透测试技术之后,可以更进一步去了解这些渗透测试方法体系,并在实际的渗透测试实践中加以应用。
1.1.4渗透测试过程环节
PTES渗透测试执行标准是由安全业界多家领军企业技术专家所共同发起的,期望为企业组织与安全服务提供商设计并制定用来实施渗透测试的通用描述准则。PTES标准项目网站为http://www.pentest-standard.org/,从2010年11月开始(目前还处于开发阶段),目前已经发布了BETA RELEASE版本。
PTES标准中定义的渗透测试过程环节基本上反映了安全业界的普遍认同,具体包括以下7个阶段。
1. 前期交互阶段
在前期交互(Pre-Engagement Interaction)阶段,渗透测试团队与客户组织进行交互讨论,最重要的是确定渗透测试的范围、目标、限制条件以及服务合同细节。
该阶段通常涉及收集客户需求、准备测试计划、定义测试范围与边界、定义业务目标、项目管理与规划等活动。
2. 情报搜集阶段
在目标范围确定之后,将进入情报搜集(Information Gathering)阶段,渗透测试团队可以利用各种信息来源与搜集技术方法,尝试获取更多关于目标组织网络拓扑、系统配置与安全防御措施的信息。
渗透测试者可以使用的情报搜集方法包括公开来源信息查询、Google Hacking、社会工程学、网络踩点、扫描探测、被动监听、服务查点等。而对目标系统的情报探查能力是渗透测试者一项非常重要的技能,情报搜集是否充分在很大程度上决定了渗透测试的成败,因为如果你遗漏关键的情报信息,你将可能在后面的阶段里一无所获。
3. 威胁建模阶段
在搜集到充分的情报信息之后,渗透测试团队的成员们停下敲击键盘,大家聚到一起针对获取的信息进行威胁建模(Threat Modeling)与攻击规划。这是渗透测试过程中非常重要,但很容易被忽视的一个关键点。
通过团队共同的缜密情报分析与攻击思路头脑风暴,可以从大量的信息情报中理清头绪,确定出最可行的攻击通道。
4. 漏洞分析阶段
在确定出最可行的攻击通道之后,接下来需要考虑该如何取得目标系统的访问控制权,即漏洞分析(Vulnerability Analysis)阶段。
在该阶段,渗透测试者需要综合分析前几个阶段获取并汇总的情报信息,特别是安全漏洞扫描结果、服务查点信息等,通过搜索可获取的渗透代码资源,找出可以实施渗透攻击的攻击点,并在实验环境中进行验证。在该阶段,高水平的渗透测试团队还会针对攻击通道上的一些关键系统与服务进行安全漏洞探测与挖掘,期望找出可被利用的未知安全漏洞,并开发出渗透代码,从而打开攻击通道上的关键路径。
5. 渗透攻击阶段
渗透攻击(Exploitation)是渗透测试过程中最具有魅力的环节。在此环节中,渗透测试团队需要利用他们所找出的目标系统安全漏洞,来真正入侵系统当中,获得访问控制权。
渗透攻击可以利用公开渠道可获取的渗透代码,但一般在实际应用场景中,渗透测试者还需要充分地考虑目标系统特性来定制渗透攻击,并需要挫败目标网络与系统中实施的安全防御措施,才能成功达成渗透目的。在黑盒测试中,渗透测试者还需要考虑对目标系统检测机制的逃逸,从而避免造成目标组织安全响应团队的警觉和发现。
6. 后渗透攻击阶段
后渗透攻击(Post Exploitation)是整个渗透测试过程中最能够体现渗透测试团队创造力与技术能力的环节。前面的环节可以说都是在按部就班地完成非常普遍的目标,而在这个环节中,需要渗透测试团队根据目标组织的业务经营模式、保护资产形式与安全防御计划的不同特点,自主设计出攻击目标,识别关键基础设施,并寻找客户组织最具价值和尝试安全保护的信息和资产,最终达成能够对客户组织造成最重要业务影响的攻击途径。
在不同的渗透测试场景中,这些攻击目标与途径可能是千变万化的,而设置是否准确并且可行,也取决于团队自身的创新意识、知识范畴、实际经验和技术能力。
7. 报告阶段
渗透测试过程最终向客户组织提交,取得认可并成功获得合同付款的就是一份渗透测试报告(Reporting)。这份报告凝聚了之前所有阶段之中渗透测试团队所获取的关键情报信息、探测和发掘出的系统安全漏洞、成功渗透攻击的过程,以及造成业务影响后果的攻击途径,同时还要站在防御者的角度上,帮助他们分析安全防御体系中的薄弱环节、存在的问题,以及修补与升级技术方案。
1.2漏洞分析与利用
这时候,你对技术总监讲解的渗透测试方法与流程感觉有点不知所云了,举手提了个问题:“渗透测试不就是找出目标系统的安全漏洞,然后利用这些漏洞进行攻击吗?取得控制权不就完事了吗?为啥需要这么多乱七八糟的阶段和方法?”技术总监淡然一笑:“渗透测试可不像你所说的那么简单,为什么需要对阶段和流程进行规范化,你们以后会懂的。”
技术总监补充道:“你刚才所说的安全漏洞和渗透攻击确实是渗透测试中最基础和核心的内容。”技术总监将幻灯片翻下一页——A Bug’s Life,笑着说:“各位听众,且听我慢慢道来!”
1.2.1安全漏洞生命周期
在渗透测试流程中,核心内容是找出目标系统中存在的安全漏洞,并实施渗透攻击,从而进入到目标系统中。而这一过程最主要的底层基础是目标系统中存在的安全漏洞(Vulnerability)。安全漏洞指信息系统中存在的缺陷或不适当的配置,它们可使攻击者在未授权情况下访问或破坏系统,导致信息系统面临安全风险。利用安全漏洞来造成入侵或破坏效果的程序就称为渗透代码(Exploit),或者漏洞利用代码。
围绕着安全漏洞生命周期所进行的攻防技术博弈一直以来都是安全社区永恒的话题,而一个典型的安全漏洞生命周期包括如下7个部分:
1)安全漏洞研究与挖掘:由高技术水平的黑客与渗透测试师开展,主要利用源代码审核(白盒测试)、逆向工程(灰盒测试)、Fuzz测试(黑盒测试)等方法,挖掘目标系统中存有的可被利用的安全漏洞。
2)渗透代码开发与测试:在安全漏洞挖掘的同时,黑客们会开发概念验证性的渗透攻击代码(POC),用于验证找到的安全漏洞是否确实存在,并确认其是否可被利用。
3)安全漏洞和渗透代码在封闭团队中流传:在发现安全漏洞并给出渗透攻击代码后,负责任的“白帽子”们采取的处理策略是首先通知厂商进行修补,而在厂商给出补丁后再进行公布;而“黑帽子”与“灰帽子”们一般在封闭小规模团队中进行秘密地共享,以充分地利用这些安全漏洞和渗透攻击代码所带来的攻击价值。
4)安全漏洞和渗透代码开始扩散:由于各种原因,在封闭团队中秘密共享的安全漏洞和渗透代码最终会被披露出来,在互联网上得以公布,“黑帽子”们会快速对其进行掌握和应用,并在安全社区中开始快速扩散。
5)恶意程序出现并开始传播:“黑帽子”们将在掌握安全漏洞和渗透代码基础上,进一步开发更易使用、更具自动化传播能力的恶意程序,并通过黑客社区社会组织结构和互联网进行传播。在此过程中(或之前和之后),厂商完成补丁程序开发和测试,并进行发布。
6)渗透代码/恶意程序大规模传播并危害互联网:厂商发布补丁程序和安全警报将更进一步地让整个黑客社区了解出现新的安全漏洞和相应的渗透代码、恶意程序,更多的“黑帽子”们将从互联网或社区关系网获得并使用这些恶意程序,对互联网的危害也在这个阶段达到顶峰。
7)渗透攻击代码/攻击工具/恶意程序逐渐消亡:在厂商补丁程序、安全公司提供的检测和移除机制得到广泛应用后,相应的渗透代码、恶意程序将被“黑帽子”们逐渐抛弃,从而慢慢地消亡。
安全漏洞生命周期如图1-1所示。
图1-1安全漏洞生命周期
在安全漏洞生命周期中,从安全漏洞被发现到厂商发布补丁程序用于修补该漏洞之前的这段期间,被安全社区普遍地称为“0day”。由于在这段时间内,黑客们攻击存有该安全漏洞的目标可以达到百分之百的成功率,同时也可以躲避检测,因此“0day”的安全漏洞和对应的渗透代码对于黑客社区具有很高的价值,挖掘“0day”安全漏洞并给出渗透代码也成为高水平黑客的追求目标。即使在厂商发布了针对该安全漏洞的补丁程序和安全警报后,补丁程序也需要一段时间被接受、下载和应用,而一些不负责任的系统管理员很可能永远也不会去更新他们的系统,因此一些已公布的安全漏洞及相应的渗透代码对于无论“黑帽子”,还是职业的渗透测试者而言都仍然具有价值。
1.2.2安全漏洞披露方式
俗话说,纸总是包不住火的。一旦一个安全漏洞被发掘出来并编写出相应渗透代码之后,无论漏洞发现者以哪种方式进行处理,这个漏洞总是会有被公开披露的一天。
而针对漏洞的公开披露策略与道德准则,在安全社区中曾爆发过无数次的辩论,在此我们无法展开解释各种已有的披露规则与各方观点。归纳起来,主要有如下四种主要的安全漏洞披露方式。
1. 完全公开披露
发现漏洞后直接向公众完全公开安全漏洞技术细节,这将使得软件厂商需要赶在攻击者对漏洞进行恶意利用之前开发并发布出安全补丁,然而这通常是很难做到的,因此这种披露方式也被软件厂商称为不负责任的披露,会使得他们的客户由于漏洞披露而置于安全风险之中。
即便如此,还是有一部分传统黑客认为只有这种方式才能够有效促使软件厂商重视起安全问题,这种观点在安全社区中仍有一些认同者。最重要的完全公开披露渠道是著名的Full-Disclosure邮件列表。
2. 负责任的公开披露
负责任的公开披露是在真正进行完全公开披露之前,首先对软件厂商进行知会,并为他们提供一段合理的时间进行补丁开发与测试,然后在软件厂商发布出安全补丁,或者软件厂商不负责任地延后补丁发布时,再对安全社区完全公开漏洞技术细节。
目前最被安全社区接受的是负责任的公开披露策略。
3. 进入地下经济链
随着漏洞的经济价值逐步被安全研究者所认识,一部分黑客认为不应免费给软件厂商打工帮助他们抓bug,向软件厂商通报能够获得的通常只是厂商的一声“谢谢”,有时甚至连道谢也得不到。这种反差已经造就了安全漏洞交易市场的出现,如著名的TippingPoint公司的“Zero-Day Imitative”计划和iDefense公司的漏洞贡献者计划等,这些安全公司通过向安全研究人员收购高价值的安全漏洞,并出售给如政府部门等客户来赢取经济利益,同时也为安全研究人员带来更高的经济收益,而这些安全漏洞的售价通常在几百美元至数万美元之间,影响范围巨大且能够有效利用的安全漏洞售价甚至可能超出十万美元。
在这种背景下,三位全球著名的黑客Dino Dai Zovi、Charlie Miller和Alex Sotrirov,在2009年的CanSecWest会议上打出了“No More Free Bugs”的横幅,这也引发了安全社区重新对安全漏洞信息的披露、出售与利用的伦理道德和策略进行争论。
4. 小范围利用直至被动披露
由于并非所有的漏洞发现者都会遵从软件厂商所期望的披露策略,因而在安全社区所发现的安全漏洞中,也有相当一部分并没有首先通报给软件厂商,而是在小范围内进行利用,进而逐步扩大影响范围,最终被恶意代码广泛利用从而危害庞大的互联网用户群体。这时一些安全公司会监测到野外活跃的渗透代码,并发现出背后所利用的安全漏洞。比如著名的Google公司遭受Aurora攻击事件,便揭示出是利用的MS10-002安全漏洞。
而无论以何种方式进行公开披露,已公布的安全漏洞信息都会被收集到业界知名的CVE、NVD、SecurityFocus、OSVDB等几个通用漏洞信息库中。
1.2.3安全漏洞公共资源库
国内的安全漏洞信息库主要包括:
CNNVD:中国国家漏洞库,由中国信息安全测评中心维护(www.cnnvd.org.cn)。
CNVD:中国国家信息安全漏洞共享平台,由国家计算机网络应急技术处理协调中心(CNCERT/CC)维护(www.cnvd.org.cn)。
乌云安全漏洞报告平台:民间组织(http://www.wooyun.org/)。
SCAP中文社区:由本书作者王珩、诸葛建伟等人发起的民间组织项目(http://www.scap.org.cn/)。
国外的安全漏洞信息库主要包括:
CVE:(Common Vulnerability and Exposures,通用漏洞与披露)已成为安全漏洞命名索引的业界事实标准,由美国国土安全部资助的MITRE公司负责维护,CVE漏洞库为每个确认的公开披露安全漏洞提供了索引CVE编号,以及一段简单的漏洞信息描述,而这个CVE编号就作为安全业界标识该漏洞的标准索引号。
NVD:(National Vulnerability Database,国家漏洞数据库)是美国政府官方根据NIST的SCAP标准协议所描述的安全漏洞管理信息库,具体由美国国土安全部下属的NCSD国家网际安全部门US-CERT组负责维护。截至2013年4月,NVD库目前包括了近6万条CVE安全漏洞详细信息。
SecurityFocus:起源于业内著名的Bugtraq邮件列表。2002年SecurityFocus网站被Symantec公司所收购,从Bugtraq邮件列表中也演化出SecurityFocus安全漏洞信息库,为业界的安全研究人员提供所有平台和服务上最新的安全漏洞信息。
OSVDB:(Open Source Vulnerability DataBase,开源漏洞数据库)由HD Moore参与发起,由安全社区创建的一个独立的、开源的安全漏洞信息库,为整个安全社区提供关于安全漏洞的准确、详细、及时、公正的技术信息,来促使软件厂商与安全研究人员更友好、更开放地合作,消除开发和维护私有安全漏洞信息库所带来的冗余工作量和花费。截至2013年4月,OSVDB库能够覆盖7万多个产品,已包含91 000多个安全漏洞的详细信息。
针对这些已知安全漏洞的公开渗透代码资源也会在安全社区中流传与共享,目前安全社区比较知名的渗透攻击代码共享站点包括Metasploit、Exploit-db、PacketStorm、SecurityFocus等,CORE Security、VUPEN等则提供商业的渗透代码订阅服务,具体内容如表1-1所示。而SCAP中文社区(www.scap.org.cn)提供了从CVE安全漏洞搜索渗透攻击代码的能力,并将进一步扩展汇聚渗透攻击代码的范围。
表1-1安全社区比较知名的渗透攻击代码共享站点
站点名称 站点网址 共享类型 代码类型 分类与索引 质量 数量规模
(单位:千)
Metasploit www.metasploit.com/modules/ 免费公开 社区开发 目录/索引 高 小(0.1~1)
Exploit-db www.exploit-db.com 免费公开 社区共享 目录/索引 中 中(1~10)
PacketStorm packetstormsecurity.org 免费公开 社区共享 Tag/无索引 中 大(10~100)
SecurityFocus www.securityfocus.com/bid 免费公开 社区共享 漏洞目录/索引 中 中(1~10)
SecurityReason securityreason.com/exploit_alert/ 免费公开 社区收集 无目录/无索引 中 中(1~10)
SecurityVulns securityvulns.com/exploits/ 免费公开 社区共享 无目录/无索引 中 中(1~10)
1337Day 1337day.com 付费购买 地下产业 目录/索引 未知 大(10~100)
CORE Security www.coresecurity.com 商业服务 企业开发 未知 未知 未知
VUPEN www.vupen.com 商业服务 企业开发 未知 未知 未知
看到技术总监通过幻灯片展示的渗透攻击代码共享站点表格,你马上提起了精神,在笔记本电脑的浏览器中打开了前面几个站点,粗略扫了几眼,感觉如获至宝,心里想:“哇,这么多好东西,赶紧收藏学习,以后关键时刻肯定能派得上用场。”
1.3渗透测试神器Metasploit
这时,技术总监故作神秘地说:“下面让我们有请魔鬼训练营的主角上场!”
你迷惑地往会议室门口张望,以为技术总监会介绍哪位更大牌的技术大牛来给你们培训呢,然而随着技术总监优雅地按下PPT翻页笔上的按钮,投影屏幕上以极其绚丽的动画效果展现出一个很酷的Logo(图1-2),Metasploit闪亮登场!
图1-2Metasploit的Logo
“Metasploit是一个开源的渗透测试框架软件,也是一个逐步发展成熟的漏洞研究与渗透代码开发平台,此外也将成为支持整个渗透测试过程的安全技术集成开发与应用环境”,技术总监继续介绍。
1.3.1诞生与发展
你举手示意,发问道:“Metasploit既然这么牛,为什么我们都没听说过呢?”
技术总监无奈地叹了口气,回答说:“你们这群小屁孩,整天只知道拿些烂工具就去黑人家网站,还留上×××到此一游,自以为很了不起是吧。大学英语课也不好好上,四级过得都那么费劲,要知道在黑客圈里混,不学好英语是不行的。这不,在国外安全圈子里这么有名的Metasploit你们都不知道,那么多关于Metasploit的英文材料你们根本不去学习。”你伸了伸舌头,想起面试的时候就已经被技术总监批评过英语四级分数狂烂,低头无语。
技术总监继续说:“Metasploit虽说算是一匹黑马吧,但也已经从黑马变为千里马许多年了,且听我慢慢给你们讲讲Metasploit诞生和发展的历史吧。”
1. Metasploit横空出世
Metasploit项目最初由HD Moore在2003年夏季创立,目标是成为渗透攻击研究与代码开发的一个开放资源。当时HD还是Digital Defense安全公司雇员,当他意识到他的绝大多数时间是在用来验证和处理那些公开发布的渗透代码时,他开始为编写和开发渗透代码构建一个灵活且可维护的框架平台,并在2003年的10月发布了他的第一个基于Perl语言的Metasploit版本,当时一共集成了11个渗透攻击模块。
笔者感慨旁白
2003年春季,研二的我刚刚开始进行一些安全研究,也在和HD Moore做同样的事情——搜索公开渗透代码资源并进行测试,不过我比他业余很多。我当时也萌生了与HD类似的想法——能否将公开发布的渗透攻击代码资源以一种通用化结构与标准化描述语言进行组织,使其能够成为业界共享的系统化攻击知识库。而对于这样的一个想法,我将课本上学的面向对象、XML结构化信息描述、COM组件作为基础,以XML Schema定义了一套攻击知识描述语言,然后在渗透攻击方法实现中采用了以Shell命令方式编译与执行公开渗透代码进行集成复用,当时也包含了从PacketStorm、MilW0rm等公开渗透代码资源网站上获取的少数几个渗透代码。最后基于这个想法和初步实现的原型系统,在《计算机研究与发展》上发表了我学术生涯的第一篇学术论文《基于面向对象方法的攻击知识模型》。现在回想起来,虽然当时想法有些类似,或许更具野心,但没有坚实的技术基础、丰富的实践经验以及浓厚的开源氛围,我无法像HD Moore那样能够抓住最核心的技术环节——渗透攻击与载荷的模块化组装与系统框架支持,并促成一个伟大开源工具的持续发展与创新。这就是差距,不得不面对和深思。现在,与本书作者之一王珩一起,重新拾起这个梦想,开创了SCAP中文社区,将一步一个脚印地走向这个梦想。