我在十个微小的 Solidity 合约上测试了本地模型,并植入了如下漏洞:
- withdraw 函数中的重入漏洞
- 缺失访问修饰符
- ERC4626 舍入误差
- 错误的签名检查
- 微小的逻辑漏洞
我通过 WSL2 上的 Ollama 运行了 7B(或更小)规模的 Qwen2.5-Coder 与 DeepSeek-Coder 进行对比测试。如果你使用的是 33B 模型,请忽略此项。
对于每个合约,我发出了三个提示词:
- 通用的安全审查
- 针对重入和访问控制的专项检查
- 带有严重程度标签的结构化报告
指令遵循能力
Qwen 7B 在这一项上胜出。它几乎每次都能遵守严格的格式规则。DeepSeek 经常会添加额外的文本或忽略限制。当你将模型输出接入自动化流水线时,Qwen 的一致性至关重要——解析失败是毫无意义的。
专项检查
Qwen 能紧扣主题。问它关于重入的问题,它就会回答重入。DeepSeek 则会跑题到 Gas 优化或代码风格建议上,增加了噪音。
解释质量
Qwen 能清晰地阐述攻击序列,展示漏洞是如何被利用的。DeepSeek 提供的是通用的教科书式回答。两者都是正确的,但 Qwen 的细节有助于编写报告。
怀疑精神与幻觉
DeepSeek 会标记出更多问题,表现得像个“怀疑生成器”。它甚至会在干净的代码中凭空捏造问题。
相比之下,当代码没有漏洞时,Qwen 会保持沉默。而 DeepSeek 则会声称存在并不存在的漏洞。
误报会浪费几分钟时间;而漏掉漏洞则可能损失一切。我倾向于利用 DeepSeek 来发现值得调查的内容,但在自动化流程中,我更依赖 Qwen。
我的最终结论
模型规模比品牌更重要。1.5B 的模型无法通过推理解决多步漏洞,也无法遵守格式要求。
在 7B 规模下,两者都能处理基础缺陷,但对于复杂的业务逻辑,两者都无法取代人工审计师。把它们看作是分诊助手(triage assistants),而不是审计师。
我的配置:
- Qwen 7B: 用于结构化审查和流水线的默认选择。
- DeepSeek: 作为第二意见,用于捕捉 Qwen 遗漏的问题。
- Qwen 1.5B: 仅用于快速、低风险的初步筛选。
尽可能购买你的硬件能运行的最大模型。然后再考虑品牌问题。
你更喜欢一个多疑的模型,还是一个精准的模型?
Optional learning community: https://t.me/GyaanSetuAi
