动态应用程序安全测试(DAST)和静态应用程序安全测试(SAST)是检测应用程序漏洞的两大法宝。每种测试工具都有各自特点,并且在应用程序安全策略中扮演着不同角色。因此,了解如何挑选并整合这些工具,对于提升和优化组织安全态势至关重要。
什么是 DAST,什么是 SAST?
首先,咱们得明确这两个术语的定义,以及它们的设计初衷。
什么是 DAST?
动态应用程序安全测试(DAST),说白了就是一种黑盒测试,它针对的是正在运行的应用程序,从外部发起攻击。虽然动态测试涵盖的范围很广,既有手动也有自动,但DAST更多是指自动漏洞扫描。
DAST工具怎么用?
DAST工具会在应用运行时对其进行分析,模拟真实攻击场景,揪出关键的安全漏洞。DAST工具提供了攻击者对应用程序安全状况的视角,以便可以在潜在漏洞被利用之前修复它们。DAST工具种类繁多,从简单的手动扫描器到功能全面的企业级安全平台应有尽有。
何时应使用 DAST?
因为DAST需要应用处于运行状态,所以它通常用于暂存环境,检测那些开发阶段没暴露出来的运行时漏洞,以及其他可能被忽视的安全隐患。
什么是 SAST?
静态应用程序安全测试(SAST)则是通过分析应用程序源代码,来查找潜在的安全漏洞。由于它得深入了解应用内部,所以被归类为白盒测试。
SAST工具怎么用?
静态应用程序安全测试工具在部署应用程序之前分析源代码,从而在开发阶段早期就发现安全漏洞。SAST工具形式多样,从IDE插件到独立的静态分析器,并且几乎是无缝对接开发流水线。
什么时候可以使用 SAST?
由于SAST扫描的是源代码,无需应用运行,所以它几乎只在开发期间派上用场。具体使用时机还得看工具,有的可以持续运行,有的则在流水线中的特定阶段触发。
DAST与SAST,选哪个?
DAST和SAST这两种安全测试方法各有千秋,也各有局限。虽然理想情况下,您的整体应用安全计划应该同时包含DAST和SAST,以实现最大覆盖面,但具体何时使用哪种方法,还得结合您的组织情况、工作流程以及所选工具来决定。
一般来说,SAST在早期开发中效果好。因为SAST工具直接在源代码上运行,专为开发工具链设计,所以很容易融入CI/CD流水线以及整个开发流程。同时,它也是推广安全编码最佳实践的得力助手。
而DAST则需要应用运行起来,所以它通常用于预生产和暂存环境,查找运行时漏洞,测试第三方组件、动态依赖项和API。由于DAST与技术无关,所以用途广泛,甚至能在生产环境中发挥作用,涵盖运营和信息安全方面的多种用例,包括实时安全评估、合规性和安全审计等。此外,DAST还可用于部分自动化渗透测试。
DAST+SAST,强强联合
DAST和SAST联手使用时,功能强大。比如,可以在CI/CD流水线中自动执行SAST,内部使用DAST扫描主要构建版本,然后在生产环境中运行定期DAST扫描。这在金融、医疗、政府等受严格监管的行业中尤为重要。
Web应用安全测试:DAST与SAST的覆盖率
测试覆盖率是衡量特定应用和整个Web应用环境中安全测试效果的关键指标。为了提供准确信息,安全测试工具得明确测试对象、测试方法以及如何解读和展示结果。
SAST针对的是应用程序源代码,所以工具需要支持相关的代码语言和Web应用框架的工具及检测规则集。对于工具所支持的检测语言及规则,SAST能提供完整测试覆盖率,因为它测试了所有代码。
DAST工具则不受技术限制,因为它们从外部测试应用,关注的是应用行为而非源代码。这意味着DAST扫描可以覆盖任意数量的应用,无论技术栈、开发状态或源代码可用性如何,都能测试浏览器可从外部访问的所有内容。
DAST与SAST:准确性和效率
在自动化安全测试中,误报一直是个棘手问题,既可能是错误结果,也可能是虽然有效但无实际意义的结果。SAST工具可能会发现更多的安全缺陷,这些问题单独来看可能不算问题,但联系上下文在一些情况下存在被利用的风险。DAST的优势在于能够查看正在运行的应用,识别实际可利用的漏洞,而不仅仅是标记可疑代码结构。
实战演练:DAST与SAST携手查漏补缺
举个例子,假设有个应用从SQL数据库获取数据,并在数据库查询中不安全地使用来自Web表单的原始用户输入:
SAST会识别出执行这一操作的源代码片段,并警告开发人员,SQL查询的构造方式(理论上)可能导致SQL注入攻击。
而DAST扫描则会在爬网过程中找到页面和Web表单,模拟SQL注入攻击。如果测试攻击成功,工具就会在该页面上报告实际的SQL注入漏洞。
将DAST与SAST融入SDLC
在软件开发生命周期(SDLC)中尽早测试应用是否存在各类漏洞,对于在安全问题进入生产环境前将其修复至关重要。源代码分析是在早期开发阶段发现和消除安全缺陷的最自然方式。SAST通常很容易与开发环境和工作流程集成,无论是作为IDE检查器还是独立的分析过程。SAST关注静态代码,无法识别运行时漏洞和配置错误,因此SDLC中最好结合动态测试来使用。