《Metasploit渗透测试魔鬼训练营》第一章读书笔记
第1章 魔鬼训练营——初识Metasploit
20135301
1.1 什么是渗透测试
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 渗透测试方法与流程
要想完成一次质量很高的渗透测试过程,渗透测试团队除了具备高超的具体实践技术能力之外,还需要掌握一套完整和正确的渗透测试方法学。
虽然渗透测试所面临的目标组织网络系统环境与业务模式千变万化,而且过程中需要充分发挥渗透测试者的创新与应变能力,但是渗透测试的流程、步骤与方法还是具有一些共性,并可以用一些标准化的方法体系进行规范和限制。
目前,安全业界比较流行的开源渗透测试方法体系标准包括以下几个。
- 安全测试方法学开源手册
由ISECOM安全与公开方法学研究所制定,最新版本为2010年发布的v3.0。安全测试方法学开源手册(OSSTMM)提供物理安全、人类心理学、数据网络、无线通信媒介和电讯通信这五类渠道非常细致的测试用例,同时给出评估安全测试结果的指标标准。
OSSTMM的特色在于非常注重技术的细节,这使其成为一个具有很好可操作性的方法指南。
- NIST SP 800-42网络安全测试指南
美国国家标准与技术研究院(NIST)在SP 800-42网络安全测试指南中讨论了渗透测试流程与方法,虽然不及OSSTMM全面,但是它更可能被管理部门所接受。
- OWASP十大Web应用安全威胁项目
针对目前最普遍的Web应用层,为安全测试人员和开发者提供了如何识别与避免这些安全威胁的指南。OWASP十大Web应用安全威胁项目(OWASP Top Ten)只关注具有最高风险的Web领域,而不是一个普适性的渗透测试方法指南。
- Web安全威胁分类标准
与OWASP Top Ten类似,Web应用安全威胁分类标准(WASC-TC)全面地给出目前Web应用领域中的漏洞、攻击与防范措施视图。
- PTES渗透测试执行标准
2010年最新发起的渗透测试过程规范标准项目,核心理念是通过建立起进行渗透测试所要求的基本准则基线,来定义一次真正的渗透测试过程,并得到安全业界的广泛认同。
通过深入了解这些开放的渗透测试方法标准,将有助于你对渗透测试建立起一个整体的知识与技能体系,所有这些方法标准背后的基本想法就是你的渗透测试过程应该按步骤实施,从而确保更加精确地评价一个系统的安全性。我们无法在这里细致地介绍每一个标准的细节,只是简要地介绍最新的PTES标准中定义的渗透测试过程环节。当你更加深入地了解渗透测试技术之后,可以更进一步去了解这些渗透测试方法体系,并在实际的渗透测试实践中加以应用。
1.1.4 渗透测试过程环节
PTES渗透测试执行标准是由安全业界多家领军企业技术专家所共同发起的,期望为企业组织与安全服务提供商设计并制定用来实施渗透测试的通用描述准则。PTES标准项目网站为http://www.pentest-standard.org/,从2010年11月开始(目前还处于开发阶段),目前已经发布了BETA RELEASE版本。
PTES标准中定义的渗透测试过程环节基本上反映了安全业界的普遍认同,具体包括以下7个阶段。
- 前期交互阶段
在前期交互(Pre-Engagement Interaction)阶段,渗透测试团队与客户组织进行交互讨论,最重要的是确定渗透测试的范围、目标、限制条件以及服务合同细节。
该阶段通常涉及收集客户需求、准备测试计划、定义测试范围与边界、定义业务目标、项目管理与规划等活动。
- 情报搜集阶段
在目标范围确定之后,将进入情报搜集(Information Gathering)阶段,渗透测试团队可以利用各种信息来源与搜集技术方法,尝试获取更多关于目标组织网络拓扑、系统配置与安全防御措施的信息。
渗透测试者可以使用的情报搜集方法包括公开来源信息查询、Google Hacking、社会工程学、网络踩点、扫描探测、被动监听、服务查点等。而对目标系统的情报探查能力是渗透测试者一项非常重要的技能,情报搜集是否充分在很大程度上决定了渗透测试的成败,因为如果你遗漏关键的情报信息,你将可能在后面的阶段里一无所获。
- 威胁建模阶段
在搜集到充分的情报信息之后,渗透测试团队的成员们停下敲击键盘,大家聚到一起针对获取的信息进行威胁建模(Threat Modeling)与攻击规划。这是渗透测试过程中非常重要,但很容易被忽视的一个关键点。
通过团队共同的缜密情报分析与攻击思路头脑风暴,可以从大量的信息情报中理清头绪,确定出最可行的攻击通道。
- 漏洞分析阶段
在确定出最可行的攻击通道之后,接下来需要考虑该如何取得目标系统的访问控制权,即漏洞分析(Vulnerability Analysis)阶段。
在该阶段,渗透测试者需要综合分析前几个阶段获取并汇总的情报信息,特别是安全漏洞扫描结果、服务查点信息等,通过搜索可获取的渗透代码资源,找出可以实施渗透攻击的攻击点,并在实验环境中进行验证。在该阶段,高水平的渗透测试团队还会针对攻击通道上的一些关键系统与服务进行安全漏洞探测与挖掘,期望找出可被利用的未知安全漏洞,并开发出渗透代码,从而打开攻击通道上的关键路径。
- 渗透攻击阶段
渗透攻击(Exploitation)是渗透测试过程中最具有魅力的环节。在此环节中,渗透测试团队需要利用他们所找出的目标系统安全漏洞,来真正入侵系统当中,获得访问控制权。
渗透攻击可以利用公开渠道可获取的渗透代码,但一般在实际应用场景中,渗透测试者还需要充分地考虑目标系统特性来定制渗透攻击,并需要挫败目标网络与系统中实施的安全防御措施,才能成功达成渗透目的。在黑盒测试中,渗透测试者还需要考虑对目标系统检测机制的逃逸,从而避免造成目标组织安全响应团队的警觉和发现。
- 后渗透攻击阶段
后渗透攻击(Post Exploitation)是整个渗透测试过程中最能够体现渗透测试团队创造力与技术能力的环节。前面的环节可以说都是在按部就班地完成非常普遍的目标,而在这个环节中,需要渗透测试团队根据目标组织的业务经营模式、保护资产形式与安全防御计划的不同特点,自主设计出攻击目标,识别关键基础设施,并寻找客户组织最具价值和尝试安全保护的信息和资产,最终达成能够对客户组织造成最重要业务影响的攻击途径。
在不同的渗透测试场景中,这些攻击目标与途径可能是千变万化的,而设置是否准确并且可行,也取决于团队自身的创新意识、知识范畴、实际经验和技术能力。
- 报告阶段
渗透测试过程最终向客户组织提交,取得认可并成功获得合同付款的就是一份渗透测试报告(Reporting)。这份报告凝聚了之前所有阶段之中渗透测试团队所获取的关键情报信息、探测和发掘出的系统安全漏洞、成功渗透攻击的过程,以及造成业务影响后果的攻击途径,同时还要站在防御者的角度上,帮助他们分析安全防御体系中的薄弱环节、存在的问题,以及修补与升级技术方案。
1.2 漏洞分析与利用
1.2.1 安全漏洞生命周期
在渗透测试流程中,核心内容是找出目标系统中存在的安全漏洞,并实施渗透攻击,从而进入到目标系统中。而这一过程最主要的底层基础是目标系统中存在的安全漏洞(Vulnerability)。安全漏洞指信息系统中存在的缺陷或不适当的配置,它们可使攻击者在未授权情况下访问或破坏系统,导致信息系统面临安全风险。利用安全漏洞来造成入侵或破坏效果的程序就称为渗透代码(Exploit),或者漏洞利用代码。
围绕着安全漏洞生命周期所进行的攻防技术博弈一直以来都是安全社区永恒的话题,而一个典型的安全漏洞生命周期包括如下7个部分:
1)安全漏洞研究与挖掘:由高技术水平的黑客与渗透测试师开展,主要利用源代码审核(白盒测试)、逆向工程(灰盒测试)、Fuzz测试(黑盒测试)等方法,挖掘目标系统中存有的可被利用的安全漏洞。
2)渗透代码开发与测试:在安全漏洞挖掘的同时,黑客们会开发概念验证性的渗透攻击代码(POC),用于验证找到的安全漏洞是否确实存在,并确认其是否可被利用。
3)安全漏洞和渗透代码在封闭团队中流传:在发现安全漏洞并给出渗透攻击代码后,负责任的“白帽子”们采取的处理策略是首先通知厂商进行修补,而在厂商给出补丁后再进行公布;而“黑帽子”与“灰帽子”们一般在封闭小规模团队中进行秘密地共享,以充分地利用这些安全漏洞和渗透攻击代码所带来的攻击价值。
4)安全漏洞和渗透代码开始扩散:由于各种原因,在封闭团队中秘密共享的安全漏洞和渗透代码最终会被披露出来,在互联网上得以公布,“黑帽子”们会快速对其进行掌握和应用,并在安全社区中开始快速扩散。
5)恶意程序出现并开始传播:“黑帽子”们将在掌握安全漏洞和渗透代码基础上,进一步开发更易使用、更具自动化传播能力的恶意程序,并通过黑客社区社会组织结构和互联网进行传播。在此过程中(或之前和之后),厂商完成补丁程序开发和测试,并进行发布。
6)渗透代码/恶意程序大规模传播并危害互联网:厂商发布补丁程序和安全警报将更进一步地让整个黑客社区了解出现新的安全漏洞和相应的渗透代码、恶意程序,更多的“黑帽子”们将从互联网或社区关系网获得并使用这些恶意程序,对互联网的危害也在这个阶段达到顶峰。
7)渗透攻击代码/攻击工具/恶意程序逐渐消亡:在厂商补丁程序、安全公司提供的检测和移除机制得到广泛应用后,相应的渗透代码、恶意程序将被“黑帽子”们逐渐抛弃,从而慢慢地消亡。
在安全漏洞生命周期中,从安全漏洞被发现到厂商发布补丁程序用于修补该漏洞之前的这段期间,被安全社区普遍地称为“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.3 渗透测试神器Metasploit
1.3.1 诞生与发展
1.Metasploit横空出世
2.Metasploit风暴来袭
3.Metasploit全新回归
4.Metasploit全面扩展
1.3.2 渗透测试框架软件
Metasploit项目由著名黑客HD Moore于2003年开始开发,最早作为一个渗透攻击代码的集成软件包而发布。渗透攻击也是目前Metasploit最强大和最具吸引力的核心功能,Metasploit框架中集成了数百个针对主流操作系统平台上,不同网络服务与应用软件安全漏洞的渗透攻击模块,可以由用户在渗透攻击场景中根据漏洞扫描结果进行选择,并能够自由装配该平台上适用的具有指定功能的攻击载荷,然后通过自动化编码机制绕过攻击限制与检测措施,对目标系统实施远程攻击,获取系统的访问控制权。
Metasploit的出现使得一些渗透测试的初学者也能够像在黑客电影中演的那样“优雅潇洒”地进行渗透攻击,告别了之前令人崩溃与望而却步的繁杂过程:
搜索公开渗透代码→编译→测试→修改代码→实施→失败→不断调试直至成功
正因为如此,Metasploit在发布之后很快得到了安全社区的青睐,成为黑客们与安全职业人员必备的渗透测试工具之一。
除了渗透攻击之外,Metasploit在发展过程中逐渐增加对渗透测试全过程的支持,包括情报搜集、威胁建模、漏洞分析、后渗透攻击与报告生成。
- 情报搜集阶段
Metasploit一方面通过内建的一系列扫描探测与查点辅助模块来获取远程服务信息,另一方面通过插件机制集成调用Nmap、Nessus、OpenVAS等业界著名的开源网络扫描工具,从而具备全面的信息搜集能力,为渗透攻击实施提供必不可少的精确情报。
- 威胁建模阶段
在搜集信息之后,Metasploit支持一系列数据库命令操作直接将这些信息汇总至PostgreSQL、MySQL或SQLite数据库中,并为用户提供易用的数据库查询命令,可以帮助渗透测试者对目标系统搜集到的情报进行威胁建模,从中找出最可行的攻击路径。
- 漏洞分析阶段
除了信息搜集环节能够直接扫描出一些已公布的安全漏洞之外,Metasploit中还提供了大量的协议Fuzz测试器与Web应用漏洞探测分析模块,支持具有一定水平能力的渗透测试者在实际过程中尝试挖掘出“零日”漏洞,并对漏洞机理与利用方法进行深入分析,而这将为渗透攻击目标带来更大的杀伤力,并提升渗透测试流程的技术含金量。
- 后渗透攻击阶段
在成功实施渗透攻击并获得目标系统的远程控制权之后,Metasploit框架中另一个极具威名的工具Meterpreter在后渗透攻击阶段提供了强大功能。
Meterpreter可以看做一个支持多操作系统平台,可以仅仅驻留于内存中并具备免杀能力的高级后门工具,Meterpreter中实现了特权提升、信息攫取、系统监控、跳板攻击与内网拓展等多样化的功能特性,此外还支持一种灵活可扩展的方式来加载额外功能的后渗透攻击模块,足以支持渗透测试者在目标网络中取得立足点之后进行进一步的拓展攻击,并取得具有业务影响力的渗透效果。
从技术角度来说,Meterpreter让它的“前辈们”(如国外的BO、BO2K,以及国内的冰河、灰鸽子等)黯然失色。
- 报告生成阶段
Metasploit框架获得的渗透测试结果可以输入至内置数据库中,因此这些结果可以通过数据库查询来获取,并辅助渗透测试报告的写作。
而商业版本的Metasploit Pro具备了更加强大的报告自动生成功能,可以输出HTML、XML、Word和PDF格式的报告,并支持定制渗透测试报告模板,以及支持遵循PCI DSS(银行支付行业数据安全标准)与FIMSA(美国联邦信息安全管理法案)等标准的合规性报告输出。
正是由于Metasploit最新版本具有支持渗透测试过程各个环节的如此众多且强大的功能特性,Metasploit已经成为安全业界最受关注与喜爱的渗透测试流程支持软件。
Metasploit软件的用户群体也首先面向职业的渗透测试工程师,以及非职业地从事一些渗透测试学习与实践的安全技术爱好者。Metasploit或许是绝大多数渗透测试者最明智的渗透测试工具首选。
真正处于防御一线的网络与系统管理员们也应该熟悉和深入掌握Metasploit,能够自主地对所管理的信息网络进行例行性的白盒式渗透测试,这将有效发现其中的安全薄弱点,在由于真正的入侵发生导致自己挨训甚至丢掉饭碗之前,能够做出有效的补救与防护措施。此外,Metasploit还可以被软件、设备和安全产品测试人员们所使用,特别是在他们工作范围内的某款软件或设备被爆出公开利用的零日安全漏洞时,可以利用Metasploit来重现渗透攻击过程,定位安全漏洞并分析机理,从而修补软件与设备,而诸如IDS、IPS、杀毒软件等安全产品的测试人员,也可以使用Metasploit来检验产品的检测性能,以及针对Metasploit强大免杀与逃逸技术的对抗能力。
1.3.3 漏洞研究与渗透代码开发平台
当初,HD Moore的理想目标是,让Metasploit成为一个开放的漏洞研究与渗透代码开发的社区公共平台,而这一理想在Metasploit的发展过程中正在得以实现。
当我们在Exploit-db、SecurityFocus等公共渗透代码发布平台上不断发现大量的以Metasploit渗透攻击模块的格式进行编写,能够直接集成到Metasploit框架中进行灵活应用的代码发布时,我们知道已经进入了“Metasploit时代”了!
在“Metasploit时代”之前,黑客社区中的漏洞研究与渗透代码开发是一种“无序化”的状态,大家使用各自掌握的辅助工具和经验挖掘软件安全漏洞,并使用他们自己喜欢的编程语言来开发概念验证性渗透代码(POC),组装上个人珍藏的Shellcode。通常只针对有限的目标版本环境做过初步测试之后,就根据他们自己的“黑客哲学”在直接公开披露、负责任地通告厂商,或进入地下经济链等多种披露策略中做出选择,让他们所发现的安全漏洞和编写的渗透代码进入到安全社区。
采用这种漏洞研究与渗透开发方式所产生的渗透代码往往“鱼龙混杂、混沌不堪”,PacketStorm就是汇集了大量采用此种方式进行安全漏洞完全公开披露的一个代表性网站,每个月几乎都有数百个来自安全社区的漏洞披露与渗透代码发布。对于具有超级信息搜索能力、多种编程语言理解能力、较高渗透技术水平的高级渗透测试师而言,这种汇集大量漏洞与渗透代码的公共信息仓库无疑是一个宝贵的财富,他们有能力在渗透测试过程中快速找到可利用的公开漏洞信息与POC代码,并能够快速通过编译、测试和修改使用到他们自己的渗透过程中。
然而技术能力还不够到位的数量占绝大多数的技术爱好者与初学者,则对这些资源既爱又恨,一方面对找到针对新公开漏洞的渗透代码而欣喜不已,另一方面又没有能力发挥出它的实际效用,这种感受相信绝大多数体验过这一过程的读者们都深有感悟。而HD Moore当初创建Metasploit的想法相信也和他在渗透测试服务中一直遭遇上述境遇是密切相关的。
在“Metasploit时代”,黑客们就可以充分利用Metasploit中针对大量服务协议的Fuzz测试器来辅助他们的漏洞挖掘过程;在发现漏洞之后,他们还可以使用一些调试型的攻击载荷来让漏洞机理分析与利用过程变得更加简单。此外,Metasploit中集成的一系列功能程序可以让他们充分剖析目标程序,并精确定位出利用过程可能依赖的关键指令与地址;在编写渗透代码时,他们也无须从头开始编写代码,从Metasploit开源代码库中找出一个攻击类似目标的模块作为模板,然后将关注点集中在漏洞触发与利用的独特过程,而其他的攻击载荷、协议交互等都可以直接利用框架所提供的支持模块。这样的编写方式不仅省时省力,更为重要的是还具有更为灵活的特性,可以自由的组装任意的攻击载荷;而在测试阶段,黑客们也可以直接使用Metasploit生成测试用例,并可以在多个目标系统测试成功基础上,为渗透代码加上更多的目标系统配置选项,从而提示渗透代码的通用性与鲁棒性。
Metasploit最伟大之处,就是将漏洞研究与渗透代码开发从完全的“手工作坊”形式提升到了初具雏形的“工业化生产方式”,这种贡献足以让它载入安全技术发展的光辉史册。
1.3.4 安全技术集成开发与应用环境
Metasploit的目标还不仅限于提供一个渗透测试全过程支持框架软件,也不限于作为安全社区的一个开放式漏洞研究与渗透代码开发平台,而是作为一个安全技术的集成开发与应用环境。
你能想象实现这一目标之后Metasploit所具有的能量,以及它在安全社区中的地位吗?那时,Metasploit将成为安全社区中最具影响力的开源框架平台和创新策源地,大量的新技术从这里产出,快速转换成可实际应用与实施的工具,并能够与Metasploit平台上的其他工具相互配合,从而聚集出强大的能量光束,穿透渗透测试过程中的所有目标系统,以及进行安全测试的所有软硬件产品。那时HD Moore和Metasploit核心开发人员则会成为神一级的人物,接受着大家的顶礼膜拜。而这并不是虚无缥缈的幻想,Metasploit正在稳健地迈向这一目标。
首先,Metasploit作为一个开源项目,提供了非常优秀的模块化框架与底层基础库的支持,如果你认同开源理念,完全可以用Metasploit模块的方式来实现新技术与新想法,并贡献到Metasploit的开源代码库中,让安全社区的其他黑客们和渗透测试者都能够分享你的发现与创新。
其次,Metasploit提供了灵活的插件机制和命令行批处理文件机制,已经集成了Nmap、Nessus、OpenVAS等安全社区中重量级的开源或共享安全软件,以及一些极具特色的专项渗透测试工具,如社会工程学工具包SET、自动化攻击软件包Fast Track、无线网络攻击套件Karmetasploit等。而如果期望将自己开发或者社区共享的安全工具加入到Metasploit集成环境中,也可以利用这些机制完成一个“桥”插件,来为Metasploit社区做出贡献。
最后,Metasploit的最新版本实现一个可以远程调用Metasploit内建功能的RPC API接口,利用该接口可以让你更好地使Metasploit和其他一些安全工具进行互操作。
Metasploit社区正在通过一系列努力,朝着构建安全技术集成化开发与应用环境这一宏伟目标前进,是否能达成这一终极目标让我们拭目以待,如果有兴趣和能力,让这一天来的更快些,请贡献出你的智慧和力量吧。
1.4 Metasploit结构剖析
1.4.1 Metasploit体系框架
虽然Metasploit仍在活跃地开发与变化着,但整体体系结构从v3版本以来保持着相对的稳定。v4版本在用户界面、对渗透测试全过程提供更好支持、数据库融合与互操作性等方面有了非常大的变化,但其体系结构仍延续了v3系列版本中已趋于成熟稳定的整体框架,而并非像之前每次大版本升级都伴随着体系框架的重构。
Metasploit的设计尽可能采用模块化的理念,以提升代码复用效率。在基础库文件(Libraries)中提供了核心框架和一些基础功能的支持;而实现渗透测试功能的主体代码则以模块化方式组织,并按照不同用途分为6种类型的模块(Modules);为了扩充Metasploit框架对渗透测试全过程的支持功能特性,Metasploit还引入了插件(Plugins)机制,支持将外部的安全工具集成到框架中;Metasploit框架对集成模块与插件的渗透测试功能,通过用户接口(Interfaces)与功能程序(Utilities)提供给渗透测试者和安全研究人员进行使用。
此外,Metasploit在v3版本中还支持扩展脚本(Scripts)来扩展攻击载荷模块的能力,而这部分脚本在v4版本中将作为后渗透攻击模块(Post),以统一化的组织方式融入到模块代码中,而这些扩展脚本也将被逐步移植和裁剪。
- 基础库文件
Metasploit的基础库文件位于源码根目录路径下的libraries目录中,包括Rex、framework-core和framework-base三部分。
Rex(Ruby Extension)是整个Metasploit框架所依赖的最基础的一些组件,为Metasploit开发者进行框架和模块开发提供了一些基础功能的支持,如包装的网络套接字、网络应用协议客户端与服务端实现、日志子系统、渗透攻击支持例程、PostgreSQL及MySQL数据库支持等。
framework-core库负责实现所有与各种类型的上层模块及插件的交互接口。
framework-base库扩展了framework-core,提供更加简单的包装例程,并为处理框架各个方面的功能提供了一些功能类,用于支持用户接口与功能程序调用框架本身功能及框架集成模块。
- 模块
auxiliary模块位于/msf3/modules/auxiliary/下。
Exploits模块位于/msf3/modules/exploits/下。
Payloads模块位于/msf3/modules/payloads/下。
Nops模块位于/msf3/modules/nops下。
Encoders模块位于/msf3/modules/encoders/下。
模块是通过Metasploit框架所装载、集成并对外提供的最核心的渗透测试功能实现代码。按照在渗透测试过程各个环节中所具有的不同用途,分为辅助模块(Aux)、渗透攻击模块(Exploits)、后渗透攻击模块(Post)、攻击载荷模块(Payloads)、空指令模块(Nops)和编码器模块(Encoders)。这些模块都拥有非常清晰的结构和一个预先定义好的接口,可以被装载到Metasploit框架中,并可组合支持信息搜集、渗透攻击与后渗透攻击拓展等渗透测试任务。后面的小节将对这六类不同类型的模块进行更进一步的介绍。
- 插件
Metasploit框架的插件是一类定义比较松散,能够扩充框架的功能,或者组装已有功能构成高级特性的组件。插件可以集成现有的一些外部安全工具,如Nessus、OpenVAS漏洞扫描器等,为用户接口提供一些新的功能命令、记录所有的网络记录或提供创新的渗透测试功能。
- 接口
Metasploit框架提供了多种用户使用接口,包括msfconsole控制台终端、msfcli命令行、msfgui图形化界面、armitage图形化界面以及msfapi远程调用接口等。本书将在1.6节说明与演示如何通过这些接口使用Metasploit的基本渗透攻击功能,并在后继章节中深入全面地介绍如何使用Metasploit支持渗透测试全过程。
- 功能程序
除了通过上述的用户使用接口访问Metasploit框架主体功能之外,Metasploit还提供了一系列可直接运行的功能程序,支持渗透测试者与安全研究人员快速地利用Metasploit框架内部能力完成一些特定任务。比如msfpayload、msfencode和msfvenom可以将攻击载荷封装为可执行文件、C语言、JavaScript语言等多种形式,并可以进行各种类型的编码。msf*scan系列功能程序提供了在PE、ELF等各种类型文件中搜索特定指令的功能,可以帮助渗透代码开发人员定位指令地址。本书在后继章节中也会介绍到如何在渗透测试过程中利用这些Metasploit功能程序。
1.4.2 辅助模块
Metasploit为渗透测试的信息搜集环节提供了大量的辅助模块支持,包括针对各种网络服务的扫描与查点、构建虚假服务收集登录密码、口令猜测破解、敏感信息嗅探、探查敏感信息泄露、Fuzz测试发掘漏洞、实施网络协议欺骗等模块。辅助模块能够帮助渗透测试者在进行渗透攻击之前得到目标系统丰富的情报信息,从而发起更具目标性的精准攻击。本书将在后继章节详细介绍支持情报搜集的辅助模块。
此外,Metasploit辅助模块中还包含一些无须加载攻击载荷,同时往往不是取得目标系统远程控制权的渗透攻击,例如拒绝服务攻击等。
1.4.3 渗透攻击模块
渗透攻击模块是利用发现的安全漏洞或配置弱点对远程目标系统进行攻击,以植入和运行攻击载荷,从而获得对远程目标系统访问权的代码组件。渗透攻击模块是Metasploit框架中最核心的功能组件,虽然v4版本之后,Metasploit将继续沿着从最初一个单纯的渗透攻击软件向可以支持渗透测试全过程的框架平台这一方向继续发展,渗透测试模块目前在Metasploit框架中所占据的关键位置仍无法撼动,而且其数量、规模在截至2013年4月的最新版本v4.7.0中达到1084个,这也是其他类型模块无法比拟的。
你可以在Metasploit源码目录的modules/exploits子目录下找到所有的渗透攻击模块源代码,浏览源码路径你会发现Metasploit是以目标系统的操作系统平台,以及所针对的网络服务或应用程序类型来对这些渗透攻击模块进行分类的。目前v4.7.0版本中的渗透攻击模块按照操作系统平台分类后的数量分布情况如表1-3所示,其支持Windows、Linux、Apple iOS、Mac OS X、UNIX(包括AIX、BSDi、FreeBSD、HPUX、IRIX、Solaris等分支版本)、NetWare等不同操作系统平台,其中最受关注的还是目前最流行的Windows操作系统,其针对48个网络服务和应用分类拥有787个渗透攻击模块,其他拥有较多模块的有UNIX(78个)、Linux(64个)和Mac OS X(16个),而Multi平台类中包含一些跨平台的网络服务或应用程序中存在的安全漏洞,如Samba、Tomcat、Firefox等,也拥有115个。
Metasploit框架中渗透攻击模块可以按照所利用的安全漏洞所在的位置分为主动渗透攻击与被动渗透攻击两大类。
主动渗透攻击所利用的安全漏洞位于网络服务端软件与服务承载的上层应用程序之中,由于这些服务通常是在主机上开启一些监听端口并等待客户端连接,因此针对它们的渗透攻击就可以主动发起,通过连接目标系统网络服务,注入一些特殊构造的包含“邪恶”攻击数据的网络请求内容,触发安全漏洞,并使得远程服务进程执行在“邪恶”数据中包含的攻击载荷,从而获取目标系统的控制会话。针对网络服务端的主动渗透攻击属于传统的渗透攻击,在Metasploit中占据主流位置,此外近几年也出现了Web应用程序渗透攻击、SCADA工业控制系统服务渗透攻击等新的热点领域。
被动渗透攻击利用的安全漏洞位于客户端软件中,如浏览器、浏览器插件、电子邮件客户端、Office与Adobe等各种文档阅读与编辑软件。对于这类存在于客户端软件的安全漏洞,我们无法主动地将数据从远程输入到客户端软件中,因此只能采用被动渗透攻击方式,即构造出“邪恶”的网页、电子邮件或文档文件,并通过架设包含此类恶意内容的服务端、发送邮件附件、结合社会工程学攻击分发并诱骗目标用户打开、结合网络欺骗和劫持技术等方式,等目标系统上的用户访问到这些邪恶内容,从而触发客户端软件中的安全漏洞,给出控制目标系统的Shell会话。因为客户端软件的被动渗透攻击能够绕过防火墙等网络边界防护措施,所以近几年得到迅猛的发展,风头已经盖过了传统的网络服务端渗透攻击。最常见的两类被动渗透攻击为浏览器软件漏洞攻击和文件格式类漏洞攻击。
1.4.4 攻击载荷模块
攻击载荷是在渗透攻击成功后促使目标系统运行的一段植入代码,通常作用是为渗透攻击者打开在目标系统上的控制会话连接。在传统的渗透代码开发中,攻击载荷只是一段功能简单的Shellcode代码,以汇编语言编制并转换为目标系统CPU体系结构支持的机器代码,在渗透攻击触发漏洞后,将程序执行流程劫持并跳转入这段机器代码中执行,从而完成Shellcode中实现的单一功能,比如在远程系统中添加新用户、启动一个命令行Shell并绑定到网络端口上等。而开发渗透代码时,往往是从以前的代码中直接将Shellcode搬过来或做些简单的修改,一些不太成熟的Shellcode还会依赖于特定版本系统中的API地址,从而使其通用性不强,在不同版本系统上可能出现运行不正常的情况,因此开发人员不仅需要有汇编语言知识和编写技能,还需要对目标操作系统的内部工作机制有深入理解。
Metasploit框架中引入的模块化攻击载荷完全消除了安全研究人员在渗透代码开发时进行Shellcode编写、修改与调试的工作代价,而可以将精力集中在安全漏洞机理研究与利用代码的开发上。此外,Metasploit还提供了Windows、Linux、UNIX和Mac OS X等大部分流行操作系统平台上功能丰富多样的攻击载荷模块,从最简单的增加用户账号、提供命令行Shell,到基于VNC的图形化界面控制,以及最复杂、具有大量后渗透攻击阶段功能特性的Meterpreter,这使得渗透测试者可以在选定渗透攻击代码之后,从很多适用的攻击载荷中选取他所中意的模块进行灵活地组装,在渗透攻击后获得他所选择的控制会话类型,这种模块化设计与灵活组装模式也为渗透测试者提供了极大的便利。
Metasploit攻击载荷模块分为独立(Singles)、传输器(Stager)、传输体(Stage)三种类型。
独立攻击载荷是完全自包含的,可直接独立地植入目标系统进行执行,比如“windows/shell_bind_tcp”是适用于Windows操作系统平台,能够将Shell控制会话绑定在指定TCP端口上的攻击载荷。在一些比较特殊的渗透攻击场景中,可能会对攻击载荷的大小、运行条件有所限制,比如特定安全漏洞利用时可填充邪恶攻击缓冲区的可用空间很小、Windows 7等新型操作系统所引入的NX(堆栈不可执行)、DEP(数据执行保护)等安全防御机制,在这些场景情况下,Metasploit提供了传输器(Stager)和传输体(Stage)配对分阶段植入的技术,由渗透攻击模块首先植入代码精悍短小且非常可靠的传输器载荷,然后在运行传输器载荷时进一步下载传输体载荷并执行。目前Metasploit中的Windows传输器载荷可以绕过NX、DEP等安全防御机制,可以兼容Windows 7操作系统,而由传输器载荷进一步下载并执行的传输体载荷就不再受大小和安全防御机制的限制,可以加载如Meterpreter、VNC桌面控制等复杂的大型攻击载荷。传输器与传输体配对的攻击载荷模块以名称中的“/”标识,如“windows/shell/bind_tcp”是由一个传输器载荷(bind_tcp)和一个传输体载荷(Shell)所组成的,其功能等价于独立攻击载荷“windows/shell_bind_tcp”。Metasploit所引入的多种类型载荷模块使得这些预先编制的模块化载荷代码能够适用于绝大多数的平台和攻击场景,这也为Metasploit能够成为通用化的渗透攻击与代码开发平台提供了非常有力的支持。
1.4.5 空指令模块
空指令(NOP)是一些对程序运行状态不会造成任何实质影响的空操作或无关操作指令,最典型的空指令就是空操作,在x86 CPU体系架构平台上的操作码是0x90。
在渗透攻击构造邪恶数据缓冲区时,常常要在真正要执行的Shellcode之前添加一段空指令区,这样当触发渗透攻击后跳转执行Shellcode时,有一个较大的安全着陆区,从而避免受到内存地址随机化、返回地址计算偏差等原因造成的Shellcode执行失败,提高渗透攻击的可靠性。Metasploit框架中的空指令模块就是用来在攻击载荷中添加空指令区,以提高攻击可靠性的组件。
1.4.6 编码器模块
攻击载荷模块与空指令模块组装完成一个指令序列后,在这段指令被渗透攻击模块加入邪恶数据缓冲区交由目标系统运行之前,Metasploit框架还需要完成一道非常重要的工序——编码(Encoding)。如果没有这道工序,渗透攻击可能完全不会奏效,或者中途就被检测到并阻断。这道工序是由编码器模块所完成的。
编码器模块的第一个使命是确保攻击载荷中不会出现渗透攻击过程中应加以避免的“坏字符”,这些“坏字符”的存在将导致特殊构造的邪恶数据缓冲区无法按照预期目标完全输入到存有漏洞的软件例程中,从而使得渗透攻击触发漏洞之后无法正确执行攻击载荷,达成控制系统的目标。
典型的“坏字符”就是0x00空字节,在大量漏洞所在的字符串操作函数中,输入字符串中的空字节会被解释为字符串的末尾,这样会将后面内容进行截断,从而使得攻击载荷没有完整地被运行,导致攻击失败。此外还有一些渗透攻击场景中,网络输入必须通过明文协议进行传输,从而需要攻击载荷的内容都是可打印字符,甚至于字母与数字字符,这时除了这些可接受字符之外的全部字符,对这个渗透攻击场景而言,就全落入了“坏字符”的范畴了。
每个渗透攻击模块根据它的漏洞利用条件与执行流程会有多个不同的“坏字符”,渗透代码开发者需要进行测试并将它们标识出来,在Metasploit的渗透攻击模块中存在一个BadChars字段,专门用来列出需要避免的“坏字符”列表,让Metasploit选择编码器对攻击载荷进行编码时能够绕开这些“令人崩溃”的家伙们。
编码器的第二个使命是对攻击载荷进行“免杀”处理,即逃避反病毒软件、IDS入侵检测系统和IPS入侵防御系统的检测与阻断。通过各种不同形式的编码,甚至是多个编码器的嵌套编码,可以让攻击载荷变得面目全非,避免载荷中含有一些安全检测与防御机制能够轻易识别的特征码,从而能够达到“免杀”的效果。
当然,“杀”与“免杀”像“矛”和“盾”一样,永远处于不停对抗博弈的过程中,一些新的编码器和编码技术发布之后,反病毒公司与安全厂商也会随之研发能够应对这些技术,从而对编码后的攻击载荷进行有效检测的技术方法,然后安全社区的黑客们也会针对安全厂商的检测技术发掘它们的弱点,并开发出新的编码技术。这一过程构成了安全社区中永恒的攻防技术博弈,而这也是这个技术领域最具魅力的地方。
另外值得一提的是,采用编码器对攻击载荷进行编码之后,往往会造成编码后载荷体积增大,而每个渗透攻击模块能够植入的邪恶缓冲区大小是受到漏洞触发条件限制的(通常在渗透攻击模块的Space字段中指明),因此Metasploit在自动为攻击载荷选择编码器进行编码时,可能会找不出合适的编码器,既能够将编码后的载荷大小控制在空间限制之内,又要完全避免出现“坏字符”,这种情况下会出现“No encoders encoded the buffer successfully”错误,这可能让你摸不着头脑,难道那就束手无策了吗?
现在告诉你Metasploit的解决之道。还记得前面提到过的分阶段植入攻击载荷模式吗?选择一个传输器和一个传输体配对构成的攻击载荷,能够以短小精悍的传输器来避免编码之后超出空间限制,然后在运行传输器载荷之后就不再受到空间大小的约束,就可无拘无束地下载执行你所任意指定的传输体攻击载荷了。
1.4.7 后渗透攻击模块
后渗透攻击模块(Post)是Metasploit v4版本中正式引入的一种新类型的组件模块,主要支持在渗透攻击取得目标系统远程控制权之后,在受控系统中进行各式各样的后渗透攻击动作,比如获取敏感信息、进一步拓展、实施跳板攻击等。
正如前面已经提到的那样,后渗透攻击模块将替代Meterpreter和Shell攻击载荷中的一些扩展脚本,完成在目标系统上进一步攻击功能的组件代码。后渗透攻击模块需要通过Meterpreter或Shell控制会话加载到目标操作系统平台上运行,因此目前Metasploit框架中是按照操作系统平台来组织此类模块的,v4版本支持Windows、Linux、Mac OS X、Solaris平台,及Multi跨平台的一些应用软件信息搜集。现在支持最完善的Windows平台上,已有的后渗透攻击模块包括敏感信息搜集、键击记录、本地特权提升以及本地会话管理等。
在后渗透攻击阶段,Metasploit框架中功能最强大、最具发展前景的模块是Meterpreter,Meterpreter作为可以被渗透攻击植入到目标系统上执行的一个攻击载荷,除了提供基本的控制会话之外,还集成了大量的后渗透攻击命令与功能,并通过大量的后渗透攻击模块进一步提升它在本地攻击与内网拓展方面的能力。
本书将在第9章全面展示Meterpreter所具有的功能,以及对后渗透攻击阶段的支持能力。
1.5 安装Metasploit软件
1.5.2 在Windows操作系统上安装Metasploit
Metasploit在Windows操作系统上的安装非常简单,Metasploit已经为Windows用户提供了很好的支持,可以从Metasploit主站的下载页面中获取到Full版和Mini版的安装包。
在遇到问题后通过搜索引擎查找,看别人是否遇见过相同问题,并找到他们成功的解决方法,这是非常有效的一种手段,大家一定要掌握。但是要注意的是:
1)有些问题搜索中文页面可能找不到,但可以搜索英文页面会找得到,毕竟国内安全圈的技术人员数量要比全世界的少很多,有些工具和技术也可能很少有国内的技术人员去实践。
2)还有很多问题可能是第一个遇到,这时候就靠自己通过实践去解决了。当然可以在一些相关的邮件列表和社区交流渠道中询问,但最终还是要靠自己的能力去解决。
3)当你解决一个别人没遇到的问题后,最好能够在社区中分享你的经验,这才是“黑客之道”。
Metasploit框架安装完成之后,可以在菜单项中的Metasploit Update来获取Metasploit的更新模块与特性。在执行UAC控制的Windows 7系统上,需要以管理员权限执行Metasploit Update才能进行正常更新。安装完成之后,就可以在菜单项中同样以管理员权限执行“Metasploit Console”,来使用Metasploit框架。
在Windows上,绝大多数的Metasploit框架特性都能够正常使用,除了依赖于原始套接字的SYN Scan、pSnuffle等模块,依赖于Lorcon2的一些Wi-Fi模块等,而需要绑定到139或445端口上的smb_relay模块,则需要特殊配置后才能使用。
1.5.3 在Linux操作系统上安装Metasploit
由于Metasploit框架所需要的Ruby解释器、RubyGems、Subversion和一系列依赖软件在很多Linux发行版默认安装中并不支持,因此通过源码安装Metasploit非常烦琐,感兴趣的读者请参考https://community.rapid7.com/docs/DOC-1405。Metasploit提供一个通用二进制安装包,可以比较便捷地在Linux环境中安装Metasploit。该安装包对以下32位或64位Linux发行版都支持。
Red Hat Enterprise Linux
Fedora and Fedora Core
CentOS
Slackware
Ubuntu
Arch Linux
可以从Metasploit主站的下载页面根据体系结构(32位或64位)来选择下载完全版的Linux二进制安装包,然后运行如下命令:
$ chmod +x framework-*-linux-full.run
$ sudo ./framework-*-linux-full.run
$ hash –r
安装过程结束之后,就可以在系统路径上使用所有的Metasploit框架命令了。如以root权限运行msfupdate进行Metasploit更新等。
通过上述过程安装完二进制依赖软件包之后,还需要确认这些依赖软件在你的Linux平台上是可用的。首先,从主站下载页面下载UNIX源码包,然后执行如下命令:
$ tar xf framework-*.tar.gz
$ sudo mkdir -p /opt/metasploit3
$ sudo cp -a msf3/ /opt/metasploit3/msf3
$ sudo chown root:root -R /opt/metasploit3/msf3
$ sudo ln -sf /opt/metasploit3/msf3/msf* /usr/local/bin/
然后使用最新的Subversion客户端软件,通过checkout命令检查最新的Metasploit框架源码:
$ sudo rm -rf /opt/metasploit3/msf3/
$ sudo svn checkout https://www.metasploit.com/svn/framework3/trunk /opt/metasploit3/msf3/
现在,使用以下语句测试Ruby环境是否可用:
$ ruby /opt/metasploit3/msf3/msfconsole
如果MSF终端能够正常启动,并没有任何报警,那么你的Ruby能够支持Metasploit框架的基本功能了。
接下来该测试RubyGems了,从http://www.rubygems.org/下载最新版本的tar包,并执行以下命令:
$ tar -xf rubygems-*.tar.gz
$ cd rubygems*
$ sudo ruby setup.rb install
通过如下指令来验证RubyGems是否正常工作:
$ ruby -rrubygems -rreadline -ropenssl -rirb -rdl -riconv -e 'p :OK'
1.6 了解Metasploit的使用接口
为了适应不同的用户使用需求,Metasploit框架提供多种不同方式的使用接口,其中最直观的是msfgui图形化界面工具,而最流行且功能最强大是MSF终端,此外还特别为程序交互提供了msfcli命令行程序,在v3.5版本之前还提供过基于Web界面的msfweb接口。
1.6.1 msfgui图形化界面工具
msfgui图形化界面工具是Metasploit初学者最易上手的使用接口,轻松地单击鼠标,输入目标IP地址,就可以使用Metasploit强大功能渗透进入目标系统。
在Back Track命令行终端中运行msfgui启动Metasploit图形化界面工具,将显示如图1-4所示的msfgui界面。
为了演示Metasploit的使用方法,这里将针对Linux Metasploitable靶机环境Samba网络服务的usermap_script安全漏洞进行渗透攻击,以获得对靶机的远程控制权。
从msfgui菜单项中选择Exploits→multi→samba→usermap_script,将显示对该渗透攻击模块进行参数配置的对话框,如图1-5所示,攻击目标Target为默认的自动探测,并在下拉框中选择一个攻击载荷,这里我们选择bind_netcat,该攻击载荷运行后将在目标主机上启动“瑞士军刀”netcat并绑定Shell到一个开放端口上,然后我们在RHOST参数框中填入攻击目标主机,即Linux Metasploitable的IP地址(10.10.10.254),单击Run exploit按钮之后,就触发了渗透攻击的过程。
1.6.2 msfconsole控制台终端
MSF终端是Metasploit框架中功能最强大、最丰富且支持最好的用户接口,虽然对于新人而言,较图形化界面上手稍微要困难一些,一旦了解MSF终端的命令语法,你将很快体验到它的强大功能与操作便利。与图形化界面等其他Metasploit用户接口相比,MSF终端拥有如下优势:
提供一站式的交互接口,能够访问Metasploit框架中几乎每一项功能与特性,而且可以直接执行外部的Shell命令和第三方工具(如Nmap等),这使得你可以在MSF终端中完成绝大部分的渗透测试工作。
提供非常便利且符合Linux操作习惯的交互,支持命令的tab补全,用户配置的保存与装载等功能,在用户熟悉该交互环境时可以提供非常高效的操作接口。
MSF终端也是目前更新最及时,并且最稳定的Metasploit用户接口。
1.6.3 msfcli命令行程序
-
msfcli命令行程序是Metasploit框架为脚本自动化处理及与其他命令行工具互操作而设计的一种用户接口,它可以直接从命令行Shell执行,并允许你通过Linux的管道机制将结果输出重定向给其他程序进行处理。当你需要针对一个网络中的大量系统进行同一安全漏洞的渗透测试与检查,msfcli将是特别适用的Metasploit框架调用接口,你可以针对一个系统配置好msfcli的命令行参数,然后写一段简单的Shell脚本来对一组IP地址进行依次测试,并将结果输出到日志文件中以供查询和进一步分析。
-
相比较于MSF终端,msfcli命令行程序的弱点在于所支持的功能特性较少,如尚不支持将结果输入到后台数据库中,同时只能处理一个Shell从而使得对客户端攻击不太实用,以及不支持MSF终端中的高级自动化渗透特性(如db_autopwn等)。
1.7 小结
要点如下:
-
渗透测试(Penetration Testing)是一种通过模拟恶意攻击者的技术与方法,挫败目标系统安全控制措施,取得访问控制权,并发现具备业务影响后果安全隐患的一种安全测试与评估方式。渗透测试具有两种基本类型:黑盒测试与白盒测试,结合两者的称为灰盒测试。
-
要想完成一次质量很高的渗透测试过程,渗透测试团队需要掌握一套完整和正确的渗透测试方法学。目前业界流行的渗透测试方法学有OSSTMM、NIST SP800-42、OWASP Top 10、WASC-TC和PTES等。
-
渗透测试主要包括前期交互、情报搜集、威胁建模、漏洞分析、渗透攻击、后渗透攻击和报告7个阶段。
-
渗透测试流程中最核心和基本的内容是找出目标系统中存在的安全漏洞,并实施渗透攻击。
-
Metasploit是一个开源的渗透测试框架软件,也是一个逐步发展成熟的漏洞研究与渗透代码开发平台,此外也将成为支持整个渗透测试过程的安全技术集成开发与应用环境。
-
Metasploit是由HD Moore于2003年创建的开源项目,2004年发布Metasploit v2版本并被黑客社区广泛接受,2006年以黑马姿态跻身SecTools最受欢迎安全工具五强之列,2007年发布了以Ruby语言完全重写后的v3版本,目前最新的v4版本是2011年发布的,截至2013年4月,最新版本是v4.6.0。
-
Metasploit框架中最重要的是辅助模块、渗透攻击模块、后渗透攻击模块、攻击载荷模块、空指令模块和编码器模块这六类模块组件,提供了多种使用接口和一系列的功能程序,支持与大量第三方安全工具进行集成应用。
-
Metasploit最方便的使用平台是Back Track,功能最强大的使用接口是MSF终端。