DAST 已死,为何业务逻辑安全测试成为焦点

2024-04-21 08:36

本文主要是介绍DAST 已死,为何业务逻辑安全测试成为焦点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

“DAST 已死”——这句话每年都会出现在社交媒体和网络安全新闻通讯中。但如果到了 2024 年,它终于实现了呢?

DAST,动态应用程序安全测试(尽管我们在过去几周内看到了一个新术语“动态 API 安全测试”),在过去十年中一直是应用程序安全测试的基石,但现在是时候让路了下一代应用程序安全测试:业务逻辑安全测试。

为什么理解业务逻辑安全问题对于安全工程师来说变得越来越重要?在这篇文章中,我决定解释这种日益重要的背后的原因。

作为安全人员,我们可能会停止关注基本问题。我们将研究我们的工具很难找到的更困难的问题。就像业务逻辑问题一样……

SDLC 中的安全性:“左移”趋势

在敏捷环境中,开发人员会在我自己的团队中不断更新他们的应用程序(或后端、服务……无论他们如何称呼它们!),有时甚至每天更新。每年进行一两次渗透测试的传统方法不再具有任何意义,因为每次构建都会引入新的漏洞。几年前,手动渗透测试的过时本质对我来说变得非常明显(这也是我决定构建 Escape 的原因之一)。这就是为什么“左移”趋势开始兴起,市场上的安全解决方案必须适应。

适应SDLC的安全解决方案

DAST 工具的最初好处很明显 - 它是唯一可以检测正在运行的应用程序中的漏洞的解决方案(它可以查看应用程序在其环境中的行为方式)。另一方面,软件组合分析 (SCA) 工具主要侧重于列出依赖项中的已知漏洞,而不是评估应用程序的业务逻辑。这一限制缩小了他们识别应用程序核心功能中潜在风险的范围。

很多时候,人们往往过度关注 SDLC 的左侧,而对 SDLC 的右侧关注不够。您可以在供应商中看到它。因此,DAST 工具通常效率非常低,而且它们往往不会产生任何对组织和安全工程师都没有用的东西。所以,很多时候人们只是倾向于说,让我们把 SAST 放在适当的位置,让我们把所有的安全护栏放在左边,而不用担心右边。 

静态应用程序安全测试 (SAST) 工具虽然有用,但由于无法评估运行状态下的应用程序,通常会产生大量误报和漏报。静态分析与应用程序实际运行时行为之间的这种差异阻碍了 SAST 工具查明真正漏洞的有效性。

交互式应用程序安全测试 (IAST) 工具处于中间立场,可在应用程序运行时深入了解应用程序漏洞,从而比 SAST 工具提高准确性。然而,IAST 实现很复杂,并且会在测试期间引入性能开销,因为该工具会主动监视和分析应用程序的行为。

运行时应用程序自我保护 (RASP) 工具面临着不同的挑战,因为它们缺乏生成流量的能力。因此,他们只能在攻击已经损害了应用程序及其基础设施后才能识别漏洞,这使得他们与 DAST 工具相比在威胁缓解方面缺乏主动性。

Escape 的 DAST 与其他安全工具

因此,DAST 出现的时机非常完美:构建完成后,代码刚刚生成且正在运行。它可以在发布后几秒钟无缝集成到 CI/CD 管道或开发/生产环境中,以免为时已晚。作为黑盒测试,它不需要访问代码和流量。

DAST 名声不好却是罪有应得

免责声明:在这一部分中,我什至不会介绍像 Rapid7、Qualys 或 Nessus 这样的 Generalist DAST,它们不测试应用程序层,而只测试网络层;我将重点关注用于测试 API 的 DAST。

1. DAST暴力请求未通过数据验证层

虽然 DAST 理论上是唯一具有完美时机和最有效的“左移”安全解决方案的解决方案,但它也有自己的一系列问题:

当前的 DAST 解决方案不够充分;他们生成毫无意义的请求。他们采用暴力模糊测试。在最好的情况下,它们采用架构(例如 REST API 的 OpenAPI 规范)作为输入来发送正确类型的数据。

