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

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

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

在前面的文章中,我们为读者详细介绍了如何通过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的同级目录中。举例来说,如果我们的CodeQL存储库副本的路径是$HOME/codeql-home/codeql-repo,那么,我们就可以将Go存储库的CodeQL提取到$HOME/codeql-home/codeql-go-repo中。
在这些存储库中,查询和库都是以QL包的形式存在的。实际上,除了查询本身之外,QL包中还含有许多重要的元数据,这些元数据是用于告诉CodeQL CLI如何处理查询文件的。 有关更多信息,请参见https://help.semmle.com/codeql/codeql-cli/reference/qlpack-overview.html。
需要注意的是,不同的用户需要选择不同版本的CodeQL查询,大家可以根据自己的情况选择合适的版本:
· 对于希望使用最新的CodeQL查询的用户来说,请选择主分支。如果您使用的是最新版本的CLI,请使用该版本的查询。同时,每次升级到CLI的新版本时,请及时更新查询。
· 对于特定LGTM企业版本中使用的查询,请使用标记有相关版本号的分支。例如,标记为V1.23.0的分支对应于LGTM Enterprise 1.23。如果要将数据上传到LGTM企业版,请使用该版本。
4. 解压缩zip存档
对于Linux、Windows和macOS(10.14“Mojave”及更早版本)用户来说,只需将zip文件解压到步骤2中所创建的目录中即可。
例如,如果代码库副本的路径是$HOME/codeql-home/codeql-repo,那么请将CLI提取到$HOME/codeql-home/codeql-cli中。对于使用macOs的“Catalina”版本的用户,则需要在终端运行以下命令(其中${install_loc}表示在步骤2中创建的目录):
(1)mv      ~/Downloads/codeql*.zip ${install_loc}
(2)cd      ${install_loc}
(3)xattr -c      codeql*.zip
(4)unzip      codeql*.zip
5. 运行CodeQL
完成解压后,可以通过以下几种方式运行CodeQL可执行文件,从而启动CodeQL进程:
· 执行
· 将
完成上述工作后,我们就可以执行CodeQL命令了。有关CodeQL CLI命令的完整介绍,请参阅https://help.semmle.com/codeql/codeql-cli/commands.html。
请注意,将codeql添加到PATH变量后,就可以通过CodeQL for Visual Studio Code插件访问该命令行接口以编译和运行查询了。
6. 检查CodeQL CLI是否安装成功
我们可以通过执行CodeQL CLI提供的各种子命令,来验证是否为创建和分析数据库做好了准备:
· 运行codeql resolve languages命令以显示可以为哪些语言创建数据库。该命令会列出CodeQL CLI包中默认支持的语言。
· 运行codeql resolve qlpacks命令以显示CLI可以找到哪些QL包。该命令将显示包含在CodeQL存储库中的QL包的名称,例如:codeql-cpp、codeql-csharp、codeql-go、codeql-java、codeql-javascript和codeql-python。除此之外,CodeQL存储库还包含一些“upgrade”包和“legacy”包。当您想要升级数据库时,CLI就会用到升级包,以便可以使用比创建数据库时使用的更新的版本的CodeQL工具链对其进行分析。遗留包的作用是,确保使用旧产品创建的自定义查询和库与当前的CodeQL版本保持兼容。

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

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