安全测试,狭义上也属于软件测试的一部分,但由于其专业性和多样性,被单独划分出来,执行工作也分别由测试团队和安全团队来进行。
安全测试的目的,是为了保障被测试对象具备:
可用性:需要用车的时候能上车,需要上路的时候能上路;
完整性:开的是自己的车,没被人多放、偷走、换走车内物品;
保密性:别人开不了自己的车,车内物品别人看不到、碰不到、听不到;
不可抵赖:交通事故后,无法抵赖车不是自己的(行驶证),不是自己开的(驾驶证);
不可抵赖有时候还会被分为不可抵赖可审计,或不可抵赖授权(朕给你的,才是你的)、认证(朕不给,你不能抢)。

常见的安全测试方式:
资产发现:通过文档或实际检测,发现资产信息、结构,包括系统、模块、组件、接口,以及主机、设备;
漏洞扫描:使用漏洞扫描工具对被测对象进行漏洞扫描,得到扫描结果,无需人工干涉和参与;
漏洞评估:基于漏洞扫描的结果,进行人工漏洞分析,排除误报,确保漏洞的准确性;
安全评估:在漏洞评估的基础上,进行人工安全测试和评估,确保测试覆盖率以及测试准确性,目的是发现安全漏洞,通常也被称为安全测试;
渗透测试:更贴近真实攻击的测试方式,在安全评估的基础上,利用发现的安全漏洞,目的是测试漏洞的危害和影响;
安全审计:涵盖组织、人员、管理、流程、技术现状,从企业合规性角度进行的审计,部分审计涉及资产发现、漏洞评估,但不涉及渗透测试;
安全评审:针对产品安全要求的评审,基于产品的设计、技术实现和安全要求做差距分析,不涉及技术工作;

企业中安全人员常做的技术工作是安全评估和渗透测试,两者最大的差别是前者点到为止,后者不讲武德。渗透测试也包含整个安全评估的过程,因此,以下流程是整个渗透测试的流程(PTES,Penetration Testing Execution Standard),每个阶段会单独说明安全评估和渗透测试的不同。

一、约定沟通(Pre-engagement)

测试工作开始前,需要先了解、熟悉客户的情况,和客户沟通、约定测试过程中的约束、范围、时间、手段等事宜,目的是在确保测试过程是在客户预期的前提下进行,不影响客户正常的业务和人员进行。
约定沟通阶段需要了解、记录的信息如下:

  • 1、企业文化:

  • 测试工作的首要要求,是遵守客户的企业文化,特别是军队级别客户,否则会影响测试团队、测试人员的印象、口碑,甚至商务合作。

  • ①测试人员主要忌讳什么或避免什么;

  • ②通过什么样的方式可以更好的帮助测试人员开展工作;

  • ③如果驻场测试,需要遵守什么样的规定或规则;

  • 2、环境约束:

  • 不同测试的环境,客户能够提供的资源和人员支持是不同的,提前知晓环境约束,有助于避免后续测试过程中产生的不必要麻烦。

  • ①企业内部员工是否对测试工作知情,是全员知情,还是少部分人知情,知情人是什么职位;

  • ②如果是驻场测试,驻场地理位置在哪里,驻场测试的区域是否有条件限制,如没有网络;

  • ③如果是远程测试,是否可以提供内网VPN等辅助测试的工具;

  • 3、测试背景:

  • 了解测试背景,有助于测试过程中设计测试方法、威胁模型,以及最终报告的制定和编写。

  • ①客户进行渗透测试/安全评估的初衷是什么;

  • ②渗透测试/安全评估期望达到的目的是什么;

  • ③查看测试结果的人员有哪些,分别是什么职位;

  • 4、测试范围:

  • 测试范围的大小、明确程度决定了测试时间的分配、测试程度的高低、测试成本的高低,如10万测10个域名和1万测1个域名在时间分配上是不同的。

  • ①测试对象的范围是哪些,如IP地址、域名范围,如何识别和确定测试范围;

  • ②测试范围的资产或人员是否均是由客户自己负责,是否包含第三方公司;

  • 5、测试时间:

  • 不是任何时候都能对测试对象进行测试,为了让客户对测试过程有心理准备,以及方便区分授权测试和恶意攻击,需要确定测试时间;

  • ①能够测试的工作时间是什么,如工作日或周末,上班时间或下班时间,以及具体的时间点;

  • 6、测试手段:

  • 渗透测试可以使用的手段非常多样化,凯文米特尼克能够做到对每一个客户都100%的渗透成功率,是由于其社会工程的能力,而社工测试通常是不被客户允许的。

  • ①能够使用的测试工具是否有限制,如黑盒、白盒、灰盒;

  • ②能够使用的测试手段是否有限制,如DDos、社会工程,通常这两种测试方法是不被允许中的;

  • ③是否对工具测试和人工分析有特别的要求,如只能工具测试或只能人工分析;

  • 7、测试对象:

  • 对于测试对象的了解,有助于降低后续的情报搜集、威胁建模和脆弱性分析的成本,且有助于测试时间的评估。

  • ①有多少需要测试的应用或系统,分别是什么系统类型,如社交网站、电商系统、管理工具等等;

  • ②是否可以提供被测对象的文档,如果可以,能够提供什么样的文档,文档使用限制是怎样的,如需求说明、系统设计、功能结构;

  • ③是否可以提供源代码,如果可以,通过什么样的方式提供,源码使用限制是怎样的;

  • 8、时间评估:

  • 如果测试时间有限,或需要对工作量进行评估,通常需要根据平时测试时长的120%-130%进行预估,来保障客户可能提出的额外要求。

  • 9、沟通渠道:

  • 任何渗透测试中最重要的方面之一就是与客户的沟通,与客户互动的频率以及与客户接触的方式,会对客户的满意度产生巨大的影响。

  • ①客户方的紧急联系人及联系方式,以方便在测试过程中遇到事故或发现严重威胁时可以即时联系,通常也是客户方对接测试的总负责人;

  • ②沟通方式,约定线上、线下方式,如果是线上,沟通工具是QQ、微信、邮件或其他;

  • ③联系名单,被测对象的业务负责人及联系方式、技术负责人及联系方式,测试工作负责人及联系方式、测试成员及联系方式,联系方式至少包括手机号码,其他包括邮箱、微信号等,联系名单需要名单中的人员共同知晓;

  • ④信息传递方式,测试过程中产生的报告、数据、文档、代码等,通过什么方式进行存储和传递,如光盘、U盘、邮件、网盘等等;

