1.工具概述

SAST特点

  • 基于源代码进行检测,可支持多种语言,检出率高,但误报率也高

DAST特点

  • 基于流量进行检测,不分语言,不分平台,检出率中,误报率低

  • 分为主动式和被动式,被动式一般来说效果会好一些

IAST特点

  • 基于字节码进行检测,对语言和平台要求高

  • 检出率高,误报率极低

2.功能对比

2.1 功能对比详情

红色为三种检测方式对比中的最差

绿色为三种检测方式对比中的最佳

对比项

SAST

DAST

IAST

开发流程集成

研发阶段集成

测试阶段集成

测试阶段集成

误报率

高

低

极低(利用自定义规则可以控制到0)

测试覆盖度

高

较高,受功能测试覆盖度影响,同时有爬虫覆盖

中,受功能测试覆盖度影响

检测速度

随代码量呈指数增长

随测试用例数量稳定增加

实时检测,基本不用耗时

逻辑漏洞检测

不支持

支持部分

可以支持(使用较复杂)

漏洞检出率

高

中

较高

漏洞检出率因素

与检测策略相关,企业可在当前数据流基础上制定策略

与测试payload覆盖度相关,企业自身可轻易优化和扩展

与检测策略相关,企业可在当前数据流基础上制定策略

第三方组件漏洞检测

支持

支持,基于web的指纹识别,效果比较差

支持

使用成本

较高,需要人工排除误报

低,漏洞基本无需人工验证

中,漏洞基本是正确的,但复现比较困难

部署成本

低

低

较高,需要与webserver底层结合

支持语言

多种,不同工具支持的语言不同

不分语言

严格区分语言

支持框架

部分框架,不同工具支持的框架不同

不分框架

严格区分框架

入侵性

无

较高,脏数据

中,需要与webserver结合

风险程度

低

较高,扫挂/脏数据

中,取决于agent的稳定性

漏洞详细度

较高,数据流+代码行数

中,请求

高,请求+数据流+代码行数

2.2 功能对比总结

2.2.1 SAST 功能优劣总结

通过上述表格对比分析

SAST的优势:

  • 漏洞检测:检出率,覆盖度高

  • 部署使用:侵入性小,风险程度低

SAST的劣势:

  • 漏洞检测:误报高,耗时久

  • 部署使用:人工成本高

2.2.2 DAST 功能优劣总结

通过上述表格对比分析

DAST的优势

  • 漏洞检测:可进行逻辑漏洞检测

  • 部署使用:不分语言和框架,漏洞好复现

DAST的劣势

  • 漏洞检测:检出率和第三方框架检测效果较差,漏洞详细度较低

  • 部署使用:入侵性较高,风险程度高

2.2.3 IAST 功能优劣总结

通过上述表格对比分析

IAST的优势

  • 漏洞检测:误报率低,检测速度快,漏洞详细度高

  • 部署使用:人工成本低

IAST的劣势:

  • 漏洞检测:覆盖度较难以保证

  • 部署使用:支持的语言和框架被严格限制

3.效果对比

3.1 效果对比依据

效果对比采用OWASP的benchmark为标准,是比较权威的安全效果评分

列举常见漏洞效果对比,重点需要关注TPR(漏洞检出率),FPR(漏洞误报率)

OWASP benchmark将当前最好的6款商业SAST做了评估,但未具体说明每个工具的评分,匿名评价,结果如下

未将IAST工具纳入对比,黑盒工具中只采用的ZED这款传统扫描器,该扫描器在黑盒工具中属于检测效果中等的,不及AWVS和APPSCAN

3.2 效果对比详情

SAST与DAST

XSS

SQL注入

命令执行

关注TPR(漏洞检出率),FPR(漏洞误报率)

我们可以发现SAST(白盒工具),普遍TRP漏洞检出率较高,但是FPR漏洞误报率,也非常高,在XSS,SQL注入,命令执行,三种漏洞的评估中,白盒审计工具误报率基本都超过了50%,最高的甚至达到102%,误报高于检出,这意味着白盒工具的落地,一定需要有经验的代码审计人员,针对扫描结果排除误报,再将漏洞报告交付给研发,漏洞流程才可以比较好的落地。

我们看到ZED这款黑盒工具的,误报率极低,基本无误报,误报最高也仅仅1.29%,但是在检出率上,仅仅只有40%左右,也符合我们在功能对比时候的结果,由于ZED这款工具是基于爬虫的黑盒工具,而且漏洞检测效果在商业级产品中,属于中等偏下,不及APPSCAN和AWVS,更不及被动式DAST,所以实际灰盒工具的检测分数,应该远高于ZED的检测分数,按照分数评分,应该是高于白盒工具的。

再来看市面上的IAST工具在benchmark中的检测结果

Hdiv detection

在IAST公司对外宣传上来看,基本都是误报率0,检出率100%,不过这个是对着benchmark这个靶场测试的,覆盖度可以保证100%,但是正常情况下,覆盖度会低一些

3.3 效果对比总结

单从测试综合效果上来说,IAST>DAST>SAST

分开来看

  • 覆盖度:SAST>DAST>IAST

  • 检出率:SAST>=IAST>DAST

  • 正确率:IAST>=DAST>SAST

4 总结

如果单从效果来看,IAST效果最佳,误报率几乎为0,检出率较高,漏洞信息多,但是受限于支持的语言和框架,目前java的技术IAST技术比较成熟,被动式IAST还可检测加密和防重放的接口的安全问题,这是一个很重要的优势,在支付等重点场景基本只能靠IAST做工具覆盖或者人工手动渗透,同时测试覆盖度也跟人工测试的覆盖度有极大关系,由于agent与真实webserver集成,稳定性额外重要。

目前成熟的SAST产品支持的语言和框架都比较丰富了,已经不受限于语言和框架,SAST的部署,维护,侵入性,风险度都非常优秀,部署成本最小,维护成本最小,检测效果上由于是扫描源码,覆盖度和检出率可达到最好,但是SAST产品最大的痛点就在于误报问题,误报多导致SAST产品难以落地,太需要人工成本。如果解决了误报问题,SAST产品可完全取代IAST和DAST产品。

被动式DAST产品从本质上来说还是属于DAST,只是使用方式采用交互式,漏洞检出率,误报率,部署成本都属于中等级别,第三方组件检测效果较差,由于脏数据和扫挂服务的问题,导致维护成本较大,用户容易产生抵触心理,并且无法检测加密、签名和做了防重放的请求。

SAST属于编码阶段,IAST和DAST都属于测试阶段,IAST的出现,冲击最大的是同属于测试阶段的DAST类产品,但仅限于通用漏洞。不过大家慢慢应该也感觉到一个趋势,通用漏洞越来越少,框架越来越成熟,在框架中就帮助解决了大部分通用漏洞,业务逻辑漏洞慢慢成为主流,DAST类产品要不被IAST类产品取代,可以发力在业务逻辑漏洞上。

同时,DAST类产品的最大作用,第一是在很多场景下企业拿不到项目源码(比如第三方软件集成或者购买),此时安全问题的自动化发现方案还是DAST最佳,第二是在对大量目标扫描的时候,不分语言不分框架,无需在业务上部署东西,直接接入流量或者开启爬虫,开始扫描即可发现漏洞。

PS:后面两篇文章讲容器安全,一篇讲容器安全领域,一篇讲容器安全天花板级别的产品Twistlock

声明:本文来自安全产品人的赛博空间,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。