关键词
-
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架构师
-
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模型主要的更新点:
-
升级的 AI Codex 模型:将 Copilot 升级到新的 OpenAI Codex 模型,该模型在代码合成方面的能力有显著提升。 -
更好的上下文理解:通过一种称为 Fill-In-the-Middle (FIM) 的新范式改进了Copilot,该范式为开发者提供了更好的代码建议。其不仅考虑代码前缀,还会利用代码后缀,在二者中间留下 gap 供Copilot 填充。这样,大模型现在能够更好地理解用户代码的逻辑。在 FIM 提供高质量代码建议的同时,还开发了各种策略保证模型的低延迟。 -
轻量级客户端模型:更新 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污点建模的实现原理(流下了没用的泪水),如果大家有发现相关的文章,欢迎留言/私信(抱拳了!)
原文始发于微信公众号(CodeAnalyzer Ultra):Github架构师手把手教你CodeQL-AI建模!
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论