CodeQL 基础使用

admin 2026-03-18 18:45:39 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 文档介绍CodeQL基础使用,包括概念、安装与实操。CodeQL作为语义分析引擎,将代码转化为数据库以查询漏洞。文中详述解析引擎与SDK的安装配置及VSCode插件设置。最后通过查询C++中非空if/else语句实例,演示QL规则编写与运行,指导读者快速上手进行代码审计。 综合评分: 75 文章分类: 代码审计,安全工具,安全开发


cover_image

CodeQL 基础使用

智检安全研习社

2026年3月9日 15:15 陕西

在现代软件工程的演进过程中,传统的基于字符串匹配或正则表达式的静态扫描工具(如Grep或早期Lint工具)已逐渐无法应对复杂软件架构中的逻辑漏洞与深层安全威胁。CodeQL作为GitHub推出的一款强大的语义代码分析引擎,彻底改变了静态分析的范式。它通过将源代码转换为可查询的关系数据库,使得安全研究员能够像查询数据库一样查询代码中的逻辑结构、控制流和数据流。

简述

    CodeQL 的核心思想是将代码视为数据。其工作流程始于“提取”过程,这一过程通过特定语言的提取器遍历源代码及其构建过程,捕获抽象语法树、控制流图和数据流图,并将其存储在关系数据库中。这种语义化的表示方式使得开发者能够超越文本限制,识别诸如“用户控制的输入是否未经清洗便进入了 SQL 执行函数”之类的复杂语义特征。

    对于解释型语言(如Python、JavaScript),CodeQL 直接解析文件系统中的源代码;而对于编译型语言(如 C++、Java、C#),CodeQL 则通过拦截编译器调用来捕获完整的编译上下文,确保宏定义、模板实例化以及外部依赖的语义信息都能被准确记录。这种深度集成保证了分析的精度,但也对构建环境的配置提出了更高要求。

安装

    CodeQL本身包含两部分 解析引擎 + SDK 。

    解析引擎:不开源,解析我们编写的规则,但是可以直接在官网下载二进制文件直接使用。

    SDK(规则库):完全开源,里面包含大部分现成的漏洞规则,我们也可以利用其编写自定义规则。

解析引擎安装

URL: https://github.com/github/codeql-cli-binaries/releases

下载已经编译好的codeql执行程序,解压之后把codeql文件夹放入~/CodeQL。

#Linuxcd /usr/binsudo ln -s /root/Codeql/codeql/codeql codeqlsource /etc/profile

命令行输入./codeql -v,出现如下内容就表示引擎设置完成。

SDK安装

我们使用Git下载QL语言工具包,也放入~/CodeQL文件夹

git clone https://github.com/github/codeql.git

这样在~/CodeQL目录下就包含了2个文件夹,引擎文件夹(codeql)和SDK文件夹(ql)

VSCode开发插件安装

CodeQL需要使用Visual Studio Code来开发和调试规则,所以我们需要在VSCode上面安装CodeQL的插件。

我们安装好Visual Studio Code后,在它的扩展里面搜索codeql, 点击安装。然后我们配置一下上面我们安装的codeql引擎路径。

将codeql可执行文件路径放入

下载wsl,开启远程链接ubuntu

连接到wsl,

此时打开codeql插件

基础使用

网上有很多开源数据库表供我们学习,

项目地址

https://github.com/protocolbuffers/protobuf

下载选择语言c/c++

然后再对应语言中选择并编写文件,在资源管理器中选择cpp并创建demo.ql 用于编写查询语法

假设我们要查询有可执行代码块的if/else语句

import cpp// 主查询:匹配有实际代码的if语句from IfStmt ifStmtwhere// 条件1:if的then分支不是空语句(排除 if();; 这种情况)not ifStmt.getThen() instanceof EmptyStmt// 条件2:如果有else分支,else分支也不是空语句and (not ifStmt.hasElse() or not ifStmt.getElse() instanceof EmptyStmt)// 输出匹配结果select ifStmt, "该if/else语句包含可执行代码块(非空)"

选择再选中的数据库中查询

最后结果


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:智检安全研习社 《CodeQL 基础使用》

CodeQL 基础使用 网络安全文章

CodeQL 基础使用

文章总结: 文档介绍CodeQL基础使用,包括概念、安装与实操。CodeQL作为语义分析引擎,将代码转化为数据库以查询漏洞。文中详述解析引擎与SDK的安装配置及
评论:0   参与:  0