Link

D6 安全评估和测试

目录

  1. D6 安全评估和测试
    1. 安全评估的三个部分
    2. 审计
      1. 审计三个分类
      2. 审计原因
      3. 第三方审计 - SOC 组织控制审计
      4. 审计标准
    3. 漏洞评估 SCAP
      1. 漏洞扫描方式
    4. 渗透测试
      1. 渗透测试可能带来的问题
      2. 渗透测试类型
      3. 渗透测试标准
    5. 代码审查和测试
      1. 范根检查法
      2. 静态测试 SAST
      3. 动态测试 DAST
      4. 模糊测试(Fuzz test)
      5. 接口测试
      6. 误用案例测试 misuse case testing
      7. 网站监测
      8. 回归测试
      9. 代码测试覆盖能力
      10. 功能测试/用例测试/系统测试
    6. 软件安全及风险管理的 KPI & KRI

安全评估用于定期验证企业中是否具有足够的安全控制措施,以及这些措施是否能够正常运行并保证信息资产。

安全评估:识别、管理和降低风险

安全评估的三个部分

  • 安全测试:验证某项安全控制措施是否正常运行
  • 安全评估:对系统、应用和环境的安全性进行审查。通常需要使用安全测试工具,自动发现漏洞、风险等。安全评估的成果是生成评估报告并提交管理层
  • 安全审计:必须由独立的审核员进行,目的是向第三方证明当前控制措施是有效的。

审计

审计三个分类

  • 内部审计:审计人直接向总裁、CEO 或其他类似高层汇报,也可能直接向董事会汇报
  • 外部审计:由外部审计公司执行,审核员与公司无利益冲突,公信力高。(四大审计公司:安永、德勤、普华永道、毕马威)
  • 第三方审计:由一个组织代替另一个组织的名义进行审计,比如监管机构对公司的审计

审计原因

法律法规要求:

  • 例如联邦机构每年对组织进行一次自我审查和第三方审查

业务驱动:

  • 为了减少开支、快速上线一些服务,进行服务外包,需要对外部组织进行审查

第三方审计 - SOC 组织控制审计

目的:如果一个组织给多个客户提供服务,而每个客户可能都要求该组织进行审计,那么这时候就需要一个标准来减少审计次数,而且结果大家公认。比如微软全球都有业务,因此可以使用某标准来进行审计让全球都认可。

SOC (Service Organization Controls)

常见的执行标准:

  • SSAE 18 (Statement on Standards for Attestation Engagement document 18),美国注册会计师协会发布
  • ISAE 3402:国际标准,可以在美国之外使用

AICPA(American Institute of Certified Public Accountants):美国注册会计师协会

SSAE 18 和 ISAE 统称为 SOC 审计。

SOC 有三种形式的声明:

  • SOC 1 声明:使用 SSAE 18 执行标准,评估可能影响财务报告准确性的控制措施
  • SOC 2 声明:关注非财务相关的信息,评估可能影响 CIA 三性及隐私的措施,结果通常保密,根据 NDA 对外共享
  • SOC 3 声明:关注非财务相关的信息,评估可能影响 CIA 三性及隐私的措施,通常对外公开,因为公开的缘故,提供的信息可能会受限

SOC 两种类型:

  • SOC I 类:由管理层指定审查范围,仅涵盖指定时间点。可视为纸面上的审查,报告管理层相关的措施是否合理,不会去现场真实去进行审查
  • SOC II 类:传统的审查,审查更长的时间段,至少 6 个月,会到现场验证控制功能是否正常

SOC 1 类型 2 审核是根据国际标准保证参与号 3402 (ISAE 3402) 进行。

SOC 1 根据 SSAE-16/SSAE-18 编写,SAS-70 已被 SOC 1/SSAE-16/SSAE-18 取代。

审计标准

COBIT: Control Objectives for Information and Related Technologies 信息和相关技术控制目标。由 ISACA 维护。

ISO 27001 :描述建立信息安全管理系统的标准办法

