1.2 渗透测试方法

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

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

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

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

公司内部的安全团队通常会执行白盒测试。

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

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

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

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

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

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

风险计算

理解如何计算跟找到的漏洞相关联的风险很重要,这样才能做出具体如何处理的决策。多数客户在决定风险的影响时都会参考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应用在遭受远程攻击时的易攻击性怎样,那么他们可能不会认可这类交付的内容。确立一个明确的结尾目标也很重要,这样所有利益方都能理解什么时候可以认为渗透测试服务已经结束。通常,议定的交付内容会起到这个作用。

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