codechecker概览
codechecker介绍
codechecker
是一款代码审计工具,可以扫描源码中可能存在的漏洞。该工具的主要特点有两个:
clang sa/clang tidy
的多文件扫描,使用tu_collector
对多个文件做了翻译单元的聚合,然后调用clang sa/clang tidy
进行扫描- 项目管理服务器和报告展示界面
工具仓库地址:https://github.com/Ericsson/codechecker
整体架构
目录:
编译命令记录
-
记录编译器指令,如make, cmake
-
将编译器指令转化成为JSON格式
编译命令处理
-
参数过滤
-
C/C++标准检查
-
编译目标检测
-
gcc/g++ 硬编码路径收集
交叉编译单元和静态分析的预处理
-
交叉编译单元:针对每一个编译动作生成AST输出
-
统计分析:收集不同的信息,返回值检查等,这些信息可以在静态分析步骤被重用
分析运行
-
Multiple analyzers run parallel using the collected information in the pre analysis step if available
-
processes one Buildaction
-
constructs the analysis command
-
runs the static analyzer analyzer
-
postprocesses analysis results if required
-
collect failure information in case the analysis failed(compilation error or crash)
报告存储和可视化服务器
数据库
-
Configuration database:
-
authentication/session information
-
production configuration (database connection information…)
-
Report database:
-
Store multiple analyzer run results.
-
Data can be used to generate analysis statistics
命令行客户端
-
Can be used for CI integration in a jenkins job
-
provide multiple output types
web浏览器
工具使用流
1.codechecker log运行给定的编译命令并且记录执行的编译步骤。这会生成一个JSON格式的输出文件(编译数据库)。
2.codechecker analyze使用前面得到的JSON数据执行项目分析,生成分析结果,结果使用plist格式表示。
3.此步骤可以进行多种不同的分析:
-
codechecker parse 展示分析结果
-
codechecker store 存储结果到指定服务器
-
codechecker cmd diff 比较两个分析结果的
从功能上分为两大部分:
-
分析
-
展示
从使用方式上分为两种:
-
命令行
-
web UI
README.md中给出的示例:
- 执行分析
1 | CodeChecker check -b "cd ~/your-project && make clean && make" -o ./results |
check命令和analyze命令的区别是,check会将在标准输出里打印分析结果,analyze需要log命令输出的JSON文件作为输入。check相当于log命令+analyze命令。
服务器其他功能
-
用户认证授权功能
-
产品管理
-
执行管理
-
执行展示和比较
-
漏洞路径展示
-
产品漏洞统计
命令行与Web界面的区别
分析器调用:
-
分析器只能够使用命令行命令invoke来启用
-
分析在用户本地执行
存储分析报告到服务器:
使用store命令进行分析报告存储
报告索引和可视化:
Feature name | Command-line | Web GUI |
---|---|---|
Listing basic (file, check message, …) report summary | ✓ | ✓ |
Listing advanced (detection status, review, …) report summary | ✗ | ✓ |
Basic (file path, check name, …) filtering of reports | ✓ | ✓ |
Advanced (detection status, detection date, …) filtering | ✗ | ✓ |
Printing bug path for report | Only for local output folder | ✓ |
Visualisation of bug path in the code | Only through exporting to HTML | ✓ |
Listing reports in the same file | Only through filters | ✓ |
Listing all reports in a product | ✗ | ✓ |