ISO 27002:介绍信息安全控制措施的更多细节

漏洞评估 SCAP

原因:不恰当的编程可能存在安全漏洞

NIST 维护的漏洞描述标准 SCAP(Security Content Automation Protocol):

  • CVE(Common Vulnerabilities and Exposures):漏洞描述(命名系统)
  • CVSS(Common Vulnerability Scoring System):漏洞严重性的标准化评分,0~10 分,7 以上为严重
  • CCE(Common Configuration Enumeration):系统配置问题的描述(命名系统)
  • CPE(Common Platform Enumeration):提供一种操作系统、应用程序及设备的命名系统
  • XCCDF(Extensible Configuration Checklist Description Format):提供一种描述安全检查表 checklist 的语言
  • OVAL(Open Vulnerability and Assessment Language):描述安全测试步骤

漏洞扫描方式

  • 网络发现扫描:nmap 等工具
    • TCP SYN 扫描(半开扫描),如果收到 ACK 则表示端口开放
    • TCP Connect 扫描 全连接扫描。适用于某些时候软件无法构建 SYN 包,需要借助 OS 产生完整 TCP 会话
    • TCP ACK 扫描:发送 ACK,表明其属于某个开放连接。这种方式可用于检查是否存在防火墙,防火墙的规则及工作原理
    • UDP 扫描:检查存活的 UDP 服务
    • Xmas 扫描:设置 FIN、PSH 及 URG 标志位,
  • 网络漏洞扫描:发现已知漏洞,nessus 扫描,MBSA(Microsoft baseline security analyzer)、OpenVAS(开源)
    • 默认未经过身份认证:模拟攻击者
    • 经过身份认证(只读权限):全面评估系统中的漏洞,同时减少漏报和误报
  • Web 应用程序漏洞扫描:专门检测 Web 应用中的漏洞,Nikto 扫描、nessus 扫描、Burp Suite、Wapiti(开源)
  • 数据库漏洞扫描:检测数据库安全漏洞,开源数据库漏洞扫描 sqlmap

nmap 扫描的几种状态:

  • open:端口开放
  • closed:端口关闭
  • filtered:被防火墙过滤,nmap 无法判断开放开始关闭

PCI DSS 规定组织要每年进行一次 Web 漏洞扫描。

渗透测试

相比漏洞扫描,会多一个漏洞利用(攻击尝试)

