作者 | 崔皓
审校 | 重楼
引言
不知有多少“曾梦想仗剑走天涯”的网络与信息安全从业者,是因为渗透测试的初心而步入这个行业的。不过,您是否对渗透测试及其漏洞扫描的相关概念感到既熟悉又陌生呢?您是否觉得自己还停留在从工作实践中积累的感性认识呢?下面,我们将为您梳理渗透测试的各个实施阶段,流程示例,典型工具,以及自动化开源方案。
渗透测试的阶段
从概念上说,渗透测试是一种通过模拟“友好的”黑客,来识别和利用安全漏洞的过程。作为一种标准化的系统性方法,它旨在提高目标系统与组织的安全态势。如下图所示,渗透测试往往从规划和收集信息开始,根据目标需求的不同,或是以报告发现到的漏洞、或是以保持访问控制作为结束。
渗透测试的各个阶段
规划与侦察
计划阶段旨在获取目标的所有相关信息,例如通过网络钓鱼攻击捕获详细的技术数据。这些细节方面的信息,对于后续过程的开展,起到了至关重要的影响。
而侦察阶段主要是通过主动和被动两种基本方法,收集大量的基本数据。其中,主动侦查很容易引起目标组织的注意;而被动侦察则以更加隐蔽、难以识别的方式间接收集信息。不过,相比被动方法的复杂与耗时,主动方法虽不够细致,但效率更高。
扫描
扫描阶段的主要目的是以最小的被发现代价,深入挖掘目标,收集有价值的信息,如同从一堆乱七八糟的物品中筛选出隐藏的宝石。例如,针对Web应用,我们可以扫描CSRF潜在漏洞和XSS端点等。定位入侵点后,我们便可以调查该端口上运行的服务类型,进而判定其是否存在防火墙或WAF。下图展示了可开展的多种扫描类型。
各种扫描类型
作为渗透测试的重要一环,漏洞扫描往往被细化为分析评估数据,通过逆向工程研究漏洞和错误的成因。通常,漏洞扫描与评估需要我们投入大量的时间和精力,以了解不同信息之间的相互关系,进而准确地发现可能被利用的入侵点。当然,像exploit-db之类的在线数据库,可以为我们提供针对CVE的可利用漏洞列表,以及相关的PoC代码及其详细信息。
利用和获取访问
一旦发现可被利用的漏洞,攻击者需要尽快谨慎地利用漏洞,对目标系统予以非法访问。其中,最常见的莫过于使用远程代码执行(RCE)和后门。作为最危险的漏洞类型,RCE漏洞往往表现对输入与输出缺乏检查,以及存在可被篡改的代码逻辑。后门则有两类:自定义后门通常与欺骗目标下载恶意文件有关,而错误配置的后门则开放了开发者的隐蔽访问模式。
报告和控制
作为一名道德黑客,渗透测试的最后往往是撰写报告。在报告中,您需要阐述采取的步骤、发现的问题、可利用的漏洞、面临风险的资产、以及取得的成果等。这些有价值的信息可以协助组织确定针对攻击预防的优先级,从而有的放矢。
渗透测试的流程
在不断变化的网络威胁领域,我们有必要根据上述不同的实施阶段,为渗透测试创建一套能够轻松集成各种工具的工作流程。例如,我们可以首先使用Amass收集Web应用系统的子域地址,接着利用DnsDumpster提取IP地址,或使用regex来提取诸如URL、IP、端口等必要的数据,然后通过Nmap进行基于脚本的漏洞分析。下图展示了一个典型的渗透测试流程模型:
流程模型示例
该流程的特点是能够合理地整合各个测试工具之间的关联,让一种工具的输出能够影响另一种工具的配置,从而使得针对Web应用的枚举流程更加流畅和简化。当然,随着时间的推移、威胁的演化、以及Web环境的复杂化,安全专家需要通过持续关注细节和积累实战经验,来不断修订和完善该测试流程。
渗透测试的工具
显然,渗透测试离不开工具的使用。让我们来试想一位安全专家被要求对某个Web应用开展渗透测试。那么他会根据自己的工作经验开展如下工作:
- 选用Python作为自动化脚本的基础,开发各种工作流。
- 通过Sublist3r使用开源网络情报(OSINT),来枚举和收集目标Web的子域。
- 通过Nmap使用Sublist3r的输出结果,对发现的子域进行有针对性的扫描,以了解开放的端口和网络服务等攻击面。
- 以Nmap扫描结果为基础,配置Burp Suite,查找SQL注入和跨站脚本等常见漏洞。
- 以Burp Suite扫描到的漏洞为指导,通过Dirb枚举目标应用目录和文件,以查找Web服务器上的隐藏资源。
- 参照Dirb的发现,使用Nikto进行更全面、更深入的漏洞分析,总结出Web服务器上的已知漏洞、错误配置、以及过时的软件版本,并形成有关安全风险的综合报告。
典型工具的综合运用
随着网络安全威胁的不断变化,渗透测试工具也应持续迭代、与时俱进。以Metasploit为代表的漏洞利用平台与框架不但能够提供友好的用户界面,而且可以支持更广泛的漏洞类型,为安全专家提供直观、高效的自动漏洞利用执行流程。目前,整合威胁情报信息已成为一项标准功能。有的工具甚至采用了人工智能和机器学习等技术,来提高对于新型网络威胁和漏洞的识别和排序的精确度和有效性。
自动化开源方案
随着越来越多的组织实现了持续、快速的软件交付,自动化渗透测试方案也在不断与DevOps工作流进行整合。它可以在开发管道的不同阶段引入安全测试。同时,随着无服务器架构在云计算环境的普及,我们也可以通过创建或修改现有的自动化工具,以评估云基础架构的安全性。对此,安全专家可以将如下开源的工具与方案,整合到现有的测试流程中,以免去自己动手编写系统代码和脚本的烦恼:
- Rayder:是一款简化的工作流应用,可用于运行复杂的编排映射。该工具通过YAML来映射不同的命令和工具,来运行侦查任务。当然,我们需要使用命令来告知其该如何执行、保存和定位输出。
- MetaHub:是一个上下文框架,可根据环境与核心要求,自动编译与上下文相关的资产。该工具主要适用于与云服务和AWS相关的操作。
- Vortex:该工具有助于侦查、枚举和开发等多种任务的自动化。
- Osmedeus:是一个庞大的框架,几乎涵盖了自动化枚举和侦查的所有要求,可被用于扫描Git存储库、某个子域、以及云服务发行版。
小结
当然,您可以自行在GitHub上搜索可用于持续集成与持续部署的Python软件包。例如,使用GitHub Actions、GitLab CI或Jenkins等工具,可建立持续集成和测试的管道,以确保自动化测试流程的有效性、灵活性。
可以说,渗透测试流程的自动化使得安全团队能够从重复性任务中解脱出来,简化了资源的使用率,缩短了漏洞扫描与评估的时间,进而让组织能够动态地应对不断变化的威胁形势,保护自身的敏感数据和数字资产。
【参考文献】Penetration Testing And Vulnerability Scanning -- Morpheuslord
作者介绍
陈峻(Julian Chen),51CTO社区编辑,具有十多年的IT项目实施经验,善于对内外部资源与风险实施管控,专注传播网络与信息安全知识与经验。