跳转至
本文阅读量 
---

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库里)

项目地址: github/codeql-go

这个项目了写明了安装方法,但是存在以下弊端:
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

  1. 修改.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,步骤如下:

  1. 创建一个文件夹,这里以codeql_study为例
  2. 用vscode打开该文件夹,创建一个ql文件夹,并在该文件夹下创建helloworld.ql和qlpack.yml
  3. qlpack.yml的内容如下
    name: longlone/codeql-study
    version: 0.0.1
    libraryPathDependencies: codeql-go
    extractor: go
    
  4. helloworld.ql的内容如下
    import go
    
    select "hello world"
    
  5. 创建一个codeql database,这里我们需要指定一个go项目作为分析目标
    codeql database create ./codeql_database -s D:\Coding\golang\src\codeql_study --language=go
    
  6. 从vscode中选择codeql_database作为数据库

  7. 右键helloworld.ql,选择CodeQL: Run Query

如果显示以上画面,那么我们成功就安装好了环境!

回到页面顶部