Github架构师手把手教你CodeQL-AI建模!
2024-11-29 08:0:0 Author: mp.weixin.qq.com(查看原文) 阅读量:0 收藏

  • CodeQL
  • Copilot
  • AI modeling
  • Variant analysis

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.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.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污点建模的实现原理(流下了没用的泪水),如果大家有发现相关的文章,欢迎留言/私信(抱拳了!)


文章来源: https://mp.weixin.qq.com/s?__biz=MzkxNzY3MjE1NA==&mid=2247484595&idx=1&sn=46e11c6c06868a58c036b617d3ab0a8e&chksm=c1bc5d06f6cbd410a77e873eaafa8c9eba62be9a6d9477ce2f461492837f2d851738ac8a7201&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh