环境搭建

介绍

CodeQL 是一种用于代码分析的查询语言,由 GitHub 开发。它专门设计用于在代码库中查找安全漏洞、代码质量问题和复杂的代码模式。CodeQL 可以与多种编程语言一起使用,包括但不限于 C、C++、C#、Java、JavaScript 和 Python。

CodeQL 语言基于 SQL,但它专门针对代码的结构和语义进行了优化。它允许用户编写查询来搜索代码库中的特定模式,这些模式可能表明存在安全问题或代码质量问题。CodeQL 可以集成到各种工具和流程中,包括 GitHub Actions、SonarQube 和其他持续集成/持续部署(CI/CD)系统。

使用 CodeQL,开发者和安全研究人员可以自动化代码审查过程,提高代码质量和安全性,同时减少人工审查所需的时间和资源。

下载CodeQL

  • 分析引擎:https://github.com/github/codeql-cli-binaries
  • 规则库:https://github.com/github/codeql

注意在下载时尽可能保证分析引擎和规则库的版本一致

本地编译数据库

运行以下.bat文件:

set JAVA_HOME=C:\software\java\jdk-17
codeql database create WebGoat_codeql --language=java -j 4 --source-root=C:\code\java\WebGoat-main\WebGoat-main  --command="mvn clean install -Dmaven.test.skip=true -Dmaven.repo.local=D:\repo -X"
pause
  • -j指定线程数

  • --source-root指定待扫描的源码路径

  • --command用于指定构建命令,此处是在使用java语言去编译数据库,由于此处手动指定构建命令,因此--source-root需要指定项目pom所在目录,在构建时,通过Dmaven.repo.local可以指定

  • WebGoat_codeql是编译的数据库目录名,在后续需要手动添加该路径以便导入数据库

注意,codeql和mvn都需要添加环境变量

vscode可视化分析

(1)在vscode安装CodeQL插件,以便于后续的可视化分析

image-20240814194640667

(2)设置codeql.exe路径(在分析库中)

image-20240814210404987

(3)在workspace打开分析引擎

image-20240814210529464

(4)打开侧边栏CodeQL插件,重点在以下几个地方

  • Languages:选择语言

  • DataBases:可以选择打开本地已经编译好的数据库

  • Queries:可以在想要查询的目录后边点击运行本地查询(会将目录下所有的ql规则都执行),在插件设置中可以修改默认的最大20条ql规则查询

    image-20240814212150993

    Security/CWE就是CodeQL提供的java语言的安全查询规则

  • CodeQL Method Modeling:

添加自定义ql规则

https://github.com/safe6Sec/CodeqlNote

指定ql规则进行扫描

ql规则需要放在codeql cli对应语言下的\ql\src\目录下

依赖

codeql是使用java去下载依赖的,单纯指定cmd代理无用,因此使用proxifier去做代理

image-20250628073455935

注意要找对java程序,因为默认会使用全局的Java_Home去找java