二、情报搜集(Intelligence Gathering)

  • 根据客户和测试项目的情况,情报搜集的程度分三个级别:
  • 合规要求级:搜集工作仅通过现有的系统或工具进行搜集,如WHOIS、DNS、IP、邮箱等,不做主动和半被动搜集;
  • 最佳实践级:在合规要求级别的基础上,增加主动搜集,即人工情报搜集的工作,如邮箱地址遍历、社工库查询、OSINT(Open Source Intelligence);
  • 国家赞助级:在最佳实践级别的基础上,增加多种人工搜集渠道和手段,如社会工程、暗网、付费服务等等;

情报搜集,是为了进一步了解被测试对象的,搜集内容可以借鉴软件架构领域的4+1框架模型进行:

4+1框架模型

  • 逻辑视图:以面向最终用户的功能需求为导向的视图,如UML中的类图、状态图;
  • 开发(开发)视图:强调系统组件结构的视图,如包图;
  • 流程视图:描述系统动态运行流程的视图,强调数据和指令流程,如序列图、通信图、活动图;
  • 物理视图:描述基础物理层部署情况的实施视图,如部署关系图;
  • 场景用例:用户用例图;

搜集过程中需要谨记“约定沟通”阶段的测试范围、对象、时间,对于不确定是否在测试范围内的情报需要和客户业务、技术对接人确认。对于白盒测试或灰盒测试,客户会提供全部或部分相关的4+1框架中的文档或资料,节省情报搜集时间。
“约定沟通”和“情报搜集”是甲方安全团队和乙方安全团队的最大区别,甲方安全团队对于这两个步骤的熟悉程度足够深入,因此可以在安全工作中减小工作量,同时不会因安全管理的关系,牵涉商务和沟通工作。

三、威胁模型(Threat Modeling)

威胁模型围绕业务资产(组织、人员、工作流程)、业务流程(商业模型、合作关系、运作模式)进行。威胁建模是根据“情报搜集”的结果,对测试对象进行包括攻击面分析、威胁模型分析的过程,帮助测试人员基于威胁模型有针对性地进行脆弱性分析。
在多数的非正式的测试过程中,该步骤会被省略掉,由测试人员根据经验、能力进行脆弱性分析。
威胁模型的种类多样,在渗透测试的威胁建模过程中,通常使用攻击树模型,该模型是源于决策树的一种威胁分析方法,根节点是攻击目标,叶节点是攻击方式,需要测试人员具有专业的安全知识。

攻击树模型

四、脆弱性分析(Weakness Analysis)

或者称为漏洞分析,该过程目的是发现测试对象中潜在的或存在的安全漏洞,并对于漏洞信息进行分析。脆弱性分析的步骤是资产发现、漏洞扫描、漏洞评估、安全评估,人工参与的成分会越来越多。
脆弱性分析需要根据时间限制和人员成本,平衡测试广度和深度,基于“约定沟通”阶段获取的测试对象进行时间安排和人员划分。
安全评估和渗透测试的区别在于,安全评估只需要发现漏洞即可,不需要进一步利用以及进行之后的工作,如通过POC证明漏洞的存在或匹配到CVE漏洞即可,而渗透测试需要进行下一步“利用”。

五、利用(Exploitation)

根据客户要求和项目需要,并非每个测试项目都需要进行漏洞利用。利用阶段的目的是基于脆弱性分析进行漏洞利用,工作内容可能涵盖利用构造、工具编写,需要花费较多的时间。

六、后利用(Post-Exploitation)

后利用阶段主要是通过利用漏洞控制测试对象的资产,或具备相应的权限,因此大多数的渗透测试不会进行该阶段的工作,测试人员能力不足或评估不足往往会造成客户预期之外的不良后果,比如数据被删除、系统停滞等影响业务正常运行的结果。
后利用阶段的目的是为了证明测试的有效性,同时方便评估脆弱性的影响,客户人员对于测试对象的了解和认知不一定符合客观的事实,比如客户认为的不重要的资产和漏洞,客观上可以被利用于实现核心系统的攻击。

七、报告(Reporting)

最终的报告阶段,根据“约定沟通”阶段了解的报告接收人的身份不同,需要制定、编写不同类型的报告,通常分为执行报告(Execution Report)和技术报告(Technology Report)。执行报告有时会被称为风险评估报告,技术报告有时会被称为渗透测试报告,前者面向的人群是非技术类管理人员,后者面向的是技术类执行人员。

  • 1、执行报告

  • 测试背景

  • 测试概要

  • 风险评级

  • 结果统计

  • 建议概要

  • 建议路线

  • 2、技术报告

  • 测试团队

  • 联系信息

  • 测试所涉及的资产

  • 测试的目的

  • 测试范围

  • 测试强度

  • 测试方法

  • 威胁信息