SAST、DAST和IAST之间的区别是什么?
SAST有什么好处?SAST和DAST之间有什么区别?这些词都是什么意思!?
SAST有什么好处?SAST和DAST之间有什么区别?什么是IAST?这些词都是什么意思!?让我们在应用安全测试(AST)的主要类型的概述中谈论这个问题和更多。
信息性安全
在我们开始破译这些术语之前,让我们弄清楚为什么我们需要安全测试。在现代社会中,软件几乎无处不在地集成到自动化流程中,应用程序中的代码行数量在增加。因此,可能的漏洞和错误的数量也在增加。这就产生了对源代码进行有效检查和测试的需要。
根据Positive Technologies在2019年进行的研究,所有检测到的漏洞中有82%是由代码编写阶段的错误造成的。专家们的结论是,平均每两个系统就有一个具有高度风险的安全缺陷。这个问题的主要原因之一是在编写阶段缺乏对漏洞的代码检查。另外,其中一个不太明显的因素是,开发人员对安全问题不太重视。他们更关注应用程序的功能。
尽管如此,漏洞数量的增加和攻击者利用这些漏洞的可能性迫使应用安全市场迅速发展。Grand View Research的一项研究结果充分证明了这一事实。

图1.2014-2025年按终端用途划分的美国应用安全市场(百万美元)
有一种观点认为,并非所有的漏洞都有潜在的危险。其中一些可能在源代码中存在多年,但从未导致任何坏事。为了确定修复漏洞的优先次序,开发人员依靠CVSS(通用漏洞评分系统)标准,但是:
- 它对各种开发领域并不通用。
- 一些网络安全专家认为这个系统已经过时,因此是危险的。
是的,我们可以说,这些年来,代码测试的质量一直在提高。这是因为专门用于测试代码的各种工具也被开发出来了。旧的漏洞被修复,但新的漏洞又出现。此外,攻击者也开发了检测不正确代码和漏洞的工具和方法,以便他们能够进一步利用它们。
他们也想出了攻击代码的新方法。我将从文章的主题出发,告诉你一个有趣的例子。2021年11月,剑桥大学研究小组公布了对一种新的木马源攻击的分析结果。这种攻击可能在代码编写阶段玷污软件。木马源攻击是基于在代码的注释中插入的特殊Unicode字符。这些字符改变了双向文本的显示方式。当这种控制字符被插入到注释中时,文本的某些部分将从左到右显示,而其他部分则从右到左。因此,如果攻击者在一个字符串中结合了不同文字方向的字符串,从右到左显示的文字片段可能会与现有的从左到右的文字重叠。
这种方法允许攻击者在代码中添加一个恶意的结构,并使审查代码的人看不到带有这个结构的文本。为了做到这一点,攻击者将希伯来语/阿拉伯语的字符插入到注释或字面内。结果是,完全不同的字符与恶意插入的字符重叠。这样的代码在语义上仍然是正确的,但会被解释和呈现出不同的效果。你可以在文章中阅读更多关于这个问题的内容。"引入隐形漏洞的木马源攻击"。
被污染的代码会导致严重的损失--从个人数据的泄漏到卫星直接落在决定不测试代码漏洞的开发者的房子上。
重要的是要明白,安全问题不仅会给公司带来经济上的损失,也会带来声誉上的损失。如果有一种诱惑,那就是不去理会,"随波逐流 "地解决这个问题,那么我强烈建议阅读克莱斯勒吉普车切诺基的故事,它在行驶过程中就被黑了。
如果你想阅读其他关于信息安全的研究论文,你可以阅读Gartner Magic Quadrant的报告。
AST
现在让我们回到我们的术语上。作为对永无止境的威胁和不断增长的代码库的回应,开发人员使用AST(应用安全测试) 工具。AST是一个通过识别源代码中的漏洞来加强应用安全的过程。最初,这种测试是手动的。然而,由于代码行数的增加和第三方开放源代码的使用,这些代码也需要检查,因此需要将这个过程自动化。
测试工具的使用是DevSecOps概念的一个重要组成部分。现在让我们更详细地检查它。在透明市场研究公司的报告《应用安全测试市场--全球行业分析、规模、份额、增长、趋势和2017-2025年预测》中,应用安全测试市场被划分为以下产品类别:
- 静态应用安全测试(SAST)
- 动态应用安全测试(DAST)
- 互动应用安全测试(IAST)
- 移动应用安全测试(我们不会在本文中检查这个类别)
接下来,我们将检查这三种类型的AST,它们的优点和缺点。请注意,本文不是对特定产品的广告,而是一个具有一般信息的概述。
SAST
尽管你可以很容易地在谷歌上找到任何缩写的定义,但我还是会在这篇文章中解释它们。SAST (静态应用安全测试) 是一个测试应用程序源代码中的错误和漏洞的过程。应用程序是通过静态分析进行测试的。
SAST的主要目的是尽量减少开发和安全之间的差距。很久以前,当SAST技术刚刚开始发展时,使用SAST的工作过程是这样的:
- 安全专家测试代码的漏洞。然后他们把初步扫描的结果传给开发人员,让他们修复代码。
- 在收到 "安全人员 "的结果后,开发人员要处理大量不明确的结果和假阳性,这些结果经常出现在SDLS(软件开发生命周期)的后期阶段。
幸运的是,现代SAST技术大大简化了这一过程,使开发人员能够测试代码。
SAST理所当然地被认为是在应用程序的源代码中寻找漏洞的主要选择之一。静态分析是在代码编写阶段进行的。这使开发人员能够在产品开发的早期阶段发现错误和漏洞,并减少消除它们的成本。此外,SAST适用于大多数编程语言。
SAST的其他优点包括:
- 能够将静态分析整合到开发过程中,在IDE中进行静态分析
- 检测关键漏洞,如缓冲区溢出、SQL注入、跨站脚本(XSS)和其他漏洞
- 还有最酷的一项--指出可疑代码片段的确切位置。这对于拥有数百、数千和数百万代码行的大型项目尤其重要。
然而,SAST并不都是玫瑰花--它也有缺点。其中一个主要的缺点是有大量的假阳性结果。正因为如此,有一种风险,即检查这样的结果将需要很长的时间。静态分析器的开发者密切关注假阳性,并提出了消除它们的解决方案。
源代码中的潜在漏洞可能导致严重的安全风险。使用SAST工具可以减少这些风险,并有助于控制开发的质量。
世界市场上有许多不同的分析器--既有安全领域的知名厂商,也有只从事SAST开发的小众厂商。
- Checkmarx
- PVS-Studio
- Micro Focus
- 新思科技(Synopsys)
- 芯片
- 以及其他
我不是在暗示什么,但你可以评估PVS-Studio分析器,并与其他SAST工具进行比较。
DAST
上一节介绍了静态测试,这一节将介绍动态测试。DAST(动态应用安全测试) 是另一个测试应用程序的过程。DAST模仿恶意的外部攻击,利用常见的漏洞。
DAST的主要任务是在漏洞被开发人员以外的人发现之前检测它们。这种工具通过检查访问点和模拟用户体验来寻找问题所在。动态测试允许开发人员识别由各种代码注入查询(例如,到一个网页)或与不正确的配置(最简单的例子是用一个空密码进行认证)引起的漏洞。
SAST和DAST的区别是什么?缺少对源代码的访问。
让我告诉你DAST的优点:
- 与SAST不同,它允许开发人员在运行时检测问题。这些可能是认证和网络配置的缺陷,或者是登录后才出现的问题。
- 发现用户在使用应用程序时发生的错误
- 允许开发人员测试应用程序并找出常规测试没有发现的缺陷
- DAST不与编程语言相联系。
最初,DAST工具的使用频率低于静态分析。但由于对安全的要求越来越高,以及智能手机的高动态传播,其中有越来越多的与机密信息有关的应用程序,DAST解决方案的份额已经大大增加,并继续增长。IndustryARC进行了一项名为"动态应用安全测试市场 - 预测(2020-2025)"的研究。根据它,DAST解决方案的市场平均每年增加17.4%。
根据IndustryARC的数据,这一领域的主要公司有:
- WhiteHat Security
- Synopsys
- Veracode
- IBM
- 埃森哲
- 普拉迪奥安全解决方案
- 信任波控股
- 以及其他
SAST vs. DAST
你认为,这些AST类型中哪一个是最常见的?如果你说SAST显然更常见,你会错的。但如果你说DAST,你又会错了。
根据Grand View Research关于分析仪类型在全球市场上的销售份额分布的数据,SAST和DAST的份额几乎相等。
为什么这两种类型的AST是最常见的?首先,它们存在的时间比其他的长,许多最初的缺点已经被解决了,大多数专家有信心使用它们。
我们能说这两种工具是一样的吗?不能。
为了提高源代码和整个产品的安全性,开发人员同时使用SAST和DAST,因为这两种方法可以中和彼此的弱点:
- DAST与不同的输入数据集一起工作,这使得有可能识别它们不正确/不安全的处理。
- SAST善于检测源代码中的错误,但会发出大量的假阳性。
- DAST技术不允许开发人员精确到代码的行数来标记编码错误。
- SAST很容易集成到项目的工作中,并使流程自动化。这有助于消除一些与测试代码库的安全有关的问题。
- DAST理解函数调用和参数。
- SAST可以与函数调用和参数一起工作,但只是部分的。
最重要的是要记住,对开发人员来说,重要的不是报告的数量,而是对发现的漏洞的检查和修复。
IAST
所以,现在我们知道什么是SAST和DAST了。但什么是IAST?**IAST(交互式应用安全测试)**是一种相对较新的(与SAST和DAST相比)应用测试类型,主要是检测应用程序代码中的安全问题。交互式测试技术使我们能够在应用程序运行期间从内部对其进行分析。
简单地说:
- SAST在不运行应用程序的情况下对代码进行工作。
- DAST可以与正在运行的应用程序一起工作,但不能接触到代码。
- IAST在一个正在运行的应用程序中与代码一起工作。
IAST监控代码的执行,并寻找可能导致漏洞的特定事件。接下来,这些事件被分析,以检查它们是否一切正常,是否有任何错误已经悄悄地进入。
IAST是作为一种现代解决方案开发的,通过结合测试方法来消除SAST和DAST的缺点。交互式测试技术通过分析流量和应用程序的执行流程,提供实时的安全问题检测。
由于IAST在一个应用程序内工作,它可以分析:
- 应用程序代码
- 数据流
- 配置
- HTTP请求和响应
- 库、框架和其他组件
- 关于内部连接的信息
对所有这些信息的访问使IAST机制能够覆盖更大的代码量,给出更准确的结果,并比SAST或DAST检查更广泛的安全规则。
此外,IAST是如此准确,以至于它可以检测到更多的现有漏洞。为了清楚起见,我将举一个与OWASP基准覆盖率有关的工作例子:
- 一些IAST工具实现了100%的覆盖率,没有假阳性。
- SAST只提供部分检测(不超过OWASP Benchmark的80%),并发出大量的误报。
- DAST工具提供低水平的检测--约为OWASP基准的10-15%。
尽管比SAST和DAST有一定的优越性,但交互式安全测试也有缺点。
它的主要缺点之一是,IAST工具可能会减慢应用程序。事实上,代理作为额外的工具,这导致了代码性能的下降。
准备输入数据和工作场景,让你实现高代码覆盖率也是非常困难的。因此,在理论上,IAST允许你覆盖100%的代码,但事实上,这可能是困难的,而且是劳动密集型的。SAST看起来更有吸引力,因为这些工具会分析程序的所有分支,不管它们执行的概率如何。
总结
应用安全测试是DevSecOps概念中的一个重要部分,在现代的开发世界中我们不能忽视它。我们必须使用AST来检查源代码的漏洞,安全输入,内部系统之间的连接和整合。
最后,我想强调这篇文章的几个重要方面:
- 没有一个通用的解决方案可以确保100%的开发安全。尽管如此,如果你在开发的早期阶段使用测试工具,你将很容易发现潜在的漏洞并防止它们变成真正的安全威胁。
- SAST和DAST并不是相互排斥的工具。在开发的适当阶段联合应用这两种技术将使我们能够实现源代码安全的最佳指标。
- SAST工具被设计为在持续集成中使用。DAST工具经常被误认为不适合自动化,但与这种观点相反,先进的DAST解决方案被许多企业成功用于CI/CD管道。
- 在SDLC中实施IAST往往更复杂,但由于该工具的多功能性,这是很值得的。
- IAST结合了SAST和DAST的优点和缺点。
- AST方法应适用于开发中的任何第三方代码。不能保证第三方组件是安全的,不管它是商业的还是开源的。