市面上知名的静态软件分析工具
| 工具名称 | 是否开源 | 二次开发能力 | 规则编写难度 | 是否支持AST | 是否支持跨文件分析 |
|---|---|---|---|---|---|
| CodeQL | 半开源(引擎闭源,SDK开源) | 高 | 相对简单 | 支持 | 支持 |
| Coverity | 否 | 低,依赖于厂商 | 相对困难 | 支持 | 支持 |
| Fortify | 否 | 低,依赖于厂商 | 相对困难 | 支持 | 支持 |
| SounarCube | 开源 | 高 | 相对简单 | 不支持 | 不支持 |
CodeQL
安装网址:https://github.com/github/codeql-action/releases
下载解压后,将主目录添加到系统的环境变量中
 ](/usr/uploads/2024/11/3175487498.png)
验证是否安装成功,在命令行输入codeql,如下即可
 ](/usr/uploads/2024/11/822689295.png)
同时配合vscode使用,我们在vscode中下载codeql插件,出现图标表示安装成功
 ](/usr/uploads/2024/11/3101243561.png)
创建数据库
CodeQL本身包含两部分解析引擎+SDK。codeql开源的是其sdk,主要作用是将源码编译为其独创的抽象语法树数据库,我们可以使用ql语言对该数据库查询,找到我们需要的各类信息。
首先我们要对即将分析的源码进行编译,下面我以java源码为实例演示:
codeql database create
<database-name>:要创建的数据库的名称。
--language=java:指定语言为 Java。
<source-directory>:Java 源码的根目录。
--command="mvn clean compile":这是构建 Java 项目的命令,假设项目使用 Maven 构建。你可以根据实际构建工具(如 Gradle)更改此命令。
我们也可以直接在源码目录进行编译
 ](/usr/uploads/2024/11/1038960336.png)
出现BUILD SUCCESS即为成功,同时它也在源码目录生成了我们命名的数据库文件(mall)。
vscode中使用codeql
打开vscode的codeql插件在DATABASES中选择我们刚才编译生成的数据库文件mall
 ](/usr/uploads/2024/11/1700021519.png)
点击QUERIES里的Create one to get start,选择分析的语言java
 ](/usr/uploads/2024/11/34468603.png)
系统自动生成hello world的ql语言示例,同时点击右边运行按键,就可得到查询结果,可以看到该源码中所有包含hello world语句的地方
 ](/usr/uploads/2024/11/3329289562.png)
以上是结合vscode的简单使用,同时现在已有多个打包好的检测各类漏洞的包,可以拿来使用。但我们最终的目标是使用codeql二次开发,分析我们自己所关心且要找寻的程序漏洞,该语言的使用仍需学习。

0 条评论