codeql安装使用记录

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

codeql简介

codeql是一款静态代码分析引擎。适用于安全人员审计源码,挖掘漏洞。

话不多说开始安装。

codeql安装过程

codeql安装非常简单,只要下载对应操作系统的压缩包解压后即可使用。

codeql的安装分为两个部分:
codeql-clihttps://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 qlpackscodeql resolve languages命令测试是否安装成功。(只是解压,没有什么复杂配置,一般都能正确显示)
在这里插入图片描述

codeql使用示例

codeql的使用可分为两个步骤:

  1. 创建codeql数据库
  2. 使用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。

03-18
<think>好的,我现在需要帮助用户了解CodeQL使用指南和功能介绍。首先,我需要整理一下用户的问题,确保我覆盖了所有要点。用户提到了两个主要方面:使用指南和功能介绍。同时,用户提供了三个引用,需要适当地引用这些内容。 首先,我应该回顾系统级指令,确保回答符合格式要求。比如,行内数学表达式要用$...$,不过这里可能用不上数学公式,但需要检查是否有其他格式要求。然后,独立公式需要单独成段,但同样可能不适用。LaTeX语法正确,中文回答,生成相关问题,这些都要注意。 接下来,我需要结合用户提供的引用内容。引用[1]提到的是CodeQL的VS Code扩展的配置和使用教程,引用[2]介绍了vscode-codeql-starter项目,引用[3]是关于代码生成的例子。不过引用[3]可能与CodeQL直接关联不大,可能需要忽略或者谨慎引用。 用户想了解CodeQL使用指南,我应该分步骤说明。可能包括安装、配置、编写查询、运行分析等步骤。引用[1]和[2]中的信息可以支持这些步骤,比如配置文件的设置,如何使用vscode-codeql-starter项目。 功能介绍部分需要涵盖静态分析、自定义查询、漏洞检测、跨语言支持等。引用[2]提到CodeQL的静态分析能力和跨语言支持,可以用来支撑这些点。 然后,按照用户要求生成相关问题。这些问题应该与CodeQL使用和功能相关,比如如何安装、如何编写查询、适用场景等。 需要注意的是,回答要结构清晰,分点说明,使用中文,并且在引用处自然地添加标识。例如,在提到配置时引用[1],提到starter项目时引用[2]。 现在开始组织内容: 使用指南部分可以分为安装配置、编写查询、运行分析、结果解析。每个步骤简要说明,并引用相关材料。例如,安装配置部分引用[1]和[2],编写查询部分可以引用[3]的代码生成示例,但要注意是否相关。可能引用[3]不太相关,所以可能只需要引用[1]和[2]。 功能介绍部分分点列出静态分析、自定义查询、漏洞检测、跨语言支持、集成开发等,每个点简要说明,并适当引用。 最后生成相关问题,如安装步骤、查询编写方法、应用场景、与CI/CD集成等。 需要检查是否符合所有格式要求,比如没有使用数学公式,但确保其他格式正确,如代码块使用正确的标记,引用标识正确放置。 现在将这些思考整理成回答。</think>### CodeQL使用指南与功能介绍 #### 一、CodeQL使用指南 1. **安装与配置** - 安装Visual Studio Code后,通过扩展商店搜索并安装`CodeQL`插件[^1]。 - 使用`vscode-codeql-starter`项目快速搭建环境,该项目预置了标准查询库和配置文件,支持一键初始化数据库和分析代码[^2]。 - 配置示例(部分): ```json // .vscode/settings.json { "codeQL.cli.executablePath": "/path/to/codeql-cli", "codeQL.workspaceStorage": "${workspaceFolder}/.codeql-databases" } ``` 2. **编写查询** - CodeQL使用类SQL语法定义代码模式。例如,查找未经验证的用户输入: ```ql from DataFlow::PathNode source, DataFlow::PathNode sink where source.asParameter() and sink.asExpr() select source, sink ``` 3. **运行与分析** - 通过命令行或VS Code插件生成代码数据库: ```bash codeql database create --language=python my-db --source=src/ ``` - 在VS Code中右键选择查询文件,执行`CodeQL: Run Query`。 4. **结果解析** - 分析结果以交互式图表形式展示,可追溯数据流路径和漏洞位置。 --- #### 二、核心功能 1. **静态代码分析** - 通过抽象语法树(AST)和污点分析技术,识别潜在漏洞(如SQL注入、XSS)[^2]。 2. **自定义查询能力** - 支持针对特定代码模式编写查询,例如检测未使用的变量或安全漏洞模式[^1]。 3. **多语言支持** - 覆盖Java、Python、C/C++、JavaScript等主流语言,提供标准化查询库。 4. **集成开发支持** - 与CI/CD工具链(如GitHub Actions)无缝集成,实现自动化代码审计。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值