首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >etcd集成持续Fuzzing

etcd集成持续Fuzzing

作者头像
CNCF
发布2022-03-28 14:35:56
9000
发布2022-03-28 14:35:56
举报
文章被收录于专栏:CNCFCNCF

作者:Adam Korczynski、David Korczynski、Sahdev Zala

在过去的几个月里,Ada Logics[1]的团队致力于将连续模糊测试(fuzzing)集成到 etcd 项目中。这一努力的重点是改善 etcd 的安全状况,并确保 etcd 用户持续获得良好的体验。fuzzing 集成包括将 etcd 加入 OSS-Fuzz 项目,并编写一套 fuzzer,将 etcd 的测试覆盖提升到一个成熟的水平。总共编写了 18 个 fuzzer,并发现了 8 个 bug,这证明了该工作对 etcd 的短期和长期价值。所有的 fuzzer 都是通过 go-fuzz 实现的,当运行在 OSS-Fuzz 时,通过 libFuzzer 进行仪器化,因此,etcd 使用了最先进的开源 fuzzer 功能。完整报告可以在这里[2]找到。

etcd 项目于 2013 年在 CoreOS 创立,随后于 2018 年加入 CNCF,并于 2020 年毕业[3]。它是一种开源的、强一致性的分布式键值存储,用于可靠地存储分布式系统或机器集群需要访问的数据。它还提供了非常理想的功能,比如 Watches 监视键的变化。etcd 是 Kubernetes 的一个关键组件,用作集群数据的主要数据存储,例如集群状态数据以及与其所需状态相关的数据。etcd 除了是 Kubernetes 的关键组件外,还在许多其他分布式系统所使用[4]。由于 etcd 的广泛使用,它是解决可靠性 bug 和安全漏洞的开源生态系统的关键部分。CNCF 2021 年的年度调查[5]发现,96%的公司正在使用或评估 Kubernetes,etcd 的性能和安全性对这些用户的持续业务运营非常重要。

模糊测试是什么?

Fuzzing(模糊测试)是一种通过压力测试的形式来自动化软件测试过程的技术。关键思想是编写一个类似于单元测试或集成测试的 fuzzing 工具,它将使用一些任意的输入来执行被测试的应用程序。fuzzing 引擎将运行 fuzzing harness,然后使用遗传算法来推断将导致测试中的代码执行唯一的输入,即生成触发新的代码执行路径的输入。目标是观察在任何生成的输入事件中,测试下的代码是否有错误行为。二十多年来,Fuzzing 在发现软件的可靠性缺陷和漏洞方面一直很有效,开源软件也越来越多地采用了这种技术。

Etcd 模糊测试概述

在这个项目中,我们的目标是编写一套涵盖 etcd 大量代码库的 fuzzer,并将其集成到开源 fuzzing 服务 OSS-Fuzz 中。OSS-Fuzz 是谷歌为关键的开源项目提供的一项免费服务,用于持续运行它们的 fuzzing 并报告任何崩溃。连续分析是重要的,因为模糊测试依赖于遗传算法,这有效地意味着模糊器将随着时间的推移而改进,OSS-Fuzz 将不断地每天运行模糊器。除此之外,持续的分析对于捕获任何回归(regression)都是至关重要的。

Etcd 是用 Go 编程语言编写的,这使得它不受内存损坏的影响。Fuzzing Go 会发现一些恐慌,如切片/索引超出范围、空指针解引用、无效类型断言、超时、内存不足。在这次接触结束时,发现了 8 个问题,所有这些问题都得到了解决。它们是这样分类的:

在这个项目的最后,fuzzer 提供 etcd 项目的重要覆盖,包括关键部分,如 etcd 服务器、WAL、认证存储、和 raft 包。在参与过程中,Ada Logics 发现 etcd 中只有少数关键部分可以用字节片或字符串访问,但可以接受复杂类型,如结构体。这方面的一个例子是etcd 服务器的 fuzzer[6],它配置和设置 etcd 服务器,然后创建一系列伪随机结构,表示发送到服务器的不同请求。为了编写这些 fuzzer,Ada logic 使用go-fuzz-headers[7]来确定地从 libFuzzer 提供的数据创建伪随机结构。

总结

etcd 团队非常感谢 CNCF 和 Chris Aniszczyk 为 etcd 提供了与 Ada logic 合作开发新的 fuzzer 的机会。CNCF 对软件安全问题非常重视,并在早期资助 etcd 项目进行第三方安全审计[8]。我们还要感谢所有 etcd 维护人员和评审员,特别是 Marek Siarkowicz、Piotr Tabor 和 Benjamin Wang,感谢他们对修复的快速评审。这些模糊测试的发现和修复是对之前安全审计结论的有价值的补充。Etcd 项目有有效的测试套件,并且代码更改由测试支持,但是新开发的模糊器和发现为项目提供了重要的价值。在 fuzzing 过程中,仅发现了 8 个问题,再次验证了 etcd 代码的高质量。etcd 团队会维护新开发的 fuzzer,并在其基础上继续开发代码质量和安全性。

参考资料

[1]Ada Logics: https://adalogics.com/

[2]完整报告: https://github.com/etcd-io/etcd/blob/main/security/FUZZING_AUDIT_2022.PDF

[3]毕业: https://www.cncf.io/announcements/2020/11/24/cloud-native-computing-foundation-announces-etcd-graduation/

[4]许多其他分布式系统所使用: https://etcd.io/docs/v3.5/integrations/#projects-using-etcd

[5]CNCF 2021 年的年度调查: https://www.cncf.io/reports/cncf-annual-survey-2021

[6]etcd 服务器的 fuzzer: https://github.com/cncf/cncf-fuzzing/blob/main/projects/etcd/etcdserver_fuzzer.go

[7]go-fuzz-headers: https://github.com/AdaLogics/go-fuzz-headers

[8]第三方安全审计: https://www.cncf.io/blog/2020/08/05/etcd-security-audit/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-03-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CNCF 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 模糊测试是什么?
  • Etcd 模糊测试概述
  • 总结
    • 参考资料
    相关产品与服务
    数据保险箱
    数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档