欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

代码分析平台CodeQL学习手记(十二)

来源:本站整理 作者:佚名 时间:2020-01-22 TAG: 我要投稿

在前面的文章中,我们为读者介绍了如何分析数据流,以及如何进行污点跟踪和指向分析。在本文中,我们将为读者详细介绍如何利用CodeQL平台的Visual Studio Code插件,即CodeQL for VS Code在本地编写和运行查询,并直接在工作区中展示查询结果,同时,我们还将详细介绍如何编写路径查询。
概述
CodeQL for VS Code是CodeQL平台的VS Code插件,通过它,我们可以在VS Code中分析各种语言编写的代码,从而挖掘代码库中的安全问题。这款插件的功能包括:
· 通过CodeQL查询从源代码生成的数据库。
· 显示路径查询结果中的数据流,该功能对于筛选安全结果来说至关重要。
· 提供了一种运行大型开源CodeQL安全查询库的各种查询的简便方法。
· 提供了IntelliSense(智能提示)功能,使得CodeQL查询的编写和编辑变得更加轻松。
在Visual Studio Code中搭建CodeQL分析环境
接下来,我们将为读者详细介绍如何为Visual Studio Code安装和配置CodeQL插件,具体分三个步骤:
· 安装插件。
· 可选:配置特定版本的CodeQL命令行接口。
· 设置工作区。
安装插件
首先,要想安装CodeQL插件,必须将Visual Studio Code 升级到1.39版本以上,否则的话,是无法安装的。
安装合适版本的Visual Studio Code软件后,就可以通过下列方法来安装这个插件了:
· 在浏览器中访问Visual Studio Code Marketplace(地址为https://marketplace.visualstudio.com/items?itemName=GitHub.vscode-codeql),然后,单击相应的Install按钮即可。
· 在Extensions视图(可以通过Ctrl+Shift+X或Cmd+Shift+X组合键调出该视图)中搜索CodeQL,然后,单击相应的Install按钮即可。
· 下载CodeQL VSIX文件(地址为https://github.com/github/vscode-codeql/releases)。然后,在Extensions视图中,单击More actions > Install from VSIX选项,选择CodeQL VSIX文件即可。
配置CodeQL CLI
实际上,该扩展是通过CodeQL CLI来编译和运行查询的。所以,如果读者此前已经安装了该CLI并将其添加到相应的路径中的好,该插件将会使用该版本的CodeQL CLI。对于创建了自己的CodeQL数据库而不是从LGTM.com下载它们的读者来说,通常就属于这种情况。
如果尚未安装CodeQL CLI,该插件将自动管理对CLI可执行文件的访问情况。这样做的好处是,可以确保CLI与CodeQL插件互相兼容。
需要注意的是,我们是无法从终端访问该插件所管理的CLI的。如果想在该插件之外使用CLI(例如创建数据库),最好安装自己的CLI副本。为了避免机器上有两个 CLI 副本,可以在 codeql.CLI.executablepath 设置中指定相应的 CLI 版本(详情见下文)。
如果想让该插件使用特定版本的 CodeQL CLI 可执行文件,请在 VS Code 用户设置中将 CodeQL.CLI.executablepath 设置为相应的CLI 可执行文件的位置。通常来说,这个可执行文件在Linux/Mac平台中名为 codeql ,在Windows平台中名为codeql.cmd 。
配置CodeQL工作区
使用CodeQL时,通常都需要访问标准CodeQL库。这样的话,我们就可以利用各种现成的查询来分析目标代码了。为此,我们可以通过两种方式来访问它们:
· 最简单的方法就是使用“starter”工作区。它是作为一个Git存储库进行维护的,这使得库更新变得更加容易。
· 更高级的访问方法是,将CodeQL库和查询代码添加到现有的工作区中。
需要注意的是,对于CLI用户来说,实际上还有第三种选择:如果已经使用CodeQL CLI创建了包含CodeQL库的CodeQL目录(例如CodeQL-home),那么可以直接在VS Code中打开该目录,并访问CodeQL库。
使用“starter”工作区
“starter”工作区实际上就是一个Git存储库,包含下列内容:
· 用于存放分析C/C++、C#、Java、JavaScript和Python代码的CodeQL库和查询的存储库。由于它是作为一个子模块独立存在的,因此,即使更新了这个存储库,也不会影响我们自定义的查。
· 用于存放分析Go代码的CodeQL库和查询的存储库。它也是作为一个子模块独立存在的。
· 一系列名为codeql-custom-queries-
要使用“starter”工作区,我们需要:
· 将https://github.com/github/vscode-codeql-starter/repository克隆到我们自己的计算机上:
- 运行git clone-recursive命令,或在克隆后使用by git submodule update-init-remote命令,以确保已经包含了这些子模块。
- 定期使用git submodule Update-Remote命令更新这些子模块。
· 在VS Code中,使用File>Open Workspace选项从工作区存储库的签出中打开vscode-codeql-starter.code-workspace文件。
更新 CodeQL 的现有工作区
实际上,我们也可以直接创建 CodeQL 存储库的本地克隆,从而将 CodeQL 库添加到现有的工作区:https://github.com/semmle/ql。
要使这些标准库可用于我们的工作区:
· 选择File > Add Folder to Workspace,然后选择Semmle/ql存储库的本地签出。
· 为每种目标语言创建一个新文件夹,使用New Folder 或Add Folder to Workspace选项来保存自定义的查询和库。
· 在每个目标语言文件夹中创建一个qlpack.yml文件,以告诉CodeQL CLI 该文件夹的目标语言及其依赖项是什么。实际上,Semmle/ql的主分支也提供了这些文件。这样的话,CodeQL就会在所有打开的工作区文件夹或用户的搜索路径中查找相关的依赖项。
例如,要使自定义 CodeQL 文件夹 my-custom-cpp-pack 依赖于C++的CodeQL 标准库,需要创建一个包含以下内容的 qlpack.yml 文件:
name: my-custom-cpp-pack
version: 0.0.0
libraryPathDependencies: codeql-cpp
此外,关于为什么要添加qlpack.yml文件,请参阅这里的详细解释:https://help.semmle.com/codeql/codeql-cli/reference/qlpack-overview.html。还需要注意的是,用于分析Go语言编写的代码的CodeQL库并没有包含在Semmle/ql存储库中,而是单独存储的。在需要分析Go语言编写的项目时,请通过https://github.com/github/codeql-go地址克隆存储库,并将其添加到我们的工作区中。

[1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载