使用LLM检测不安全代码---Python漏洞检测的快速实验

本文探讨了使用大型语言模型(LLM)如GPT4检测和修复Python代码中的安全漏洞。实验包括零样本、少样本、KNN少样本和带有修复的KNN Few-shot方法,结果显示,LLM在识别和修复不安全代码方面具有潜力,尤其当结合代码修复提示时,准确率和F1分数显著提升。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址:detecting-insecure-code-with-llms

2024 年 3 月 22 日

如果您是软件专业人士,您可能会害怕在发布当天早上打开安全扫描报告。为什么?您知道它是提高工作质量和完整性的绝佳工具,但您也知道您将在接下来的几个小时内忙于在截止日期之前解决所有安全问题。如果幸运的话,许多问题都可能是误报,但您必须手动验证每个问题的状态,并在代码最终确定后快速修补其余问题。如果您经历过这种情况,您可能希望有一个更顺畅、更少临时性的流程来识别、分类和修复代码库中的漏洞。好消息是,最近的研究表明,大型语言模型 (LLM) 可以熟练地将代码分类为安全或不安全,解释弱点,甚至提出纠正性更改。这有可能显着简化传统静态扫描之外的安全编码实践。

如果您想探索 Jupyter Notebook 或测试您自己的代码,请转到OpenAI Cookbook 中的pull request(当前正在审核中)。

在我们开始提示 GPT4 之前,有一些关键概念和定义将有助于构建我们设计逻辑实验所需的基础。

常见Weakness(弱点)枚举

2006 年,政府资助的研究组织MITRE开始定期发布常见弱点枚举 (CWE),这是社区开发的软件和硬件弱点定义和描述的通用分类法。从这个意义上说,“弱点”是指软件或硬件中可能导致漏洞的情况。2023 年 25 名最危险 CWE名单突出显示了最严重的惯犯。还有另外一份名单,其中有15 家“顽固”CWE,它们在 2019 年至 2023 年期间出现在每个前 25 名的名单中。他们大致可以分为三组:

  • 第 1 组:对不可信数据源的弱处理(例如命令/SQL 注入、路径遍历、不正确的输入验证和跨站点脚本)
  • 第 2 组:内存管理或类型强制较弱(例如 NULL 指针解除引用)
  • 第 3 组:薄弱的安全设计选择(例如硬编码凭证)

为了帮助缩小调查范围并明确界定,我们将重点关注第一组 CWE。

静态代码分析

自动检测不安全代码的传统方法涉及使用静态分析工具,例如 CodeQL、Bandit、SonarQube、Coverity 和 Snyk。这些工具可以随时使用,但通常用于在代码冻结阶段之后和正式发布流程完成之前扫描代码是否存在漏洞。它们的工作原理是将源代码解析为抽象语法树或控制流图,表示代码的组织方式以及组件(类、函数、变量等)如何相互关联。然后使用基于规则的分析和模式匹配来检测各种问题。静态分析工具可以在整个开发周期中与 IDE 和 CICD 系统集成,并且许多工具提供自定义配置、查询和报告选项。它们非常有用,但也有一些缺点(除了那些最后一刻高压的错误修复方):

  • 资源密集型:它们将大量代码库转换为数据库以执行复杂的查询
  • 误报:它们通常包含大量的non-issues
  • 耗时的后续工作:需要付出巨大的努力来验证和修复问题

可以理解的是,这些限制激发了研究人员探索增强代码安全实践的新方法,例如生成式人工智能。

之前的工作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值