7 渗透测试阶段和步骤说明

渗透测试的演变与重要性

早在 1967 年,兰德公司的计算机安全专家团队,包括 Willis Ware、Rein Turn、Harold Petersen 和 Benard Peters,在一场计算机会议后发布了一份报告。 这份报告大胆地指出,当时计算机之间的通信渠道极易受到攻击。

这一发现标志着计算机安全领域首次的突破性进展,也催生了渗透测试的概念。 随后,詹姆斯·P·安德森在此基础上,构建了一套逐步推进的方法,为现代渗透测试奠定了基础。

渗透测试的基本框架并不复杂:安全团队按照既定步骤,逐步从识别系统漏洞到开发相应的解决方案。 这里有一个简要的 渗透测试历史概述

要攻破一家公司的安全防线并非易事,它需要高超的技巧和充裕的时间。 但在当今技术高度发达的环境下,网络犯罪分子可以轻易找到企业组织的安全漏洞。 他们通常会选择公司在互联网上暴露的资产作为攻击目标,例如 Web 应用程序、网站、域名服务器 (DNS) 和电子邮件系统,以便非法获取访问权限并窃取敏感数据。

通过进行渗透测试,企业可以在漏洞被利用之前,识别并加固潜在的攻击入口。 研究数据证实了这一点:约 73% 的网络安全事件都源于 Web 应用程序漏洞。

在当今时代,组织比以往任何时候都更需要验证其应用程序、系统和网络的安全性。 定期进行模拟测试是有效评估系统安全性和控制措施有效性的重要手段。 这不是一次性的任务,而应作为一项例行工作。 测试的频率应根据公司的组织结构和评估结果中发现的风险程度来确定。

值得庆幸的是,渗透测试并非一项过于复杂的工作。 通过为 IT 团队提供必要的专业知识,企业可以持续地加强安全防护,尤其是在进行重大基础设施更新或引入新的数字服务和资产时。

一切的关键在于理解渗透测试的完整流程。

什么是渗透测试?

在深入了解如何进行渗透测试之前,最好先明确其定义和目的。渗透测试(通常简称为笔测试)是一种经过授权的网络攻击,在安全可控的环境中模拟对公司的攻击。

渗透测试与安全审计相结合,旨在发现组织管理范围内的漏洞。 从策略上看,测试采用了与黑客相似的方法。 企业进行渗透测试的几个主要原因包括:

  • 在真正的攻击者之前发现隐藏的漏洞。
  • 改进安全流程和策略。
  • 降低修复成本并减少停机时间。
  • 确保符合安全/隐私相关的法律法规。
  • 维护品牌声誉,并提升客户忠诚度。

渗透测试可以全面检查企业的安全状况(抵御攻击的能力),并揭示黑客入侵系统的难易程度。 此外,测试收集的见解有助于网络安全投资的分层部署、遵循行业标准,以及增强防御策略以保护公司免受潜在威胁。 这些都可通过自动化测试工具,即渗透工具来实现。

什么是渗透测试工具?

网络安全专家使用渗透测试工具,通过模拟真实的网络攻击来评估计算基础设施的弹性。 通过使用这些工具,安全团队可以减少重复测试工作,更快地生成测试报告,并降低使用多个扫描仪的成本。

渗透测试工具种类繁多,包括开源工具、Web 应用程序工具、网络工具、移动应用程序工具、云工具、手动工具、自动化工具以及渗透测试即服务工具。 在众多选择中,应优先考虑那些具有关键功能的工具,例如可操作的报告、CI/CD 集成、修复支持和渗透测试认证(只有少数工具会提供公开的渗透测试证书)。

掌握了这些基础知识后,我们现在来详细分析渗透测试的流程。

渗透测试的阶段

典型的渗透测试包含多个阶段。 不同的资源可能会以不同的步骤描述该过程,但总体结构基本一致。 该过程通常涉及信息收集、扫描、漏洞评估、漏洞利用和报告等阶段。

优秀的测试人员需要熟练掌握多种工具,以便在每个测试阶段选择合适的工具。 下面详细介绍渗透测试的每个阶段。

信息收集

此阶段虽然经常被忽视,但它有助于企业组织与渗透测试人员建立共识。 在此阶段,双方需要明确测试范围、规则、时间表、后勤安排,以及明确的目标和预期结果。

为了进行全面且有效的渗透测试,此阶段可帮助企业了解需要测试的领域以及最佳的测试方法。 对于初学者而言,切勿忽视此步骤。

在测试系统之前,企业必须获得测试人员的明确同意。 否则,测试人员的行为可能被视为非法。 企业组织会制定明确的规则(以合同形式),以确保测试人员参与时的工作流程顺畅。 该协议还应详细说明关键资产、测试目标和预防措施。 此外,此步骤会影响所有后续操作。 最终,所有计划都应与预期的测试结果保持一致。

侦察/开源情报收集

在此阶段,测试人员会收集有关系统的所有可用信息。 获取的数据必须与即将进行的测试相关,并由第一步的结果驱动。 这样,测试人员才能准确了解需要收集的数据和需要实施的策略。 如果选择主动侦察,测试人员会直接与系统交互。 如果采取被动的方式,则通过公开渠道获取信息。 对于更广泛的技术,最好同时使用这两种方法。

