用于安全测试的SAST与DAST有何不同?
应用程序安全测试(AST)通过各种工具、流程扫描应用程序以发现潜在安全问题。静态应用程序安全测试(SAST)和动态应用程序安全测试(DAST)是常用的安全测试方法,它们遵循不同的方法,在软件开发生命周期的不同阶段扫描应用程序代码及软件。
SAST遵循白盒测试方法来分析源代码、字节码和二进制文件,以识别可利用的漏洞和编码问题。
DAST是一种黑盒测试方法,通过在应用程序前端解析模拟的攻击有效负载,发现可利用潜在漏洞,不会暴露有关应用程序内部结构的信息。
DAST 和 SAST用于识别应用程序漏洞的测试机制
静态应用程序安全测试(SAST)工具对代码开发过程中引入的软件缺陷提供即时反馈。测试是在软件模型上使用预定义的规则执行,分析程序是如何在这些状态之间转换的,通过字符串匹配、数据流分析、控制流分析、抽象语法树的语义分析等手段进行路径遍历,完成对状态空间所有路径的近似分析,以发现代码中存在的潜在缺陷以及安全漏洞,并提供修复建议。
由于测试方法从软件开发生命周期的早期阶段开始实施,因此SAST有助于在编译软件之前识别编码缺陷。SAST 是一种首选的测试方法,并支持基于 DevSecOps 的左移方法来管理安全性。除了安全性,SAST还有助于确定代码质量、可重用性和可维护性。
静态应用程序安全测试发现的常见安全漏洞包括:
缓冲区溢出
跨站点脚本
SQL注入等
SAST 测试的优势包括:
早期漏洞检测:静态代码分析在开发过程开始时执行,测试有助于在编译应用程序代码之前检测应用程序代码中的错误。通过确保安全缺陷不会出现在生产环境中,SAST工具有助于实施主动保护和减少安全缺陷。
实时反馈:SAST扫描器执行快速扫描,可以在较短的时间内分析应用程序的整个代码库。除了对未发现的缺陷提供即时反馈之外,SAST工具还与各种开发管道工具无缝集成,而不影响核心功能。
准确性:SAST工具根据预定义的安全规则自动执行安全测试。这些工具比手动测试方法更快、更准确地识别出关键漏洞。
虽然 SAST 有助于安全编码实践,但分析静态代码的好处范围有限,因为它无法识别更多的运行时漏洞,并且报告存在一定的误报。
动态应用程序安全测试通过模拟恶意用户的操作来协调攻击,使用由外而内的方法评估应用程序。DAST 扫描通过输入可疑的用户输入并观察应用程序的响应来评估运行时漏洞。测试机制持续扫描部署在生产环境中的 Web 应用程序,帮助模拟应用程序的实际行为并识别影响典型用户体验的问题。由于DAST测试是在运行时环境中执行的,因此可以在新漏洞出现和发展时检测和识别它们。
动态分析应用程序代码发现的应用程序漏洞包括:
跨站点请求伪造
文件包含漏洞
Cookie操作
路径泄露漏洞等
DAST 测试的优势包括:
不受语言要求限制:DAST 测试不需要用于开发应用程序的编程语言知识。无论使用何种框架,DAST 工具都会根据输入和输出评估应用程序的行为,使其成为一种更强大的测试方法。
低误报率:DAST工具对应用程序环境执行端到端扫描,使安全研究人员能够检测和识别威胁应用程序安全和功能的安全漏洞。
不需要访问源代码——由于DAST扫描是通过应用程序前端发送恶意有效负载来执行的,企业可以利用第三方安全服务来执行测试,而不暴露应用程序代码。
虽然DAST工具评估应用程序代码中的各种漏洞,但它们无法定位代码库中安全问题的确切位置。DAST 扫描也无法嗅探应用程序堆栈中未执行的部分中的漏洞。
何时使用 SAST?
SAST有助于在关键漏洞进入生产环境之前检测和解决它们,建议开发人员使用 SAST 工具来帮助他们在编写软件时识别和检测编码错误。SAST 也适用于根本原因分析,这有助于在其他漏洞扫描检测到缺陷后确定代码行中问题的确切位置。
如何结合使用SAST和DAST?
由于DAST和SAST优势各不相同,DAST和SAST相互补充,可以一起使用来实现更健壮的测试方法。在代码开发阶段早期采用SAST工具,支持对应用程序使用的所有功能和包进行全面的安全分析。后续执行DAST测试,以评估攻击者如何利用生产中的漏洞。
SAST分析有哪些类型?
根据要测试的内容,SAST测试分析可分为:
源代码分析
字节码分析
原始二进制代码分析
参考来源:
https://crashtest-security.com/sast-dast/