在社会科学中,流程被视为一系列有方向的事件序列的术语。在运营和组织语境中,流程更精确地被称为工作流程、业务流程、生产流程或价值创造流程。在计算机系统中,流程也是运行程序的别称,这些程序通常是系统软件的一部分。
区分确定性流程和随机性流程也至关重要。确定性流程是指每个状态都因果依赖于并由先前的状态和事件所决定的流程。而随机性流程则是指一个状态仅以某种概率跟随其他状态出现的流程,其中只能假设统计条件。对我们而言,上述几种定义有所重叠。我们采用社会科学中关于流程的定义,用确定性流程来表示一系列相互关联的事件。这是因为我们的所有步骤都基于我们能够发现或引发的事件和结果。
渗透测试流程由渗透测试人员执行的一系列连续步骤和事件所定义,旨在找到通往预定目标的路径。
流程描述了在特定时间框架内导致预期结果的一系列特定操作。同样关键的是,流程并不代表一个固定的配方或按部就班的指南。因此,我们的渗透测试流程必须是粗线条且灵活的。毕竟,每个客户都有其独特的基础设施、需求和期望。
渗透测试阶段
最有效的表示和定义方式是通过相互依赖的阶段。我们在研究中经常发现,这些流程通常以循环过程的形式呈现。严格来说,如果这个循环过程中的任何一个环节不适用,整个过程就会被打断甚至失败。但如果我们假设带着新获取的信息从头开始这个过程,这本身就是一个新的流程方法,它并不会取消先前的流程。
问题在于,使用这些表示和方法时,常常缺乏可依赖的框架来扩展我们的渗透测试流程。正如我们讨论过的,并没有一份我们可以遵循的步骤指南,但阶段这个概念允许个体步骤和方法根据我们收到的结果和信息进行灵活的调整和变化。我们可以为渗透测试不同阶段尝试的各种事情制定自己的”行动手册”,但每个环境都是不同的,因此我们需要不断地适应。
渗透测试流程通常包括:前期交互、信息收集、漏洞评估、渗透攻击、后渗透攻击、横向移动、概念验证、后期交互。

