在前面的文章中,我们为读者详细介绍了如何通过CodeQL平台的Visual Studio Code插件,即CodeQL for VS Code在本地编写和运行查询,并直接在工作区中展示查询结果,以及如何编写路径查询。在本文中,我们将为读者详细介绍如何在命令行环境下构建CodeQL数据库,并通过查询代码来分析它们。
CodeQL CLI简介
概述
在进行安全漏洞的变种分析的过程中,我们不仅可以通过CodeQL命令行接口(CLI)来创建所需的数据库,还可以直接从命令行或通过Visual Studio Code插件来查询这些数据库。
接下来,我们将为读者介绍如何安装和配置CodeQL CLI,一旦完成这些工作,我们就可以在命令行环境下执行CodeQL命令了。同时,我们还会介绍如何搭建相应的目录结构,以便CLI能够访问创建和分析数据库所需的工具、查询和库。
配置CodeQL CLI
通过适当的配置,我们可以让CodeQL CLI支持各种用例和目录结构。但是对于刚接触它的读者来说,我们建议采用简单一些的设置,具体如下所示。
对于使用Linux、Windows或10.14(“Mojave”)或更早版本的macOS操作系统的读者来说,只需按照以下步骤进行操作即可。但是,对于使用10.15(“Catalina”)版本的macOS操作系统的读者来说,步骤1和步骤4会略有不同,具体情况将在下文中进行详述。
1. 下载CodeQL CLI 的zip安装包
CodeQL CLI的安装包是一个zip压缩包,其中含有安装CodeQL所需的各种工具、脚本和文件。对于使用Linux、Windows或10.14(“Mojave”)或更早版本的macOS平台的读者来说,可以通过https://github.com/github/codeql-cli-binaries/releases下载相应的安装包。对于使用10.15(“Catalina”)版本的macOS操作系统的读者来说,则需要确保所用Web浏览器不会自动提取zip文件。如果当前使用的是Safari浏览器,请在下载CodeQL CLI安装包之前执行以下步骤:
·启动Safari浏览器。
·从Safari浏览器的菜单中,选择“Preferences…”。
·单击“General”选项卡。
·确保“Open “safe” files after downloading”复选框处于未选中状态。
2. 新建CodeQL目录
之后,我们需要新建一个目录,该目录用于存放CLI以及使用的查询和库。本文中,我们假设该目录为$HOME/codeql-home。
实际上,由于CLI的内置搜索操作会自动在其所有同级目录中查找用于数据库创建和分析的相关文件,因此,如果将这些组件存放在它们自己的目录中的话,不仅可以防止CLI搜索不相关的同级目录,同时,还能确保所有文件都处于拿来就用的状态,这样的话,就无需在命令行上指定任何其他选项了。
3. 获取CodeQL查询的本地副本
我们可以从GitHub中签出CodeQL存储库的副本,地址为https://github.com/Semmle/ql。这个存储库中含有利用CodeQL处理C/C++、C#、Java、JavaScript/Typescript和Python代码所需的各种查询和库。
此外,由于用于分析Go代码的CodeQL库和查询位于CodeQL for Go存储库中,具体地址为https://github.com/github/codeql-go/,所以,我们可以将这个存储库的副本签入到主CodeQL repo的同级目录中。举例来说&#