在20世纪60年代中期,通过通信线路共享资源的计算机系统日益普及,与此同时,新的安全隐患随之而来,数据有可能被窃取或破坏,通信线路中传输的内容有可能被窃听。
1965年,多位计算机安全领域的专家举办了一系列有影响力的计算机安全会议,发现当时主流计算机系统中部署的安全措施能够轻易被破坏。于是,与会专家首次要求进行破坏系统安全保护领域的研究。随后,安全专家引入了“渗透”一词来描述对计算机系统的攻击。在1967年春季的联合计算机会议上,计算机专家分析了当时计算机系统的弱点,指出了可能面临的安全威胁,如窃取信息、伪装合法用户等,并给出了相应建议。
在之后的几年中,多个公司和组织开始参与对“渗透”的研究,计算机渗透作为安全评估的手段也越来越精细和复杂。在20世纪70年代,政府和业界组建了专业团队,利用计算机渗透来测试系统安全性,以发现并修补安全漏洞。由于当时计算机系统的防御能力较差,早期的渗透行动也证明了渗透作为系统安全性评估工具的有效性。同时期,渗透测试的框架初步形成,为以后的研究和发展奠定了基础。渗透测试最初被应用在军事领域,用来测试信息系统安全性。20世纪90年代后期开始拓展到其他有安全需求的领域,渗透测试也逐渐发展为一种由安全公司提供的专业安全评估服务。
渗透测试是指对计算机系统的安全性进行评估的过程,旨在评估系统的安全性。渗透测试并没有一个标准的定义,英国国家网络安全中心(National Cyber Security Centre, NCSC)对渗透测试的定义如下:渗透测试是一种通过使用与攻击者相同的工具和技术来尝试破坏信息技术(Information Technology, IT)系统的部分或全部安全性,以获得该系统的安全性保证的方法。
渗透测试旨在识别计算机系统的弱点(也称为漏洞),即未授权方访问系统和数据时系统存在的潜在威胁。该过程通常会确定目标系统和一个特定的渗透目标,然后收集可用信息并尝试使用各种手段来实现该目标。其中,渗透目标取决于特定业务的授权活动类型。
渗透测试可以帮助确定防御是否充足,并确定哪些已有防御措施容易被破坏。渗透测试中发现的安全性问题应准确、及时地报告给系统所有者。此外,渗透测试报告中还需要评估这些问题对系统的潜在影响,并提出降低风险的对策建议。
渗透测试并没有严格的分类方法,根据渗透实践方式,普遍认同的一种分类方法是将渗透测试分为黑盒测试(Black-box Testing)、白盒测试(White-box Testing)和灰盒测试(Gray-box Testing)。
1.黑盒测试
黑盒测试是指在渗透测试前仅提供基本信息,或不提供除了公司名称以外的任何信息。采用黑盒测试方法时,渗透测试团队需要在没有任何目标网络内部拓扑等相关信息的情况下,通过外部网络远程对目标网络进行渗透。最初的信息通常通过DNS、网页以及各种公开渠道来获取,并利用各种工具和技术,逐步对目标进行系统化地深入渗透,挖掘目标网络中存在的安全漏洞并评估其潜在威胁,如是否能造成数据泄露等。黑盒测试示意图如图1-1所示。
图1-1 黑盒测试示意图
黑盒测试把目标系统看作一个黑盒,测试人员只知道出口和入口,在渗透测试的过程中只知道往黑盒中输入某些内容,观察黑盒输出的结果,而不了解黑盒的具体结构,即不需要知道目标系统的具体结构和原理,渗透测试的角度和用户使用目标系统的角度是一样的。
黑盒测试方法通常更受业界推崇,这是因为它能够更加逼真地模拟恶意攻击者的攻击实施过程。然而,该方法的局限性在于信息不透明导致的操作难度大,技术要求高,并且耗时较长。此外,由于黑盒测试过程中未知目标系统的内部结构,导致渗透测试的全面性被缩减,漏洞的漏报率较高。
2.白盒测试
白盒测试指在渗透测试前由被测试方提供相关的背景和系统信息。采用白盒测试方法时,渗透测试团队能够提前获得网络拓扑、内部数据、源代码等信息,也可以与被测试方相关人员进行沟通。相较于黑盒测试方法,白盒测试方法省去了情报收集过程中的开销,而且通常能够在目标系统中发现更多的安全漏洞。白盒测试示意图如图1-2所示。
图1-2 白盒测试示意图
白盒测试将渗透测试目标看作可透视的,测试人员可以根据目标的内部数据等信息设计测试用例。白盒测试一般可分为静态分析和动态分析两种:静态分析主要有控制流分析、数据流分析、信息流分析;动态分析主要有逻辑覆盖率测试(分支测试、路径测试等)和程序插装等。
白盒测试方法与真实的攻击过程有较大差异,可以将某些测试环节集成到开发阶段,能够灵活地消除存在的一些安全问题。但是,该方法的局限性在于无法有效地测试目标系统对于特定攻击的检测效率和应急响应策略。另外,还可能由于源代码审计误报等导致测试效率低下。
3.灰盒测试
灰盒测试方法是黑盒测试和白盒测试的组合。采用灰盒测试方法时,渗透测试团队在从外部对目标网络进行渗透的过程中,需要结合其所拥有的网络拓扑等内部信息来选择能够评估目标系统安全性的最佳测试方法。灰盒测试示意图如图1-3所示。
图1-3 灰盒测试示意图
灰盒测试方法能够发挥黑盒和白盒两种测试方法的优势,为目标系统提供更全面、更深入的安全审查。该方法同样要求测试人员具备较强的专业技能。
一次成功的渗透测试除了需要测试团队具有过硬的专业技术外,还需要有一套完整的渗透测试方法体系。安全业界存在多种执行渗透测试的标准框架和方法。其中,渗透测试执行标准(Penetration Testing Execution Standard, PTES)是业界普遍认同的一套标准化渗透测试方法,包括以下7个阶段。
1.前期交互阶段
在前期交互(Pre-engagement Interaction)阶段,渗透测试团队将通过与客户沟通的方式确定渗透测试的范围、目标以及其他的合同细节等。该阶段的主要工作有定义测试的范围、规划测试的目标以及制定项目规则等。
定义测试范围是完成一次成功的渗透测试的基础,这一过程中需要明确渗透测试的具体边界。该过程的疏忽可能会造成极为严重的后果,如测试范围的蔓延导致工作量的增加及客户的不满意,甚至是法律方面的纠纷。测试团队需要分析客户业务系统的结构和需求,规划测试任务的主要和次要目标。此外,在前期交互阶段还需要明确时间度量,时间度量通常以预估的测试周期为基准,再增加20%的额外时间,以便为测试中的突发状况提供时间上的缓冲。除此之外,在该阶段还需要明确项目过程中的各项规则及付款条件等合同细节。
2.情报搜集阶段
在情报搜集(Intelligence Gathering)阶段,渗透测试团队使用各种信息来源与信息搜集方法,获取更多与目标组织有关的信息。这些信息包括网络拓扑结构、系统配置信息以及部署的防火墙策略等安全防御措施。
此阶段可以使用的方法有公开信息查询、使用Google Hacking搜索目标的安全隐患和易攻击点、网络踩点、扫描探测、服务查点等。对目标系统的情报搜集能力是渗透测试团队的一项非常重要的技能,在这个阶段获取的信息越多,后续阶段可使用的攻击手段也就越多。因此,情报搜集是否充分,在很大程度上决定了渗透测试的成败,如果在这个阶段遗漏了某些关键信息,则可能导致测试人员在后续工作中一无所获。但是通常情况下,即使是小规模的情报搜集工作,也能获取到大量的信息。
3.威胁建模阶段
在威胁建模(Threat Modeling)阶段,渗透测试团队使用在情报搜集阶段获取到的信息来制订攻击计划。该阶段需要对目前的情报进行详细的分析,识别出目标系统中可能存在的安全缺陷,从而确定最为可行的渗透攻击途径。
威胁建模阶段通常从与业务相关的资产和流程、人员社区等角度,识别可能存在的威胁并进行建模。在威胁模型建立之后,渗透攻击的途径也就基本确定了。信息收集和威胁建模是一个持续进行的工作,在后续的攻击验证过程中依然会伴随着信息的收集和威胁模型的调整。
4.漏洞分析阶段
在漏洞分析(Vulnerability Analysis)阶段,渗透测试团队通过各种手段发现系统漏洞,并分析如何通过漏洞获取目标系统的访问控制权。该阶段需要分析前期的漏洞情报,并对一些关键的系统服务进行安全漏洞探测,查找已知和未知的安全漏洞。渗透人员可以利用公开的渗透代码资源或自行开发的攻击代码,在实验环境中验证漏洞的存在性等。
在进行漏洞分析时,渗透测试团队首先应该明确漏洞分析的尺度。一般来说,渗透测试要求尽可能多地发现目标系统中存在的漏洞。其中,大部分漏洞通常只需要证明漏洞的存在即可,不需要进行深入的漏洞利用。
5.渗透攻击阶段
在渗透攻击(Exploitation)阶段,渗透测试团队利用漏洞分析阶段发现的安全漏洞来对目标系统实施正式的入侵攻击。渗透攻击是渗透测试中的关键环节,该阶段需要通过绕过目标系统的杀毒软件等安全限制来获取目标系统的访问控制权限。此外,该阶段是以系统中最有价值的信息作为目标的。
进行渗透攻击时,测试团队通常可以通过公开的安全漏洞渗透攻击代码或开发新的攻击代码来实施攻击。而在真实场景中,系统往往会采用病毒查杀软件等多种安全防御措施来提高安全性,测试团队则需要根据目标系统的特性来制定渗透攻击方法,绕过或者破坏系统的安全防御措施。在黑盒测试中,测试团队应该尽量绕过目标系统的安全检测机制,从而有效评估目标系统对于特定攻击的检测效率。
6.后渗透攻击阶段
在后渗透攻击(Post Exploitation)阶段,渗透测试团队在取得目标系统的控制权之后会实施进一步的攻击行为。该阶段需要根据目标组织的业务结构和资产管理形式等确定进一步攻击的目标,以便能对目标组织的重要业务进行更深入的破坏。
后渗透攻击的方式主要包括后门木马植入、用户权限提升、内网横向移动等。后门木马植入是为了维持对目标系统的访问权限,以便对目标进行长久的控制;如果当前的权限不是系统的最高用户权限,那么还需要继续进行用户权限的提升,以便获取更多的重要系统资源的访问控制权限;内网横向移动是利用已获得控制权的服务器对它所在的内网环境进行渗透测试,通常内网中的安全防护手段相对较少、防护策略宽松,测试团队能够获取更多重要的信息。此外,后渗透阶段可能采取的攻击方法还包括信息窃取、口令窃取等。
7.报告阶段
在报告(Reporting)阶段,渗透测试团队汇总之前所有测试阶段中的信息,提交给客户并取得认可。渗透测试报告通常包括执行摘要和技术报告两个部分,以面向不同受众传达测试的目标、方法和结果。
执行摘要的受众是安全监管人员和可能受到已识别威胁影响的组织成员,主要内容包括测试背景、已发现问题概述、总体风险评估以及对解决方案的建议等。技术报告传达测试的技术细节以及前期商定的关键指标的各个方面,这一部分需要详细描述测试的范围、信息、攻击路径、影响和修复建议,包括情报搜集、漏洞分析、渗透攻击和后渗透攻击等各个阶段的过程及结果,以及对已识别风险的更细致评估。渗透测试报告应该以积极的指导作为结束语,从而支持客户未来安全计划的进展。
课外拓展
目前,业界认可的执行渗透测试的标准框架和方法除了PTES外,主要还有以下几种。
1)开源安全测试方法手册(Open Source Security Testing Methodology Manual, OSSTMM)。
2)NIST Special Publication 800-115。
3)信息系统安全评估框架(Information System Security Assessment Framework, ISSAF)。
4)OWASP Testing Guide。
如果读者已经熟练掌握了渗透测试的标准方法,那么可以更进一步地去了解这些渗透测试框架和方法体系,并在实践中加以应用。