istio.io/content/zh/blog/2023/ada-logics-security-assessment/index.md

137 lines
7.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: "Istio 发布版 2022 年安全审计结果"
description: Istio 的安全审查在 Go 标准库中发现了一个 CVE。
publishdate: 2023-01-30
attribution: "Craig Box (ARMO)Istio 产品安全工作组"
keywords: [istio,security,audit,ada logics,assessment,cncf,ostif]
---
Istio 是一个被平台工程师信任的项目,可以在其 Kubernetes
生产环境中实施安全策略。我们非常注意代码的安全性,
并致力于维护一个健壮的[漏洞程序集](/zh/docs/releases/security-vulnerabilities/)。
为了验证我们的工作,我们定期邀请项目以外的组织开展审查流程,
我们很高兴发布[第二次安全审计的结果(英文)](./Istio%20audit%20report%20-%20ADA%20Logics%20-%202023-01-30%20-%20v1.0.pdf)。
审计员的评估结论是**“Istio 是一个维护良好的项目,
具有强大且可持续的安全应对方法”**。没有发现严重问题;
该报告的亮点是发现了 Go 编程语言中的一个漏洞。
我们要感谢[云原生计算基金会](https://cncf.io/)资助这项工作,
作为我们 [8 月份加入 CNCF](https://www.cncf.io/blog/2022/09/28/istio-sails-into-the-cloud-native-computing-foundation/)
后提供给我们的福利。这项工作[由 OSTIF 安排](https://ostif.org/the-audit-of-istio-is-complete)
[由 ADA Logics 执行](https://adalogics.com/blog/istio-security-audit)。
## 工作范围和总体调查结果{#scope-and-overall-findings}
[Istio 在 2020 年接受了第一次安全评估](/zh/blog/2021/ncc-security-assessment/)
其数据平面和 [Envoy 代理](https://envoyproxy.io/)都已经过
[2018 年和 2021 年的独立评估](https://github.com/envoyproxy/envoy#security-audit)。
因此Istio 产品安全工作组和 ADA Logics 确定了以下工作范围:
* 生成正式的威胁模型,以指导本次和未来的安全审计
* 对安全问题进行手动代码审计
* 审查 2020 年审计中发现的问题修复
* 审查和改进 Istio 的模糊测试套件
* 对 Istio 进行 SLSA 审查
再一次,在审查中没有发现任何严重问题。在评估中总共发现了 11 个安全问题;
其中两个 High四个 Medium四个 Low 和一个信息级别的问题。
所有报告的问题都已被修复。
{{< quote >}}
**“Istio 是一个维护良好且安全的项目,具有完善的代码库、
完善的安全实践和响应迅速的产品安全团队。” - ADA Logics**
{{< /quote >}}
除了上述发现之外,审计员还指出 Istio
在处理安全性方面遵循高水平的行业标准。他们还特别强调了:
* Istio 产品安全工作组迅速响应安全披露
* 关于项目安全性的文档是全面的、高质量的且更新及时
* 遵循行业标准进行安全漏洞的披露,安全建议清晰且详细
* 安全修复都包含回归测试
## 决议和经验{#resolution-and-learnings}
### Go 语言中的请求走私漏洞{#request-smuggling-vulnerability-in-go}
审计人员发现 Istio 可以接受使用 HTTP/2 Over Cleartexth2c的流量
这是一种与 HTTP/1.1 建立未加密连接然后升级到 HTTP/2 的方法。
[用于 h2c 连接的 Go 语言库](https://pkg.go.dev/golang.org/x/net/http2/h2c)将整个请求读入内存,
并指出如果您想避免这种情况,请求应该被包裹在 `MaxBytesHandler` 中。
在修复这个错误时Istio TOC 成员 John Howard
注意到推荐的修复方式引入了一个[请求走私漏洞](https://portswigger.net/web-security/request-smuggling)。
Go 语言团队因此发布了
[CVE-2022-41721](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-41721) — 本次审计发现的唯一漏洞!
Istio 已更改为始终禁用 h2c 升级支持。
### 文件获取的改进{#improvements-to-file-fetching}
发现的最常见问题类别与 Istio 通过网络获取文件有关(例如,
Istio Operator 安装 Helm Chart或 WebAssembly 模块下载器):
* 精雕细琢的 Helm Chart 可能会耗尽磁盘空间(#1或覆盖
Operator 的 Pod 中的其他文件(#2
* 文件句柄在发生错误的情况下不会关闭,并且可能会被耗尽(#3
* 精雕细琢的文件可能会耗尽内存(#4 和 #5
要执行这些代码路径,攻击者需要足够的权限来为 Helm Chart
或 WebAssembly 模块指定 URL。有了这样的访问权限
他们就不再需要某些功能:他们已经可以将任意 Chart 安装到集群或将任意
WebAssembly 模块加载到代理服务器的内存中。
审核员和维护者都注意到不建议将 Operator 作为安装方式,
因为这需要高权限控制器才能在集群中运行。
### 其他问题{#other-issues}
发现的其余问题是:
* 在某些测试代码中,或者控制平面组件通过 localhost 连接到另一个组件的情况下,
未强制执行最低 TLS 设置(#6
* 失败的操作可能不会返回错误代码(#7
* 已弃用的库依然在被使用(#8
* [TOC/TOU](https://en.wikipedia.org/wiki/Time-of-check_to_time-of-use)
用于复制文件的库中的竞争条件(#9
* 如果在调试模式下运行,用户可能会耗尽 Security Token Service 的内存(#11
详情请参考[报告全文(英文)](./Istio%20audit%20report%20-%20ADA%20Logics%20-%202023-01-30%20-%20v1.0.pdf)。
### 对 2020 年报告的回顾{#reviewing-the-2020-report}
Istio 的第一次安全评估中报告的所有 18 个问题都已被发现并得到修复。
### 模糊测试{#fuzzing}
[OSS-Fuzz 项目](https://google.github.io/oss-fuzz/)帮助开源项目执行免费的[模糊测试](https://en.wikipedia.org/wiki/Fuzzing)。
Istio 已被集成到 OSS-Fuzz 中,有 63 个连续运行的模糊测试器:
这种支持是[由 ADA Logics 和 Istio 团队于 2021 年底建立](https://adalogics.com/blog/fuzzing-istio-cve-CVE-2022-23635)。
{{< quote >}}
**“[我们]通过优先考虑 Istio 的安全关键部分来开始模糊测试评估。
我们在其中发现令人印象深刻的测试覆盖率,这几乎已经没有可以改进余地。” - ADA Logics**
{{< /quote >}}
评估指出“Istio 在很大程度上受益于拥有在 OSS-Fuzz
上持续运行的大量模糊测试套件”,并确定了安全关键代码中的一些 API
将受益于进一步的模糊测试,因此这项工作的结果是贡献了六个新的模糊测试器;
到审计结束时,新测试已经运行了超过 **30 亿** 次。
### SLSA
[软件制品供应链级别](https://slsa.dev/)SLSA是用于防止篡改、
提高完整性以及保护软件包和基础设施的一份标准及控制清单。
它被组织成一系列级别,提供越来越多的完整性保证。
Istio 目前不生成制品,因此并不满足任何 SLSA 级别的要求。
[目前正在进行达到 SLSA 1 级的工作](https://github.com/istio/istio/issues/42517)。
如果您想参与,请加入 [Istio Slack](https://slack.istio.io/)
并联系我们的[测试和发布工作组](https://istio.slack.com/archives/C6FCV6WN4)。
## 参与进来{#get-involved}
如果您想参与 Istio 产品安全,或成为一名维护者,我们很乐意邀请您!
[加入我们的公开会议](https://github.com/istio/community/blob/master/WORKING-GROUPS.md)来提出问题或了解我们为确保 Istio 安全所做的工作。