前言
参考:
https://www.freebuf.com/articles/web/283795.html
https://drun1baby.top/2023/09/03/CodeQL-%E5%85%A5%E9%97%A8/
安装
CodeQL本身包含两部分解析引擎 + SDK
解析引擎用来解析我们编写的规则,虽然不开源,但是我们可以直接在官网下载二进制文件直接使用。
SDK完全开源,里面包含大部分现成的漏洞规则,我们也可以利用其编写自定义规则。
解析引擎的话 vscode 扩展搜 codeql 直接下就行,会自动把 codeql-cli 也下载下来
或者直接在官方仓库下载: https://github.com/github/codeql-cli-binaries/releases/
然后添加到环境变量,在命令行输入 codeql 验证

同时要把下载的 codeql-cli 路径写到 vscode 的配置文件中

接下来安装 SDK
git clone https://github.com/Semmle/ql
此时的目录下有引擎文件夹(codeql)和 SDK 文件夹(ql)
这样就设置好了 CodeQL 的开发环境
Hello World
测试的项目: https://github.com/l4yn3/micro_service_seclab/
生成数据库
由于 CodeQL 的处理对象并不是源码本身,而是中间生成的 AST 结构数据库,所以我们先需要把我们的项目源码转换成 CodeQL 能够识别的 CodeDatabase
codeql database create ~/Sec/Audit/Test_Projects/databases/micro-service-seclab-database \
--language="java" \
--command="mvn clean install --file pom.xml -DskipTests" \
--source-root=.
导入数据库并查询
和 SQL 一样,我们需要执行 QL 查询,就需要先指定一个数据库,然后创建查询,这里选择 java 语言,示例会创建一个 example.ql

/**
* This is an automatically generated file
* @name Hello world
* @kind problem
* @problem.severity warning
* @id java/example/hello-world
*/
import java
from File f
select f, "Hello, world!"

执行后会查询,这里返回的结果自然都是 Hello, world!