关于Checkmarx、CodeQL和Semgrep的测试结果比较

news2024/12/23 11:22:11

关于Checkmarx、CodeQL和Semgrep的测试结果比较

随着SAST工具的不断的推陈出新,为了比较一些新的工具是否能够提供更好的扫描结果,针对Checkmarx、CodeQL以及Semgrep几个工具进行了测试评估,具体的评估结果仅供参考。本文列列举了工具的各个方面的比较,比较的方面和结果如下。

一、关于语言的支持

几种工具关于语言的支持下:

Checkmarx

CodeQL

Semgrep

Java

Java

Java

JavaScript

JavaScript

JavaScript

Typescript

TypeScript

TypeScript

Python

Python

Python

Scala

Scala

GO

GO

GO

Kotlin

Kotlin

Kotlin

C

C

C

C++

C++

C++

C#

C#

PHP

PHP

Apex

Apex

Ruby

Ruby

Ruby

VB.NET

VBScript

PL\SQL

HTML5

ASP.NET

ASP

VB6

Perl

Android (Java)

Objective-C

Swift

Swift

Swift

Groovy

Cobol

RPG

Dart

Lua

Rust

Rust

JSX

Generic

JSON

Terraform

Elixir

通过比较可以了解到,Checkmarx作为老牌工具对语言的支持还是很多的。Semgrep对语言的支持也比较多,但是,有些语言的规则比较少,有的语言的规则甚至少的可怜。

二、关于框架的支持

对于SAST工具而言,对框架的支持非常重要,它可以有效地发现基于某些框架的漏洞,而且现在系统的开发为了提高开发效率,基本上没有从0开始的,都是基于框架的,因此,对于框架的支持程度对于扫描结果的影响很大。根据三种工具的官方网站关于框架的支持的描述,如下:

工具

对于框架的支持

Checkmarx

SAST Scanner - Supported Languages and Frameworks

CodeQL

Supported languages and frameworks — CodeQL

Semgrep

N/A

目前没有找到关于Semgrep的关于框架的支持的详细信息,通过了解,也只支持了一些最常用的框架,例如:Java的spring MVC/Boot,针对ReactJS,JPA,JQuery,Node.js,handlebars,Ajax也只是有限地支持,还有很多框架不支持,例如:struts,Ibatis,MyBatis等。这么多框架不支持是个硬伤,必然会导致很多误报和漏报,如果想要改进这方面的问题,就必须要定制化规则,这就需要花费一定的功夫了。

三、是否依赖编译

关于是否依赖编译这一点是非常重要的,第一点就是如果不依赖编译,就不需要根据项目的需求使用对应的编译环境;第二点就是在CI里,可以和Build的过程并行进行,缩短整个CI flow的时间。根据调查Checkmarx和Semgrep都不依赖编译,CodeQL目前还依赖编译,不过跟他们的支持人员确认的结果是:不依赖编译的功能正在研发,不过,不知道何时才会发布。

四,OWASP Benchmark的测试结果

关于OWASP Benchmark的详细介绍请参考:https://owasp.org/www-project-benchmark/,这里不作额外的介绍。根据测试得到工具的Benchmark的分述如下:

Benchmark的分数排序如下:

       Checkmarx > Semgrep > CodeQL

虽然Benchmark的分数并不一定100&说明一个工具的好坏,不排除某些工具针对它做了针对性的改进,但是,它也一定程度上反映了一个工具的扫描能力和扫描效果。因为它不仅仅根据误报来评测,它也会针对漏报进行评估。

五、误报问题

误报问题对几个工具而言,针对开源软件,像WebGoat,bwapp      juice-shop等测试的而结果还不错。不过,针对非开源软件的测试就不尽如人意,误报有些高。

六、漏报问题

漏报问题是根据几个工具的扫描结果进行比较,而得出的。例如:A工具报了20个,B工具报了10个,C工具报了5个,经过确认之后,报的问题都是有效的。那么很明显,B工具的漏报比A工具的要高,C的工具就比B工具的漏报高。针对漏报而言,随机选择了几个项目,包含Java,Python和TypeScript,比较结果是:CodeQL>Semgrep>Checkmarx,这里可能存在一定的随机性,随着挑选的项目的不同,测试结果可能不一样,仅供参考。

七、安全问题的甄别(Triage)

在安全问题的识别和分类处理时,Checkmarx由于扫描源码并且上传源码,所以,可以在UI里根据数据流切换到不同的具体代码,对于识别一个问题是否是误报,比较容易。

CodeQL是通过显示不同的数据流里的代码片段来显示问题代码的上下文,也可以比较容易看清楚数据的流向与相关的代码。

Semgrep是在本地扫描,然后将扫描的结果发送到Semgrep的云上,通过Web Portal再显示扫描结果,虽然在数据流里显示了具体的文件与行号,但是,由于不能和源代码联动,在做甄别问题时,就显得比较费劲,如果上传代码到云上,又有泄露的安全风险。

八、是否支持增量扫描

Checkmarx是支持增量扫描的,在使用CLI时,添加一个参数—Incremental True即可,在UI上也可以选择是Full Scam还是Incremental Scam,不过,在代码改动量达到一个阈值时,就会自动转成全量扫描。

