D8-04 9–10 分钟 重要程度:高
代码评审、软件测试与 SAST/DAST/IAST/RASP
软件安全有效性要靠评审和测试共同证明。SAST 看代码不运行,DAST 测运行中的应用,IAST 结合运行时插桩,RASP 在运行时保护应用。
一、必须记住
- 代码评审可人工或自动化执行,用来发现安全缺陷、逻辑问题和不符合编码标准的实现。
- 单元测试验证最小代码单元,集成测试验证组件交互,系统测试验证完整系统。
- 回归测试用于确认修改旧代码没有引入新错误;冒烟测试确认基本功能足以继续测试。
- 验收测试确认系统满足业务和用户需求。
- White-box testing 知道内部结构和源码;Black-box testing 不看内部实现;Gray-box testing 有部分内部知识。
- Static testing 不运行代码;Dynamic testing 在运行状态下测试。
- SAST 是静态应用安全测试,通常分析源码、字节码或二进制。
- DAST 是动态应用安全测试,通常从外部攻击运行中的应用。
- IAST 在运行时结合代码插桩和动态请求提供更精确上下文;RASP 在应用运行时检测并阻断攻击。
- Fuzzing 用大量异常、随机或变异输入触发崩溃和安全缺陷,API Fuzz 常用于 API 安全测试。
二、核心概念
评审与测试层次
安全代码评审关注实现是否符合安全编码准则,测试则通过不同层次验证行为。单元、集成、系统、回归、冒烟和验收测试解决不同问题,不应互相替代。
白盒、黑盒、灰盒
白盒适合深入分析内部路径和代码覆盖;黑盒模拟外部攻击者视角;灰盒使用有限内部信息,在效率和真实性之间折中。
SAST、DAST、IAST、RASP
SAST 更早、更适合发现编码缺陷;DAST 更接近真实运行环境;IAST 利用运行时信息减少误报;RASP 是运行时自保护,不是开发阶段测试的替代品。
三、CISSP 判断规则
- 问不运行代码检查源码,选 SAST 或 Static testing。
- 问攻击运行中的 Web 应用,选 DAST 或 Dynamic testing。
- 问运行时插桩并结合代码上下文,选 IAST。
- 问应用运行时检测并阻断攻击,选 RASP。
- 问修改后确认没有引入旧功能错误,选 Regression testing。
四、常见陷阱
- DAST 找不到所有源码层面的缺陷,SAST 也不能证明运行环境安全。
- RASP 是运行时防护,不等于代码已经安全。
- 冒烟测试只验证基本可测性,不是完整验收。
五、英文关键字
Code review (代码评审) 定义:人工或自动检查代码缺陷、逻辑和编码标准。 Unit testing Integration testing System testing Regression testing (回归测试) 定义:确认变更没有破坏既有功能或重新引入缺陷。 Smoke testing Acceptance testing White-box testing (白盒测试) 定义:测试人员掌握源码、架构或内部信息。 Black-box testing (黑盒测试) 定义:测试人员几乎不了解内部实现,模拟外部视角。 Gray-box testing (灰盒测试) 定义:测试人员掌握部分内部信息。 SAST (静态应用安全测试) 定义:不运行应用而分析源码、字节码或二进制。 DAST (动态应用安全测试) 定义:对运行中的应用发起测试请求并观察响应。 IAST (交互式应用安全测试) 定义:运行时结合插桩和动态请求提供代码上下文。 RASP (运行时应用自我保护) 定义:应用运行时检测并阻断攻击。 Fuzzing
小测验
1. 安全工具在不运行应用的情况下分析源码以寻找缓冲区溢出和注入风险,属于?
SAST 是静态应用安全测试,通常分析源码、字节码或二进制,不要求运行应用。
2. 测试人员不了解源码,从外部对运行中的 Web 应用发起攻击请求,属于?
DAST 是动态测试,针对运行中的应用,从外部观察响应。
3. 开发人员修改旧代码后重新执行测试,确认没有引入新错误,称为?
Regression testing 用来确认变更没有破坏已有功能或重新引入缺陷。
本节进度
完成后会保存在当前浏览器。线上版可保存;不同手机、平板之间暂不自动同步。
尚未完成