G.O.S.S.I.P 阅读推荐 2025-03-10 LLM 在前,漏挖人能否保住饭碗(Yet?)

admin 2025年3月10日22:39:25评论26 views字数 2521阅读8分24秒阅读模式

LLM 在代码理解上表现出了强大的能力,相信漏挖选手都已经对 LLM 跃跃欲试。今天我们介绍的这篇来自 IEEE S&P 2024 的论文LLMsCannot Reliably Identify and Reason About Security Vulnerabilities (Yet?): A Comprehensive Evaluation, Framework, and Benchmarks 对 LLM 的漏洞识别能力进行了一番测评,虽然 LLM 的能力仍在快速迭代,一些实验结论可能随时被推翻,但文章依然有助于我们熟悉这位新朋友。全程无广,各位共赏。

G.O.S.S.I.P 阅读推荐 2025-03-10 LLM 在前,漏挖人能否保住饭碗(Yet?)

文章构建了一个由 C 和 Python 漏洞代码片段组成的数据集SecLLMHolmes,结合多种 prompt 方案,对 8 个常用的 LLM 识别漏洞的能力进行了评估。数据集总共包括 228 段代码,其中包含 48 段手动构造的漏洞代码,30 段真实漏洞代码,150 段通过 code augumentation (改函数名、变量名、添加无用代码等)得到代码,每个实验根据不同测试需求选择代码进行测试。测评的 LLM 列表如下图。由于论文实验时间较早,实验只覆盖到了 gpt-4。就这些模型而言,gpt-4 在文章实验中整体表现较好。

G.O.S.S.I.P 阅读推荐 2025-03-10 LLM 在前,漏挖人能否保住饭碗(Yet?)

实验总结了五点结论:

(1)LLM 的表现严重受 prompt 影响,但无论使用何种技术,被测的 LLM 都有比较高的误报率;

(2)对于相同的代码片段,LLM 输出是不确定的(non-deterministic),时对时错;

(3)即使 LLM 正确判断了代码是否包含漏洞,它给出的理由也常常是错误的;

(4)对代码进行微小的改变,比如修改函数名,就可能导致 LLM 给出错误结论,即使使用 Chain-of-thought 这类 prompt 策略也是如此;

(5)LLM 在真实世界的漏洞上表现不佳

第一点是所有静态分析都难以避免的问题,想客观评价 LLM 的准确性,还需要拿真实代码数据集和传统方案进行对比。我们直接从第二点开始。SecLLMHolmes 选取了两段经典漏洞代码(CWE-787 “out-of-bound write” 和 CWE-89 “SQL injection” )和它们 patch 后的版本作为数据集,对每个 LLM 重复测试十次,分析 LLM 能否给出稳定的输出。

论文进行了两组实验,一组按 OpenAI 文档建议,配置 Temperature = 0.2,另一组配置 Temperature = 0.0,两组结果见下表,输出不一致的情况在图中红色高亮(没有高亮的既有稳定全对的,也有稳定全错的)。整体来说越界写漏洞检出的稳定性明显弱于 SQL 注入,而降低 Temperature 有助于提升输出稳定性。

G.O.S.S.I.P 阅读推荐 2025-03-10 LLM 在前,漏挖人能否保住饭碗(Yet?)
G.O.S.S.I.P 阅读推荐 2025-03-10 LLM 在前,漏挖人能否保住饭碗(Yet?)

接下来,作者改变 prompt,要求 LLM 在判断代码是否存在漏洞的同时进一步说明为什么做出这样的判断。结果表明,LLM 至少在找漏洞这个方面常常口是心非。实验结果见下表,绿色部分是推理和结论一致的情况。

G.O.S.S.I.P 阅读推荐 2025-03-10 LLM 在前,漏挖人能否保住饭碗(Yet?)

文章也给出了一个口是心非的案例:chat-bison 在推理中明确说明了代码可能有 SQL 注入的问题,但最终认为代码没有漏洞。这组实验也说明了文章测试的几款 LLM 并非依赖自身推理做出决策。(这种情况在现在的推理模型中应该会有所改善?)

G.O.S.S.I.P 阅读推荐 2025-03-10 LLM 在前,漏挖人能否保住饭碗(Yet?)

随后,文章观察了 LLM 是否会因为代码片段的微小修改改变判定结果。代码修改分为两种:Trival code augementation(自动化地将变量名修改为随机值、添加空格等简单修改)和 Non-trival code augementation(将函数名改为 secure-func,unsecure-func 等有特别含义的高级修改)。具体改法论文中有更详细的说明,修改都不影响漏洞本身。

实验结果如下表所示(其中代码修改导致结果改变的情况已经高亮)。文章发现,即使仅仅是简单添加空格也可能导致输出改变(但我们要考虑到这也可能是 LLM 自身输出不确定性导致的)。显然 Non-
trival 手法会给 LLM 带来更大的干扰,这说明想要恶意对抗 LLM 漏洞检测现阶段还是非常容易的

G.O.S.S.I.P 阅读推荐 2025-03-10 LLM 在前,漏挖人能否保住饭碗(Yet?)
G.O.S.S.I.P 阅读推荐 2025-03-10 LLM 在前,漏挖人能否保住饭碗(Yet?)

其实还有另一篇论文(Uncovering the Limits of Machine Learning for Automatic Vulnerability Detection)对类似的代码修改对 LLM 漏挖的影响做了更细致的验证,结论是相似的,LLM 会明显受代码改动带来的噪声干扰,但实验规模更大,评测也更细致,感兴趣的朋友可以自己去搜索该论文查看细节。

除了人工构造的漏洞代码片段,文章也用 Linux,Libdiff,gpac 等软件的真实 CVE 验证了 LLM 的漏挖能力。整体来说错误率比较高,表格比较长,结论也不算意外,各位可以自行查看。

除此以外,论文还有一些实验也很有意思。比如评估了不同的 prompt 策略组合,包括 zero-shot/few-shot,task-oriented(任务导向)/role-oriented(角色扮演),直接给结论/逐步推理/在prompt中提供漏洞定义等,整体的结论是不同模型适合不同的策略,没有哪种方案呈现出显著的优势。即使是我们熟知的角色扮演策略,也对不了所有 LLM 的胃口。这部分细节比较多,且结论可能随着模型更新随时变化,实际使用还是得自行测试,这里就不展开了,需要的朋友们可以翻翻论文,做个参考。

最后夹带一段私货,LLM 是否会抢走我们漏挖人的饭碗呢?从论文结果来看,LLM 在代码审计方面还有很长的路要走,但文章设置的实验是相对简单粗暴的,要求 LLM 对代码是否存在漏洞给出结论,而现在更常见的做法是仅在部分环节利用 LLM 的能力辅助漏挖。随着 LLM 能力的增强,想必过去不少漏挖工作(以及大家手头正在做的一些工作…)会被迅速淘汰,但技术发展向来都是将人类从低级劳动中解放出来,去思考更复杂的问题。漏挖不是新话题,但长远来看,无论是人工审计还是自动化漏挖都还在相当初级的阶段,或许这正是各位开拓新战场的好时机。

论文:https://www.bu.edu/peaclab/files/2024/05/saad_ullah_llm_final.pdf

原文始发于微信公众号(安全研究GoSSIP):G.O.S.S.I.P 阅读推荐 2025-03-10 LLM 在前,漏挖人能否保住饭碗(Yet?)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年3月10日22:39:25
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   G.O.S.S.I.P 阅读推荐 2025-03-10 LLM 在前,漏挖人能否保住饭碗(Yet?)https://cn-sec.com/archives/3825038.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息