第 1 章 渗透测试概要及环境配置

第 1 章 渗透测试概要及环境配置

许多提供安全服务的机构会使用一些术语,如安全审计(security audit)、网络或风险评估(network or risk accessment),以及渗透测试(penetration testing)。这些术语在含义上有一些重叠。从定义上来看,审计是对系统或应用的量化的技术评估。安全评估意为对风险的评测,是指用以发现系统、应用和过程中存在的漏洞的服务。

渗透测试的含义则不只是评估,它会用已发现的漏洞来进行测试,以验证该漏洞是真实存在还是只是虚惊一场(假阳性)。举个例子,审计或评估利用的是扫描工具。这些工具会显示多个系统上的数百个可能的漏洞。而渗透测试则会采用恶意黑客的惯用手段来尝试对这些漏洞进行攻击。这样可以验证哪些漏洞真实存在,从而可以将实际的系统漏洞数降至少量。最有效的渗透测试是那些针对特定系统的有特定目标的测试。质胜于量,这才是检验成功渗透测试的标准。在目标性攻击中,相比大范围攻击,对单个系统进行枚举攻击更能真实反映系统安全中的问题以及处理突发情况的响应时间。只要仔细选取重要的目标,渗透测试人员就可以确定整体的安全基础架构及跟重要资产相关的风险。

图像说明文字渗透测试并不能使网络更安全!

这里存在一种常见的误解,我们应该跟潜在客户解释一下。渗透测试评估的是既有安全系统的有效性。如果客户的安全工作本身做得比较一般,那么渗透测试也帮不了大忙。作为咨询师,我们建议将渗透测试服务作为验证既有系统安全性的一种手段。只要用户认为自己已经尽了最大努力来保障这些系统的安全,并且已经准备好评估确保系统安全的措施中有没有漏洞,就可以规划渗透测试了。

在商定渗透测试服务时,确定合理的工作范围非常重要。工作范围决定了哪些系统和应用应该放入目标列表,以及会用哪些工具来利用已发现的漏洞。最好的方法是在设计环节跟客户一起拟定一个可接受的、不对结果的价值造成影响的工作范围。

本书会一步步教你如何发现和利用Web应用的漏洞。其中,Kali Linux是BackTrack的进化版。本书介绍的内容包括对目标进行调查、识别和利用Web应用及其对应的客户端的漏洞、帮助Web服务防御常见攻击,以及为专业服务活动生成可交付的渗透测试结果。很多读者会因本书受益,无论是新人想成为渗透测试人员、刚开始使用Kali Linux而想了解Kali和BackTrack之间的差别,还是渗透测试的老手来了解新工具和新技术。

本章将逐一介绍支撑各种安全服务的基础知识,并提供专业渗透测试实践所需要的指引。内容包括区分渗透测试和其他服务、渗透测试方法论概述以及如何确立目标Web应用。本章还会简要介绍如何搭建Kali Linux测试环境和真实环境。

1.1 Web应用渗透测试基础

Web应用是指那些将Web浏览器当做客户端的应用。这个范围可宽可窄。Web应用正是因服务访问方便和系统可集中管理而流行起来的。访问Web应用的条件就是要符合行业中Web浏览器客户端的标准,这就简化了对Web服务提供商和访问Web应用的客户端的要求。

Web应用是在所有企业内使用最为广泛的一种应用。它们是基于因特网的应用中的绝大多数,成为了事实标准。仔细想想智能手机和平板电脑,其实这些设备上的大多数应用也是Web应用。这就给专业安全人员和善于利用这些系统的攻击者创造了一个全新的、范围更广阔的多目标环境。

Web应用服务的种类繁多、业务用途广泛,因此Web应用渗透测试的范围也要因地制宜。Web应用的核心层包括托管服务器、访问设备以及数据仓库。在渗透测试中,各层级之间的通信也应列入测试范围。

这里介绍一个确立Web应用渗透测试范围的例子。假如我们要对一台Linux服务器进行渗透测试,它托管着各种移动设备上运行的应用,那么最小的工作范围应包括评估Linux服务器环境(操作系统、网络配置等),评估服务器上托管的Web应用,评估系统和用户间的身份验证,以及访问服务器的客户端设备和这三个层级之间的通信。其他可以列入测试范围的领域包括员工如何获取设备、除了访问这个Web应用之外设备还用于哪些用途、周边的网络环境、系统的维护以及服务器系统的用户。这里举两个例子,说明为什么也要考虑测试范围内的其他领域。比如这些Linux服务器可能会因允许被其他途径影响的移动设备连接而泄露机密信息,或是通过社交媒体获取已通过身份验证的移动设备而泄露机密信息。

