起源和定义
起源:20 世纪 90 年代,由美国军方与国家安全局引入的对信息网络与信息安全基础设施的实际攻防测试过程,由攻击者「红队」和防御者「蓝队」,以实战方式检验目标系统安全防御体系与安全响应计划的有效性。最终这种通过实际攻击进行安全测试和评估的方法拓展到安全业界,企业通过这种方式对自己的业务网络和系统进行测试
定义:渗透测试就是一种通过模拟恶意攻击者的技术和方法,挫败目标系统安全控制措施,取得访问控制权,并发现具备业务影响后果安全隐患的一种安全测试与评估方式
分类
-
黑盒测试:即外部测试。完全模拟真实网络环境中的外部攻击者,采用流行发攻击技术和工具,有组织有步骤的对目标组织进行渗透和入侵。黑盒测试比较费时费力,且对渗透者要求较高的技术能力,还能对目标的检测和应急响应能力
-
白盒测试:即内部测试。测试者会获取到目标环境中的所有内部和底层知识,使渗透者用最小的代价发现和验证目标系统中的安全漏洞,白盒测试更容易全面的发现目标存在的漏洞,但不能很好的检测目标的检测和应急响应能力
-
灰盒测试:综合黑盒和白盒测试,普遍采用此种方法
方法和流程
方法
-
安全测试方法学开源手册:由 ISECOM 安全与公开方法学研究所制定,安全测试方法学开源手册(OSSTMM)提供物理安全、人类心理学、数据网络、无线通信媒介、电讯通信这五类测试用例和测试结果的指标标准。其特色是分成注重技术的细节
-
NIST SP 800-42 网络安全测试指南:美国国家标准和技术研究院(NIST)再 SP 800-42 网络安全测试指南中讨论了渗透测试流程和方法。
-
OWASP 十大 Web 应用安全威胁项目:针对 Web 应用层提供的如何识别和避免这些安全威胁的指南。OWASP Top Ten 只关注具有高风险的 Web 领域。
-
Web 安全威胁分类标准:和 OWASP Top Ten 类似,WASC-TC 全面给出 Web 应用领域中的漏洞、攻击、防范措施视图
-
PTES 渗透测试执行标准:2010 年最新发起的渗透测试过程规范标准项目,安全业界的广泛认同
流程
-
前期交互:Pre-Engagement Interaction 阶段是和客户确定渗透测试的范围、目标、限制条件和服务合同细节
-
情报搜集:Information Gathering 阶段,利用各种信息来源和搜集技术方法,尝试获取目标组织的网络拓扑、系统配置、安全防御措施的信息
情报搜集方法:公开来源信息查询、Google Hacking、社会工程学、网络踩点、扫描探测、被动监听、服务查点
-
威胁建模:Threat Modeling 阶段通过获取的信息进行分析,确定可行的攻击通道和攻击规划、以及目标的潜在威胁点
-
漏洞分析:Vulnerability Analysis 阶段利用前几个阶段获取的信息,找出可进行渗透攻击的攻击点,并搭建实验环境进行验证,和对系统和服务的安全漏洞深度挖掘,开发相应的渗透代码
-
渗透工具:Exploitation 阶段是利用已找到的目标存在的漏洞来入侵目标,获取访问控制权限。黑盒测试还要考虑对系统检测机制的逃逸,避免造成目标响应团队的警觉和发现
-
后渗透攻击阶段:Post Exploitation 阶段需要根据目标组织的业务经营模式、保护资产形式、安全防御计划的不同,设计出攻击目标,识别关键的基础设施,寻找客户最具价值和尝试安全保护的信息和资产,最终达成能够对客户组织造成最重要业务影响的攻击途径
-
报告:Reporting 阶段,将获取的关键情报信息、探测和发掘的系统安全漏洞、成功渗透过程、造成业务影响后果的攻击途径进行整理,还要分析目标安全防御体系的薄弱环节、存在的问题、修补和升级方案
安全漏洞生命周期
-
安全漏洞的研究和挖掘:利用源代码审计(白盒测试)、逆向工程(灰盒测试)、Fuzz 测试(黑盒测试)挖掘目标系统中存有的可被利用的安全漏洞
-
渗透代码开发和测试:开发概念验证性的渗透攻击代码(POC),用于验证找到的漏洞是否确实存在
-
封闭团队中的流传:当 POC 被验证漏洞确实存在后,「白帽子」会通知厂商进行修补,厂商给出补丁后,再进行公布。而「黑帽子」和「灰帽子」则会在封闭团队中秘密共享,以充分利用安全漏洞和渗透攻击代码带来的攻击价值
-
安全漏洞和渗透代码扩散:当封闭团队中的安全漏洞和渗透代码被披露后,开始在安全社区快速扩散。更多的「黑帽子」快速对其进行掌握和应用
-
恶意程序的传播:「黑帽子」在渗透代码的基础上开发出更易使用、更具自动化传播能力的恶意程序,在黑客社区和互联网上进行传播
-
渗透代码和恶意程序大规模传播:更多的「黑帽子」从社区或互联网获取到恶意程序,对互联网的危害达到顶峰
-
渗透攻击代码、攻击工具、恶意程序逐渐消亡:在厂商补丁程序、安全公司的检测和移除机制广泛应用后,相应的渗透代码、恶意程序将被「黑帽子」逐渐抛弃