什么是 GitHub CodeQL?
GitHub CodeQL 是一个强大的语义代码分析引擎,旨在自动化安全检查。它通过将代码视为数据来工作,允许您像查询数据库一样查询代码库以查找特定的模式和漏洞。由 GitHub 开发,它与安全研究人员用于在开源项目中查找漏洞的引擎相同,并且是 GitHub 代码扫描功能的核心组件。
主要特点
- 语义分析: 与依赖文本匹配的传统静态分析工具不同,CodeQL 从您的代码中构建一个关系数据库,从而能够进行深度语义查询以发现复杂的漏洞。
- 变体分析: 一旦发现漏洞,CodeQL 就可以在整个代码库中快速找到所有相似的模式和变体,从而一次性有效地根除一整类错误。
- 广泛的语言支持: CodeQL 支持多种流行的编程语言,包括 C/C++、C#、Go、Java、JavaScript/TypeScript、Python 和 Ruby。
- 使用 QL 进行自定义查询: 它使用一种名为 QL 的强大声明性查询语言。虽然它附带了数百个内置查询,但安全团队可以编写自定义 QL 查询来查找新的或特定领域的漏洞。
- GitHub 集成: 与 GitHub Actions 无缝集成,以在您的 CI/CD 管道中自动执行安全分析,直接在拉取请求中标记漏洞。
使用案例
- 自动化安全扫描: 将 CodeQL 集成到您的 CI/CD 管道中,以自动扫描每个拉取请求和提交中的已知漏洞。
- 安全研究: 安全团队使用它来在大型复杂的代码库中发现零日漏洞。
- 自定义代码检查: 通过编写识别反模式或已弃用库用法的查询来强制执行自定义编码标准和架构模式。
- 漏洞赏金: 作为漏洞赏金计划的一部分,帮助开发人员和安全研究人员在开源软件中查找和报告漏洞。
入门指南
要在本地开始使用 CodeQL,您可以使用 CodeQL CLI。这是一个关于如何分析项目的“Hello World”风格的示例。
-
安装 CodeQL CLI: 按照 CodeQL 官方网站上的说明进行操作。
- 创建 CodeQL 数据库: 对于 JavaScript 项目,您将运行:
# 下载 CodeQL CLI 并将其添加到您的 PATH # 对于当前目录中的项目 codeql database create my-database --language=javascript --source-root . - 分析数据库: 对数据库运行一套标准查询。
# javascript-security-and-quality.qls 是一个标准查询套件 codeql database analyze my-database javascript-security-and-quality.qls --format=sarif-latest --output=results.sarif - 查看结果:
results.sarif文件包含发现的任何漏洞,可以在兼容的查看器(如 VS Code SARIF 扩展)中查看。
定价
CodeQL 对于 GitHub 上的公共存储库是免费的。对于私有存储库,它作为 GitHub Advanced Security 许可证的一部分包含在内,该许可证适用于 GitHub Enterprise Cloud 和 GitHub Enterprise Server 客户。