在第8章中,我们会提供确定Web应用渗透测试范围的一些模板。本章中可以付诸实践的例子是提供一些可勾选的调查表,来辅助客户一步步确定Web应用渗透测试工作范围的可能目标。每项工作范围都应该能根据客户的业务目标、期望执行的时间段、分配的资金及需要的结果而进行定制。如前所述,模板可作为辅助确定工作范围的工具。

1.2 渗透测试方法

行业里有一些进行渗透测试的建议步骤。第一步是找出项目的起始状态。最常见的用来定义起始状态的术语有黑盒测试(black box testing)、白盒测试(white box testing),或是介于二者之间兼具二者特色的灰盒测试(gray box testing)。

黑盒测试假定渗透测试人员先期对目标网络、公司流程或应用提供的服务没有了解。启动黑盒测试项目需要做大量的侦察,而且还需要长期跟踪。因为现实中的攻击者在发起攻击前可能会对目标进行长期学习。

作为专业安全人员,我们发现在确立渗透测试范围方面,黑盒测试存在一些问题。我们很难估量侦察阶段会持续多长时间,它完全取决于系统和你对环境的熟悉程度。这通常会带来计费问题。大多数情况下,客户都不会同意给你留一张空白支票让你在侦察阶段花费无限时间和资源。但如果没有投入足够的时间,你的渗透测试在开始前就已经失败了。而且这么做也不现实。动机明确的攻击者不可能跟专业的渗透测试人员面对相同的测试范围和计费限制。这也是为什么我们推荐灰盒测试而不是黑盒测试的原因。

白盒测试是当渗透测试人员对系统非常熟悉时采取的方法。白盒渗透测试的目标是明确定义好的,而测试报告的结果通常是有预期的。测试人员会接触目标的详细信息,如网络信息、系统类型、公司流程和服务等。白盒测试通常关注的都是某个特定业务对象(如满足特定需求),而不是普通评估。因此它持续的时间一般较短,具体取决于目标空间的限制。白盒测试任务可以降低信息收集(如侦察服务)的成本,从而降低渗透测试的费用。

图像说明文字公司内部的安全团队通常会执行白盒测试。

灰盒测试介于黑盒和白盒测试之间。它通常出现的情况是,客户或系统所有者同意:在侦察环节中最终会发现一些不确定信息,但渗透测试人员可以忽略这部分信息。渗透测试人员会知道目标的一些基本情况;不过,系统内部工作原理和其他一些受限信息仍然不会公开给渗透测试人员。

真实的攻击者会在对目标实施攻击之前收集目标的一些信息。大多数攻击者(脚本小子或是下载并运行工具来执行攻击的那些人)不会选择随机目标。他们的动机都非常明确,而且他们通常会在尝试攻击之前跟目标进行一定程度的交互。对许多专业安全人员来说,灰盒测试是进行渗透测试的一个很有吸引力的选择,因为它跟攻击者实际采用的方法相似,而且侧重于发现漏洞过程而非侦察过程。

工作范围中定义了如何启动和执行渗透服务。启动渗透测试服务的过程应该包含信息收集的环节——用于记录目标环境并定义任务的界限(以避免不必要的侦察服务或是攻击任务范围外的系统)。完整定义的工作范围能够帮助服务提供商避免范围蔓延(即项目的范围不受控制地变更或是不断地扩大)、在期望时间内开展工作,并能在执行任务时提供更精确的结果。

真实的攻击并没有界限,如时间、资金、道德准则或是工具方面的界限。这也就意味着对渗透测试的范围进行限制可能无法匹配实际的场景。跟限定范围相比,如果渗透测试在攻击到关键的系统之前就已经结束,那么不设定范围可能永远也不会测试到关键漏洞。举个例子,渗透测试人员可能会以截获发往关键系统的用户凭据并成功访问这些系统来收尾,那么他就会漏测这些系统是否容易遭受网络攻击。在工作范围中加上哪些人应该知悉渗透测试也很重要。真实的攻击者可能会随时发起攻击,而且很可能是在人们最放松警惕的时候。

