最近由于C/C++项目代码审计,有时候开发不给相关的依赖库,是件很蛋疼的事情。因为无法使用fortify SCA进行编译。从而就无法扫描分析漏洞缺陷。依靠人工审计,简直是一件很崩溃的事情,对我一个做java代码审计的人来说,不怎么懂C/C++,更别说找什么溢出,内存泄漏,危险函数,越界,空指针......,那就是一场灾难。
所以我就在想能不能找到一款开源的并且不需要编译源代码的开源静态分析工具,通过一天的查资料对比,挑选了三款比较中意的C/C++静态分析工具,CppCheck、TscanCode、flawfinder这三款工具。
从使用方便角度对比:CppCheck ≈ TscanCode>flawfinder
cppCheck和TscanCode都可以图形化界面进行操作,flawfinder只能命令行操作,并且误报比较高(其实不怎么好用,害我研究了一天,就勉强加上它)。
扫描缺陷精准度:TscanCode > cppCheck > flawfinder
关于C/C++静态分析工具对比,鹅厂写了个帖子,非常详细,感兴趣的小伙伴可以去看看:
https://blog.csdn.net/wetest_tencent/article/details/51516347
这篇帖子先来说说cppCheck的安装和使用,其它两款在别的帖子在详细讲解吧。
1.CppCheck的安装下载地址:http://cppcheck.sourceforge.net/可进行下载。
2.下载下来之后,进行安装,安装步骤很简单,直接下一步,直到完成即可。
3.Cppcheck支持发现的常见缺陷和漏洞如下:
Cppcheck可检测的问题包括:
- Dead pointers
- Division by zero
- Integer overflows
- Invalid bit shift operands
- Invalid conversions
- Invalid usage of STL
- Memory management
- Null pointer dereferences
- Out of bounds checking
- Uninitialized variables
- Writing const data
并将问题分为以下6类:
- 错误(error):bug。
- 警告(warning):预防性编程方面的建议。
- 风格警告(style):出于对代码简洁性的考虑(函数未使用、冗余代码等)。
- 可移植性警告(portability):64/32位可移植性、编译器通用性等。
- 性能警告(performance):使代码更高效的建议,但不保证一定有明显效果。
- 信息消息(information):条件编译方面的警告。
4.导入项目, 选择文件或者文件夹都行,既可以扫单个文件,也可以扫整个项目
5.扫描过程也是很快的,因为其不需要编译代码,所以只是静态分析,没有数据流跟踪器,污染标记,动态分析器等,所以和商业付费软件还是有所差距,之前使用过Coverity ,精准度特别高,做C/C++项目特别好。找了一个项目扫描分析结果如下图:
6.可以将结果导出,生成一个xml文件, 以便于下载继续使用可以打卡继续分析缺陷漏洞。
7.再一次导入结果文件,可以继续分析,需要注意的是,你需要再次关联项目源码,才能在下方的面板中看到源代码片段