SAST 与 DAST
如果说 SAST 是白盒测试,那么 DAST 就是黑盒测试方法。DAST 在运行时测试应用程序,并稍后在 CI 管道中应用。DAST 是防止回归的好方法,并且与 SAST 不同,它不是特定于编程语言的。 模糊测试是一种 DAST 方法,它会迫使应用程序导致意外行为、崩溃或资源泄漏。这使得开发人员能够全面了解应用程序的行为和漏洞。 无论开发人员如何遵循最新的安全编码指南,无论他们的意图如何完美,一些生产代码几乎总是会包含至少一个安全问题。开发人员也是人,当面临着试图平衡大量且不断增长的潜在软件漏洞和加快发布周期的压力时,必须做出一些让步。 与软件开发的大多数其他领域一样,解决方案是使用测试自动化来查找源代码和整体应用程序安全性中的弱点,不良行为者将不可避免地发现并利用这些弱点。 本文着眼于静态应用程序安全测试 (SAST)和动态安全测试 (DAST) 、这些应用程序安全测试方法背后的基本思想及其优缺点。它还探讨了如何利用 SAST 和 DAST 并将两者结合起来发布安全软件并生成真正安全的应用程序。
什么是 SAST?
静态应用程序安全测试(SAST)是一种白盒测试方法。在软件工程中,白盒测试评估一系列静态输入,例如文档(需求、设计和规范)和应用程序源代码,以测试一系列已知问题。作为自动化静态测试的一种形式,SAST 工具会扫描源代码和相关依赖项(框架和库)。在扫描过程中,该工具会参考一组预定义的规则来检测问题和漏洞,并标记其确切位置。SAST 工具很容易集成到CI/CD 管道中。这意味着只要团队成员将代码提交到源代码存储库(例如 GIT),就可以启动扫描过程。 与其他安全分析方法相比,使用 SAST 有许多明显的优势:
- 无需运行应用程序即可立即受益。
- 通过在代码开始工作时将 SAST 集成到您的构建系统中,从开发过程的最早阶段检测潜在问题。此时修复漏洞不仅更便宜、更容易,而且还提高了开发人员对潜在问题的认识,帮助他们避免其他相关问题。
- 甚至无需构建产品的部分功能版本。这意味着您不必花费时间编译和部署代码,也不必处理配置构建系统的麻烦,包括拥有相关的基础设施和相关资产(例如,安全令牌和证书)。
为什么 SAST 很重要?
虽然静态应用程序安全测试提供了许多好处,但最重要的是它能够检测问题并标记其精确位置,包括文件名和行号。对于每个检测到的问题,SAST 工具将指示其严重性并提供简短描述。从表面上看,这种查明问题的能力似乎微不足道,但发现问题是开发人员工作中最耗时的方面之一。没有什么比知道问题存在但无法查明问题更令人沮丧的了,尤其是当可用信息来自模糊的堆栈跟踪或神秘的编译器错误消息时。SAST 可用于多种软件,它支持多种高级语言,并且大多数 SAST 工具都是高度可配置的。
什么是 DAST?
动态安全测试 (DAST)使用与 SAST 相反的方法。SAST 工具依赖于白盒测试,而 DAST 使用黑盒方法,假设测试人员不了解被测试软件的内部工作原理,并且必须使用可用的输入和输出。黑盒测试需要是动态的。这是因为随着应用程序的运行,输入和输出的数量会增加和减少,并且它们消耗或释放的数据不断变化。因此,DAST 工具至少要求您拥有可用于测试的应用程序的工作版本。 与 SAST 系统不同,SAST 系统在输入类型方面是杂食性的,并且可用于扫描几乎任何类型的软件,而 DAST 工具使用的扫描和检测方法将取决于应用程序类型。例如,在测试 Web 应用程序时,DAST 系统将抓取网页,定位 Web 服务的端点,并测试一系列输入和输出。SAST 和 DAST 之间的另一个主要区别是,由于 DAST 需要功能软件,因此它只能在比 SAST 晚得多的开发过程中使用。
为什么 DAST 很重要?
凭借其动态安全测试方法,DAST 可以检测各种实际工作漏洞,包括内存泄漏、跨站点脚本 (XSS) 攻击、SQL 注入以及身份验证和加密问题。它能够检测所有OWASP 十大漏洞。DAST 可用于根据输入和输出动态检查应用程序的内部状态,还可以测试应用程序的外部环境。因此,DAST 可用于测试应用程序连接到的任何系统和 API 端点/Web 服务、测试物理基础设施和主机系统(网络、存储、计算)以及测试 API 端点和 Web 服务等虚拟资源。这使得这些工具对开发人员很有价值,同时也使 DAST 对更广泛的运营和 IT 社区有用
SAST 与 DAST
现在我们已经探讨了 SAST 和 DAST 扫描工具的优点,让我们看看每种工具的缺点,以帮助确定哪种方法可能适合您。
SAST 的缺点
如上所述,SAST 的最大优点是作为静态方法,不需要运行应用程序,您可以在最早的开发阶段开始使用它,但这种方法存在许多问题:
- 依赖静态输入: SAST 只能发现某些类型的问题。虽然这些问题当然很重要,但它们可能会导致错误的安全感,因为许多黑客对运行的软件及其支持基础设施进行特定的攻击。
- 有限的问题集:这些问题涉及访问控制、加密或内存管理等领域。例如,当使用 SAST 工具来定位由 C 的 printf 状态引起的缓冲区溢出等常见问题时,它可能会检测到用 C 编写的语言(例如 Python)中的类似问题。
- 取决于它们的规则集:如果这些规则产生不明确的结果,则可能会导致大量误报/漏报。任何误报/漏报都需要人工解释,这削弱了使用自动化方法的优势。
- 速度:从历史上看,SAST 工具在扫描时速度非常慢,并且在扫描过程中可能会成为开发瓶颈。更现代的 SAST 工具(例如 Snyk Code)能够进行实时扫描,因此开发人员可以在开发过程中查找并修复漏洞,而无需等待扫描结果。尝试我们的免费在线代码检查工具,看看 Snyk 代码引擎如何分析您的代码是否存在安全和质量问题
DAST 的缺点
DAST 的动态方法弥补了 SAST 静态性质的缺点,但它也有自己独特的问题:
- 需要运行时环境:这意味着必须投入时间和精力来构建环境,然后编译和构建运行软件。任何熟悉为 iOS 和 Android 构建移动应用程序的人都知道,仅仅获取正确的证书来将应用程序部署到测试设备就需要花费大量时间。
- 需要运行软件:只有在开发过程接近尾声时,交付工作代码的压力通常超过交付安全软件的愿望时,您才能开始使用 DAST。
- 修复问题的时间和成本: DAST 检测到的错误类型通常需要更长的时间来诊断,并且修复成本更高。这当然会使其在最有用的时候发挥作用较小。
- 覆盖率:与 SAST 一样,DAST 不提供 100% 的覆盖率,无法检测源代码或相关库中的静态问题。最后,它与 SAST 的不同之处在于,将 DAST 直接集成到CI/CD 管道中更加困难。
应用程序安全的组合方法
在比较 SAST 与 DAST 时,总体而言,SAST 似乎是更好的选择,因为它可以在开发过程的早期使用,此时修复检测到的安全问题更容易、更便宜。然而,仅依赖一种检测方法是非常有问题的。使用 SAST 和 DAST 扫描工具的组合方法将使您能够发现更广泛的漏洞和可利用的弱点,并让您获得 SAST 静态和 DAST 动态安全测试方法的好处。 添加其他形式的安全测试,例如交互式应用程序安全测试 (IAST) 和运行时应用程序自我保护 (RASP),可以进一步增强应用程序的安全性,尽管对这些替代方法的深入讨论超出了范围本文的范围。 将 SAST 工具与 SCA 工具相结合,可以让您更全面地了解应用程序的整体安全性,涵盖专有代码 (SAST) 和通过开源包 ( SCA ) 引入的任何漏洞。结合使用SCA 和 SAST 还可以帮助您满足 PCI 等标准的要求。