确立渗透测试工作范围的基本条件如下。

  • 目标系统的定义。用以指定应该测试哪些系统,其中包括目标在网络中的位置、系统的类型以及这些系统的商业用途。

  • 执行工作的时间表。测试应该何时开始以及何时达到特定目标的时间表。最佳实践是不要将时间范围限制到办公时间内。

  • 如何测试目标。允许/不允许采用什么类型的测试方法?如扫描或漏洞利用。允许采用特定测试方法会引入什么样的风险?如因渗透测试中的尝试导致系统变得不可用会造成什么影响?例子包括扮成员工使用社交网络,对关键系统实施的拒绝服务攻击,或是在被攻陷的服务器上执行脚本。有些攻击方法可能更容易造成系统破坏。

  • 工具和软件。在渗透测试过程中会用到哪些工具和软件?这很重要,但依然存在争议。许多专业安全人员认为,如果他们透露了自己的工具,就相当于泄露了自己的秘密武器。我们认为,除非你想采用广泛使用的商业产品并将这些产品输出的报告拼凑之后重新包装,否则就应该将用到的工具告诉客户。某些情况下,如果会利用漏洞,甚至应该告诉用户利用漏洞时使用的工具中对应的命令。这样漏洞利用就可以被重现,从而使得客户可以真正理解系统是如何被攻破的,以及发现该漏洞的利用有多难。

  • 被通知方。谁知道该项渗透测试?是否提前通知到他们了?他们能在渗透测试开始前准备好吗?对渗透测试的响应是否是测试工作范围内说明的?如果答案是肯定的,那么在渗透测试开始前不通知安全运维团队就合乎情理。在对托管到第三方(如云服务提供商)的Web应用进行渗透测试时,这一点非常重要,因为服务提供商可能会受渗透测试的影响。

  • 初始访问等级。在开始渗透测试前,你得到的是什么类型的信息和权限?渗透测试人员是通过互联网和/或局域网来访问服务器吗?最开始给你的是什么账户等级的访问权限?这个测试是针对每个目标的黑盒、白盒或灰盒任务吗?

  • 目标空间定义。它会定义渗透测试中需要覆盖的指定的业务功能。举个例子,对销售使用的某个特定Web应用进行渗透测试,而不要动由同个服务器托管的其他应用。

  • 标识关键运营区域。定义渗透测试中应该避让的系统,防止渗透测试给其带来负面影响。在用的身份认证服务器超过它的上限了吗?在开始对目标进行渗透测试前,明确关键资产非常重要。

  • 对退出的定义。说明渗透测试对系统或进程的危害到什么程度很重要。数据应该从网络上删除,还是攻击者只是获取特定层级的非授权访问即可?

  • 交付的结果。期望的最终报告是什么类型的?客户指定在完成渗透测试服务合约时应该达到什么目标?要确保目标不是无期限的,避免期望的服务出现范围蔓延。数据是分类数据还是为特定人群设定的?最终报告以什么形式交付?跟客户交付一个样板报告或是阶段性更新也很重要,这样在最终报告中就不会存在太大的分歧。

  • 对补救的期望。记录漏洞时要把可能的补救措施一起记录下来吗?在执行渗透测试的过程中如果导致某个系统不可用了应该通知谁?许多渗透测试服务都不包括针对发现的问题的补救措施。

应该用于定义服务范围的一些服务定义如下所述。

  • 安全审计。通过一组标准或基线来评测系统或应用的风险等级。标准意为强制规则,而基线意为最低的可接受安全等级。在安全实施中,标准和基线也还是沿用前面的定义,并且都会因行业、技术和过程的不同而不同。

    大多数针对审计的安全需求都集中在通过一些官方审计(如准备应对公司或政府的审计)或是证明基线需求已经满足了一组规定的强制规则(如遵循HIPAA和HITECH在保护医疗记录方面的规定)。告诉潜在客户,如果在服务结束后审计未通过,你的审计服务还会附带提供一定的保险或保护,这很重要。还有记录审计服务中包含的补救类型也很重要。换句话说,你是否要在找出问题时提供补救措施方案或是修复问题。合规性审计远不止运行一个安全工具。它非常依赖标准的报告以及是否遵循了对该审计来说是可接受标准的方法。

    许多情况中,安全审计会带给客户一种对安全的误解,即安全取决于审计的标准或基线。许多标准和基线的更新过程都会很漫长,以至于无法跟上今天网络世界中发现各种威胁的速度。我们建议你提供的安全服务要超过标准或基线要求的内容,以将目标的安全等级提高到一个能防范现实中威胁的可接受水平。服务还应该包括跟进客户、辅助他们落实补救措施,以将他们的安全水平提高到行业标准或基线之上。

  • 漏洞评估。在这个过程中,专业安全人员会扫描网络设备、操作系统和应用软件,以便找出已知或未知的漏洞。漏洞可能是空白、错误或薄弱环节,具体取决于系统是如何设计、使用和保护的。如果漏洞被利用了,可能会导致非授权访问、权限提升、对目标系统的拒绝服务攻击,或者其他后果。

    漏洞评估通常会在发现漏洞后立即停止,也就是说渗透测试人员不会对其执行攻击以验证它是否真实存在。漏洞评估交付的结果包括跟找到的所有漏洞相关的潜在风险以及可能的补救步骤。有很多解决方案,如Kali Linux。它可用来基于系统/服务器的类型、操作系统、开放的通信端口和其他方法扫描漏洞。漏洞评估可能是白盒、灰盒或黑盒,具体取决于任务的特性。

    漏洞扫描仅在计算风险时有用。许多安全审计的缺点在于漏洞扫描的结果会让安全审计的任务加重许多,却没有提供任何实际价值。许多漏洞扫描器会报出假阳性的漏洞,或是找出并不存在的漏洞。出错的原因是它们未能正确识别操作系统,或是只能识别修复漏洞的特定补丁而不能识别累计补丁(聚合多个小补丁的大型补丁)或是软件的修复版本。将风险和漏洞对应起来可以为系统的易攻击性提供一个真实的定义和判断。许多情况中,这意味着自动工具生成的漏洞报告需要人工检查一下再提交。

    客户还会想知道跟漏洞关联的风险以及降低发现的风险的预期成本。要想提供具体的成本值,理解如何计算风险很重要。

