一. 引言

随着软件开发的日益复杂,敏感信息(如API密钥和访问令牌)的安全性变得尤为重要。如图1.1,根据GitGuardian的监测数据,2023年GitHub存储库中的密钥暴露数量较2022年增长了28%,累计泄漏超过1280万个身份验证和敏感密钥。这一问题不仅威胁到软件的安全性,还可能导致严重的安全漏洞和经济损失。例如,2022年9月,一名攻击者通过利用Uber公司PowerShell脚本中硬编码的管理员凭证,成功接管了该公司的内部工具和应用程序。

图1.1 2020年至2023年 Github 密钥泄漏数量

为了应对这一问题,市场上出现了许多开源和专有的敏感信息检测工具,如Gitleaks和SpectralOps等。然而,这些工具在实际使用中存在许多问题,其中最为突出的是高误报率。误报率过高不仅增加了开发人员的工作负担,还可能导致警报疲劳,使得开发人员忽视真正的安全威胁。

本文介绍《软件敏感信息检测工具比较研究》的相关工作,作者通过对5个开源和4个专有密钥检测工具进行的实证研究,详细分析了这些工具在精度和召回率方面的表现,揭示了误报和漏报的主要原因。

二. 敏感信息识别的工具比较

2.1 基准数据集

评估软件敏感信息检测工具选择SecretBench作为基准数据集。SecretBench是一个公开可用的软件敏感信息基准数据集,通过Google Cloud Storage和Google BigQuery访问。该数据集包含从Google BigQuery公共GitHub数据集中提取的818个公共GitHub存储库,使用了761种正则表达式模式来识别不同类型的敏感信息,总计97479个被标记为真或假,其中15084个是真实的密钥。如图2.1,密钥被手动分类为八个类别,前三个类别分别是私钥、API密钥和认证密钥。

图2.1 SecretBench中的8种密钥类型

此外,数据集覆盖了49种编程语言和311种文件类型,并提供了详细的敏感元数据,如存储库名称、文件路径和提交ID。如图2.2,不同文件类型中敏感数据的最多是txt文件、toml配置文件、js文件、html文件与pem文件。

图2.2 Top 5的敏感文件类型

2.2 测试的敏感信息识别工具

根据可访问性、扫描能力、活跃度、标记精度和报告格式五个标准选择了9个工具(5个开源工具和4个专有工具)进行敏感信息识别比较。

2.2.1 5个开源识别工具

git-secrets是由AWS-Labs开发的开源工具,旨在防止将敏感信息提交到Git存储库中。工具通过扫描整个Git历史,检测并输出存储库中的敏感信息。

Gitleaks是一个用Go编写的开源工具,主要用于检测Git存储库中的敏感信息。通过使用详细模式扫描存储库,以检索匹配敏感信息的元数据,最后将检测到的结果输出为JSON文件,便于后续分析。

Repo-supervisor是一个用JavaScript编写的开源工具,支持通过webhooks扫描GitHub拉取请求,以及从命令行扫描本地存储库目录。该工具在命令行模式下运行,扫描本地存储库并将结果输出为JSON文件。

TruffleHog是由Truffle Security开发的开源工具,用于检测Git存储库中的高熵字符串和正则表达式匹配的敏感信息信息。通过启用了正则表达式和熵计算标志来扫描存储库,最后将检测结果输出为JSON文件,以便进一步分析。

Whispers是一个用Python编写的开源工具,支持YAML和XML等结构化文本解析格式。工具将源代码解析为键值对,并检测硬编码的敏感信息。通过使用whispers命令扫描存储库,将结果输出为JSON文件。

2.2.2 4个专有识别工具

Commercial X是一个专有工具,能够扫描GitHub存储库中的敏感信息,还可以检测图像和不可搜索的PDF中的敏感信息。工具支持与Slack、JIRA和Google Drive集成。作者联系了供应商团队,提供了基准存储库的快照,并接收了扫描报告。最后将报告中的敏感信息和元数据被解析并输出为CSV文件。

