这项研究是首次有人系统地检查我们在 Go 代码中发现这些特定安全错误的能力。他们发现,虽然我们有帮助的工具,但它们目前就像一群说着不同语言、对“坏锁”定义不同的检查员。
为了保持基于 Go 的系统的安全,安全工程师不应只依赖一个工具。相反,他们应该结合使用这些工具(“集成”),以捕获最广泛的错误网,同时理解他们需要手动审查结果,以区分真正的危险和误报。
以下是 Vivi Andersson 和 Martin Monperrus 撰写的论文《评估 Go 语言中的加密 API 误用检测器》的详细技术总结。
1. 问题陈述
加密 API 误用是一类关键的安全漏洞,开发者错误地实现加密协议,导致严重的安全缺陷,尽管其底层数学原理是可靠的。虽然该问题在 Java 生态系统中已得到广泛研究,但在 Go (Golang) 中仍 largely 未被探索,尽管 Go 在安全关键型基础设施(如 Kubernetes、Terraform、Let's Encrypt)中占据主导地位。
本文旨在解决以下方面缺乏系统性分析的问题:
检测 Go 语言中加密误用的工具的可用性和能力。
这些漏洞在真实世界 Go 项目中的普遍性和分布情况。
现有检测工具的一致性和可靠性。
2. 方法论
作者采用了一种混合方法,结合了定性工具分析和大规模定量实验。
A. 工具选择 (RQ1)
通过系统性搜索,确定了 四种最先进工具 符合纳入标准(支持 Go、活跃开发、有文档):
CodeQL: GitHub 基于 Datalog 的框架(开源)。
Gopher: 一种专门用于在 SSA 表示上进行污点跟踪的学术工具。
Gosec: 社区开发的 Go 语言静态分析器(开源)。
Snyk Code: 专有的商业静态分析工具。
B. 分类法构建
作者建立了一个涵盖六个领域的 14 种加密误用类别 的整合分类法:
加密原语: 不安全的算法(如 MD5)、不安全的伪随机数生成器 (PRNG)、已弃用的函数。
密钥管理: 常量/可预测的密钥、短密钥长度、静态/可预测的初始化向量 (IV)。
基于密码的密钥派生函数 (KDF): 短/可预测的盐值、低哈希迭代次数。
传输安全: 未加密的 HTTP、TLS/SSL 配置错误。
安全外壳 (SSH): 不安全的密码套件、缺失主机密钥验证。
令牌认证: 缺失 JWT 验证。
C. 实验数据集 (RQ2)
来源: 从 920 个仓库的数据集中提炼出的 328 个高知名度、与安全相关的开源 Go 项目的子集。