渗透测试的几个阶段:

  • 规划阶段:确定测试范围,确定测试是经过授权的(一般要签署测试范围的授权书
  • 信息收集和发现:结合人工和自动化工具收集环境信息,比如发现开放的端口等,发现漏洞
  • 攻击:利用收集到的漏洞尝试破坏系统。攻击完成后会返回到 Discovery 重新发现
  • 报告:总结漏洞测试结果,提供改进意见

image-20231005085309985

常用工具:Metasploit,对目标系统实施自动化的漏洞利用,使用脚本语言来实现常见攻击的自动化任务。Metasploit 提供可扩展框架,支持人员添加自定义漏洞来进行测试。

渗透测试可能带来的问题

  • 出现拒绝服务
  • 程序崩溃
  • 数据损坏

渗透测试类型

  • 白盒渗透测试(White-Box Penetration Test):也称为晶盒测试,向攻击者提供目标系统的详细信息。可以绕过攻击前的很多防护手段,加快测试时间,提升发现漏洞的可能性,最大程度保证测试有效性

  • 灰盒渗透测试(Gray-Box Penetration Test):部分知识测试,平衡白盒测试和黑盒测试的优缺点

  • 黑盒渗透测试(Black-Box Penetration Test):攻击之前不会向测试人员透露任何信息。这种测试模拟外部攻击者,在攻击之前试图获取有关业务和技术环境的信息

  • 入侵模拟攻击(BAS,Breach and Attack Simulations):自动化来进行渗透测试,可以减少人工,BAS 会尝试生成各种威胁,比如将可疑文件放在文件服务器上、扫描漏洞、发送异常网络报文等。

渗透测试标准

  • NIST 800-115
  • OSSTMM

代码审查和测试

代码审查:也称同行评审,让其他开发者查看代码是否存在缺陷。

范根检查法

最正式的代码审查称为范根检查法(Fagan Inspection),遵循严格的审查和测试过程,有 6 个步骤:

  • 规划
  • 总览
  • 准备
  • 审查
  • 返工
  • 追踪

静态测试 SAST

不运行软件的情况下,通过分析软件源代码和编译后的应用程序来评估软件的安全性。通常使用自动化检测工具,可以发现缓存溢出等问题。

动态测试 DAST

Dynamic Application Security Testing 动态应用安全测试。

使用黑盒的方式,在软件运行环境下检测软件的安全性。动态检查常用来进行 Web 应用的安全性测试。可以发现 XSS 跨站脚本攻击、SQL 注入等问题。

动态测试可以使用模拟事务的方式来测试系统的性能

DAST 一般依靠专家创建测试软件,通用性较弱,DAST 更关注请求和响应。

模糊测试(Fuzz test)

一种特殊的动态测试技术,向软件输入多种不同类型的输入来测试其边界,以发现之前未检测到的缺陷。适合逻辑简单的检测,比如输入无效输入、产生随机字符等

模糊测试人员监测软件的性能,观察软件是否崩溃、是否出现缓冲区溢出或其他不可取和或不可预知的结果。

分两大类:

  • 突变(Mutation,或 Dubm)模糊测试:基于软件正常工作的输入值,对其进行修改(例如追加),然后来进行测试
  • 预生成(智能)模糊测试:设计数据模型,基于对软件都用数据类型的理解创建新的模糊输入

模拟测试工具:

  • zuuf:可用于突变模糊测试

接口测试

  • API 接口:应用编程接口,一般以 Web 服务的形式对外发布。通常使用 API 密钥来限制其他用户和程序的 API 调用。

  • UI 接口:用户接口,包含 CLI 和 GUI

  • 物理接口:机械装置、逻辑控制器或者其他物理设备的一些程序

误用案例测试 misuse case testing

一些系统可能会有错误使用/滥用的可能,比如取款时输入比余额大,或者尝试输入字符串来访问其他用户。

此时可以通过误用案例,或滥用测试来发现系统是否存在这些漏洞。

网站监测

  • 被动监测(Passive monitoring) :捕获真实发送到网站的流量。URM 真实用户监控是被动监测的一种变体,监测工具可以重组单个用户的活动,追踪其与网站的交互
  • 主动监测(合成检测 synthetic monitoring,或综合监测):向网站发送伪造的事务活动,从而评估网站的性能

回归测试

确保系统变更后会重新测试,保证其功能性和安全性和之前一致,输出和之前一致。

代码测试覆盖能力

测试覆盖率=已测试的用例数量/全部用例的数量。

在解读测试结果时,需要理解生成输入值的内容。

常见的 5 个标准:

  • 分支覆盖率:在所有 if else 条件下,是否每个 if 都执行了
  • 条件覆盖:在所有输入集合下,是否测试了每个逻辑
  • 函数覆盖:是否调用了每个函数进行测试
  • 循环覆盖:是否执行了每个循环
  • 语句覆盖:是否覆盖了所有的代码

功能测试/用例测试/系统测试

(属于代码开发 SDLC 的过程)测试产品功能是否能够正常工作。

软件安全及风险管理的 KPI & KRI

KPI:关键绩效指标,组织在给定时间内执行一个任务的效率。

KRI:关键风险指标,执行给定动作时所固有的风险,比如进行风险预测

包含的内容(应该大部分都是 KPI):

  • 遗留漏洞的数量
  • 修复的漏洞耗时
  • 漏洞、缺陷复现率
  • 重复审计的结果

  • 被盗用账户的数量
  • 在代码移植到生产环境前的扫描过程中检测到的软件缺陷数量
  • 尝试访问已知恶意站点的用户