返回介绍

1 前言

发布于 2024-09-12 23:59:25 字数 3409 浏览 0 评论 0 收藏 0

1.1 背景

CodeQL 是一个代码分析平台,在它的帮助下,安全研究人员可以利用已知的安全漏洞来挖掘类似的漏洞。

CodeQL 就是一种代码分析平台。借助这个平台,安全研究人员可以实现变种分析的自动化。这里所谓的变种分析,就是以已知的安全漏洞作为参照物,在我们的目标代码中寻找类似的安全问题的过程,也就是照葫芦画瓢的过程。

此外,为了提高安全分析人员的工作效率,CodeQL 平台还提供了许多有用的工具、脚本、查询和代码库。

1.2 相关概念

1.2.1 CodeQL 核心

  • QL 语言

在静态程序分析学科中,通常采用一种 Data-Log 的声明式语言来代替命令式语言进行结果分析,具体可以参考「静态程序分析」文章。而 QL 语言便是 Data-Log 语言的一种。

  • QL 数据库

CodeQL 数据库中存放的是使用 CodeQL 创建和分析的关系数据。 可以将其看作是目标代码的中间分析产物。

1.2.2 CodeQL 工作原理

CodeQL 工作流程:

  1. 将代码创建成数据库
  2. 编写 QL 查询从数据库中查询代码
  3. 解释查询结果

1.2.2.1 数据库创建

使用语言相关的 extractor 从代码中提取抽象语法树(ast)、名称绑定的语义和类型信息,把源代码转化成单关系表示(single relational representation),以 CodeQL 数据库存储。而在 CodeQL 中,是通过一种 CSV flow 模型来作为中间代码的。

此外,每种语言都有自己独特的数据库模式,用于定义创建数据库的关系。该图为提取过程中的初始词汇分析与使用 CodeQL 的实际复杂分析提供了界面。

1.2.2.2 执行查询

使用 CodeQL 专门设计的面向对象语言 QL 来查询此前创建的数据库

1.2.2.3 结果分析

将查询结果对应到源代码的上下文中去,即通过查询结果的解释找到源码中所对应的潜在漏洞

1.3 CodeQL 安装

首先需要下载 CodeQL CLI 二进制 文件 并安装,CLI 二进制文件支持主流的操作系统,包括 Windows、MacOS、Linux(以在 MacOS 上安装为例,Windows 上同理):

# 下载 codeql.zip
wget https://github.com/github/codeql-cli-binaries/releases/latest/download/codeql.zip
# 解压
unzip codeql.zip
# 将 codeql 添加至 path 中
echo "export PATH=\$PATH:/path/to/codeql" >> ~/.zshrc
source ~/.zshrc

然后需要下载相关库文件: https://github.com/Semmle/ql 。库文件是开源的,后续要做的是根据这些库文件来编写 QL 脚本。

之后,需要在 VSCode 上安装对应的扩展,在应用商店中搜索 CodeQL 即可。安装之后,需要在扩展设置里配置 CLI 文件的位置。

此外,还有一种快捷配置的方式,即: start workspace 项目。

注意:该工作区内含了 QL 库,因此一定要使用递归方式来下拉工作区代码。递归方式下拉该仓库后,不需要再下载 https://github.com/Semmle/ql 这个库了。

git clone --recursive git@github.com:github/vscode-codeql-starter.git

在配置好环境之后,就可以利用 CLI 工具来创建数据库了。以 Java 代码为例,使用如下命令创建:

codeql database create <database-folder> --language=java --command="mvn clean install --file pom.xml"

技巧 如果省略 --command 参数,则 codeQL 会自动检测并使用自己的工具来构建。但还是强烈推荐使用自己自定义的参数,尤其是大项目时。

建立好的数据库,其目录结构为:

- log/                # 输出的日志信息
- db-java/            # 编译的数据库
- src.zip             # 编译所对应的目标源码
- codeql-database.yml # 数据库相关配置

除了在本地构建数据库外,CodeQL 还提供了在线版本: LGTM.com 。一方面,可以在其上面直接搜索开源项目,下载数据库;另一方面,也可以上传代码,后台会自动生成代码数据库。同时,在选定项目后,也可以在线查询,十分方便。

最后在 VSCode 中,点击「打开工作区」来打开刚刚下拉的 vscode-codeql-starter 工作区,在 CodeQL 插件里,打开刚刚生成的 database。

然后编写自己的 CodeQL 脚本,并将脚本保存至 vscode-codeql-starter/codeql-custom-queries-java 处,这样 import 模块时就可以正常引用。将编写的 ql 脚本在 VSCode 中打开,之后点击 CodeQL 插件中的 Run Query ,即可开始查询。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文