风险计算

理解如何计算跟找到的漏洞相关联的风险很重要,这样才能做出具体如何处理的决策。多数客户在决定风险的影响时都会参考CISSP的CIA三角。CIA分别指特定系统或应用的机密性(Confidentiality)、完整性(Integrity)和可用性(Availability)。在推算风险的影响时,客户必须将每个模块和漏洞整体独立评估,以此获得对该风险的真实认识,并推算可能造成的影响。

找到漏洞的风险是否可接受,或者把风险降到可接受的水平是否会超出控制成本,应该由客户来决定。客户不会花一百万美元来修复访客打印机上的一个安全风险;不过,他们非常愿意投入两倍的资金来保护存有公司机密数据的系统。

注册信息系统安全师(CISSP,Certified Information Systems Security Professional)课程中列出了用来计算风险的公式,如下所示。

单一威胁预期损失(SLE,Single Loss Expectancy)是资产价值(AV,Asset Value)单次损失的成本。单一威胁造成损失的百分比(EF,Exposure Factor)是指资产损失对整个组织的影响,比如因连接互联网的服务器当机而对营收造成的影响。客户在计算安全投入时应该计算单个资产的SLE来帮助确认应该投入的资金水平。如果一个SLE会给公司带来一百万美元的损失,在预算中考虑预留资金修复这个漏洞就合情合理。

单一威胁预期损失计算公式:

SLE =AV * EF

下一个重要的公式是指出SLE多长时间会发生一次。如果一个价值一百万美元的SLE一百万年才会发生一次,比如流星从天空坠落,那就没必要投资数百万在总部外面建一个穹型保护体。相反,如果一场火灾可能会造成相当于一百万美元的损失,而且可能每几年就会发生一次,那么投资防火系统就是明智之举。某个资产损失发生的频度我们称为单一威胁年发生率(ARO,Annual Rate of Occurrence)。

单一威胁年预期损失(ALE,Annualized Loss Expectancy)表示的是因风险造成的年度预期损失。举个例子,流星坠落的年预期损失非常低(一百年才一次),而火灾发生的概率更大,那么就应该在未来的投资中将后者计算出来用作保护建筑物。

单一威胁年预期损失计算公式:

ALE = SLE * ARO

最后,弄清跟某项资产相关联的风险,用以算出用来控制的投资也同样重要。它可以决定客户是否应该投资修复某项资产中的漏洞进行投资,以及该投资多少。

风险计算公式:

风险 = 资产价值 ×威胁 × 漏洞×影响

客户通常都没有风险管理计算公式中各个变量的值。这些计算公式可以当做指引系统来帮客户更好地理解他们该如何对安全进行投资。在前面的例子中,我把对流星雨和建筑物中火灾的估计值代入了计算公式,应该能用估计的美元值解释为什么投资防火系统要比投资金属穹型保护体来防止坠落物更好。

渗透测试是用类似于真实恶意攻击者采用的手法来攻击系统漏洞的方法。一般来说,在某个系统或网络上花光了用于加固安全的投资后,客户一般就会诉求于渗透测试,以验证各方面的安全投资。渗透测试可以是黑盒、白盒或是灰盒,具体取决于双方达成的工作范围。