CodeQL是自动默认全是全量扫描,不支持增量扫描。

Semgrep是支持增量扫描的,而且,在扫描结果也支持增量输出,在CLI添加 —incremental-output参数即可。

九、基于AI的AutoFix

Checkmarx目前只在VS Code的Plugin里实现了基于AI的AutoFix。CodeQL也实现了基于AI的Autofix,不过,只在PR(Pull Request)里实现了,Semgrep也实现了AutoFix,同样,也只在Github的PR里才能使用。虽然都是基于ChatGPT4实现的,至于具体结果上有什么不同,还尚未验证。

由于基于AI的AutoFIx,可以方便指导开发人员快速修复问题,对于一些简单的安全问题,可以实现一键修复。它可以提高开发修复安全问题的效果和效率。

十、与CI的集成

三种工具都提供了CLI工具,都可以在CI里通过调用CLI的方式来集成。如果使用Github,那么,就可以直接在Github的Action里直接调用CodeQL就比较方便。总体而言,关于CI的集成都可以比较容易集成。

十一、扫描速度

如果要集成到CI里,对工具的扫描速度要求还是比较高的,特别是一些比较大的repo,几百万行的代码,如果扫描时间太久,会Block CI的流程。三种工具的测试结果是CodeQL和Semgrep还是比较快的,Checkmarx就显得慢一些,不过,由于支持增量扫描,充分利用增量扫描的特性,也可以将扫描时间缩短很多。

十二、价格

除了工具的功能之外,还有一个很重要的因素就是性价比了,Semgrep是基于开发者的人数来计算的,网站报价40$/人/月,如果企业合作,应该还可以谈一个相对优惠的价格;Checkmarx是基于扫描的项目+开发者人数计算的;CodeQL的报价可以参考:https://github.com/pricing,企业版19.25¥$/人/月。

当然选择一个工具需要综合考虑所有的方面,才能选择一个相对更加适合企业的工具。即使综合考虑各个方面之后做出了选择,在实际使用的过程中还是会遇到各种问题,这时,厂家能够及时提供有效的支持就很重要。

最后一个也是最重要的因素就是:厂家是否能够提供有效的渠道来及时解决使用中遇到的问题。例如:误报高,可以帮助你调优规则;使用的框架暂时不在支持之列,能够及时提供新版本支持该框架;产品使用时挂了,能够及时给出临时解决方案绕过问题等等。

参考:

SAST Scanner - Supported Languages and Frameworks

Supported languages and frameworks — CodeQL

Supported languages | Semgrep

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1648245.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SAP生产订单常用状态以及

常用系统状态: 状态 状态 CRTD 已建立 REL 已核发 CNF 已确认 PCNF 已部份确认 DLV 已交货 DLT 删除指示码 LKD 已锁住 TECO 技术完成 GMPS 已发料 关闭 关闭 工单结案前的生产报表分析 路径:后勤系统- 生产- 现场控制- 信息系统-订单信息系…

使用PyQt5设计系统登录界面—了解界面布局

前言:自学的过程中充分认识到网络搜索的重要性,有时候一篇通俗易懂的文章会让我这种入门级的小白更易上手,俗话说“开头难,难开头”,只要开了一个好头就不怕知难而退。 如何安装QT Designer界面设计所需要的环境 1. 如…

服务器数据恢复—ESXi虚拟机中MySQL数据库数据恢复案例

服务器数据恢复环境: 某品牌EVA某型号存储中部署VMware ESXi虚拟化平台,数据盘(精简模式)快照数据盘,虚拟机中有mysql数据库。 服务器故障: 机房意外断电导致该存储中的一台VMware虚拟机无法启动&#xff0…

网络安全之动态路由入门