然而,仅仅因为标记为电子邮件的字段被标记为字符串并不意味着发送无意义的字符串(例如r4d0omFu!1=1发送到电子邮件字段)是合乎逻辑的。

因此,DAST 中的请求不会通过数据验证层,因此它们会在没有进行任何测试的情况下被卡住。

这是OWASP ZAP(现在的 ZAP)等非常传统的解决方案的主要问题。如今,最著名的 API DAST 供应商只是包装 OWASP ZAP:StackHawk、Checkmarkx、Gitlab、Traceable 等 OWASP ZAP 和第三方服务。

实际上,正如我们的 Escape 与 ZAP 比较(即将在另一篇文章中推出)所证明的那样,大约 0% 的应用程序解析器被 OWASP ZAP 及其来自业务逻辑 POV 的包装器覆盖,这使得它们与 Rapid7、Qualys 一样无效,和 Nessus 用于测试 API。

2. DAST很笨,不会自动执行业务逻辑安全测试

正如微软的 Marina Polishuk 所强调的那样(她的论文“REST-ler:自动智能 REST API 模糊测试”是第一篇认真详细说明此问题的论文),DAST 无法生成和执行与业务逻辑一致的合法请求序列 API。

例如,DAST 无法充分测试特定端点,GET /user/{id}因为它不理解该端点应该{id}源自它之前创建或遇到的用户。因此,在这种情况下无法测试复杂的攻击场景。再次强调,OWASP ZAP 在这方面完全失败了。

有些工具(例如 Nuclei 或 bChecks)可以协助 API 业务逻辑,但不是自动的!事实上,这些解决方案更适合使用简单的指纹技术或手动复杂的业务逻辑(使用硬编码检查)自动评估应用程序的表面。最近的解决方案(例如 Akto)只是 Nuclei 等开源工具的包装。

特别是,Nuclei 和 bChecks 需要手动维护您的测试。这种方法与安全环境不太相符:由于应用程序每天更新,检查是否也应该每天更新和维护?谁负责在组织内实施和维护安全测试?正确评估应用程序及其业务逻辑的安全性需要评估数百种不同安全漏洞的数千种场景。

这将需要每天在每次更新时为每个 API 编写和维护无限数量的手动检查,适应 API 的新用例,每天了解新的 API 安全漏洞以支持新漏洞,实施和调整支票等,这是不现实的。

3.如果DAST声称评估业务逻辑,它需要您组织的数据

一些解决方案声称能够评估 API 的业务逻辑。然而,要做到这一点,他们需要在您的生产环境中有一个代理*,使用您组织的私有数据捕获所有流量和重播请求。

注意:让我们就该上下文中代理的定义达成一致。在 Escape,我们将代理视为安装在客户环境中的任何软件,旨在观察该环境的一部分或与该环境的一部分进行交互。因此,声称“无需代理即可部署[但]只是获取[组织] API流量的副本并将元数据发送到[其服务器]”的解决方案需要代理。

申明“通过与现有安全基础设施集成并实时阻止攻击来修复 API 漏洞,所有这些都无需部署代理或需要网络修改”的解决方案 1) 确实需要代理,2) 不执行业务逻辑测试,而是执行运行时保护。

然后,他们需要访问生产中的客户数据,出于隐私原因,这是侵入性的、过于复杂和危险的。

如果您考虑一下:每次部署测试应用程序的目标是特别关注应用程序的新功能。在这种情况下,使用流量没有任何意义,因为这些新功能尚未暴露给任何流量。 

4. 没有 DAST 真正支持 GraphQL 和其他现代 API

GraphQL 确实非常具体。市场上所有声称支持 GraphQL 的 DAST 解决方案实际上都像 OWASP ZAP 对待 REST API 一样对待 GraphQL。

这意味着没有解决方案尝试发送根据底层 API 的业务逻辑有意义的请求序列。特别是在 GraphQL 中,这些解决方案发送的请求没有考虑图特定的功能,如深度查询、递归查询、别名、批处理、片段等,() 也没有考虑其图性质隐含的众多访问控制问题。 

其他 API 类型如 gRPC、Websockets 等也有其特殊性,目前市场上还没有构建 DAST 解决方案来深入测试这些 API 类型的业务逻辑。

