CD's second night

云安全-K8S-container中的四种后门注入方式

type
status
date
slug
summary
tags
category
icon
password
最近在某个云安全群的时候 看到有学习者新学习到k8s-sidecar注入这个”新技术”。实际上这个技术在22年已经初有端倪。Sidecar 容器注入是一种常见的设计模式,用于在 Pod 中添加辅助容器(Sidecar 容器),以增强主容器(Main Container)的功能。Sidecar 容器通常用于日志收集、监控、网络代理、配置管理等任务。以下是一个用例介绍和技术细节的示例。 自然也可以用来添加后门。于目前仍是较为高效的持久化手段。 实际上随着对容器模式的继续研究,我们发现容器模式除了sidecar、还有三种模式,分别为Ambassador 模式、 Adapter 模式、Debug 模式
这四个模式都可以用来隐藏后门、下面我们来一一探讨一下。
 

Debug 模式

攻击面-利用临时容器制作后门绕过探针
什么是临时容器:
Pod 是 Kubernetes 应用程序的基本构建块。 由于 Pod 是一次性且可替换的,因此一旦 Pod 创建,就无法将容器加入到 Pod 中。 取而代之的是,通常使用 Deployment 以受控的方式来删除并替换 Pod。
有时有必要检查现有 Pod 的状态。例如,对于难以复现的故障进行排查。 在这些场景中,可以在现有 Pod 中运行临时容器来检查其状态并运行任意命令。
临时容器的特征:
  • 没有端口配置,因此像 portslivenessProbereadinessProbe 这样的字段是不允许的。(仅限于kubelet edit中,对于反弹shell等权限维持操作是不冲突的)
  • Pod 资源分配是不可变的,因此 resources 配置是不允许的。
  • 和当前pod下的其它container不共享同一个运行时(运行时隔离)
鉴于以上特征 使用临时容器来制作后门或者流量传输或者pod监控 具有以下优点:
  1. 在攻击中不影响原有pod业务 从而防止被查杀 比如批量跑某个命名空间下的安全扫描的脚本而不用干扰原容器
  1. 在制作权限维持的时候利用临时容器不易被"规则探针"检测的能力制作后门
  1. Debug node: 利用Ephemeral Containers还能对Worker节点进行调试。当以节点为目标调用时,kubectl debug 将创建一个带有node名称的pod,并且调度到该节点。同时该容器还具备了hostIPChostNetworkhostPID这些特权模式。不可思议的是Worker节点的根文件系统还被mount到了debug容器下的/host目录下。 直接执行这个命令就能debug主机。
 
 
开发难点:
  1. 没有相关的api直接创建临时容器
  1. 不允许通过补丁对 ephemeralContainers 进行更新 , 按照patch_pod原理上能在edit形式上进行patch 但是无法在已经运行的pod中patch
  1. 最不优雅的方法
Kubectl -v=10获取k8s request请求 ->获取对应api 成功找到对应为V1EphemeralContainer的api
https://github.com/kubernetes-client/python/blob/master/kubernetes/docs/V1EphemeralContainer.md
后面找到相关issus
https://github.com/kubernetes-client/python/issues/1859 发现需要通过去发spec的手动包
自写api函数
kubectl get pod nginx-pod -o=jsonpath='{.spec.containers[*].name}' 获取pod中的container名
 
相关代码
 
 

Adapter 模式

攻击面-制作内部C2转接平台(不常用)
  • Adapter 模式通过在同一个 Pod 中添加一个适配器容器(Adapter 容器)来将主容器的输出格式转换为其他系统或服务所需的格式。Adapter 容器通常用于日志格式转换、监控数据格式转换、事件格式转换等。
  • 常见用途:
    • 日志格式转换(如 Fluentd 配置)。
    • 监控数据格式转换(如 Prometheus Adapter)。
    • 事件格式转换(如 Kafka Connect)。
代码就不公布啦 感兴趣的同学可以自己研究一下
 
Ambassador 模式
攻击面-制作隧道外发
  • : Ambassador 模式通过在同一个 Pod 中添加一个代理容器(Ambassador 容器)来简化主容器与外部服务之间的通信。Ambassador 容器通常用于代理数据库连接、外部 API 请求、提供负载均衡和缓存功能等。
  • 常见用途:
    • 代理数据库连接(如 MySQL Proxy)。
    • 代理外部 API 请求(如 Envoy)。
    • 提供负载均衡和缓存功能(如 Nginx)。
代码就不公布啦 感兴趣的同学可以自己研究一下
 
Loading...