市面上知名的静态软件分析工具

工具名称是否开源二次开发能力规则编写难度是否支持AST是否支持跨文件分析
CodeQL半开源(引擎闭源,SDK开源)相对简单支持支持
Coverity低,依赖于厂商相对困难支持支持
Fortify低,依赖于厂商相对困难支持支持
SounarCube开源相对简单不支持不支持

CodeQL

安装网址:https://github.com/github/codeql-action/releases

下载解压后,将主目录添加到系统的环境变量中

![image-20241011203742338](D:tyOWASP静态分析image-20241011203742338.png)

验证是否安装成功,在命令行输入codeql,如下即可

![image-20241011203911874](D:tyOWASP静态分析image-20241011203911874.png)

同时配合vscode使用,我们在vscode中下载codeql插件,出现图标表示安装成功

![image-20241011204044439](D:tyOWASP静态分析image-20241011204044439.png)

创建数据库

CodeQL本身包含两部分解析引擎+SDK。codeql开源的是其sdk,主要作用是将源码编译为其独创的抽象语法树数据库,我们可以使用ql语言对该数据库查询,找到我们需要的各类信息。

首先我们要对即将分析的源码进行编译,下面我以java源码为实例演示:

codeql database create --language=java --source-root= --command="mvn clean compile"

<database-name>:要创建的数据库的名称。

--language=java:指定语言为 Java。

<source-directory>:Java 源码的根目录。

--command="mvn clean compile":这是构建 Java 项目的命令,假设项目使用 Maven 构建。你可以根据实际构建工具(如 Gradle)更改此命令。

我们也可以直接在源码目录进行编译

![image-20241011204800838](D:tyOWASP静态分析image-20241011204800838.png)

出现BUILD SUCCESS即为成功,同时它也在源码目录生成了我们命名的数据库文件(mall)。

vscode中使用codeql

打开vscode的codeql插件在DATABASES中选择我们刚才编译生成的数据库文件mall

![image-20241011205307606](D:tyOWASP静态分析image-20241011205307606.png)

点击QUERIES里的Create one to get start,选择分析的语言java

![image-20241011205457696](D:tyOWASP静态分析image-20241011205457696.png)

系统自动生成hello world的ql语言示例,同时点击右边运行按键,就可得到查询结果,可以看到该源码中所有包含hello world语句的地方

![image-20241011205915482](D:tyOWASP静态分析image-20241011205915482.png)

以上是结合vscode的简单使用,同时现在已有多个打包好的检测各类漏洞的包,可以拿来使用。但我们最终的目标是使用codeql二次开发,分析我们自己所关心且要找寻的程序漏洞,该语言的使用仍需学习。