文章总结: 文档介绍CodeQL基础使用,包括概念、安装与实操。CodeQL作为语义分析引擎,将代码转化为数据库以查询漏洞。文中详述解析引擎与SDK的安装配置及VSCode插件设置。最后通过查询C++中非空if/else语句实例,演示QL规则编写与运行,指导读者快速上手进行代码审计。 综合评分: 75 文章分类: 代码审计,安全工具,安全开发
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 基础使用》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论