Github架构师手把手教你CodeQL-AI建模!

· 2024-11-29 08:00 · 3 阅读

原创 SASTing 2024-11-29 08:00 上海

Copilot 赋能 CodeQL:AI建模不要太爽!

关键词

  • CodeQL

  • Copilot

  • AI modeling

  • Variant analysis

Good Sentence

Avi Douglen(Bounce Security安全咨询机构CEO):

Security at the expense of usability, comes at the expense of security

牺牲可用性换取安全性,最终会牺牲安全性

大佬资料

  • Nick Liffen Github架构师

img
  • Niroshan Rajadurai Github副总裁,Semmle(CodeQL前公司)安全专家

背景

AI 正在从根本上改变技术和安全领域。GitHub将 AI 视为一种工具,帮助开发者加速开发过程的同时编写更安全的代码。例如,Copilot 推出了一个Security filter(安全过滤器,针对 Python 和 JavaScript 中最常见的易受攻击的编码模式(包括硬编码密钥、SQL 注入和路径穿越等)提出更安全的编码方式。

CodeQL 团队负责为框架/API建模,以帮助 CodeQL 发现更多漏洞。建模是一个耗时的过程,因此团队开始思考能否将AI的能力迁移过来,加速建模过程。

实验结果超出预期,团队能够利用 AI 优化建模过程,以增强工具在代码中发现漏洞的能力。

1.Security filter 安全过滤器

1.1.工作原理

为了提高Copilot 的代码建议质量,团队更新了底层的 Codex 模型,从而大幅提升了代码建议的质量。

Codex模型主要的更新点:

  1. 升级的 AI Codex 模型:将 Copilot 升级到新的 OpenAI Codex 模型,该模型在代码合成方面的能力有显著提升。

  2. 更好的上下文理解:通过一种称为 Fill-In-the-Middle (FIM) 的新范式改进了Copilot,该范式为开发者提供了更好的代码建议。其不仅考虑代码前缀,还会利用代码后缀,在二者中间留下 gap 供Copilot 填充。这样,大模型现在能够更好地理解用户代码的逻辑。在 FIM 提供高质量代码建议的同时,还开发了各种策略保证模型的低延迟

  3. 轻量级客户端模型:更新 VS Code 的 Copilot 插件,引入了轻量级客户端模型,从而提高了代码建议的整体接受率。Copilot 还会关注用户的历史行为(如:上次建议是否被接受),以降低无效建议出现的频率。这项更新使大模型提供的无效建议减少了 4.5%,以帮助 Copilot 更好地响应每位开发者。

1.2.代码安全能力

基于 AI 的漏洞预防系统,可以实时阻止不安全的编码模式,以使 Copilot 的建议更加安全。可以处理常见的安全缺陷:

  • 硬编码密钥

  • SQL 注入

  • 路径穿越

该系统利用大型语言模型(LLMs)来模拟静态分析工具的行为—— Copilot 拥有强大的算力,计算速度非常快,甚至可以检测不完整代码片段中的易受攻击模式

  • 检测硬编码密钥的示例:

2.AI污点建模实践

2.1.技术点

CodeQL发现安全缺陷离不开污点传播分析,对API的污点建模(source、sink、summary)至关重要。

开源软件(OSS)社区已经开发了数千个可能需要建模的 API 的 package 。如果建模不及时更新,就会导致漏报

传统上,安全人员会对这些 API 手动建模,但要对数千个 OSS 框架建模非常耗时。为此,团队开始使用大语言模型(LLMs)来自动为这些API建模,极大地提高了效率。

AI建模的结果会使用一种 variant analysis (变体分析)的技术进行测试,这是一种识别新型安全漏洞的方法。

variant analysis是使用一个已知的漏洞(可能来源于渗透、fuzzing等)作为一个源,去发现代码中相似问题的一个过程,其会用到以下技术点:

  • 语义分析(程序语义,可以迅速找到重点函数的调用或拥有特定方法签名的函数)

  • 控制流分析(代码执行路径

  • 数据流分析(可以发现潜在的summary

  • 污点分析(可以发现潜在的summary

  • ...

此外,其还推出了一种 Multi-Repository Variant Analysis (MRVA)技术,可以多仓库联动,大规模执行变体分析。

2.2.AI建模实践

  • CodeQL建模编辑器:

2.2.1.建模前扫描

未对

org.sql2o.Connection.createQuery(String)

建模,直接执行SqlTainted.ql,查询结果为0

2.2.2.开始建模

点击 【Start modeling】

可以为找到的未建模的API选择【Model type】

  • Source

  • Sink

  • Flow summary

  • Netural

  • 还可以选择【Model dependency

也就是将建模结果适配到你选定的其他仓库

  • 会找到你选定仓库中所有调用sql2o相关方法的地方,可以看到上文展示的那个sink点也被找到了

此时,常规建模是需要我们手动指定api是source、sink 还是 summary,这项工作量非常巨大

但是 AI建模 可以一键完成以上污点建模过程

2.2.3.AI一键污点建模

【Model with AI】AI一键污点建模

AI建模会自动理解各个API的工作原理,建模完成:

完成后点击【Save all】

2.2.4.建模后重新查询

重新运行查询即可发现SQL注入漏洞

建模后的查询结果:

总结

Copilot + CodeQL 还有很多其他功能,但好多功能还未公开,如:

  • Secret to detect generic secrets

  • Copilot chat to scale remediation

  • Automically remediating security backlog

实在找不到关于CodeQL+Copilot 的AI污点建模的实现原理(流下了没用的泪水),如果大家有发现相关的文章,欢迎留言/私信(抱拳了!)

阅读原文

跳转微信打开