主动数据收集需要收集有关网络、操作系统、用户帐户、域名、邮件服务器和应用程序的信息。 被动数据收集则侧重于开源情报,即通过社交媒体、税务信息、网站和其他公开数据获取信息。

以下是我和同事在收集和分析网络信息时发现的一些非常有用的开源情报 (OSINT) 工具。 使用 OSINT 框架,可以创建广泛的入口点和漏洞清单。 虽然此步骤对于内部和外部渗透测试都至关重要,但在 Web 应用程序、移动应用程序和 API 测试中并未广泛采用。

扫描

接下来,需要对系统进行深入的技术审查。 通过使用自动化漏洞扫描器和网络映射器等扫描工具,可以了解目标系统对各种入侵、开放端口、网络流量等的反应。

此阶段的主要任务是扫描和分析资产。 可以使用类似于 Nmap 的工具来发现计算机服务和主机、发送数据包并分析响应。 在此阶段结束时,您将获得有关资产的详细信息,包括操作系统、正在运行的服务和开放端口。

通过分析扫描结果,您可以为制定漏洞利用方案奠定基础。 您可以绘制出系统的数字地图,并定位潜在的攻击点。 您可以执行静态和动态分析,以便清楚地了解系统在不同条件下的反应。

静态分析是在应用程序尚未执行时检查代码。您可以使用工具来无缝扫描代码库。 而动态分析则是在应用程序运行时检查代码。请记住,此处收集的信息必须准确无误,因为后续阶段的成功取决于此。

评估/访问增益

此时,前面步骤中收集的所有数据都有助于识别漏洞以及这些漏洞是否可以被利用。 虽然此阶段很有帮助,但与其他渗透测试过程结合使用时,其效力会更加显著。

为了评估已发现漏洞的相关风险,测试人员会参考多个资源。 首要参考的是国家漏洞数据库 (NVD),它会分析通用漏洞披露 (CVE) 中发布的软件敏感性信息。

接下来,需要确定目标并绘制攻击向量图。 目标领域包括高价值资产,如员工数据、客户信息、合作伙伴/供应链、供应商、端口、应用程序和协议。 接着可以发起 Web 应用程序攻击。

最常见的攻击手段包括 SQL 注入、跨站脚本和后门。 通过提升权限、拦截流量和窃取数据等方式,可以揭示系统的破坏程度。 测试人员将严格遵循信息收集阶段确定的范围,并按照既定的约束进行操作。

开发

也称为维护访问阶段,测试人员会检查漏洞是否可以被利用。 此阶段涉及实际的侵入和尝试访问系统。 通过使用 Metasploit 等工具,测试人员可以模拟真实的网络攻击。

在此阶段,测试人员必须对组织的资源负责,确保系统在模拟攻击后不会受到损害。

Metasploit 因其在漏洞利用方面的强大功能而备受青睐。 此阶段旨在评估漏洞利用的影响。 测试人员可以尝试加密或窃取数据,并模拟勒索软件攻击和零日攻击。 渗透测试成功的关键在于在突破界限和维护系统完整性之间取得平衡。

最好与专家合作。 他们能够发现自动化工具可能忽略的漏洞。 在本阶段结束时,您应该能够通过识别可用的数据来获取系统和网络信息的高级权限。 网络安全专家还应解释利用高价值目标的结果。

风险分析和建议、审查、报告

在漏洞利用阶段结束后,测试人员会生成一份详细记录发现结果的报告。 此报告将用于修复未发现的漏洞。

一份高质量的渗透测试报告应包含一个详细的漏洞数据库,其中详细描述了漏洞信息,并能够帮助企业组织修复安全风险。一份优秀的报告则会全面介绍所有已发现的漏洞及其 CVVS 分数、技术风险概况、对业务的潜在影响、利用难度以及具体的整改建议。

此外,该报告应记录所有测试阶段、测试模型、使用的技术和目标资产。 如有可能,测试人员还会对测试是否符合适用的框架需求提出意见。 总之,该报告应包含一般性解释和技术指南。

在汇报并提交报告后,清理系统至关重要。 清理的目的是将系统恢复到测试开始前的默认状态。 清理活动包括从受感染的系统中撤回所有可执行文件、临时文件和脚本,删除为连接到受感染系统而创建的用户帐户,并清除环境中的 rootkit。

作为最后一步,整改工作将由企业组织执行。 在渗透测试报告和结果的指导下,组织将着手解决漏洞问题,分析潜在影响,为决策提供信息,并制定整改策略。

由于此阶段是通过改进过去的错误来完成的,因此必须在合理的时间内修复所有可利用的漏洞。 有时,此阶段可能会延长一段时间,以便对更新进行重复测试或进行不同的测试。

渗透测试的实际应用:分步指南

在此示例中,我们选择使用 Metasploit 框架。 您可以创建自定义的工作流程; 以下是一个典型的流程,可供您参考:首先,安装该框架。

