写在前面
一个月前整了个基于opencode的玩具LLM源码审计系统https://wsxk.github.io/ai_audit/
业界也主要在探究这部分内容,玩具审计系统已经不足以支撑实际使用了,还是需要整点好的
btw,llm辅助二进制逆向挖洞这个方向已经被pass掉了(还无法完整分析大型程序)
前期调研
https://github.com/purpleroc/llm_code_audit/blob/main/llm-code-audit-report.md
这篇文档,虽然是chatgpt写的,但是实际上某种程度上也说明了当前llm辅助源码的探究方向。
https://x.com/sujingshen/article/2048278721107530231
这篇文章里提到当前AI系统上下文1M tokens级别,虽然能够容纳20-40万行代码,但是 context rot(上下文衰减)问题严重 ,大模型经常忽略细节,且装入上下文后并不等于推理完成。
即便用了RAG加强代码检索,也无法解决状态追踪、隐含依赖发现、缺失检测等关键审计问题。
当前流行的agentic模式,是让AI根据需要读代码,也只能沿着搜索路径走,无法系统性遍历整个代码库。
评测标准调研
https://github.com/scaleapi/SWE-bench_Pro-os
似乎看起来是有点不错的benchmark
1. LLM源码审计
目前看下来,LLM源码审计中可以用到的技术有: RAG与知识库,代码检索mcp工具、静态分析工具、动态验证技术四种。
值得一提的是,目前还没有一个统一的分析,说明这些技术使用后能够让模型识别源码问题的效率更高,精度更准。
1.1 静态分析工具
https://github.com/opengrep/opengrep
1.2 代码检索mcp工具
https://github.com/colbymchenry/codegraph
1.3 动态验证技术
容器、或者给agent提供一个可运行验证的环境+skill(使用方法)+mcp(使用工具)即可
1.4 RAG与知识库
https://github.com/nashsu/llm_wiki
1.5 现状分析
其实当前辅助LLM进行漏洞挖掘的技术有很多,但是每个都很难说能够实际意义上可以被观测到,对源码挖掘有帮助。
最有效的应该是动态验证,能直接发现问题并复现,看到现象是最好的,但是并不是每个问题都能被复现。
目前来看,codegraph也是有帮助的,能够减少误报。