该知识领域涉及如下考点,具体内容分布于如下各个子章节:
- 设计和验证评估、测试和审计策略
- 进行安全控制测试
- 收集安全过程数据(例如,技术和管理)
- 分析测试输出并生成报告
- 执行或协助安全审计
7.1. 构建安全评估和测试方案
安全评估和测试方案是信息安全团队的基础维护活动。该方案包括测试、评估和审计,定期验证组织是否己采取足够的安全控制,及这些安全控制是否正常运行并有效地保护信息资产。
7.1.1. 安全测试
安全测试是验证某项控制措施是否正常运行。包括:
自动化扫描
工具辅助的渗透测试
试图破坏安全的手动测试。
7.1.2. 安全评估
安全评估是对系统、应用程序或其他待测环境的安全性进行全面审查。通常包括
- 安全测试工具的使用,但不限于自动化扫描和手工渗透测试。
- 它们还包括对威胁环境、当前和未来风险、目标环境价值的细致审查。
安全评估的主要工作成果通常是向管理层提交的评估报告,报告包括以非技术语言描述的评估结果,并通常以提高待测环境安全性的具体建议作为结尾。
根据NIST 800-53A,评估包括4个组成部分:
- 规范:指与待审计系统有效的文档,包括政策、要求、详细设计。
- 机制:信息系统中用于满足规范的控制措施。如IPS
- 活动:在信息系统中所采取的行动,包括执行备份,导出日志文件或审查账户历史记录。
- 人员:执行规范、机制和活动的人员。
评估可以由内部团队执行,也可以外包到在待评估领域具备经验的第三方评估团队进行。
7.1.3. 安全审计
安全审计虽然与安全评估采用许多相同技术,但必须由独立审核员执行。尽管组织安全人员定期执行安全测试和评估,但这不是安全审计。区别点:
- 安全评估与测试结果仅供内部使用,旨在评估控制措施,着眼于发现潜在的改进空间;
- 安全审计是为了向第三方证明控制措施有效性而进行的评估。
- 安全审计结果供董事会、政府监管机构和其他第三方使用。
7.1.3.1. 审计标准
进行审计或评估时,审计团队应明确评估组织所采用的标准。
信息和技术控制目标(Control Objectives for Information and related Technology,COBIT)是一个开展审计和评估的通用框架,描述了组织围绕其信息系统所要具备的通用要求。
ISO发布了一套与安全相关的标准ISO 27001,描述了建立信息安全管理系统的标准方法,而ISO 27002则详细介绍了信息安全控制的细节,是一项专注于信息安全的国际标准,标题为"信息技术-安全技术-信息安全管理实践准则"。ITIL安全部分源自ISO 27002。
7.1.3.2. 三种审计类型
1. 内部审计
内部审计由组织内部审计人员执行,审计负责人直接向总裁、CEO或董事会报告。
2. 外部审计
由外部审计公司执行。因为执行评估的审计员与组织没有利益冲突,所以外审具有很高的公信力。知名的四大审计公司:
- 安永(Ernst & Young)
- 德勤(Deloitte)
- 普货永道(PricewaterhouseCoopers)
- 毕马威(KPMG)
3. 第三方审计
由另一个组织进行的审计,比如监管机构可依据合同或法律对被监管公司进行审计,执行审计的组织通常会选择审核员和设计审计范围。美国注册会计师协会(American Institute of Certified Public Accountants, AICPA)发布一个《认证参与标准声明文件 18》(The Statement on Standards for Attestation Engagements document 18, SSAE 18),标题为控制报告,提供了一个通用标准,供审计人员对服务组织进行评估,目的是允许组织进行外部评估,而不是多个第三方评估,然后与客户和潜在客户共享结果报告。
SSAE 18和ISAE 3402审计通常被称为服务组织控制(Service organization Conrtrol,SOC)审计,它们有三种形式:
- SOC 1 参与评估可能影响财务报告准确性的组织控制措施。
- SOC 2 参与评估组织的控制措施,这些控制措施会影响系统中存储信息的安全性(机密性、完整性和可用性)和隐私。SOC 2审计结果是保密的,通常只在NDA下在组织外部共享。
- SOC 3 参与评估组织的控制措施,这些控制措施会影响系统中存储信息的安全性(可信度、完整性和可用性)和隐私。然而,SOC 3审计结果旨在公开披露。
除了三类SOC评估外,还有两种不同类型的SOC报告。这两份报告都是从管理层对现有控制措施的描述开始的。审计师提供的意见范围不同:
- I类报告 这些报告提供了审计师对管理层提供的描述以及控制设计的适用性的意见。第一类报告也只涵盖一个特定的时间点,而不是一个延长的时期。你可以把I类报告更多地看作是一种文件审查,审计员在文件审查中检查书面情况,并确保管理层描述的控制措施是合理和适当的。
- 二类报告 这些报告更进一步,还提供了审计师对控制措施运营有效性的意见。也就是说,审计师实际上确认了控制措施的正常运行。第二类报告还涵盖了一段延长的时间:至少六个月的运作。你可以认为第二类报告更像是一种传统的审计。审计员不仅仅是检查文件;他们还将进入并验证控件是否正常工作。
1、SSAE-18不主张具体的控制。相反,它审查被审计组织中控制措施的使用和应用。它是一个认证标准,用于外部审计,并构成SOC 1、2和3报告的基本框架的一部分。
2、SAS 70在2010年被SSAE 16标准取代,该标准有三个SOC级别可供报告。SAS70包括2型报告,涵盖数据中心,并对2型报告使用了6个月的测试期。
7.2. 开展漏洞评估
7.2.1. 漏洞描述
NIST提供了安全内容自动化协议(Security Content Automation Protocol,SCAP)为漏洞描述和评估提供一种通用语言。SCAP组件包括:
- 通用漏洞披露(Common Vulnerabilities and Exposures, CVE):提供一个描述安全漏洞的命名系统。
- 通用漏洞评分系统(Common Vulnerability Scoring System, CVSS):提供一个描述安全漏洞严重性的标准化评分系统。
- 通用配置枚举(Common Configuration Enumeration,CCE):提供一个系统配置问题的命名系统;
- 通用平台枚举(Common Platform Enumeration,CPE):提供一个操作系统、应用程序及硬件的命名系统;
- 可扩展配置检查表描述格式(Extensible Configuration Checklist Description Format,XCCDF):提供一种描述安全检查表的语言。
- 开放漏洞评估语言(Open Vulnerability and Assessment Language,OVAL):提供一种描述安全测试过程的语言。
7.2.2. 漏洞扫描
漏洞扫描可自动探测系统、应用程序及网络,识别可能被攻击者利用的漏洞。主要分为4类:
7.2.2.1. 网络发现扫描
网络发现扫描通过使用多种技术探测远程系统上的开放端口,常见技术如下:
TCP SYN扫描 向目标系统的每个端口发送一个SYN数据据,如果扫描器收到SYN和ACK响应数据包,则表明进入了TCP三次握手的第二阶段,同时说明这个端口是开放的。TCP SYN扫描也称为半开放扫描。
TCP Connect扫描 向远程系统的某个端口创建全连接。适用于执行扫描的用户没有运行半开放扫描所需权限的场景。
TCP ACK扫描 发送ACK标志位的数据包,表明它属于某个开放连接。这种扫描可以尝试确定防火墙规则。
Xmas扫描 发送设置FIN、PSH及URG标志位的数据包。
设置所有或大部分可能的TCP标志的TCP扫描被称为圣诞树或圣诞节扫描,因为据说它会用这些标志"像圣诞树一样亮起来"。
网络发现扫描最常用的工具是Nmap,可以提供端口的状态:
开放:该端口在远程系统上已经开放,同时在该端口上运行应用程序,主要接受连接请求
关闭:该端口在远程系统可以访问,意味着防火墙允许访问该端口,但在该端口上没有运行接受连接请求的应用程序。
过滤:因为防火墙会干扰连接尝试,nmap无法确定端口是开放还是关闭。
7.2.2.2. 网络漏洞扫描
网络漏洞扫描相对发现扫描更深入,不止步于探测开放端口,会继续探测目标系统或网络,发现已知漏洞。
网络扫描器默认执行非登录扫描,但限制了充分发现系统可能存在漏洞。执行登录扫描可提高扫描准确性,减少漏报和误报。
常用漏洞扫描器有Nessus、Qualys、Nexpose和OpenVAS。
7.2.2.3. Web应用漏洞扫描
Web应用程序为企业安全引入主要风险。如SQL注入攻击、XSS、CSRF等。
常用Web漏扫工具:Acunetix、Burp Suite、Nikto和Wapiti。
7.2.2.3.1. 数据库漏洞扫描
虽然大多数据库受防火墙保护,避免外部直接访问,但Web应用程序会提供这些数据库的入口,攻击者可利用Web应用程序来直接攻击后端数据库,如SQL注入。
常用数据库漏扫工具:sqlmap
7.2.3. 渗透测试
渗透测试实际上在尝试攻击系统,所以比漏洞测试技术更进一步。执行渗透测试的安全专业人员尝试突破安全控制措施,入侵目标系统或应用来验证漏洞。
渗透测试过程通常包括以下阶段:
- 规划阶段:包括测试范围和规则的协议。规划阶段是极其重要的,它确保测试团队和管理人员对测试性质达成共识,明确测试是经过授权的。
- 信息收集和发现阶段 :结合人工和自动化工具来收集目标环境的信息。此阶段包括执行基本的侦察来确定系统功能(如访问系统上托管的网站),并执行网络发现扫描来识别系纺的开放端口 Whois可以提供有关组织的信息,包括IP范围、物理地址和员工联系人。
- 漏洞扫描阶段:探测系统脆弱点,结合网络漏洞扫描、 Web 漏洞扫描和数据库漏洞扫描。
- 漏洞利用阶段:试图使用人工和自动化漏洞利用工具来尝试攻破系统安全防线。
- 报告阶段: 总结渗透测试结果,并提出改进系统安全的建议。
渗透测试人员通常使用Metasploit工具(支持使用脚本来实现常见攻击的自动化执行)对目标系统进行漏洞利用。Metasploit提供了一个可扩展的框架,允许渗透测试人员除了创建工具中内置的漏洞外,还创建自己的漏洞利用。
在渗透测试中,目录索引最初看起来可能不是一个问题,但仅仅知道文件的名称和位置就可以为攻击者提供有关组织的大量信息,以及潜在可访问文件的列表。
渗透测试不足点:
- 渗透测试只能覆盖进行时的时间点。
- 在进行渗透测试时,由于脆弱的服务而导致拒绝服务的可能性始终存在,但它可以通过社会工程和操作测试来测试流程和策略,以验证这些流程和策略是如何工作的。
渗透测试通常划分为:白盒渗透测试、灰盒渗透测试及黑盒渗透测试。
7.3. 软件测试
7.3.1. 代码审查与测试
7.3.1.1. 代码审查
代码审查(Code Review)也称同行评审(Peer Review),即由其他开发人员审查代码是否存在缺陷。最正式的代码审查过程称为范根检测法(Fagan inspections),包含6个步骤:规划->概述->准备->审查->返工->追查
7.3.1.2. 静态测试
不运行软件的情况下,通过分析软件源码或编译后的应用程序,评估软件的安全性
7.3.1.3. 动态测试
在软件运行环境下检测软件的安全性。测试人员无法接触源码,在生产环境中动态测试应该谨慎开展,避免服务的额外中断。
7.3.1.4. 模糊测试
模糊测试是一种特殊的动态测试技术,向轮换提供无效的输入(随机产生的或特殊构造)来测试其限制,发现之前 未检测到的缺陷。主要分为两大类:
- 突变模糊测试(Mutation) 从软件实际操作获取输入值,然后操纵(变异)输入值来生成模糊输入。
- 预生成模糊测试(Generational) 设计数据模型,基于对软件所用数据类型的理解创建新的模糊输入。
模糊测试通常不能完全覆盖所有代码,一般仅限于不涉及复杂业务逻辑的简单漏洞。
7.3.2. 突变测试
突变测试以小的方式修改程序,然后测试该突变体,以确定它的行为是否正常或失败。该技术用于通过突变来设计和测试软件测试。
7.3.3. 接口测试
软件测试过程中需要测试的接口分为:
- APIs
- UIs:包括图形用户界面和命令行界面。
- 物理接口
7.3.4. 误用例测试
一些应用程序存在明显的说明示例,展示软件用户可能尝试错误使用应用程序。
误用用例图使用的语言超出了典型用例图,包括威胁和缓解措施。
误用测试关注的是组织所不希望的行为,或与系统或应用程序的正确功能背道而驰的行为。用例测试用于验证所需的功能是否有效。动态测试用于确定代码如何处理随时间变化的变量
7.3.5. 测试覆盖率分析
- 测试覆盖率=已测用例数量/全部用例数量。常用于以下标准:
- 分支覆盖率:在所有if和else条件下,每个if语句是否执行。
- 条件覆盖率:在所有输入集合下,代码中的每个逻辑是否执行
- 函数覆盖率:代码中的每个函数是否已被调用
- 循环覆盖率:在导致代码执行多次、一次或0次的条件下,代码中的每个循环是否执行
- 语句覆盖率:测试期间,是否运行过每行代码。
7.3.6. 网站监测
安全专业人员也经常参与网站持续监控,从事性能管理、故障排队、潜在安全问题识别等活动。主要可分为两类:
被动监测 通过捕获发送到网站的实际网络流量进行分析。真实用户监控(Real User Monitoring,RUM)是一种被动监测变体,监测工具重组单个用户活动,追踪其与网站的交互。
主动监测 对网站执行伪造的事件活动,从而评估其性能。
基于签名的监测 包括IDS、IPS和反恶意软件系统。