C/C++开源静态代码分析及验证工具介绍

举报
maijun 发表于 2023/06/11 09:53:52 2023/06/11
【摘要】 本文介绍部分业界知名的面向 C/C++ 的开源的静态代码分析工具或者框架,部分比较好的程序验证工具也会收集。

本文列出部分C/C++静态代码分析及验证工具,会不断完善(主要目的是为了 ① 自研静态代码分析框架,或者 ② 提升检查检查能力或者精度,或者 ③ 在企业内直接选择开源工具集成或者优化使用而收集的,部分小众,或者没有太大参考价值的,就不收集了)。

工具

开源协议

基础框架

检查算法

基本情况介绍

Cooddy GPL v3.0 clang 自底向上的数据流+约束求解

该框架是华为开源的静态代码分析工具,基于clang生成自研的AST之后,所有的分析都在自研AST上实现,基于自底向上的分析方法,能够有效节省分析时长。推荐指数:5颗星(自底向上的数据流分析、函数摘要的建立等对商业工具有非常大的参考价值)

vast Apache2.0 clang

该框架基于LLVM中的MLIR来实现的一个分析框架,面向实现一款商用的SAST工具,我个人并不看好基于纯AST或者完全基于LLVM IR来开发(可以看我之前针对IR的解释),而MLIR就是处于两个中间的一种IR形式。所以虽然当前该框架还不是很成熟,我仍然将其列在靠前的位置。

Clang Static Analyzer Apache2.0 clang 符号执行 当前最火的一款静态代码分析工具,是llvm-project中的一个模块,很多公司内部自研或者商用的静态代码分析工具,都是基于该检查框架扩展的。推荐指数:5颗星(养活了一大堆的做静态代码分析的公司内部团队或者初创公司)
clang-tidy Apache2.0 clang AST 也是 llvm-project 中的一个模块,主要用于做基于AST的风格类检查,提供了简易扩展接口,可以非常方便地扩展,同时,可以拉起clang static analyzer 的检查,也是企业自研使用非常广的一个框架。推荐指数:5颗星(养活了一大堆的做静态代码分析的公司团队)
Klee NCSA llvm 符号执行 提到基于 llvm 的符号执行引擎,绝对绕不开 klee,klee 可以自动生成测试用例,同时,klee可以检查漏洞,自发布起,就有大量的论文和研究基于klee展开。虽然有些资料将klee归为动态执行引擎,但是不管怎么样,提到程序分析,到哪里都要klee的一席之地。推荐指数:5颗星(用例生成、缺陷检查、误报确认)
IKOS NASA1.3 llvm 抽象解释 将 llvm IR 转换为 AR 格式之后,使用 APRON 进行抽象解释运算,当前还在非常活跃地进行开发。推荐指数:5颗星(可以结合实际场景好好学习一下抽象解释是什么)
Phasar MIT llvm IFDS/IDE 基于llvm IR,实现了一套 IFDS/IDE数据流分析框架,同时还支持了一套跨过程的数据流分析框架,是一个非常好的基础框架,只是当前上面没有成熟的检查实现,需要自己以Phasar作为库自己实现。推荐指数:5颗星(我喜欢拿它当学习材料,支持不少的基础框架)
SVF GPL v3.0 llvm
该框架基于llvm IR,提供了 PAG、SVFG 等图及相关遍历方式,最大的贡献,就是实现了一系列的指针分析方法,也是目前业界基于 llvm 实现的指针分析最好的框架之一。推荐指数:5颗星(指针分析实现业界最强)
cppcheck GPL v3.0
AST 业界使用非常火的一款静态代码分析工具,不基于编译,是企业内部集成和扩展的相当多的一款工具。而且因为不基于编译,所以使用方便、更易集成,当然,检查能力和精度无法跟上面提到的基于编译的clang-tidy、csa相比。推荐指数:5颗星(企业内部轻量级静态检查首选工具,方便扩展,也养活了一大堆企业内部的静态代码检查团队)
CodeChecker Apache2.0

这款工具集成了 clang-tidy、clang static analyzer、cppcheck 等工具,并且增加了编译捕获、告警可视化等功能,为当前很多初创公司做所谓的SAST工具的经典案例。推荐指数:5颗星(很多企业内部安全部门或者初创公司做产品抄作业的首选)
SonarQube LGPL

这个工具可以很方便地集成其他插件,本身该工具的开源版本自己不提供c/c++检查能力,但是有个开源插件sonar-cxx可以集成其他的能力,方便使用,自己的c/c++检查能力,需要采购商用版本,而且能力也并不突出。推荐指数:5颗星(不是给它自己的检查能力的,而是给它超强的工具集成能力)
Infer MIT

程序验证、抽象解释

说老实话,我对这款工具神往已久,只是对OCaml不是很熟悉,所以没有结合代码细研究实现。不过大家有兴趣可以看看他们的论文。推荐指数:5颗星(基于OCaml实现,就是要设置点儿门槛)
CodeQL 非标协议

最大的贡献,是提供了一套看起来非常高大上的DSL实现(目前我知道的能提供DSL的工具,没有能跟它比的),可以简化规则开发,也是该工具的亮点,内部的实现机制,资料来看,是基于Datalog实现,工具的论文,也都是围绕它的DSL(QL)和Datalog展开的。推荐指数:5颗星(牛x的DSL实现和业界少有的基于Datalog实现的检查工具)
Joern Apache2.0
程序属性图 最大的贡献是提供了一个代码属性图,给静态代码分析工具实现开拓了一个新的分支,后续基于该方向的论文和工具也变多了。推荐指数:5颗星(代码属性图领域的开拓者)
SMACK MIT llvm + Boogie 程序验证 一种基于 llvm 的程序验证工具,将 llvm IR 转换成 Boogie 的 IVL 后,进行验证。推荐指数:5颗星(程序验证工具)


































【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。