我们将在后续章节中更详细地探讨每个阶段,并提供一个关于如何学习多种战术、技术和程序的可选学习计划,该计划采用一种结构来展示每个阶段如何相互构建,并且本质上可以是迭代的。首先,让我们审视渗透测试流程的主要组成部分,并讨论各个模块及其重要性。
这个可选学习计划基于为每个阶段设置的模块,我们建议在进入下一阶段之前完成当前阶段的学习。我们将在几乎所有模块中经历不同的阶段,反复执行诸如信息收集、横向移动和信息掠夺等步骤。模块的划分是为了聚焦于特定主题,这要求掌握不应跳过的基础知识。任何这方面的知识缺口,即使我们认为自己已经熟悉,也可能导致学习过程中的误解或困难。因此,带有其阶段的渗透测试流程如下所示:
渗透测试阶段
| 阶段 | 描述 |
|---|---|
| 1. 前期交互 | 对客户进行说明并调整合同。严格定义所有必要的测试及其组成部分,并记录在合同中。通过面对面会议或电话会议,确定许多安排,例如:保密协议、目标、范围、时间估算、攻击规则。 |
| 2. 信息收集 | 描述我们如何通过各种方式获取关于必要组件的信息。我们搜索关于目标公司以及正在使用的软件和硬件的相关信息,以寻找可能被我们利用来获取初始立足点的安全漏洞。 |
| 3. 漏洞评估 | 到达此阶段后,我们分析从信息收集阶段获得的结果,查找系统、应用程序及各版本中存在的已知漏洞,以发现可能的攻击向量。漏洞评估是对潜在漏洞的评估,包括手动和自动化方式,用于确定威胁级别以及公司网络基础设施对网络攻击的易感性。 |
| 4. 渗透攻击 | 在此阶段,我们利用漏洞评估的结果来测试我们对潜在攻击向量的攻击,并对目标系统执行这些攻击,以获取对这些系统的初始访问权限。 |
| 5. 后渗透攻击 | 在渗透测试的这个阶段,我们已经成功利用了目标机器,并需要确保即使系统发生修改和变化,我们仍然能够保持访问。在此阶段,我们可能会尝试提升权限以获得尽可能高的权利,并搜寻敏感数据(如凭证或客户关心的其他受保护数据,即信息掠夺)。有时我们进行后渗透攻击是为了向客户展示我们所获访问权限的影响。其他时候,后渗透攻击则作为后续描述的横向移动过程的输入。 |
| 6. 横向移动 | 描述在我们目标公司的内部网络中进行移动,以访问同一权限级别或更高级别的其他主机。这通常是一个与后渗透攻击活动相结合的迭代过程,直到我们达到目标。例如,我们在一个Web服务器上获得立足点,提升权限并在注册表中发现一个密码。通过进一步枚举,我们发现该密码可以用于以本地管理员用户身份访问数据库服务器。由此,我们可以从数据库中掠夺敏感数据,并发现其他凭证以深入网络。在此阶段,我们通常会基于已被利用的主机或服务器上发现的信息来使用多种技术。 |
| 7. 概念验证 | 在此阶段,我们逐步记录为实现网络入侵或某种程度的访问所采取的步骤。我们的目标是清晰地描绘我们如何能够将多个弱点串联起来以达到目标,以便客户能够看清每个漏洞如何作用,并帮助他们确定修复的优先级。如果我们未能很好地记录步骤,客户将难以理解我们的操作,从而增加其修复工作的难度。如果可行,我们可以创建一个或多个脚本来自动化我们所采取的步骤,以协助客户复现我们的发现。我们将在文档与报告模块中深入探讨这一点。 |
| 8. 后期交互 | 在后期交互阶段,准备详细的文档,以便管理员和客户公司管理层都能理解所发现漏洞的严重性。在此阶段,我们还会清理所有主机和服务器上我们活动的所有痕迹。我们为客户创建交付物,举行报告解读会议,有时还会向目标公司的高管或董事会进行执行层汇报。最后,我们将根据合同义务和公司政策归档我们的测试数据。我们通常会将数据保留一段设定时间,直到执行修复后评估(复测)以测试客户的修复措施为止。 |
重要性
我们必须内化这个流程,并将其作为我们所有技术工作的基础。每个阶段的组成部分使我们能够精确理解我们需要改进的领域,以及我们大部分困难和知识缺口所在。例如,我们可以将一个网站视为一个需要研究的目标。
| 阶段 | 描述 |
|---|---|
| 1. 前期交互 | 第一步是在前期交互阶段创建所有必要文件,讨论评估目标,并澄清任何问题。 |
| 2. 信息收集 | 一旦前期交互活动完成,我们便开始调查分配给我们的公司现有网站。我们识别正在使用的技术,并了解Web应用程序的功能。 |
| 3. 漏洞评估 | 利用这些信息,我们可以查找已知漏洞,并调查可能存在非预期行为的可疑功能。 |
| 4. 渗透攻击 | 一旦发现潜在漏洞,我们便准备漏洞利用代码、工具和环境,并针对这些潜在漏洞测试Web服务器。 |
| 5. 后渗透攻击 | 成功利用目标后,我们立即进行信息收集并从内部检查Web服务器。如果在此阶段发现敏感信息,我们会尝试提升我们的权限(取决于系统和配置)。 |
| 6. 横向移动 | 如果内部网络中的其他服务器和主机在测试范围内,我们会尝试利用已收集的信息在网络中移动并访问其他主机和服务器。 |
| 7. 概念验证 | 我们创建一个概念验证,证明这些漏洞确实存在,甚至可能自动化触发这些漏洞的各个步骤。 |
| 8. 后期交互 | 最后,完成文档编写,并作为正式报告交付给客户。之后,我们可能会举行报告解读会议,澄清关于我们测试或结果的任何问题,并为负责修复我们发现问题的相关人员提供任何必要的支持。 |