ggshield由GitGuardian开发,是一个依赖GitGuardian公共API的开源工具。通过使用详细模式扫描每个存储库,并将检测到的敏感信息输出为JSON文件。

GitHub Secret Scanner是GitHub集成的扫描工具。通过在每个存储库中启用了“Secret Scanner”设置,工具自动扫描并在“Security/Secret scanning alerts”选项卡下显示检测到的结果,利用Python脚本通过GitHub Rest API提取每个存储库的敏感信息,并输出为CSV文件。

SpectralOps是一个专有工具,提供了开发者、安全和审计三种扫描模式。工具使用“安全”模式扫描存储库,以获得更好的精度和召回率。同样的,将敏感信息的详细元数据与对应扫描结果输出为JSON文件。

2.3 工具对比实验与结果

实验中敏感元数据包括Commit ID、文件路径、行号和纯文本,这些信息能够识别出工具检测到的具体敏感信息的位置及其上下文。标准化文件路径和纯文本敏感信息有助于提高不同工具报告之间的比较精度。

如图2.3,不同工具的检测结果不同,为了准确评估敏感信息检测工具的性能,通过Jaro-Winkler相似度和Gestalt模式匹配算法,计算工具报告的敏感信息与基准数据集敏感信息的相似度,设定相应的相似度阈值,确保高效准确地匹配。

图2.3 3种不同工具对于相同敏感信息的不同输出结果

通过对九种工具的实验比较,评估其在检测敏感信息方面的精度、召回率和F1得分。如图2.4所示,GitHub Secret Scanner在精度方面表现最佳(75%),但其召回率较低(6%),表明它漏掉了许多敏感信息。Gitleaks在两种召回率情况下均表现出色(情况1:86%,情况2:88%),并且在精度方面也表现良好(46%)。此外,TruffleHog在召回率方面表现良好,但精度较低(6%)。总的来说,没有一个工具同时具有高精度和高召回率,这表明目前的工具在检测敏感信息方面仍存在不足。使用机器学习技术的工具(如Commercial X和SpectralOps)在减少误报方面的表现并不理想,分别只有25%和1%的精度。

图2.4 9种工具的准确率、召回率、F1得分、扫描时间结果

作者对敏感信息检测工具的误报和漏报进行了详细分析,发现工具使用通用正则表达式、无效的熵计算是误报的主要原因。另一方面,错误的正则表达式、跳过特定文件类型和规则集不足是漏报的主要原因。

三. 总结

本文评估了九种敏感信息检测工具在检测代码库中的敏感信息方面的性能。通过对五个开源工具和四个专有工具的比较得出,GitHub Secret Scanner在精度方面表现最佳,而Gitleaks在召回率方面表现突出。当然,不同工具在检测敏感信息方面各有优劣,开发人员应根据具体需求选择合适的工具。例如,GitHub Secret Scanner尽管精度高,但召回率较低,表明其可能漏掉许多敏感信息。相反,Gitleaks在召回率和精度之间表现较为平衡,是一个值得推荐的工具。开发人员在选择和使用检测工具时,应根据项目中的具体需求和敏感信息类型,综合考虑工具的精度、召回率和功能。通过合理选择和配置这些工具,可以有效地保护代码库中的敏感信息,增强软件开发过程中的安全性和可靠性。

参考文献

[1] https://www.gitguardian.com/files/the-state-of-secrets-sprawl-report-2024

内容编辑:创新研究院 杨双镇

责任编辑:创新研究院 陈佛忠

本公众号原创文章仅代表作者观点,不代表绿盟科技立场。所有原创内容版权均属绿盟科技研究通讯。未经授权,严禁任何媒体以及微信公众号复制、转载、摘编或以其他方式使用,转载须注明来自绿盟科技研究通讯并附上本文链接。

声明:本文来自绿盟科技研究通讯,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。