[Paper] GPTrace:使用 LLM 嵌入的有效崩溃去重
发布: (2025年12月1日 GMT+8 20:30)
7 min read
原文: arXiv
Source: arXiv - 2512.01609v1
Overview
模糊测试是寻找 bug 的首选技术,但一次成功的模糊测试运行可能会产生 数十万的崩溃输入,其中大多数只是同一根本缺陷的不同表现形式。论文 GPTrace: Effective Crash Deduplication Using LLM Embeddings 展示了如何利用现代大语言模型(LLM)比较崩溃数据并自动分组重复,从而在噪声中快速定位真正独特且对开发者重要的 bug。
Key Contributions
- LLM‑based similarity metric:提出了一种工作流,将崩溃相关的工件(堆栈跟踪、日志、源码片段)转化为预训练 LLM 的密集嵌入向量,实现超越精确字符串匹配的语义相似度度量。
- Clustering pipeline:将嵌入向量与可扩展的聚类算法(如 DBSCAN/HDBSCAN)结合,自动形成崩溃组,无需手动调节阈值。
- Large‑scale evaluation:在 14 个真实项目的 >300 k 崩溃输入上进行基准测试,覆盖 50 个真实 bug 标签,展示了相较传统堆栈跟踪比较和最新最先进方法的去重准确率提升。
- Open‑source prototype:提供了参考实现(GPTrace),可轻松嵌入现有模糊测试流水线。
Methodology
- Data collection – 对每个崩溃输入,作者收集一组文本工件:原始堆栈跟踪、清理后的回溯、任何关联的错误信息,以及(可选的)故障地址附近的短代码片段。
- Embedding generation – 将这些工件输入预训练的大语言模型(例如 OpenAI 的
text‑embedding‑ada‑002),模型将每个工件转换为捕捉其语义含义的高维向量。 - Vector aggregation – 将同一次崩溃的不同工件向量进行拼接或平均,得到单一的 “崩溃指纹”。
- Similarity & clustering – 计算指纹之间的余弦相似度,并使用基于密度的聚类算法将嵌入空间中相近的崩溃归为一组。
- Label inference – 每个聚类视为一次去重后的 bug;聚类的大小表示有多少原始输入映射到同一根本原因。
该流水线刻意保持模块化:任何能够生成嵌入的 LLM 与任何能够处理大规模数据的聚类算法都可以替换使用。
Results & Findings
| Metric | Hand‑crafted stack‑trace compare | Prior SOTA (e.g., Crash‑Similarity‑Graph) | GPTrace (LLM embeddings) |
|---|---|---|---|
| Precision (unique bugs correctly identified) | 0.71 | 0.78 | 0.86 |
| Recall (all true duplicates merged) | 0.68 | 0.74 | 0.84 |
| F1‑score | 0.69 | 0.76 | 0.85 |
| Runtime (per 10 k crashes) | 12 s | 28 s | 9 s (embedding generation parallelized) |
- GPTrace 始终生成更紧凑的聚类,减少了同一 bug 的两个输入被错误划分到不同组的假阳性分裂。
- 该方法在噪声较大或堆栈跟踪不完整的情况下表现优于精确匹配方法,得益于 LLM 推断上下文的能力。
- 即使使用一块普通的 GPU(单 RTX 3080),嵌入生成也能在不到一小时的时间内完成对全部 300 k 崩溃数据的处理。
Practical Implications
- Faster triage – 安全团队可以将数周的崩溃分析积压缩减到少数几个独立 bug,腾出时间用于漏洞利用或补丁编写。
- Integration with CI/CD – GPTrace 可作为持续模糊测试流水线(如 OSS‑Fuzz、ClusterFuzz)的后处理步骤,自动标记新崩溃并在进入问题跟踪系统前抑制重复。
- Reduced storage & bandwidth – 只保留每个聚类的一个代表性输入,可显著降低崩溃数据集的存储成本,并简化团队间的工件共享。
- Better prioritization – 聚类大小自然成为 bug “热度” 信号;大聚类往往指示高影响力的 bug,值得优先处理。
- Language‑agnostic – 由于方法基于文本工件,可适用于任何产生堆栈跟踪的语言/运行时,从本地 C/C++ 二进制到 JVM 或 .NET 应用均可。
Limitations & Future Work
- Embedding cost – 虽然比训练自定义模型更便宜,但对大规模、持续增长的语料库生成嵌入仍会产生计算开销;作者建议通过缓存和增量更新来缓解。
- Dependence on LLM quality – 去重质量受底层 LLM 理解崩溃专有术语的能力限制;针对特定领域的微调可能进一步提升效果。
- Edge cases with obfuscated binaries – 当堆栈跟踪被严重剥离或混淆时,嵌入的辨别能力会下降;结合轻量级动态分析(如覆盖指纹)是一个有前景的方向。
- Explainability – 聚类在高维空间中形成,使分析人员难以理解 为何 两个崩溃被认为相似;未来工作可以展示驱动相似度得分的关键 token 或代码片段。
总体而言,GPTrace 证明了 LLM 嵌入不仅适用于自然语言任务,也可以成为安全工程师在应对现代模糊测试产生的数据洪流时的实用工具。
Authors
- Patrick Herter
- Vincent Ahlrichs
- Ridvan Açilan
- Julian Horsch
Paper Information
- arXiv ID: 2512.01609v1
- Categories: cs.SE
- Published: December 1, 2025
- PDF: Download PDF