← 最新论文
💻 computer science

Evaluating Cryptographic API Misuse Detectors for Go

本文通过建立 14 类误用分类体系、在 328 个项目中评估 4 种检测工具,并识别出 7,473 个漏洞,首次对 Go 语言中加密 API 的误用进行了全面研究,以凸显当前检测覆盖范围存在的显著差距。

原作者: Vivi Andersson, Martin Monperrus

发布于 2026-04-28
📖 1 分钟阅读☕ 轻松阅读

原作者: Vivi Andersson, Martin Monperrus

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

想象一下,你正在建造一座堡垒。你拥有世界上最安全、最坚固的锁(加密 API)来保护你的宝藏。但是,如果你把锁装反了、使用了脆弱的钥匙,或者忘记把门闩好,那么你的堡垒就和根本没有锁一样脆弱。这就是开发人员“误用”加密工具时发生的情况:他们以为自己很安全,因为他们使用了正确的技术,但他们在如何使用这些技术上犯了错误。

本文就像是对一种特定建筑材料——Go 编程语言——进行的质量控制检查。Go 是用于构建互联网一些最关键基础设施的语言(例如管理互联网流量或保护数据中心的系统)。虽然专家们多年来一直在研究其他语言(如 Java)中的这些“锁安装错误”,但直到现在,还没有人真正检查过 Go 的施工现场。

以下是研究人员所做工作的简要说明:

1. 检查员(工具)

研究人员收集了四种不同的“安全检查员”(软件工具)来扫描 Go 代码中的这些错误:

  • CodeQL:一种功能强大、学术风格的检查员,它查看数据如何在代码中流动。
  • Gopher:一种专为 Go 构建的专用工具,以在发现潜在问题方面非常激进而闻名。
  • Gosec:一种流行的、由社区构建的工具,用于检查常见的安全错误。
  • Snyk Code:一种商业工具,利用人工智能和静态分析来查找漏洞。

2. 蓝图(分类法)

在开始扫描之前,研究人员创建了一份主检查清单,列出了开发人员可能搞砸加密的 14 种不同方式。这就像是一份常见错误清单,例如:

  • 使用太旧且太弱的锁(不安全的算法)。
  • 使用太短或容易猜测的钥匙(密钥长度过短)。
  • 忘记检查门口的人是否真的是他们声称的那个人(未进行主机密钥验证)。
  • 使用可预测的模式作为锁的机制(可预测的 IV)。

3. 检查(实验)

他们选取了328 个真实世界、流行的 Go 项目(例如运行 Kubernetes 或 Terraform 的软件),并对它们运行了所有四个检查员。

  • 结果:检查员总共发现了7,473 个错误
  • 意外:检查员们彼此完全不一致。
    • Gosec 最活跃,发现的错误最多,但它也标记了许多实际上并不危险的东西(例如在样本代码文件中发现“弱锁”,而该文件在现实生活中永远不会被使用)。
    • Gopher 发现了一组其他工具遗漏的独特错误,但它有时会在某些项目上卡住或无法运行。
    • Snyk Code 非常快速且精确,发现的错误较少,但对其发现的错误非常有把握。
    • CodeQL 是最慢的(建立代码“数据库”需要很长时间),但它发现了一些其他工具遗漏的非常具体、复杂的错误。

4. 裁决

主要结论是,没有单个检查员是完美的

  • 如果你只使用一个工具,你可能会错过墙上的一个大洞,因为该工具不知道如何寻找它。
  • 如果你使用所有工具,你会收到大量“误报”(关于实际上没有损坏的事物的警告),这可能会让人难以应付。

研究人员发现,这些工具经常对某段代码是否真的是错误存在分歧。例如,一个工具可能会说:“这个密钥太短了!”而另一个工具则说:“没关系。”

底线

这项研究是首次有人系统地检查我们在 Go 代码中发现这些特定安全错误的能力。他们发现,虽然我们有帮助的工具,但它们目前就像一群说着不同语言、对“坏锁”定义不同的检查员。

为了保持基于 Go 的系统的安全,安全工程师不应只依赖一个工具。相反,他们应该结合使用这些工具(“集成”),以捕获最广泛的错误网,同时理解他们需要手动审查结果,以区分真正的危险和误报。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →