---
created: '21/11/01'
title: CodeQL安装与使用
tags:
- 代码审计
- codeql
1.CodeQL安装与使用#
什么是CodeQL#
CodeQL是一个可以对代码进行分析的引擎, 安全人员可以用它作为挖洞的辅助或者直接进行挖掘漏洞,节省进行重复操作的精力。
在CodeQL中,代码被解析成数据,存储在数据库中。安全漏洞、错误和其他错误被建模为可以针对数据库执行的查询。我们可以运行由GitHub研究人员和社区贡献者编写的标准CodeQL查询,也可以编写自己的查询以用于自定义分析。查找潜在错误的查询直接在源文件中突出显示结果。
保姆级安装教程#
虽然官方提供了可以进行查询的网站,但是由于官网在国外而且执行速度不快,或者某些语言(如c/c++)需要自定义编译命令来编译,实际上在网站是完全不够使用的,所以我们只能本地搭建环境,以下步骤是一步步进行的。
codeql-cli#
在命令行(cli)的环境下运行codeql
项目地址 : github/codeql-cli-binaries
打开项目地址之后进入Releases库,下载对应操作系统的压缩包解压到任意一个文件夹
codeql#
开源的codeql标准库和查询库
项目地址: github/codeql
进入到上面解压codeql-cli的文件夹,并把该仓库clone下来,保证codeql-cli和codeql在同一个目录下
vscode-codeql#
vscode的codeql插件,直接在插件市场安装
配置环境变量#
为了方便我们使用codeql-cli,我们需要将其路径放到PATH下,具体的方法就不多介绍了(windows下将其添加到环境变量中,linux下修改PATH变量)
同时我们最好再配置下codeql插件的可执行文件路径,打开vscode的设置,搜索codeql,修改Executable Path
至此我们的环境算是配的差不多了。。。但是如果你需要用go的话还需要进行额外配置
codeql-go#
开源的codeql-go标准库和查询库(不太明白为什么不直接放在codeql库里)
这个项目了写明了安装方法,但是存在以下弊端:
1. 这是一个sh脚本,意味着windows办法使用
2. 这个项目有这么一段话
If you want to use the CodeQL extension for Visual Studio Code, import this repository into your VS Code workspace.
意思是说我们如果需要使用go的标准库时,还需要手动添加到vscode的workspace里,非常麻烦
为了解决这个弊端,我自己捣鼓了一下,将其放在了codeql标准库里,具体步骤如下
1. clone仓库到ql文件夹里(即codeql标准库)并改其文件夹名为go
- 修改.codeqlmanifest.json,加入一行
"go/.codeqlmanifest.json",
{ "provide": [ "ruby/.codeqlmanifest.json", "go/.codeqlmanifest.json", "*/ql/src/qlpack.yml", "*/ql/lib/qlpack.yml", "*/ql/test/qlpack.yml", "cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/qlpack.yml", "*/ql/examples/qlpack.yml", "*/upgrades/qlpack.yml", "javascript/ql/experimental/adaptivethreatmodeling/lib/qlpack.yml", "javascript/ql/experimental/adaptivethreatmodeling/src/qlpack.yml", "misc/legacy-support/*/qlpack.yml", "misc/suite-helpers/qlpack.yml" ] }
至此我们已经成功安装了包括go在内的codeql标准库以及codeql的cli程序,我们可以写一个demo测试一下
Hello world#
我们来创建一个我们的学习工作区并输出一个codeql的hello,world,步骤如下:
- 创建一个文件夹,这里以codeql_study为例
- 用vscode打开该文件夹,创建一个ql文件夹,并在该文件夹下创建helloworld.ql和qlpack.yml
- qlpack.yml的内容如下
name: longlone/codeql-study version: 0.0.1 libraryPathDependencies: codeql-go extractor: go
- helloworld.ql的内容如下
import go select "hello world"
- 创建一个codeql database,这里我们需要指定一个go项目作为分析目标
codeql database create ./codeql_database -s D:\Coding\golang\src\codeql_study --language=go
-
从vscode中选择codeql_database作为数据库
-
右键helloworld.ql,选择
CodeQL: Run Query
如果显示以上画面,那么我们成功就安装好了环境!