CodeQL 是 GitHub 提供的行业领先语义代码分析引擎,用于在代码库中发现漏洞。它的核心理念是把代码当作数据来查询:编写一条查询即可找出某个漏洞的所有变体,从而彻底消除该问题,并可将查询分享给他人使用。
主要能力:
- 语义代码分析:通过查询代码发现漏洞和不安全模式。
- 变体查找:编写查询后,可定位同一漏洞在整个代码库中的所有相似出现位置。
- 查询共享:可将自己编写的查询分享给其他人,帮助他人发现同类问题。
- 示例查询:官方提供如 UnsafeDeserialization.ql 等查询示例。
使用方式:
- 在 Visual Studio Code 中安装 CodeQL 扩展(下载即表示同意 GitHub CodeQL 条款与条件)。
- 获取 CodeQL 数据库:在 GitHub.com 上搜索想要研究的开源项目,按说明下载并将该项目的 CodeQL 数据库添加到 VS Code,或使用 CodeQL CLI 创建 CodeQL 数据库。
- 查询代码并发现漏洞:克隆 CodeQL 起始工作区并在 VS Code 中打开,右键点击查询并选择 Run Query 运行。更多信息可查阅官方文档。
适用场景:
- 对开源代码库进行漏洞研究。
- 学习并练习漏洞挖掘:官方提供 Java Capture the Flag 挑战,可借此磨练漏洞发现技能并了解 CodeQL 的污点跟踪功能;该比赛已于 6 月 12 日结束,但仍可出于兴趣参与,在开源 Java 项目中寻找服务端模板注入漏洞。
- 查看以往挑战。
限制与许可: CodeQL 对研究和开源免费。GitHub CodeQL 仅可用于以下情形:依据 OSI 批准的开源许可证发布的代码库;执行学术研究;或在以下情况下为自动化分析、持续集成(CI)或持续交付(CD)生成 CodeQL 数据库:(1) 托管并维护在 GitHub.com 上的任何开源代码库;(2) 测试你依据 OSI 批准的开源软件许可证发布的 CodeQL 查询。除上述明确情形外,不得将 CodeQL 用于自动化分析、持续集成或持续交付(无论是否属于正常软件工程流程)。如需这些用途,请联系销售团队。
其他信息:官方设有社区论坛。