Agentic AI、具身智能、强化学习框架、端侧大模型……来QCon上海站,感受AI的未来! 了解详情
写点什么

GitHub 如何利用 CodeQL 保障代码安全

作者:Craig Risi

  • 2025-05-13
    北京
  • 本文字数:1390 字

    阅读完需:约 5 分钟

大小:678.52K时长:03:51
GitHub 如何利用 CodeQL 保障代码安全

GitHub 产品安全工程团队通过开发 CodeQL 等工具来大规模检测和修复漏洞,从而确保 GitHub 代码的安全。他们分享了自己的方法,以便其他组织可以学习如何使用 CodeQL 来更好地保护自己的代码库。

 

CodeQL 让用户可以用与查询数据库类似的方式查询代码,从而实现自动化安全分析。与简单的文本搜索相比,这种方法更有效,因为它可以跟踪数据在代码中的移动,定位不安全的模式,并检测出仅通过文本无法发现的漏洞。这样就能更深入地了解代码模式,发现潜在的安全问题。

 

该团队以各种方式使用 CodeQL 来确保 GitHub 存储库的安全。标准配置使用了默认及安全扩展查询套件,这足以满足企业大多数存储库的需要。这种设置使 CodeQL 可以自动审查 pull 请求是否存在安全问题。

 

对于某些存储库,比如 GitHub 的大型 Ruby 单体库,就需要额外采取一些措施。在这种情况下,团队会使用为特定安全需求量身定制的查询包。此外,还可以使用多存储库变体分析 (MRVA)进行安全审计,识别需要进一步调查的代码模式。还可以编写自定义查询用于检测 GitHub 代码库特有的潜在漏洞。

 

最初,自定义 CodeQL 查询是直接发布在存储库中的。然而,这种方法带来了一些挑战,包括每次更新都需要经过生产部署流程、CI 分析速度比较慢以及 CodeQL CLI 更新导致的问题。为了应对这些挑战,团队转为在 GitHub 容器注册表(GCR)中发布查询包。这一变化简化了流程,提高了可维护性,并减少了更新查询的阻力。

 

在开发自定义查询包时,要考虑到依赖关系,如 ruby-all 包。通过扩展默认查询包中的类,团队可以避免不必要的重复,同时保持查询简洁有效。不过,CodeQL 库 API 在更新时可能会带来破坏性的变化,有可能会影响查询性能。为了降低这种风险,团队会针对最新版本的 ruby-all 来开发查询,但在发布前会锁定特定的版本。这样就能确保已经部署的查询可以可靠地运行,而不会因意外更新而产生意想不到的问题。

 

为了保持查询的稳定性,每个新查询都要编写单元测试。这些测试被集成到查询包存储库的 CI 管道中,以便可以在部署前尽早发现潜在的问题。发布过程涉及多个步骤,包括打开 pull 请求、编写单元测试、合并更改、增大查询包版本号、解决依赖性问题以及将更新后的查询包发布到 GCR。这种结构化方法兼顾了开发灵活性和稳定性需求。

 

采用何种方法将查询包集成到存储库取决于组织的部署策略。GitHub 安全团队没有在 CodeQL 配置文件中锁定查询包的特定版本,而是选择通过 GCR 管理版本。这种方法使存储库可以自动使用最新发布的版本,同时在必要时提供快速回滚更改的能力。

 

在 GCR 中发布查询包时,他们遇到的一个挑战是如何确保组织内多个存储库的可访问性。他们考虑了几种解决方案,包括手动授予访问权限、使用个人访问令牌以及将存储库链接到软件包以获得继承访问权限。最终,团队采用了链接存储库的方法,无需人工干预即可有效管理多个存储库的权限。

 

为加强安全分析,GitHub 安全团队编写了各种自定义查询。这些查询的重点是识别高风险 API、执行安全编码实践,以及检测 API 端点中缺失的授权控制。有些查询是告警工具,而不是严格的执行机制,它们只会使用较低的严重性级别来提醒工程师,而不会阻止部署。这种方法允许开发人员评估安全问题,同时又能确保及时处理最关键的漏洞。

 

声明:本文为 InfoQ 翻译,未经许可禁止转载。

 

原文链接:https://www.infoq.com/news/2025/03/how-github-uses-codeql-security/

2025-05-13 10:154310

评论

发布
暂无评论

自动化测试技术笔记(三):如何编写技术方案

老张

自动化测试 技术方案

华为云桌面,开启云上高效办公之旅!

清欢科技

我在编码过程使用Jenkins自动化的姿势

大东(AIP智能体运营专员)

华为云桌面,一站式云上数字化创作深度解读

IT科技苏辞

华为云会议,更专业“会”更好

秃头也爱科技

超高清设计师云工作站,为设计企业护航

清欢科技

云办公成趋势,华为云桌面全方位保障企业安全

科技之光

头部效应明显,中小厂商「闷赚」的 Dating 赛道

融云 RongCloud

社交 虚拟

华为云会议,让会议更智能

秃头也爱科技

云上办公,且看华为云桌面如何加速企业数字化发展之路?

科技之光

数字化办公?选云桌面就对了!

科技之光

【JWT】jwt令牌研究

No8g攻城狮

JWT\ JWT

网络安全实战之植入后门程序

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 漏洞挖掘

数字云办公连续7年领跑,华为云桌面优势突显!

科技之光

低成本、高效率!华为云桌面助力企业数字化转型

清欢科技

mysql数据库运维常用的shell脚本

@下一站

12月日更 12月月更

华为云桌面之下的“冰山”:技术底座x繁荣生态加速模式进化

IT科技苏辞

华为云会议,助力企业高效办公

秃头也爱科技

超高清设计师云工作站,设计可以更高效

清欢科技

对比PyTorch、TensorFlow、JAX、Theano,我发现都在关注两大问题

OneFlow

人工智能 深度学习 函数转换

【Spring专题】「开发指南」夯实实战基础功底之解读logback-spring.xml文件的详解实现

码界西柚

spring logback 12月日更 12 月 PK 榜

华为云桌面,为企业发展打造优质云办公环境

爱科技的水月

华为云桌面协同办公,助力建筑行业数字化转型

爱科技的水月

HTTP的状态码

穿过生命散发芬芳

HTTP 12月月更

华为云桌面Workspace,如何为用户开启全新办公模式?

爱科技的水月

Verilog模块例化

芯动大师

Verilog语法 Verilog例化模块 Verilog教程

2022-12-21:uifd/ui-for-docker是docker的web可视化工具。请问部署在k3s中,yaml文件如何写?

福大大架构师每日一题

Docker 云原生 k8s k3s 福大大

华为云会议——安全得多,高效得很

秃头也爱科技

华为云桌面为企业数字化发展赋能强劲动力

爱科技的水月

华为云桌面远程办公,真香!

爱科技的水月

云上办公,还得是华为云桌面的一站式云上工作站

科技之光

GitHub 如何利用 CodeQL 保障代码安全_安全_InfoQ精选文章