codeql简介
codeql是一款静态代码分析引擎。适用于安全人员审计源码,挖掘漏洞。
话不多说开始安装。
codeql安装过程
codeql安装非常简单,只要下载对应操作系统的压缩包解压后即可使用。
codeql的安装分为两个部分:
codeql-cli:https://github.com/github/codeql-cli-binaries
codeql仓库:https://github.com/github/codeql
进入GitHub中在右侧找到release,下载对应操作系统的发行版本即可。
简单介绍一下以上两个安装包的作用:
codeql-cli:cli即command-line interface。主要用来执行codeql的命令。
codeql仓库:包含多种语言的ql查询文件。
注意:
codeql-cli和codeql的版本要相对应。codeql仓库的版本较低时,会出现codeql-cli生成的数据库版本较高,仓库中的ql文件无法查询的问题。
我这边下载的是当前最新的codeql-cli(2.5.4),以及codeql(1.27.0)
下载完成后将上述两个压缩包解压到同一个目录下。
习惯上把codeql仓库重命名为codeql-repo,以免重名。

然后将codeql-cli添加到环境变量中,方便执行相关命令。
执行codeql resolve qlpacks或codeql resolve languages命令测试是否安装成功。(只是解压,没有什么复杂配置,一般都能正确显示)

codeql使用示例
codeql的使用可分为两个步骤:
- 创建codeql数据库
- 使用codeql的查询文件分析数据库
创建codeql数据库
这里我随便找了一个官方的test。

将Test.java的内容复制到javaCodeqlTest.java中。
public class javaCodeqlTest {
public static void main(String[] args) {
for (int i = 0; i < args.length; i++) {
switch(args.length) {
case -2:
return;
case -1:
continue;
case 0:
System.out.println("No args");
break;
case 1:
case 2:
System.out.println("1-2 args");
// missing break.
case 3:
System.out.println("3 or more args");
// fall-through
case 4:
System.out.println("4 or more args");
if (i > 1)
break;
// conditionally missing break.
case 5:
System.out.println("foo");
// Missing break, but switch ends.
}
}
}
}
在命令行中打开javaCodeqlTest.java的路径,键入以下命令:
D:\codeSrc\java>codeql database create --language=java ./java-database --command="javac javaCodeqlTest.java"
因为java是属于编译型语言,需要使用command参数选项指定其编译命令。
执行成功后看到当前目录下创建了一个java-database文件夹。

分析数据库
执行命令
codeql database analyze java-database "D:\codeAudit\codeql-win64\codeql-repo\java\ql\src\Violations of Best Practice\Declarations\BreakInSwitchCase.ql" --format=csv --output=./testResult.csv
路径加上引号是因为该ql查询文件的路径中包含空格。
还记得“创建codeql数据库”一节我们使用的codeql本身自带的示例,截图中有一个BreakInSwitchCase.qlref文件,这就是该示例代码对应的ql文件,我们在...\codeql-repo\java\ql\src中找到
BreakInSwitchCase.ql文件,使用该ql文件查询刚刚生成的数据库。
--format指定查询结果的输出格式。
--output指定输出的路径和文件名。
打开生成的testResult.csv,可以看到如下分析结果

codeql && vscode
vscode有codeql的插件,下载后进入extension settings。

添加本地codeql的执行路径即可。windows下是codeql.exe,linux、mac就是codeql。
配置完成后点击最左列ql图标

选择一个数据库。前面我们已经生成了java-database,选择from a folder。
CodeQL是一款强大的静态代码分析引擎,适用于源码安全审计。安装简单,只需下载对应操作系统的CLI和仓库。CLI用于执行命令,仓库包含QL查询文件。确保两者版本对应。本文演示了CodeQL的安装、使用步骤,包括创建数据库、分析代码并展示结果。同时提到了VSCode中集成CodeQL的配置方法。
4737





