当前状态:2019 年 Kubernetes 第三方安全审计

我们预计全新的 Kubernetes 第三方安全审计报告将于本月晚些时候(2022 年 10 月)发布。

在准备工作期间,让我们回顾一下上次 2019 年第三方安全审计中公开的调查结果,该审计基于 Kubernetes v1.13.4

动机

多年来,Craig Ingram 一直致力于跟踪上次审计中报告的调查结果的状态,他在这个问题中:kubernetes/kubernetes#81146。这篇博文将尝试更深入地探讨这个问题,解决跟踪中的任何遗漏,并成为 2019 年报告的调查结果状态的时间点总结。

本文还应通过透明的沟通,帮助读者对社区为解决这些调查结果所做的工作充满信心,并提出任何需要社区贡献者帮助的调查结果。

当前状态

此处每个问题/发现的状态均以尽最大努力的方式表示。作者不声明对状态 100% 准确,如果当前状态未准确反映,欢迎通过直接评论相关问题来提供任何更正或反馈。

#标题问题状态
1hostPath PersistentVolumes 启用 PodSecurityPolicy 绕过#81110已关闭,通过 kubernetes/website#15756kubernetes/kubernetes#109798 解决
2Kubernetes 不支持证书撤销#81111重复问题 #18982需要一个 KEP
3HTTPS 连接未经过身份验证#81112主要留给最终用户练习设置正确的配置
4通过 kubelet 将 PID 移动到管理器 cgroup 时出现 TOCTOU#81113需要节点访问才能成功利用。需要修复
5kubectl cp 中不正确的目录遍历补丁#76788已关闭,分配了 CVE-2019-11249,在 #80436 中修复
6Bearer 令牌在日志中泄露#81114已关闭,分配了 CVE-2019-11250,在 #81330 中修复
7默认情况下禁用 Seccomp#81115已关闭,通过 #101943 解决
8普遍存在的全局可访问文件权限#81116#112384 (进行中)
9环境变量暴露敏感数据#81117已关闭,通过 #84992#84677 解决
10在 SSH 连接中使用 InsecureIgnoreHostKey#81118此功能已在 v1.22 中删除:#102297
11使用 InsecureSkipVerify 和其他 TLS 弱点#81119需要一个 KEP
12kubeadm 执行潜在危险的重置操作#81120已关闭,通过 #81495#81494kubernetes/website#15881 修复
13使用 strconv.Atoi 并在向下转换结果时溢出#81121已关闭,通过 #89120 修复
14kubelet 可能会因恶意清单而导致内存不足错误#81122已关闭,通过 #76518 修复
15kubectl 可能会因恶意 Pod 规范而导致内存不足错误#81123需要修复
16不正确地获取 PID 允许不正确的 cgroup 移动#81124需要修复
17运行 kube-apiserver 和 kubelet 的主机日志的目录遍历#81125已关闭,通过 #87273 修复
18非恒定时间密码比较#81126已关闭,通过 #81152 修复
19加密建议不符合最佳实践#81127正在进行中
20默认情况下将凭据添加到容器是不安全的#81128已关闭,通过 #89193 修复
21kubelet 活性探测可用于枚举主机网络#81129需要一个 KEP
22iSCSI 卷存储在日志中以明文形式显示密钥#81130已关闭,通过 #81215 修复
23硬编码的凭据路径#81131已关闭,等待更多证据
24日志轮换不是原子性的#81132需要修复
25不限制的任意文件路径#81133需要修复。
26不安全的 JSON 构建#81134部分修复
27kubelet 因错误处理不当而崩溃#81135已关闭。通过 #81135 修复
28旧令牌不会过期#81136已关闭,作为 #70679 的一部分修复
29CoreDNS 在命名空间之间泄漏内部集群信息#81137已关闭,通过 CoreDNS v1.6.2 解决。#81137 (评论)
30服务使用可疑的默认函数#81138需要修复
31容器管理器中不正确的 docker 守护进程进程名称#81139已关闭,通过 #81083 修复
32在所有地方使用标准格式#81140需要一个 KEP
33表面健康检查提供虚假的安全感#81141已关闭,通过 #81319 修复
34硬编码使用不安全的 gRPC 传输#81142需要一个 KEP
35不正确地处理 Retry-After#81143已关闭,通过 #91048 修复
36不正确的 isKernelPid 检查#81144已关闭,通过 #81086 修复
37Kubelet 支持不安全的 TLS 密码套件#81145已关闭,但需要针对 #91444 进行修复(请参阅 此评论

灵感来源

除了修复特定问题之外,2019 年第三方安全审计还推动了 Kubernetes 在接下来几个版本中的安全增强。一个这样的例子是 Kubernetes 增强提案 (KEP) 1933 通过静态分析防止记录机密,以防止使用 Patrick Rhomberg 驱动的实现将机密暴露在日志中。作为此 KEP 的结果,go-flow-levee(一种配置为检测机密记录的污点传播分析工具)在 脚本 中作为 Prow 预提交作业执行。此 KEP 在 v1.20.0 中作为 alpha 功能引入,然后在 v1.21.0 中升级为 beta 版,并在 v1.23.0 中升级为稳定版。作为稳定版,该分析作为阻塞预提交测试运行。此 KEP 还帮助解决了 2019 年第三方安全审计中的以下问题

剩余工作

在过去 3 年中,我们的社区成员通过工作修复了 37 项已发现的许多问题。但是,我们仍然有一些工作要做。以下是剩余工作的细分,其中包含对时间投入、复杂性和修复这些待解决问题对生态系统的好处的粗略估计。

标题问题时间投入复杂性对生态系统的好处
Kubernetes 不支持证书撤销#81111
使用 InsecureSkipVerify 和其他 TLS 弱点#81119
kubectl 可能会因恶意 Pod 规范而导致本地内存不足错误#81123
不正确地获取 PID 允许不正确的 cgroup 移动#81124
kubelet 活性探测可用于枚举主机网络#81129
API 服务器支持不安全的 TLS 密码套件#81145
通过 kubelet 将 PID 移动到管理器 cgroup 时出现 TOCTOU#81113
日志轮换不是原子性的#81132
不限制的任意文件路径#81133
服务使用可疑的默认函数#81138
在所有地方使用标准格式#81140非常低
硬编码使用不安全的 gRPC 传输#81142非常低

要开始修复任何需要帮助的发现,请考虑通过加入我们的双周会议或在我们的 Slack 频道上与我们交流来参与 Kubernetes SIG Security