业务逻辑安全测试的本质转变

总之,我们所知道的用于 API 安全测试的 DAST 工具的时代即将结束。正如本文所强调的,DAST 在有效解决现代应用程序漏洞(特别是那些根植于业务逻辑的漏洞)方面的局限性已经变得越来越明显。

虽然 DAST 工具过去已经达到了其目的,但它们无法自动生成与 API 业务逻辑一致的有意义的流量,这凸显了对更先进方法的需求。

Escape 专有的业务逻辑安全测试算法植根于反馈驱动语义 API 探索 (FDSAE) 原则,为下一代安全测试方法铺平了道路。

通过自动生成针对每个 API 的具体细微差别而定制的合法流量,Escape 的解决方案使安全专业人员能够有效应对现代应用程序的挑战和复杂性。

随着公司继续在其开发流程中优先考虑安全性,业务逻辑安全测试无疑将成为确保 API 安全的中心舞台。

这篇关于DAST 已死,为何业务逻辑安全测试成为焦点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/922632

相关文章

JAVA保证HashMap线程安全的几种方式

《JAVA保证HashMap线程安全的几种方式》HashMap是线程不安全的,这意味着如果多个线程并发地访问和修改同一个HashMap实例,可能会导致数据不一致和其他线程安全问题,本文主要介绍了JAV... 目录1. 使用 Collections.synchronizedMap2. 使用 Concurren

Python从零打造高安全密码管理器

《Python从零打造高安全密码管理器》在数字化时代,每人平均需要管理近百个账号密码,本文将带大家深入剖析一个基于Python的高安全性密码管理器实现方案,感兴趣的小伙伴可以参考一下... 目录一、前言:为什么我们需要专属密码管理器二、系统架构设计2.1 安全加密体系2.2 密码强度策略三、核心功能实现详解

最新Spring Security实战教程之Spring Security安全框架指南

《最新SpringSecurity实战教程之SpringSecurity安全框架指南》SpringSecurity是Spring生态系统中的核心组件,提供认证、授权和防护机制,以保护应用免受各种安... 目录前言什么是Spring Security?同类框架对比Spring Security典型应用场景传统

最新Spring Security实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)

《最新SpringSecurity实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)》本章节介绍了如何通过SpringSecurity实现从配置自定义登录页面、表单登录处理逻辑的配置,并简单模拟... 目录前言改造准备开始登录页改造自定义用户名密码登陆成功失败跳转问题自定义登出前后端分离适配方案结语前言

Java逻辑运算符之&&、|| 与&、 |的区别及应用

《Java逻辑运算符之&&、||与&、|的区别及应用》:本文主要介绍Java逻辑运算符之&&、||与&、|的区别及应用的相关资料,分别是&&、||与&、|,并探讨了它们在不同应用场景中... 目录前言一、基本概念与运算符介绍二、短路与与非短路与:&& 与 & 的区别1. &&:短路与(AND)2. &:非短

SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程

《SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程》本文详细介绍了如何在虚拟机和宝塔面板中安装RabbitMQ,并使用Java代码实现消息的发送和接收,通过异步通讯,可以优化... 目录一、RabbitMQ安装二、启动RabbitMQ三、javascript编写Java代码1、引入

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

浅析Rust多线程中如何安全的使用变量

《浅析Rust多线程中如何安全的使用变量》这篇文章主要为大家详细介绍了Rust如何在线程的闭包中安全的使用变量,包括共享变量和修改变量,文中的示例代码讲解详细,有需要的小伙伴可以参考下... 目录1. 向线程传递变量2. 多线程共享变量引用3. 多线程中修改变量4. 总结在Rust语言中,一个既引人入胜又可

C#实现WinForm控件焦点的获取与失去

《C#实现WinForm控件焦点的获取与失去》在一个数据输入表单中,当用户从一个文本框切换到另一个文本框时,需要准确地判断焦点的转移,以便进行数据验证、提示信息显示等操作,本文将探讨Winform控件... 目录前言获取焦点改变TabIndex属性值调用Focus方法失去焦点总结最后前言在一个数据输入表单

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11