渗透测试和漏洞评估的最主要区别在于渗透测试针对的是发现的漏洞,它会验证跟目标相关联的已知风险是否真的降低了。一旦资产所有者授权服务提供商针对目标上发现的漏洞实施攻击,对目标的漏洞评估也就成了渗透测试。通常,渗透测试服务的成本会高一些,因为这类服务需要更昂贵的资源、工具和时间来完成任务。一个常见的误区是认为渗透测试服务能够加强IT安全,因为这类服务的关联成本相比其他类型的安全服务更高。具体说明如下。

  • 渗透测试无法让IT网络更安全,因为渗透服务测试的是现有的安全部署!如果客户认为目标还不够安全,那就不应考虑渗透测试。
  • 渗透测试会给系统带来负面影响:在对第三方持有的资产进行渗透测试前,你需要从有效的授权机构那里拿到书面授权才行。没有有效授权的渗透测试会被授权机构看成非法攻击。授权文件中应包含谁会为渗透测试中造成的破坏负责,以及一旦系统被破坏应该联系谁来避免后续的负面效应。最佳实践是在执行预期设定水平的攻击之前提醒客户跟各个危害目标的方法相关联的所有潜在风险。这也是我们推荐进行小范围有针对性的渗透测试的原因之一。这方面很容易做到更有条理。作为常见的最佳实践,我们会收到确认信息——在最坏的情况下,客户可以使用备份或其他灾难恢复方法重置系统。

渗透测试预期的交付结果也应该在议定工作范围时明确指出。黑盒方法中获取跟目标有关的信息最常见的途径是通过社会工程,也就是通过攻击人群而不是系统。比如先面试一个企业内部的职位,那么一周后就能毫无阻挡地带出这些机密数据。如果客户想知道的是他们的Web应用在遭受远程攻击时的易攻击性怎样,那么他们可能不会认可这类交付的内容。确立一个明确的结尾目标也很重要,这样所有利益方都能理解什么时候可以认为渗透测试服务已经结束。通常,议定的交付内容会起到这个作用。

对服务提供商来说,任务的成功取决于交付渗透测试任务所耗费的时间和服务的盈利能力。如果过程能够更高效和精准,也就意味着用更少的服务获得更好的结果。交付内容的质量越高,服务就越贴近客户的期望,这样才能赢得更好的声誉,在未来才能发展更多的业务。出于这些原因,确立执行渗透测试服务的有效方法并确认如何报告发现的结果也很重要。

1.3 Kali渗透测试基础

Kali Linux是参照渗透测试的服务流程而设计的。不管出发点是白盒测试、黑盒测试还是灰盒测试,我们在用Kali或其他工具对目标进行渗透测试时都应遵循一定的步骤。

1.3.1 第一步:侦察

在发起攻击之前,应该了解尽可能多跟目标的环境和系统特征有关的信息。你掌握的能够辨识目标的信息越多,就越有可能找到最简便最快捷完成任务的方式。相比白盒测试,黑盒测试通常需要更多的侦察,因为它们没有提供有关目标的数据。侦察服务包括研究目标在互联网上的踪迹,监测资源、人和过程,扫描网络信息如IP地址和系统类型,对公共服务如服务支援中心和其他途径进行社会工程。

侦察是渗透测试服务的第一步,不管你是要验证已知信息还是要搜集新的有关目标的情报。侦察通常都是从基于工作范围定义目标环境开始。一旦确认目标,就需要研究如何收集有关目标的情报,比如开放哪些端口用来通信、它托管在哪里、提供给客户的服务类型等。这些数据有助于确立一个采用最简单方法取得期望结果的行动方案。侦察任务的交付内容应该包括需要攻击的所有目标资产清单、跟那些资产关联的应用、使用的服务以及可能的资产所有者。

Kali Linux提供了一个名为“Information Gathering”的类别作为侦察工作的资源。其中包含的工具可用来研究网络、数据中心、无线环境和主机系统。

下面列出的是侦察任务的目标:

  • 找出目标;
  • 定义应用和商业用途;
  • 找出系统类型;
  • 找出可用端口;
  • 找出运行的服务;
  • 对信息进行社会工程;
  • 记录发现的内容。

1.3.2 第二步:目标测试

找出目标并且在侦察阶段对其做了研究后,下一步就是对目标进行漏洞测试。这时,渗透测试人员应该已经具备足够的有关目标的信息来选择如何分析潜在的漏洞或薄弱环节。比如要针对薄弱环节进行测试,你需要了解Web应用的运作方式、被识别的服务、通信的端口和其他信息。漏洞评估和安全审计通常都会在对目标进行测试的这个环节后结束。

通过侦察拿到细节信息有助于提高锁定潜在漏洞的精确度、缩短执行目标测试服务的执行时间,并有助于绕过现有的安全部署。举个例子,针对Web应用服务器运行通用漏洞扫描器很可能会引起资产所有者的注意,运行过程还要花费一些时间,并且只能生成一些有关系统和应用的常见信息。基于侦察阶段收集到的数据针对某个特定漏洞对服务器进行扫描,资产所有者可能更难发现,从而提供了不错的可利用潜在漏洞,缩短了执行时间。

