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。