Kubernetes 上的 Istio 注入 Envoy sidecar 与 Pod 一起运行并实现服务网格,但是 Istio 本身无法确保流量不会绕过此代理;如果发生这种情况,则不再应用 Istio 安全策略。
因此,我试图了解这种绕过可能发生的所有方式(假设 Envoy 本身没有受到损害)并找到阻止它们的方法,以便保证来自 Pod 的网络命名空间的 TCP 流量已经通过 Envoy(或至少更有可能做到):
- 由于(在撰写本文时)Envoy 不支持 UDP(它几乎就在那里),因此不会代理 UDP 流量,因此使用NetworkPolicy确保只允许进出 Pod 的 TCP 流量(例如,避免 TCP 流量被隧道传输通过 UDP 上的 VPN 输出)
- 删除 NET_ADMIN 功能以防止 Pod 在其网络命名空间中重新配置捕获流量的 IPTables 规则
- 删除 NET_RAW 功能以防止 Pod 打开原始套接字并绕过 IPTables 使用的 netfilter 挂钩点
我知道的唯一其他攻击媒介是内核漏洞——还有其他的吗?也许还有其他 IPTables 无法识别或忽略的 L3/4 协议?
我知道eBPF 和 Cilium可用于在套接字级别强制执行此拦截,但我对在 Kubernetes 上使用 vanilla Istio 的情况感兴趣。
编辑:我还假设工作负载没有 Kubernetes API 服务器访问权限