针对漏洞进行的目标测试可以是手动的,也可以通过工具做到自动化。在Kali Linux中有一系列工具聚合到了一个名为Vulnerability Analysis的类别下面。这些工具覆盖的范围从访问网络设备到访问数据库都有。

下面列出的是目标测试的目标:

  • 测试出目标的薄弱环节;
  • 找出易受攻击的系统,并确定其优先级;
  • 将易受攻击系统和资产所有者进行映射;
  • 记录发现的内容。

1.3.3 第三步:漏洞利用

这一步会利用找到的漏洞来验证漏洞是否真实存在,并会验证能获得什么样的信息或是什么样的访问权限。漏洞利用是渗透测试服务和其他被动服务如漏洞评估和安全审计的主要区别。如果没有获得目标的资产所有者授权,漏洞利用和后续步骤都会带来法律后果。

这一步成功与否完全依赖于前面几步的投入。许多漏洞利用技术都是针对特定漏洞开发的。如果没有正确执行,可能会造成意外的后果。最佳实践是找出若干漏洞之后,基于最容易攻击的漏洞制定一个攻击策略。

漏洞利用可以是手动的,也可以是自动的,这要根据最终对象来确定。比如,自动运行SQL注入来获取某个Web应用的管理员访问权限,或是通过对服务支援中心工作人员进行人工的社会工程获取管理员的登录凭据。Kali Linux提供了一个名为Exploitation Tools的专门工具来进行目标漏洞利用,从对特定服务进行利用的工具到社会工程工具包,应有尽有。

下面列出的是漏洞利用的目标:

  • 漏洞利用;
  • 拿到权限;
  • 抓取非授权数据;
  • 积极地进行社会工程;
  • 攻击其他系统或应用;
  • 记录发现的信息。

1.3.4 第四步:提升权限

获得目标的访问权限并不保证就能完成渗透测试任务的目标。许多情况下,利用有漏洞的系统只能拿到访问目标数据和资源的有限权限。攻击者必须提升权限才能抓取重要内容。这些内容可以是敏感数据、关键的基础设施等。

提升权限包括找出和破解密码、用户账户和非授权的IT空间。举个例子:拿到受限的用户访问权限后,找出包含管理员登录凭据的shadow文件,通过密码破解获得管理员密码,然后用管理员权限访问内部应用系统。

Kali Linux包含了很多用来提升权限的工具,分布在Password AttacksExploitation Tools这两个类别中。由于这些工具中的大多数都带有获得初始访问权限和提升权限的方法,它们是按工具集来进行聚合的。

下面列出的是提升权限的目标:

  • 获得更高级别的访问系统和网络的权限;
  • 获取其他用户的账户信息;
  • 使用提升过的权限来访问其他系统;
  • 记录发现的信息。

1.3.5 第五步:保持访问

最后一步是通过建立其他到系统的入口来保持访问。可能的话,将渗透留下的痕迹也一并隐藏。渗透测试工作很有可能触发防御功能,最终导致渗透测试人员获取的访问网络的途径被加固。最佳实践是建立其他途径来访问目标系统,以防主要路径被关闭。替代性的访问方法有后门、新建管理员账户、加密过的隧道和新的网络访问通道。

要保持在目标系统中的访问,另一个重要的方面是删除渗透证据。这会使得检测攻击更加困难,从而降低来自安全防范团队的回应度。这部分工作包括擦除用户日志、掩盖现有的访问通道和删除篡改的痕迹(如在进行渗透测试时留下的错误消息)。

Kali Linux提供了一个名为Maintaining Access的类别,主要用来保持对目标的访问。其中很多工具都用于建立到目标的各种形式的后门。

下面是保持访问的目标:

  • 建立到目标网络的多种访问方法;
  • 删除未授权访问的证据;
  • 修复在漏洞利用中受影响的系统;
  • 如有必要,注入假数据;
  • 通过加密或其他方式隐藏通信方式;
  • 记录发现的信息。

1.4 Kali Linux简介

BackTrack的作者发布了一个全新的高级渗透测试Linux发行版,名为Kali Linux。BackTrack 5将会是BackTrack发行版的最后一个主版本。为了跟上网络安全的挑战和现代测试的需要,BackTrack的作者决定创建一个新的平台,于是,Kali Linux于2013年3月13日诞生并发布。Kali Linux基于Debian,其文件系统遵循FHS标准。