动态路由协议有几种:RIP,OSPF,EIGRP,ISIS,BGP 动态路由工作原理: 例如: 若A区域运行的协议与B中的不同,数据从1到4走A区域还是走B区域,则看A,B两区域的优先级(priority preference或AD——管理距离&#…

数据流转的艺术:深度解析tee命令的应用技巧

欢迎来到我的博客,代码的世界里,每一行都是一个故事 数据流转的艺术:深度解析tee命令的应用技巧 前言tee命令简介tee命令的基本用法tee命令的高级功能 前言 在Linux的世界里,有一位不太引人注意但却异常强大的命令,那…

VBA随机取数在Excel中的应用---10以内加法出题及计算得分

VBA随机取数在Excel中的应用---10以内加法出题及阅卷 小学生加减乘除的计算,只要不是应用题,完全可以用VBA随机取数解决,甚至连阅卷都可以用VBA操作。现在写一个最简单的,10以内的加法。 用到两个关键点:随机取数Int(0 + 11 * Rnd())和字典去重(Scripting.Dictionary) …

红黑树(RBTree)认识总结

一、认识红黑树 1.1 什么是红黑树? 红黑树是一种二叉搜索树,与普通搜索树不同的是,在每个节点上增加一个“颜色”变量 —— RED / BLACK 。 通过对各个节点颜色的限制,确保从 根 到 NIL ,没有一条路径会比其他路径长出…

论文| Visual place recognition: A survey from deep learning perspective

2021-Visual place recognition: A survey from deep learning perspective

anconda创建虚拟环境,使用虚拟环境(基于win平台)

假设已经安装了anconda,打开anaconda的 shell。 查看已存在的虚拟环境,base是默认的,不用理会,后面的yolov5就是用户创建的 #查看有那些虚拟环境 (base) PS C:\Users\x> conda info -e # conda environments: # base …

hadoop---基于Hive的数据仓库相关函数机制及其优化方案

Hive相关函数&#xff08;部分&#xff09;&#xff1a; if函数: 作用: 用于进行逻辑判断操作 语法: if(条件, true返回信息,false返回信息) 注意: if函数支持嵌套使用 select if(aa,’bbbb’,111) fromlxw_dual; bbbb select if(1<2,100,200) fromlxw_dual; 200nvl函数:…

Windows平台下Redis通过配置文件解决密码重置问题

Reids会在每次重启服务器后重置通过指令设置的密码&#xff0c;通过修改配置文件中的密码则可以避免这一问题&#xff0c;保证密码的永久有效性。&#xff08;注意点&#xff1a;博主已经配置好了Redis的系统环境变量&#xff0c;所以不用进入到Redis目录下&#xff0c;也能直接…

MYSQL RR隔离级别下无索引更新是否表锁?

最近在MYSQL菜鸟群有群友提问,说他看了某个公众号里面文章说 "MYSQL RR隔离级别下无索引更新会导致表锁! " 他表示疑惑,而且不仅是他,还有很多个她在不同的群里同样表示疑惑! 下面是群友的截图 是啊 MYSQL 以及进化到了8.3.0版本了,普遍都使用5.7和8.0版本.而且还…

运营商实名认证API接口如何对接

运营商实名认证API接口又叫手机号实名认证API接口&#xff0c;根据入参字段不同&#xff0c;分为两类。一类是运营商手机二要素核验API接口&#xff0c;一类是运营商手机三要素核验API接口。运营商手机二要素验证API接口指的是传入姓名及手机号码&#xff0c;通过运营商权威渠道…

FX95GT FX505GT windows 11 触摸板安装

FX95GT FX505GT windows 11 触摸板驱动安装 如果正常使用 exe 文件安装不上&#xff0c;请在 ‘设置’ 》 ‘系统信息 ’》 驱动下载地址 如果正常使用 exe 文件安装不上&#xff0c;请在 ‘设置’ 》 ‘系统信息 ’》 高级系统设置 设备管理 在电脑上点右键&#xff0c;选择…

合肥先进光源束测步进电机控制机箱接线方式

合肥先进光源束测步进电机控制方案介绍 对上篇文里的接线方式做个修订&#xff1a; EtherCat电机控制机箱接线规范 驱动器 控制器 接线方式 使用鸣志 STF05-ECX-H驱动器&#xff0c;每个机箱配8个驱动器使用汇川的H5U-1614MTD etherCat控制器每个驱动器的电源从2分8的分配端子…

GitHub搭建免费博客

一、GitHub仓库准备 ​ 搭建博客需要准备两个仓库。一个存放博客图床的仓库&#xff0c;另一个存放博客网站的仓库。 1.1、图床创建 新建仓库 第一步&#xff1a; ​ 第二步&#xff1a; 生成Token令牌 点击右上角头像->Settings->下拉&#xff0c;直到左侧到底&#…

Tmux工具使用案例

Tmux工具使用案例 连接linux一般使用ssh&#xff0c;当ssh会话中需要长时间执行命令时&#xff0c;为了避免命令不受ssh会话影响&#xff0c;除了可以将命令通过nohup <cmd> &等方法放到后台执行外&#xff0c;也可以利用Tmux这个工具解绑SSH会话与执行命令&#xff…

【Python文本数据系列】使用TextCNN模型进行文本情感分析(案例+源码)

这是我的第273篇原创文章。 一、引言 当使用深度学习处理文本分类任务时&#xff0c;遵循的流程如下&#xff1a; 首先&#xff0c;准备数据&#xff0c;而且数据量要大&#xff0c;才能发挥神经网络的优势&#xff1b; 再者&#xff0c;进行文本预处理&#xff0c;将文本数据…

Adobe-Premiere-CEP 扩展 入门-视频剪辑-去气口插件-Silence Remover

短视频&#xff0c;这两年比较火&#xff0c;不要再问为什么用Premiere&#xff0c;非常难用&#xff0c;为什么不用某影&#xff0c;某些国内软件非常接地气简单&#xff0c;又例如某音资深的视频短编辑就很好用了。。。 Premiere二次开发调试难&#xff0c;不如自己搞个cons…

(41)5.6-5.7数据结构(栈和队列的应用)

1.栈在括号匹配中的应用 #define _CRT_SECURE_NO_WARNINGS #define MaxSize 10 typedef struct { char data[MaxSize];//静态数组存放栈中元素 int top; //栈顶指针 }SqStack;//初始化栈 void InitStack(SqStack& S);//判断栈是否为空 bool StackEmpty(SqStack S…