如果您使用的是 Linux/macOS,请使用以下命令:

curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall && \
  chmod 755 msfinstall && \
  ./msfinstall

如果您使用的是 Windows,请使用 最新的 Windows 安装程序。 或者使用 PowerShell 命令:

[CmdletBinding()]
Param(
    $DownloadURL = "https://windows.metasploit.com/metasploitframework-latest.msi",
    $DownloadLocation = "$env:APPDATA/Metasploit",
    $InstallLocation = "C:\Tools",
    $LogLocation = "$DownloadLocation/install.log"
)

If(! (Test-Path $DownloadLocation) ){
    New-Item -Path $DownloadLocation -ItemType Directory
}

If(! (Test-Path $InstallLocation) ){
    New-Item -Path $InstallLocation -ItemType Directory
}

$Installer = "$DownloadLocation/metasploit.msi"

Invoke-WebRequest -UseBasicParsing -Uri $DownloadURL -OutFile $Installer

& $Installer /q /log $LogLocation INSTALLLOCATION="$InstallLocation"

接下来…

启动一个项目——这将是您的数据和工作区的存储位置。 由于您可能对组织中的各个子网有不同的测试需求,因此组织好您的工作可以提高效率。 例如,如果要对 IT 和人力资源团队进行渗透测试,您应该为每个团队生成单独的报告。

图片来源:Metasploit 官方文档

获取目标数据——在此步骤中,可以通过发现扫描或导入现有数据,将数据添加到项目中。 扫描目标以枚举开放端口并查看网络服务。 使用扫描选项,然后输入要扫描的 IP 地址,每个地址占一行。 也可以使用导入选项从本地文件导入数据。

图片来源:Metasploit 官方文档

查看/管理主机数据——可以从主机或项目级别查看数据。 可以切换到每个 IP 以获取单个主机视图。

图片来源:Metasploit 官方文档

扫描漏洞——通过 Nexpose 选项启动漏洞扫描。 此步骤利用漏洞数据库来匹配是否发现任何漏洞。

利用漏洞——可以通过漏洞 验证向导 无缝地利用漏洞。 或者,仍然可以使用 Nexpose。

漏洞利用后活动——通过会话选项卡收集漏洞利用数据; 点击“收集”。

图片来源:Metasploit 官方文档

清理——完成数据收集后,使用“清理”选项终止会话并清理系统。

生成报告——在渗透测试结束时,Metasploit 会为您提供多个报告,这些报告是数据整合和结果编译的起点。

有关渗透测试的详细快速入门指南,请参考 Metasploit 的快速入门指南

常用渗透测试工具

一些常用的工具包括 Sn1per、Metasploit 和 Commix。

#1. Sn1per

Sn1per 是一种漏洞调查工具,用于验证黑客攻击对客户端的影响。 您可以使用它在受控环境中模拟远程和用户端攻击。 Sn1per 在 GitHub 上有 6000 颗星,这表明其在业内的认可度和受欢迎程度。Sn1per 还可以作为该工具的信息出口。 借助 Sn1per,可以通过自动化开源和商业工具来枚举漏洞,从而节省时间和精力。

#2. Metasploit

Metasploit 是一个由开源社区共同开发的巨型渗透测试框架,通过知识共享不断完善。 它在 GitHub 上拥有 31,200 颗星,表明其在网络安全领域的广泛关注度。 Metasploit 致力于通过安全爱好者的合作支持,解决漏洞并提高安全意识。

#3. Commix

Commix 是一款出色的操作系统命令注入利用工具。 虽然 Commix 主要关注命令注入漏洞,但它易于使用、免费开源、跨平台兼容、可移植且模块化。 它在 GitHub 上有 4000 颗星,也是一款免费且开源的工具。

总结

深入了解渗透测试的各个阶段对于企业增强其数字产品抵御网络攻击的能力至关重要。 随着网络犯罪分子不断绕过传统的安全解决方案,通过渗透测试来模拟真实的网络攻击是应对不断变化的网络威胁的有效方法。

通过根据企业的具体需求定制渗透测试方案,可以确保安全策略的有效性。 完成渗透测试的所有阶段可以确保您获得网络安全投资的最大回报。

要获得成功的渗透测试,务必保持谨慎。 首先要充分了解测试的各个方面,然后进行详细的侦察。 侦察的一个良好起点是明确要测试的系统范围和目标。

接下来,扫描系统以深入了解并识别漏洞。 然后,在不损害系统完整性的前提下,发起模拟攻击。 最后,生成有用的报告来指导整改工作。 切记要清理系统,并将其恢复到原始状态。

如果使用得当,渗透测试可以通过识别和修复漏洞来改善企业的安全态势。 随着越来越多的企业迁移到云端并采用新技术,渗透测试在信息安全领域变得至关重要。 事实上,75% 的企业会利用渗透测试来检查安全态势或出于合规性要求。 如果能够充分关注并独立对待测试的每个阶段,您一定会发现渗透测试的价值。

接下来,可以考虑使用免费的在线渗透测试工具来测试应用程序的安全性。