相比BackTrack,Kali有很多优势。它比BackTrack多了许多自带的更新版本的工具。这些工具都来自于Debian的软件包仓库,而且每天都会同步四次。也就是说,用户拿到的是最新的软件包更新和安全修复版本。新的遵循FHS标准的文件系统使得大多数工具都能从文件系统中的任意位置开始运行。Kali还支持定制、无人值守安装、可自由选择桌面环境,以及其他一些自带的优秀功能。

Kali Linux可以从http://www.kali.org/下载并安装。

1.5 Kali系统环境配置

Kali Linux可以通过多种途径下载,最常见的就是下载ISO映像文件。ISO映像文件分为32位和64位两种。

如果你计划在虚拟机中(如VMware)使用Kali Linux,那么有预构建好的VM映像文件。直接下载VM映像文件的好处在于它已经预载了VMware工具。VM映像文件是带有物理地址扩展(Physical Address Extension,PAE)支持的32位映像文件。理论上说,相比传统的32位操作系统,PAE内核允许系统访问更多的系统内存。虽然操作系统界有一些具备一定影响力的人物尚在争论PAE内核是否真的有用,但如果你计划在虚拟机环境中使用Kali Linux,本书作者推荐使用VM映像文件。

1.5.1 从外部存储媒体上运行Kali Linux

Kali Linux可以从外部存储媒体源(如U盘或DVD)上运行,而不必安装到主机的硬盘上。这种方式很容易使用,不过它的性能和可操作性都会受限。Kali Linux必须从远程源上加载程序,这可能会影响性能,还有可能一些应用或硬件设置不能正常工作。使用只读存储媒体不允许保存经过定制的设置,而这些设置可能是让Kali Linux正常运行所必需的。我们强烈推荐将Kali Linux安装到主机硬盘。

1.5.2 安装Kali Linux

在计算机上安装Kali Linux非常简单,跟安装其他操作系统差不多。首先,你需要兼容的计算机硬件。Kali支持i386、amd64和ARM(armel和armhf)平台。硬件要求会在下面的清单中列出,不过我们建议使用至少三倍于最低要求的硬件平台。总的来说,如果有更多的可用内存并安装在较新的机器上,Kali Linux会运行得更好。下载Kali Linux,然后将ISO文件烧录到DVD上,或是准备一个装有Kali Linux Live的U盘作为安装媒体。如果你的计算机上没有DVD光驱或是USB端口,可以参考Kali Linux的网络安装。

下面列出的是最低安装需求。

  • 安装Kali Linux需要最少8 GB的硬盘空间。
  • 对于i386和amd64架构,最少要有512 MB内存。
  • CD-DVD光驱/USB启动支持。
  • 在安装前你还要有可用的互联网连接。这很重要,否则在安装时你无法配置和访问软件包仓库。

1.在运行Kali后,它会显示一个启动安装界面。你可以选择要进行哪种类型的安装(基于GUI的还是基于文本的)。

2.选择本地语言设置,国际和键盘设置。

3.给Kali Linux主机起一个主机名。默认的主机名是Kali

4.设置密码。简单的密码可能不行,所以要选择有一定复杂度的密码。

5.下一个弹出的界面会问你时区设置。进行相应的修改,然后选择Continue。下面的截图中显示的是选择了Eastern标准时间的界面。

安装程序会让你设置分区。如果你是将Kali安装到虚拟映像上,选择Guided Install - Whole Disk。它会销毁硬盘上的所有数据,并安装Kali Linux。注意,在虚拟机上,只有虚拟硬盘会被擦除。高级用户可以选择手工配置来定制各个分区。Kali还提供了选项来使用逻辑卷管理器(Logical Volume Manager,LVM)。LVM支持在安装完成后管理分区和调整分区大小。理论上,它应该做到存储需要变更时可以方便地修改。不过,除非你对Kali Linux的需求非常复杂,否则可能用不到它。

6.最后一个窗口会回顾配置过的安装设定。如果一切看上去没问题,选择Yes来继续完成这个过程,如下面的截图所示。

7.Kali Linux使用集中式软件仓库来分发应用软件包。如果想要安装这些包,你需要使用网络镜像。这些软件包会通过HTTP协议下载。如果网络使用了代理服务器,你还需要在代理设置中配置网络代理。

8.Kali会弹出提醒,要你确认安装GRUB。GRUB是一个多启动引导加载程序。它支持启动多个操作系统。几乎任何情况下都应该选择安装GRUB。如果想把系统配置成双启动,你需要确定GRUB能够识别其他操作系统,这样它能给用户提供启动其他操作系统的选项。如果没有检测到任何其他操作系统,它会在启动时自动进入Kali Linux。

9.恭喜!你已经安装好Kali Linux了。现在你需要移除所有的外部存储媒体(物理的或虚拟的),然后选择Continue来重启系统。

