静态应用程序安全测试 (SAST) 或静态代码分析通过扫描应用程序的源代码、字节代码或二进制文件来检测应用程序漏洞。通过分析应用程序中的代码模式、控制流和数据流,SAST 可以在不运行应用程序的情况下识别一系列漏洞。
静态应用程序安全测试 (SAST) 如何工作?
SAST 的工作原理是检查应用程序的源代码、二进制代码或字节代码,并寻找指示常见漏洞的代码模式。这是通过创建应用程序以及代码和数据流的模型来实现的。基于此模型,SAST 解决方案可以运行预定义规则来识别已知类型的漏洞。
为什么 SAST 是一项重要的安全活动?
SAST 解决方案使开发人员能够通过在软件开发生命周期 (SDLC) 的早期执行漏洞分析来“将安全性左移”。这使开发人员能够更快地识别和修复漏洞,从而降低修复成本及其潜在影响。
SAST 还使开发人员能够收到有关其代码质量的更多实时反馈。SAST 扫描可以在每次代码更新后执行,而不是仅在开发过程结束时当候选版本准备就绪时才识别和修复漏洞。这有助于开发人员从错误中吸取教训,并在未来开发更安全的代码。
优点和缺点
SAST 扫描解决方案对于识别常见漏洞非常有用。SAST 的一些主要优势包括:
- 在 SDLC 中的早期出现:SAST 不需要可执行代码,这允许它在 SDLC 中更早地执行。这减少了修复任何已识别漏洞的成本和时间要求。
- 常见漏洞检测:SAST 解决方案可以识别与常见漏洞相关的代码模式,例如 OWASP 十大和常见弱点枚举 (CWE) 列表中描述的那些。
尽管有很多好处,但 SAST 并不是一个完美的解决方案。SAST 扫描的一些限制包括:
- 特定于语言:SAST 读取并分析应用程序的源代码,这意味着它需要理解编写它所用的语言。如果组织使用多种不同的语言或不太常用的语言,这可能会出现问题。
- 无法检测所有漏洞:SAST 解决方案旨在分析源代码,而不是正在运行的应用程序。这使其对配置错误和运行时漏洞视而不见。
- 高误报率:SAST 解决方案不执行运行时分析,这意味着它们无法确定潜在漏洞是真正的威胁还是误报。必须分析 SAST 结果以确定它们是否代表真正的安全风险。
- 频繁、耗时的测试:SAST 扫描需要很长时间才能运行,报告会分析代码的快照,因此它很快就会过时。这意味着必须经常运行 SAST 扫描以保持最新。
SAST 对比 达斯特
动态应用程序安全测试 (DAST) 通过向应用程序发送各种类型的输入来分析正在运行的应用程序是否存在潜在漏洞。DAST 是对 SAST 的补充,这两种方法之间的一些主要区别包括:
- 白盒测试与黑盒测试:SAST 解决方案对应用程序的源代码具有完整的可见性。DAST 解决方案在不了解其内部操作的情况下测试正在运行的应用程序的安全性。
- 应用程序成熟度:SAST 扫描是在源代码或二进制文件上执行的,不需要正在运行的应用程序。DAST 解决方案要求应用程序足够完整才能执行。
- SDLC 阶段:SAST 对源代码的使用使其能够在 SDLC 中比 DAST 更早地执行,后者需要访问可执行程序。
- 补救成本:SAST 在 SDLC 中的早期存在使其能够比 DAST 更便宜地纠正漏洞。在 SDLC 中越晚发现漏洞,可能需要修复的代码就越多,修复的时间就越少。
- 检测到的漏洞:SAST 解决方案不分析运行代码,因此它们无法识别运行时漏洞或配置问题。DAST 解决方案测试正在运行的应用程序并可以发现这些类型的错误。
- 漏洞定位检测:SAST可以准确识别漏洞所在的代码行。DAST 只能报告应用程序中存在特定漏洞。
误报率:SAST 解决方案更容易出现误报,因为它们基于应用程序模型而不是运行它。DAST 解决方案可以判断特定漏洞是否确实存在。