今年 4 月,Anthropic 发布了一款名为 Mythos 的 AI 安全分析模型,宣称其在源代码漏洞发现上能力极强,甚至以"安全风险过高"为由暂缓了公开发布。听起来像是某种危险级 AI 工具——能自动挖掘零日漏洞,一旦放出后果不堪设想。
然后 curl 的作者 Daniel Stenberg 拿 Mythos 扫了一下 curl。
curl 是全球使用最广泛的开源命令行 HTTP 工具,代码库约 17.6 万行 C 代码,历经二十多年持续维护,安全审计密度极高。Mythos 扫完之后,确认的漏洞数量是:1 个,低危。
从"暂缓发布的安全级 AI"到"扫描结果几乎为零",这个落差值得认真拆解。
"危险级 AI"的叙事是怎么构建的
Anthropic 对 Mythos 的公开描述核心逻辑是:这个模型太擅长发现漏洞了,放出来会被恶意利用,所以我们要谨慎。这个叙事本身就有问题——一个安全分析工具的"危险"程度,取决于它发现的漏洞是否真实、是否高危、是否可利用。如果扫描一个成熟项目只能找到 1 个低危问题,那它的实际威胁水位远低于宣传水位。
更关键的一点:curl 并不是随便选的项目。它是一个安全敏感度极高的网络库,历史上出现过多次真实 CVE,社区和外部审计者持续在做安全扫描。如果 Mythos 真的具备"异常出色"的漏洞发现能力,curl 应该是能体现这种能力的理想测试对象。结果却说明,面对经过长期安全打磨的代码,Mythos 的发现率极低。
低发现率意味着什么——两种解读
第一种解读:Mythos 确实能力有限。17.6 万行代码中只找到 1 个低危漏洞,说明模型对复杂代码库的漏洞模式识别能力远未达到"危险"级别。C 代码中的内存安全问题、逻辑漏洞、边界条件错误——这些是真实攻击者会利用的目标,Mythos 在这方面表现平平。
第二种解读:curl 的代码质量确实很高。经过二十多年的持续安全审计、 fuzzing、社区 review,低危漏洞都已经被找光了,留给任何工具的发现空间本来就极小。这个解读同样合理——但恰恰说明,AI 安全扫描的价值上限受限于代码库本身的安全成熟度。对已经高度审计的项目,AI 扫描几乎不产生增量发现;对未经审计的项目,AI 扫描的发现质量又需要人工逐条验证。
两种解读指向同一个结论:Mythos 的实际能力与"暂缓发布"的安全叙事之间存在明显错位。
实践:用传统工具 + AI 辅助做代码安全扫描
与其依赖单一 AI 模型的全量扫描,更务实的做法是把传统静态分析工具和 AI 输出组合使用。下面是一个可以直接跑的流程,以 curl 或任意 C 项目为例。
第一步:用 cppcheck 做静态分析
# 安装 cppcheck(Ubuntu/Debian)
sudo apt-get install cppcheck
# 克隆 curl 源码
git clone https://github.com/curl/curl.git
cd curl
# 运行 cppcheck,启用所有检查项,输出到文件
cppcheck --enable=all --suppress=missingInclude \
--inline-suppress --force --language=c \
-j4 ./lib ./src \
2> cppcheck-results.txt
# 查看结果摘要
wc -l cppcheck-results.txt
grep -c "error" cppcheck-results.txt
grep -c "warning" cppcheck-results.txt
cppcheck 不依赖编译,直接扫描 C 源码,能发现内存泄漏、未初始化变量、空指针风险等常见问题。对 curl 这样的项目,它也会产出少量发现,但大部分是低危或已知风格问题。
第二步:用 clang 静态分析器做编译级检查
# 安装 clang 和 scan-build
sudo apt-get install clang clang-tools
# 在 curl 项目中用 scan-build 编译并分析
cd curl
mkdir build-analyze && cd build-analyze
scan-build cmake .. -DCMAKE_C_COMPILER=clang
scan-build make -j4
# scan-build 会自动输出分析报告路径
# 报告在 /tmp/scan-build-XXXX/ 目录下,浏览器打开即可查看
scan-build 利用 clang 的编译器前端做更精确的分析,能发现数据流相关的漏洞,比如未检查的返回值、taint 传播等。
第三步:用 AI 辅助验证特定可疑代码段
传统工具输出结果后,可以用 LLM 辅助做深度判断——不是全量扫描,而是针对静态分析标记的代码段逐条评估:
import anthropic
client = anthropic.Anthropic()
def analyze_snippet(file_path: str, line_range: tuple, tool_warning: str):
"""把静态分析标记的代码段发给 LLM,评估是否构成真实漏洞"""
with open(file_path) as f:
lines = f.readlines()
snippet = "".join(lines[line_range[0]-1:line_range[1]])
prompt = f"""你是一名 C 语言安全审计专家。以下是静态分析工具的一段警告:
工具警告:{tool_warning}
对应源码({file_path},第 {line_range[0]}-{line_range[1]} 行):
```c
{snippet}
请判断: 1. 这是否构成真实可利用的安全漏洞?还是误报或风格问题? 2. 如果是真实漏洞,给出 CWE 编号和攻击场景描述。 3. 如果是误报,说明为什么工具会误判。
只输出判断结果,不要输出代码修复建议。"""
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=500,
messages=[{"role": "user", "content": prompt}]
)
return response.content[0].text
示例:分析 curl 中某段被 cppcheck 标记的代码
result = analyze_snippet( file_path="curl/lib/vtls/vtls.c", line_range=(120, 135), tool_warning="cppcheck warning: Possible null pointer dereference" ) print(result) ```
这个流程的核心思路是:传统工具做广度扫描,AI 做深度判断。不是让 AI 从零扫描 17 万行代码,而是让 AI 在工具已经标记的窄范围内做精确评估。这样既控制了 AI 的误报范围,又利用了它的语义理解能力。
AI 安全扫描的现实边界
从 Mythos 扫描 curl 的结果,可以提炼出几个务实判断:
- 成熟项目的安全增量极小。curl 这类经过长期 fuzzing 和审计的项目,AI 扫描几乎不会产出新发现。AI 安全扫描的最大价值场景是未经充分审计的内部项目、新开源项目、或快速迭代的代码。
- AI 发现需要逐条人工验证。Mythos 只确认了 1 个低危漏洞,但它很可能报告了更多候选漏洞,经人工复核后大部分被排除。任何 AI 安全工具的原始输出都包含大量误报,验证成本不可忽略。
- "暂缓发布"叙事需要独立验证。当厂商以安全风险为由限制工具发布时,第三方实测是最有效的校验手段。curl 的实测结果说明 Mythos 的实际威胁水位远低于宣传水位。
- 组合使用优于单一依赖。静态分析 + fuzzing + AI 辅助判断的组合流程,比单独依赖任何一种工具更可靠。
如果你的团队正在评估 AI 安全扫描工具,建议先拿一个自己熟悉且已审计过的项目做对照测试——看 AI 能否发现你已经知道的问题,以及它报告了多少你确认不是问题的误报。这个对照实验比任何厂商宣传都更有参考价值。