1.5.3 首次运行Kali Linux和VM映像文件

在有些Kali的安装方法中,会要求你设置root账户的密码。在Kali Linux启动后,输入root账户的用户名和你设定的密码。如果下载的是Kali VM映像文件,你需要知道root密码。默认的用户名是root,密码是toor

1.6 Kali工具集概述

Kali Linux提供了数种经过定制的专门为渗透测试设计的工具。工具都会按下图中下拉选单所示的方式按组分类聚合。

  • Information Gathering(信息收集) 这些都是侦察工具,用来收集目标网络和设备的数据。在这类工具中,从找出设备的工具到查看使用的协议的工具都有。
  • Vulnerability Analysis(漏洞分析) 这个类别中的工具主要用来评测系统,找出漏洞。通常,这些工具会针对前面用信息搜集侦察工具发现的系统来运行。
  • Web Applications(Web应用) 这个类别中的工具用来对Web服务器进行审计和漏洞利用。我们在本书中提到的很多审计工具都来自这个类别。不过Web应用也不全是指针对Web服务器的攻击工具,它们也可能指用做网络服务的基于Web的工具。举个例子,在这个类别中你也能看到Web代理工具。
  • Password Attacks(密码攻击) 这类工具主要用来进行暴力破解密码,或是离线计算密码或身份认证中的共享密钥。
  • Wireless Attacks(无线攻击) 这类工具主要是对无线协议中发现的漏洞加以利用。在这里你可以找到802.11工具,包括aircrack、airmon和破解无线密码的工具。除此之外,这个类别中也包含跟RFID和蓝牙漏洞相关的工具。很多情况下,这个类别中的工具需要跟一块可以由Kali配置成混杂模式(Promiscuous Mode)的无线网卡搭配使用。
  • Exploitation Tools(漏洞利用工具) 这些工具主要用来对系统中找出的漏洞加以利用。通常,漏洞会在对目标进行的漏洞评估环节被找出。
  • Sniffing and Spoofing(网络嗅探和欺骗) 这类工具用于抓取网络上的数据包、篡改网络上的数据包、自定义数据包以及仿造网站。这个类别中还有一些VoIP重建工具。
  • Maintaining Access(保持访问权限) 保持访问权限工具是在建立了到目标系统或网络的入口后使用的。通常,被侵入的系统会有多个钩子钩回攻击者,当攻击者使用的漏洞被发现和修复时,它会提供替代路径。
  • Reverse Engineering(逆向工程工具) 这类工具用来拆解可执行程序和调试程序。逆向工程的目的是分析一个程序是如何开发的,这样就可以对它进行复制、修改,或者通过它开发其他程序。逆向工程也用在恶意软件分析中,用来查明可执行程序都做了哪些事情,或是被研究者用来尝试找到软件应用中的漏洞。
  • Stressing Testing(压力测试工具) 这类工具用来测试一个系统能处理多少数据。过载的系统可能会出现预期外的结果,比如导致控制网络通信的设备打开所有的通信通道,或是导致系统关闭(也称为拒绝服务攻击)。
  • Hardware Hacking(硬件破解工具) 这类工具包含Android工具(可以划分为移动类)和Arduino工具(用来编程和控制其他小型电子设备)。
  • Forensics(取证工具) 这类工具主要用来监测和分析计算机网络的流量和计算机应用。
  • Reporting Tools(报告生成工具) 这类工具用来将渗透测试活动中发现的信息转换成可交付的文档。
  • System Services(系统服务) 用这类工具你可以启用或禁用Kali的服务。服务聚合到了BeEF、Dradis、HTTP、Metasploit、MySQL和SSH这几个小分类中。

图像说明文字 Kali Linux还会包含其他一些工具,比如Web浏览器、修改Kali Linux在网络上呈现形式的工具的快速链接、搜索工具和其他一些有用的工具。

1.7 小结

本章介绍了Web应用渗透测试,并对配置Kali Linux环境做了概述。一开始,我们就定义了进行渗透测试服务的最佳实践,其中对风险做了定义,也对各种服务的区别做了介绍。需要掌握的是渗透测试跟其他安全服务的区别在哪里,如何正确定义某个服务等级的工作范围,还要知道执行任务的最佳方法。跟潜在的客户坦诚说明合理的预期有助于获得合作机会,也有助于简化确定可接受工作范围的过程。

本章接下来概要介绍了Kali Linux。内容包括如何下载你需要的Kali Linux版本、安装Kali Linux的多种方式,之后还对工具集做了概要介绍。下一章将会介绍如何对目标进行侦察。这是进行渗透测试服务的第一步,也是最关键的一步。

目录