FiniteMonkey:基于大型语言模型的智能漏洞挖掘引擎解析
引言:重新定义漏洞挖掘的边界
在网络安全领域,漏洞挖掘一直是技术攻防的核心战场。传统的漏洞检测工具依赖规则引擎与专家经验,但面对日益复杂的代码逻辑和新兴编程语言,其局限性逐渐显现。FiniteMonkey应运而生——这是一款完全基于大型语言模型(LLM)的智能漏洞挖掘引擎,通过任务驱动与提示工程,实现了无需预训练知识库的自动化漏洞发现。截至2024年5月,该工具已帮助发现价值超过6万美元的漏洞赏金,成为安全审计领域的一匹黑马。
核心优势:为什么选择FiniteMonkey?
1. 任务驱动与提示工程的革命性结合
FiniteMonkey摒弃传统漏洞检测的“问题驱动”模式,采用**任务驱动(Task-Driven)**框架。其核心逻辑是通过精心设计的提示(Prompt),引导模型主动分析代码逻辑,而非被动匹配已知漏洞模式。例如,初始提示“这段代码中存在一个漏洞,请找出它”相比“这段代码是否有漏洞?”显著提升了模型的推理深度。
2. 支持多语言的全栈扫描能力
引擎当前支持包括Solidity、Rust、Python、Move、Cairo等在内的11种编程语言,甚至可处理Solidity反编译生成的伪代码(.fr扩展名)。通过ANTLRv4实现的通用语法解析框架,使其能够快速适配新语言,而无需依赖特定编译器(如Solc)。
3. 低误报率的验证体系
采用DeepSeek-R1模型进行漏洞确认,结合上下文漏斗(Context Funnel)技术,将误报率控制在30-65%(根据项目规模浮动)。对于中型项目(约5000行代码),完整扫描耗时约2-3小时,成本仅20-30美元。
技术实现深度解析
安装与配置:三步快速部署
-
环境依赖:PostgreSQL数据库、Python环境、OpenAI API密钥 -
数据库初始化:执行 src/db.sql
创建数据表 -
配置文件定制: -
在 datasets.json
中定义扫描目标 -
通过 .env
配置模型参数(示例节选):
-
OPENAI_API_KEY=your-api-key
SCAN_MODE=CHECKLIST_PIPELINE
BUSINESS_FLOW_COUNT=10
MAX_THREADS_OF_SCAN=20
扫描流程的四大核心组件
-
业务流抽取器
使用ANTLRv4解析代码结构,通过Prompt生成JSON格式的业务流程图:
{"deposit()": [checkBalance, updateLedger, emitEvent]}
-
上下文漏斗(Context Funnel)
借鉴Cursor的Codebase QA思路,实现基于RAG的上下文提取模块,精准定位与漏洞相关的代码片段。 -
漏洞假说云生成器
通过10次迭代生成漏洞假说(Business Flow Count=10),利用LLM的“幻觉”特性拓展可能性空间。 -
多模型验证管道
采用Claude 3.5 Sonnet进行初步扫描,DeepSeek-R1完成最终确认,平衡准确率与时间成本。
设计哲学:从无限猴子到有限可能
起源:一个Prompt引发的革命
项目灵感始于GPT-3.5时代的简单实验:通过反复提交“这段代码存在一个漏洞,请找出它”的Prompt,开发者发现LLM展现出了超越规则引擎的推理能力。在两年内,这个策略帮助捕获了数十万元级别的漏洞赏金。
关键转折:ANTLRv4 vs Slither之争
尽管Slither在Solidity分析领域占据主导地位,但FiniteMonkey选择ANTLRv4作为解析核心,原因有三:
-
语言无关性:避免被Solc编译器限制,实现跨语言快速适配 -
轻量化:函数粒度的代码拆分比Slither的完整AST解析更高效 -
LLM增强:通过“业务流构建”替代传统静态分析,充分发挥模型的理解能力
错误累积定律的破解之道
传统AI审计工具面临错误累积定律的致命缺陷:假设每个处理环节准确率为70%,经过10个环节后整体准确率将暴跌至2.8%。FiniteMonkey通过以下设计实现突破:
-
可能性空间管理:构建漏洞假说云而非追求单一正确答案 -
验证收敛机制:使用DeepSeek-R1对假说进行快速证伪 -
有限迭代理论:通过实验发现LLM生成漏洞假说的多样性存在自然上限(通常10次迭代即可覆盖主要可能性)
实战表现与最佳实践
典型扫描结果解读
-
优先关注项: -
result
列标记为”yes”的条目 -
category
列过滤掉”dont need In-project other contract”
-
-
代码定位: -
business_flow_code
列查看具体代码片段 -
name
列定位文件路径
-
成本与效率优化指南
项目规模 | 迭代次数 | 耗时 | 预估成本 |
---|---|---|---|
小型(<1k行) | 5 | 1小时 | $10-15 |
中型(5k行) | 10 | 3小时 | $20-30 |
大型(10k行) | 15 | 6小时 | $50-70 |
黄金配置建议:
-
扫描阶段:Claude 3.5 Sonnet(平衡速度与准确率) -
确认阶段:DeepSeek-R1(误报率最低) -
禁用函数级扫描( SWITCH_FUNCTION_CODE=False
)以提升效率
未来展望与社区生态
技术路线图
-
语言扩展:计划新增Go、Swift支持 -
混合扫描模式:结合符号执行与模糊测试 -
自动化修复:基于验证结果生成Patch建议
开源社区协作
-
贡献指南:通过Pull Request提交新语言适配器或Prompt模板 -
漏洞数据库共建:集成Solodit的24,000个审计案例库 -
模型插件体系:支持用户自定义模型接入(需兼容OpenAI API格式)
结语:当猴子学会思考
FiniteMonkey的名字源自“无限猴子定理”,但通过LLM的可能性空间约束,它证明了漏洞挖掘既需要发散思维,也需要收敛验证。这款工具不仅是一个漏洞扫描器,更展现了任务驱动型AI在复杂问题求解中的革命性潜力——正如开发者所言:“我们不是在教AI如何找漏洞,而是在设计让它主动思考漏洞的环境。”
Github地址:https://github.com/BradMoonUESTC/finite-monkey-engine
“最好的编译器是大模型” —— FiniteMonkey设计哲学的核心命题