国内外主流静态分析类⼯具汇总
笔者从事该软件安全⽅⾯⼯作,在⼯作和学习中收集了国内外⽐较主流的静态分析类⼯具,供⼤家参考。⼤多是资料来⾃于⽹络整理,如有不⾜或⽋缺,还请在评论中指出。我进⾏修正。也欢迎同⾏多多交流。
我使⽤0标注北⼤软件CoBOT,因为他是国内第⼀款基于主流SAST技术的静态分析⼯具,填补了国内在缺陷检测、安全漏洞软件⼯具上的空⽩。值得称赞的⼯具。
0、北⼤软件CoBOT
CoBOT(库博)是北京⼤学软件⼯程中⼼联合北⼤软件企业的研发团队打造的国内⾸款商业化的具有知识产权的代码安全类检测⼯具。CoBOT软件源代码缺陷检测⼯具已通过美国CWE认证的安全产品,具有独⽴知识,打破了国外产品在软件缺陷检测和安全漏洞分析领域的垄断地位,成为国内政府、军⼯、⾦融、互联⽹、汽车制造、船舶制造、电信等领域保证代码安全的⾸选⼯具。
⽬前⽀持C、C++、Java、C#、JS、HTML等超过10种语⾔的检测。能够⽀持静态代码度量、运⾏时缺陷检测和安全漏洞检测。⽀持GJB 5369、GJB 8114、MISRA 2004/2008/2012规范、⽀持CWE/SANS  TOP25和OWASP TOP 10中的⼤部分安全漏洞模式检测。⽀持百万⾏代码跨⽂件检测能⼒,检测效率达到100-200万⾏/⼩时。
⽬前还⽀持开源软件/组件的成分检测和安全漏洞检测。
1、Coverity
美国Synopsys公司产品,国内注册新思科技公司
⽀持C、C++、Java、C#、javascript、Ruby、Python语⾔,⽀持C# 7、VS2017、Clang 4.0、gcc7等编译器
。能够发现导致系统崩溃的缺陷(内存错误、逻辑错误、指针错误等)安全性问题和并发⽅⾯缺陷。
强调了有多种引擎:路径流程引擎(对应控制流图);数据跟踪引擎(整型和布尔型数据分析);统计引擎;过程间调⽤引擎(⽂件或⼯程级函数调⽤关系图);数据传播引擎(过程间调⽤和数据追踪引擎的结合),上下⽂敏感的过程间分析能⼒。类型流程引擎(类层次关系分析);加速引擎(消除冗余路径)、增量分析引擎(通过缓存数据分析变化后的数据)。提出了软件DNA图谱概念。具有⾜够的构建系统和源代码信息,编译器⽣成可执⾏代码的数据,能够从软件DNA图谱构建⼀个执⾏程序。
Coverity提供先进的和可配置的⽤于检测软件语义缺陷和安全隐患的静态源代码分析解决⽅案。
主要不⾜时需要配置编译器。误报率⽐较低,但是漏报率较多,互联⽹企业⽤得较多,但是在联⽹情况下,可能出现泄漏代码问题。华为购买了Coverity,但是出现了安全问题,曾出现升级时代码被传到国外服务器。
2、Klocwork
官⽹:
美国rogue wave公司产产品。
Klocwork⽀持的语⾔种类多,能够分析C、C++和Java代码;
国内⽤的最为⼴泛的静态分析⼯具,由加拿⼤北电于1996年研发,是中国最早的能够检测语义缺陷的静态分析⼯具。2015年版本号为
V10,也就是⼤家常说的K10,⽬前最新版可能是K12
1. 能够发现的软件缺陷种类全⾯,既包括软件质量缺陷,⼜包括安全漏洞⽅⾯的缺陷,还可以分析对软件架构、编程规则的违反情况;
2. 软件分析功能全⾯,既能分析软件的缺陷,⼜能进⾏可视化的架构分析、优化;
3. 能够分析软件的各种度量;
4. 能够提供与多种主流IDE开发环境的集成;
5. 能够分析超⼤型软件(上千万代码⾏)。
6. 在程序⽣成前尽快到问题,意味着之后更少的测试和较少影响成本和进度。它会继续持续集成,只有Klocwork⽀持流⾏的
CI(Continuous Integration)⼯具,执⾏分析提交期间的渐进式代码变化,跟上快速的发布周期。Klocwork在提交之前、提交期间和提交之后识别开发者眼中的关键安全性、可靠性和代码标准问题。
总结
1. ⾮侵⼊式检测
2. 准确率达到90%
3. 描述⾮常清晰,详细的问题产⽣流程跟踪(具体每⼀步骤所涉及的源代码⽂件、⾏数),基本上⼀看就清楚问题的产⽣来源)
4. 跨⽂件/模块的分析能⼒,对于⼤型软件⾮常重要
主要不⾜是Klocwor误报率⽐较⾼,升级费⽤很⾼,客户被。对License控制较为严格,⽤户退出⼀个license后,其他⼈要使⽤需要等7天才能使⽤。
3、Checkmarx
www.checkmarx/
以⾊列CheckmarxCxSuite的产品。
主要功能是查安全漏洞、质量缺陷、逻辑问题和后门代码。是⼀个独特的源代码分析解决⽅案,该
⼯具可⽤于识别、跟踪和修复源代码中技术上和逻辑上的缺陷,⽐如软件安全漏洞、质量缺陷问题和业务逻辑问题等。
⽏须构建或编译软件项⽬的源代码,Checkmarx CxEnterprise通过虚拟编译器⾃动对软件源代码分析,并直接建⽴了代码元素及代码元素之间关系的逻辑图。然后Checkmarx CxEnterprise对这个内部代码图进⾏查询。
Checkmarx CxEnterprise包含针对所有编程语⾔已知数百个安全漏洞和质量缺陷问题预先设定好的查询(query)列表。可以查询全⾯⽽⼜⼴泛的代码安全和质量缺陷,同时使⽤Checkmarx CxEnterprise CxAudit 审计⼯具,您可以根据您⾃⼰的软件安全、质量保证和业务逻辑需要配置并⾃定义的查询(Query),以满⾜公司或者个⼈特定的代码安全策略及代码安全基线标准要求。
Checkmarx CxEnterprise的扫描结果可以以静态报表形式展⽰,也可以通过可以对软件安全漏洞和质量缺陷在代码的运⾏时的数据传递和调⽤图跟踪的代码缺陷的全过程,同时还可以提供对安全漏洞和质量缺陷进⾏修复提供指导建议。也可以对结果进⾏审计,从⽽消除误报。
4、Fortify
美国HP_fortify,重点是安全漏洞的检测。Forify ⽀持语⾔超过20种,是检测⼯具中⽀持语⾔最多的⼯具。
内使⽤最为⼴泛的静态分析⼯具,虽然⽀持很多种安全漏洞,但需要⽤户做很多的⼆次开发⼯作。
不⾜是误报率和漏报率都⽐较⾼。⽬前在国内代理商以光盘价格出货。如果企业只是想少花钱,引⼊⼀个安全扫描⼯具,倒是⼀个好的选择。
5、Testbed
美国LDRA Testbed/TBrun 软件测试产品功能:编码规则、度量、覆盖率、⽣成测试⽤例。
前⾝为Liverpool⼤学开发,能够⽀持C/C++数千种条⽬的规则检测,包括MISRA C/C++, GJB5369等,是最早进⼊中国市场的静态分析⼯具,在军队、军⼯⼴泛使⽤,但其技术仅⽀持编码规则类检测,⽆法进⾏语义缺陷分析,导致⼀些常⽤的运⾏时缺陷⽆法发现或者较⾼误漏报,由此市场占有率逐步下降。截⽌到2015年其版本号为9.5。
创景公司是总代理。⽬前很多代理商代理该⼯具销售,军⼯企业、汽车制造等采购该⼯具较多。
主要采⽤DERA(欧洲防务标准)和MISRA(汽车软件标准),GJB5369。判断是否违反编程规则,只能算是语义语法检测⼯具,⽆法满⾜安全检测需要。原来不⽀持GJB 8114,最新版本也刚刚加⼊对GJB 8114的⽀持。⽀持Ada、C、C++、Cobal、Coral 66、Fortran、Pascal、PL/1等语⾔。
通过下⾯的检测功能介绍,可窥见⼀斑。
数据流分析变量单元级、集成级和系统级。(发现的错误,基本上都是⽐较浅显的)
1. 没有实⽤的函数参数
2. 不匹配的参数
3. 变量未赋初值就引⽤
4. 代码中有多余变量
5. 给值传递参数赋值
6. ⽆返回值的函数路径
在线代码运行器
7. 函数的实参是全局变量
控制流分析
1. 不可达代码
2. 不合理的循环结构
3. 存在浮点相等⽐较
4. 函数存在多个出⼝
5. 函数存在多个⼊⼝
表达式分析:
1. 表达式中的括号使⽤不当
2. 数组下标越界
3. 存在被零除
4. SWITCH语句缺少DEFAULT
5. CASE语句缺少BREAK
6. 存在混合运算
7. 对指针进⾏逻辑⽐较
8. 在逻辑表达式中使⽤赋值操作符
接⼝分析
1. 实参和形参个数不匹配
2. 实参和形参类型不匹配
3. 函数参数定义的结构和调⽤的结构不⼀致
Testbed的静态度量分析做得还是⽐较不错。能够度量函数代码⾏数(200)、注释⽐率(20%)、函数参数(7)、goto语句(0)、圈复杂度(10)、基本复杂度(4,维护性)、LCSAJ密度(20,可维护性)、控制节点数(10)、基本节点数(5)、扇⼊度量(7)、扇出度量(7)等,括号中是阈值。
但是Testbed的静态度量的公式也没有依据什么标准或权威组织的发布,可能只是⾃⾝企业研究出的算法。
Testbed还⽀持单元测试,可以⽀持测试⽤例加载执⾏,计算覆盖率等。但是⼯程实践中,对于嵌⼊式软件很难在⽬标机之外的测试服务器上运⾏。
6、PinPoint
源伞科技由⾹港科⼤团队创⽴的, ⽤⾃动程序分析技术保障软件质量。307个C/C++缺陷检测器,覆盖95条CWE规则。
该⼯具研发上投⼊上还是⽋缺,虽然采⽤了主流的检测引擎,但是打磨的不太好,对于100万⾏代码可能需要超过10⼩时的检测,这在⼯程上基本是⽆法接受的。
7、C++ test
美国Parasoft公司研发的⽀持C、C++静态分析的⼯具,该⼯具除了可以检测编码规则外,还能检测少量的语义缺陷,此外能够进⾏测试⽤例⽣成,进⾏单元测试。
Parasoft C++test 是⼀款⾃动化测试⼯具,⾃动测试C/C++类、函数或部件,⽽不需要编写、测试或桩调⽤代码。
主要⽤于嵌⼊式软件单元级别测试。
8、PC-Lint
PC-Lint 是GIMPEL SOFTWARE公司开发的C/C++软件代码静态分析⼯具,它的全称是PC-Lint/FlexeLint for C/C++,PC-Lint 能够在Windows、MS-DOS和OS/2平台上使⽤,以⼆进制可执⾏⽂件的形式发布,⽽FlexeLint 运⾏于其它平台,以源代码的形式发布。PC-lint 在全球拥有⼴泛的客户,许多⼤型的软件开发组织都把PC-Lint 检查作为代码⾛查的第⼀道⼯序。PC-Lint不仅能够对程序进⾏全局分析,识别没有被适当检验的数组下标,报告未被初始化的变量,警告使⽤空指针以及冗余的代码,还能够有效地帮你提出许多程序在空间利⽤、运⾏效率上的改进点。
PC-Lint和FlexeLine是强⼤的静态分析⼯具,检查C、C++源代码,寻错误,⼩故障,不⼀致,不可移植的结构,冗余代码等。
PC-Lint 能够检查出很多语法错误和语法上正确的逻辑错误,PC-Lint 为⼤部分错误消息都分配了⼀个错误号,编号⼩于1000的错误号是分配给C 语⾔的,编号⼤于1000的错误号则⽤来说明C++的错误消息。下表列出了PC-Lint 告警消息的详细分类:
9、QAC
英国PRQA公司成⽴于1986年,总部位于英国Hersham。主要编码规则测试。QAC/QAC++能够对C/C++代码规则进⾏⾃动检查,报告所违反的编程标准和准则。侧重于MISRA规则((ISO,MISRA C,JVF,EC++等)。能够发现1300多种C语⾔问题、800多种C++的问题,可以⽀持所有编译器的扩
展、配置简单灵活,分析速度⾮常快,分析报告可以是excel、word、pdf、图表等多种形式,在线帮助相关联,可以及时得到问题的解释和⽰例。。QAC/QAC++提供了编程规则的⼆次开发接⼝,允许添加其它的⾃定义的编程规则。提供⼏⼗种C/C++复杂度度量,包括圈复杂度、静态路径统计和Myer's interval等,还可以扩展定制的复杂度度量。
QAC/QAC++能够提供另外两种静态分析的能⼒:软件结构分析和质量度量.
软件结构分析包括:函数控制结构图、函数调⽤树、数据引⽤关系图,⽂件包含关系。供多种多样的可视化输出,包括函数结构图、函数调⽤树、外部参考、⽂件包含关系和统计的度量分析。
可⽤于Windows和Unix平台,有⽅便易⽤的GUI图形界⾯,可以和流⾏的开发环境集成。QAC⽀持的语⾔有C、C++、Java、Fortran;QAC可⽀持的平台有Microsoft Windows、Sun Solaris、HP-UX、Redhat Linux、Slackware Linux。
QAC根据严重程度从低到⾼分为0~9级,9级为最严重,0级为最轻微。
9级为ERRORS,必须先修复9级的错误,才能做其他级别的代码静态分析。
10、AppScan
IBM 安全类⼯具。对⽹站和移动应⽤进⾏扫描,识别安全漏洞并给出修复建议。
IBM Security AppS增强⽹站应⽤和移动应⽤的安全,提⾼应⽤安全程序管理,加强合规性。通过在使⽤前扫描你的⽹站和移动应
⽤,AppScan使你可以识别安全漏洞并产⽣报告和修复建议。
IBM⼯具,在国内销售情况不是太好,该⼯具市场占⽤率极低,基本上被淘汰出具。
11、SonarQube
是⼀款⽤于代码质量管理的开源⼯具,它主要⽤于管理源代码的质量。 通过插件形式,可以⽀持众多计算机语⾔,⽐如 java, C#,
go,C/C++, PL/SQL, Cobol, JavaScrip, Groovy 等。sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测⼯具来检测你的代码,帮助你发现代码的漏洞,Bug,异味等信息。
Sonar 不仅提供了对 IDE 的⽀持,可以在 Eclipse和 IntelliJ IDEA 这些⼯具⾥联机查看结果;同时 Sonar 还对⼤量的持续集成⼯具提供了接⼝⽀持,可以很⽅便地在持续集成中使⽤ Sonar。
1. 编写⼲净的代码:SonarQube提供⼀份关于源代码整体健康情况的概述。更重要的是,它将在新代码中发现的问题⾼亮显⽰。使⽤项⽬中的质量门设置,你将可以轻易的修复漏洞,机械的改善代码。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。