红蓝对抗做到第三年,我越来越确定一件事:云原生环境正在成为攻防双方争夺的主阵地,而这种争夺已经从“打不打”变成“怎么打、打完怎么收场、收完怎么修复”。以前搞渗透测试,目标是一台服务器、一套应用;现在目标是一个集群、一堆微服务、一套声明式API,攻击面从机房拓扑变成了编排配置,从端口扫描变成了镜像供应链和权限模型。这篇文章不聊大而全的框架,只讲我在红蓝对抗场景里反复用过的云原生漏洞挖掘思路、利用链构造方法和蓝队视角的检测建议,最后附上踩坑记录。内容偏实战,适合有基本渗透基础、正在往云原生安全方向转的读者。
1. 红蓝对抗的作战地图:云原生到底在打什么
1.1 为什么常规渗透方法论在云原生场景会失灵
传统内外网渗透的思路是“搞到一台机器,然后横向”,先在资产面里找开放端口、弱口令、Web漏洞,拿到立足点之后再通过内网协议做横向移动。这套方法论在物理服务器时代很管用,但到了云原生环境就经常卡壳。
原因很简单:你平时打的目标根本不是一个“服务器”。Kubernetes里,Pod的IP是动态的,Service做了负载均衡,NodePort可能只开了一个高位随机端口,SSH可能根本不在网络路径上。你扫描出来的端口可能是Ingress Controller的端口,背后是七层路由,四层扫描根本看不到真实业务。更关键的是,容器里几乎没有传统意义上的“持久化环境”——重启即重建,文件系统可写层是一次性的,你植入的“后门文件”换个镜像版本就没了。
那红蓝对抗在云原生里到底打什么?我的理解是三块:配置缺陷、身份边界、供应链信任。配置缺陷指向Kubernetes和云平台的默认配置错误,比如命名空间隔离失效、Pod安全策略缺失、匿名请求开放;身份边界指向RBAC权限模型和云IAM的过度授权,这是利用链里最值钱的部分;供应链信任指向镜像、依赖库、Helm Chart、Operator这些“默认信任”的组件,一旦被污染,影响面远超单台主机。
红队要做的,是把这三块当作三个并列的入口,而不是一条嵌套的链路。很多时候漏洞利用不是从Web应用一层层打进去的,而是直接拿到云平台API凭证,在控制面里改配置。蓝队要做的,是把这三个面的威胁建模搞清楚,知道攻击者最可能从哪里下手,再决定检测优先级。
1.2 红蓝双方的博弈焦点:控制面与数据面
在云原生攻防里,我习惯把目标分为控制面和数据面。控制面是Kubernetes的API Server、etcd、调度器、云平台管控接口;数据面是运行业务的Pod、容器运行时、节点OS。传统渗透里,控制面和数据面混在一起,但云原生里它们有清晰的网络边界和调用关系。
红队的第一优先目标是控制面。原因很直接:控制面是配置和凭证的汇聚点。拿到API Server的读写权限,就能创建特权Pod、修改Deployment、注入Sidecar、读取集群内Secret。这些操作不需要“打穿”某一个具体业务,只需要一个可用的凭证。蓝队的核心防御点也在控制面——审计日志、准入控制、RBAC策略,全都是围绕API Server做的。
数据面不是不重要,而是效率低。容器逃逸、内核漏洞利用,这些操作对环境的适配要求高、时间成本大,在对抗演练里往往是最后的选择。我在几次演练里观察到的攻击路径分布也印证了这点:高权限ServiceAccount凭据、错误暴露的Dashboard、可写的云存储桶,这些配置类漏洞占比远高于内核漏洞利用。原因不难理解:云原生的攻击,大部分时候不是技术对抗,而是信任模型被击穿。
2. 漏洞挖掘:从攻击面分析到关键风险点
2.1 镜像供应链:最容易被忽视的入口
镜像供应链攻击在红蓝对抗里经常被当成“高级话题”,但我做过几次之后发现,它其实是实操门槛最低、隐蔽性最高的入口。核心问题在于:大部分企业没有对镜像做完整的信任校验。
我梳理过一个典型的镜像生产链路:开发写代码、Dockerfile构建、推入镜像仓库、Kubernetes拉取部署。这里面至少有四个可攻击点:基础镜像被替换、构建依赖被污染、镜像仓库凭证泄露、部署时未校验签名。前两个靠供应链污染,后两个靠权限配置失误。
举个例子。某次对抗中,我拿到一个镜像仓库的只读凭证,然后发现某个基础镜像的tag是latest,而仓库里的latest已经和我拉取到的不一致。进一步排查发现,该仓库没有启用镜像签名校验,集群节点在拉取时直接信任仓库里的最新版本。这意味着只要我能写这个仓库,就能让所有引用latest的业务Pod拉取到我的恶意镜像。
常规做法里,红队会先扫一遍镜像漏洞,关注的高危CVE。但在对抗场景里,镜像漏洞的价值远不如镜像内容本身:有没有内置凭证、有没有硬编码密钥、有没有可疑的历史层残留。我会优先拉取目标业务镜像做静态分析,重点看环境变量、/root/.bash_history这类残留文件、以及构建过程中留下的临时文件。很多开发为了调试方便,把云平台AK、数据库密码直接写进Dockerfile的ENV里,构建完又忘了清理。这些东西比一个CVE有用得多。
蓝队的对应策略很简单:镜像仓库开启签名强制校验,CI流程里加SBOM扫描和漏洞扫描,基础镜像锁定tag并定期重建,禁止运行时不带签名就能拉取的镜像。另外,镜像仓库的凭证权限要最小化,只读凭证不应该能列出所有仓库的tag。
2.2 编排配置缺陷:Kubernetes里那些“默认不安全”
Kubernetes本身是一个权限边界非常清晰、如果配置正确就很安全、配置错了就到处漏风的系统。红蓝对抗里,我最常检查的编排配置缺陷有这几个:
第一,kubelet的匿名访问。如果kubelet没有配置认证和授权,攻击者只要网络可达,直接请求/runpods接口就能看到节点上的Pod信息,某些情况下还能通过kubelet的API创建容器。我实测过,有些内部网络里节点之间没有防火墙规则,kubelet端口(默认10250,有的配成10255)直接暴露在集群内网,匿名请求畅通无阻。
第二,API Server的RBAC过度授权。很多运维图省事,给某个ServiceAccount绑了cluster-admin角色。一旦这个凭证泄露,整个集群的控制权就丢了。更隐蔽的是聚合角色,比如system:aggregate-to-edit这类角色,它包含了delete权限,但很多管理员不知道。
第三,admission control缺失。没有启用PodSecurityPolicy或Pod Security Admission的情况下,任何有权限创建Pod的人都能创建特权容器、挂载宿主目录。我做过一个测试,在集群里创建一个挂载/的Pod,然后直接读宿主机上的文件,因为hostPath类型的volume默认没有限制,除非显式做了策略。
第四,ServiceAccount的自动挂载。默认情况下,Kubernetes会把ServiceAccount的Token挂载到每个Pod里。如果某个Pod被攻破,攻击者能直接读取/var/run/secrets/kubernetes.io/serviceaccount/token,然后用这个Token调用API Server。如果这个ServiceAccount权限过大,一次简单的Webshell利用就能演变成集群沦陷。
在对抗演练中,我会把这些检查项整理成一个清单,按风险等级排序。蓝队也一样,可以用现成的扫描工具做基线检查,但工具通常只查“配置是否存在”,不查“配置是否真的可以被利用”。比如kubelet匿名访问,扫描器会报告说“TLS未配置”,但不会告诉你这个端口在哪个网段可达。实战中,网络可达性往往比配置本身更重要。
2.3 API与云平台凭证:拿到密钥就等于拿到了钥匙串
云原生环境里的API凭证是红队最想拿的战利品。原因不复杂:云平台的控制台、对象存储、数据库服务、容器服务,全都靠这些凭证来做身份认证。一个高权限的AK泄露,比打穿十台服务器都高效。
泄露途径我见过很多:代码仓库里的历史提交、镜像里的环境变量、配置中心的明文存储、运维聊天工具里的截图。某次对抗中,目标公司把云平台AK写在了内部Wiki的一篇部署文档里,我通过一个低权限的工单系统翻到了这篇文档。这个AK的权限范围是“只读对象存储”,本来不能做太多事,但它能列出所有存储桶名。我顺着存储桶名找到另一个仓库,里面有一个备份用的数据库连接串,最终一波带到后台数据。
红蓝对抗里,拿到凭证之后不要急着“最大化利用”,先看权限边界。云平台的API通常支持“先用最小权限试探,再根据返回结果推断权限范围”的思路。比如调用ListBuckets,如果能列出,说明有对象存储的读权限;调用DescribeInstances,如果能列出,说明有计算资源的只读权限。我会写一个小脚本批量列举云平台各服务的API,看哪些能响、哪些被拒绝,以此推断AK的权限边界。这一步做得越细,后续利用的精度越高。
蓝队的做法是给云平台开启所有的操作审计和密钥轮换,定期扫描代码仓库和镜像仓库里的AK,发现即废弃。更重要的是,要给AK设置严格的权限边界,遵循最简权限原则,让AK泄露时的影响面可控。
2.4 运行时安全与容器逃逸:最后一层,但也别忽略
容器逃逸是云原生安全里的老话题,但在红蓝对抗的实战占比并不高。原因前面说了,效率低。内核漏洞利用要考虑宿主机内核版本、容器运行时版本、Capabilities配置,一个环节不对就前功尽弃。所以在对抗场景里,我一般把容器逃逸当“备用方案”,当控制面和数据面的配置攻击走不通时再试。
但还是得懂。常见的逃逸路径包括:特权容器加CAP_SYS_ADMIN、挂载Docker Socket、挂载宿主根目录、内核漏洞利用、容器运行时漏洞利用。其中,挂载Docker Socket是最容易验证的一条路。如果容器里能访问/var/run/docker.sock,相当于直接获得了Docker守护进程的完全控制权,可以创建任意容器、挂载任意目录、读写宿主机文件。
另外,CAP_SYS_ADMIN这个Capability在容器里是高度危险的。它允许容器进程执行很多宿主机层面的操作,比如mount一个宿主机目录、reboot容器所在的节点。攻击者拿到这个能力后,只需要配合内核漏洞或者简单的namespace操作就能实现逃逸。
检测层面,Falco这类运行时安全工具对特权操作很敏感,但前提是规则配得足够精细。默认规则集能漏掉不少,比如容器内发起的DNS查询、流量外联、异常的子进程启动。红队对抗中,我会刻意压低“异常行为噪声”,比如用nsenter进入宿主机的命名空间而不是直接启用特权容器。这样既能达到目的,又能避开多数默认检测规则。
3. 利用链的实战搭建:从单点漏洞到集群控制
3.1 一个标准利用链的长什么样
我把云原生环境里的利用链抽象成四个阶段:边缘突破、凭证获取、控制面接管、数据面收割。
边缘突破是第一步,目标通常是某个可远程访问的业务系统。这一步用的是常规Web漏洞思路:入口扫描、指纹识别、漏洞利用。但进入之后,视角要立刻切换——你不是从一个服务器横向到另一个服务器,而是要找到这个业务Pod能访问什么云原生资源。
凭证获取是把“Pod内部访问能力”变成“集群甚至云平台访问能力”的关键环节。在这一步,我会做三件事:读取Pod内的ServiceAccount Token、检查环境变量里的云平台AK、扫一遍挂载的配置文件和Secret卷。很多时候这一步不需要攻击性操作,靠的就是配置失误。
控制面接管是拿到凭证之后的下一步。如果用Pod的Token能调用API Server,我会先看这个Token的权限。kubectl auth whoami这类命令在K8s 1.25以上版本很好用,能直接看到当前Token对应的用户名和组。接着用kubectl get secrets看能否列出Secret,如果能列出,大概率整个集群核心机密都暴露了。
数据面收割是最后一步,目标是把控制面权限转化为实际业务影响:读取数据库凭证、下载存储桶数据、抓取内存中的敏感信息、把后门持久化到某个Deployment副本里。这一步和传统渗透的“提炼战果”本质上一样,但操作目标从服务器文件变成了云原生对象。
3.2 利用链里最核心的三个跃迁点
利用链从单点漏洞到集群控制,中间有几个关键的跃迁点,每个跃迁点都可能被防御方阻断。
第一个跃迁点是“从业务系统到Pod”。这要求攻击者能从一个Web应用漏洞进入容器内部。常规路径是RCE,但云原生环境里还有一个不容易被注意到的路径——Java/Node/Python等应用的反序列化或表达式注入漏洞。进入容器后,发现自身权限很有限,但能访问到Kubernetes Metadata。攻击者访问169.254.169.254这个链路本地地址时,如果云平台配置了Metadata服务,能拿到临时凭证。我记得某次对抗里,云平台为每个Pod都注入一个绑定了特定角色权限的托管凭证,这个凭证的权限边界没配好,可以直接调用对象存储写权限。这就不是“入侵服务器”了,是“云账户失守”。
第二个跃迁点是“从Pod内凭证到控制面权限”。Pod内的ServiceAccount Token如果权限过大的话,攻击者就能直接创建Pod并调用kube-system命名空间里的资源。这一跃迁的检测突破口在API Server审计日志:一个低权限用户或ServiceAccount突然调用了高危操作,比如创建Pod、删除Deployment等,这些都是强烈的信号。
第三个跃迁点是“从控制面权限到数据面落地”。控制面权限能在集群里做大部分事,但最终要拿数据还是得碰数据面。这一步常用的手法是通过控制面权限创建一个特权Pod,然后绕过认证据点进入宿主网络或挂载宿主目录。如果检测规则只关注“容器内行为”,这一步很容易被忽略——因为创建Pod的操作在审计日志里看是一条正常的管理命令,但用户的身份和行为模式都不正常。
3.3 绕过WAF与逃避检测的思路
红蓝对抗里的绕WAF和渗透测试不太一样——攻防演练里,蓝队通常有SIEM日志平台和威胁检测系统,需要绕过的是“这次演练的检测规则”,不只是WAF的字符串匹配。
绕WAF的核心思路是找到业务侧的解析差异。比如用JSON的Unicode编码绕过字符串匹配、用路径标准化差异绕过后缀限制、用大小写混淆绕过签名规则。在云原生场景,还有一个额外的绕过点——Ingress层和Pod内应用之间的请求解析差异。Ingress是Go写的,业务应用是Java或Node写的,两者对特殊字符、编码、头部注入的处理方式经常不一致。攻击者可以利用这个差异构造一个Ingress认为无害、业务认为可达的请求。
另一个常用手法是利用Sidecar容器的代理机制。服务网格里,业务请求会经过Envoy/envoy这类Sidecar,如果检测规则只盯着Sidecar日志,攻击者对业务的直连请求就可能绕过监控。常规部署下业务容器和Sidecar容器共享网络命名空间,攻击者在业务容器内部完全可以直接连本地地址打业务,不经过Sidecar的七层代理。这就导致蓝队依赖的“流量观测点”失灵,除非有额外的CNI层流量采集。
逃避检测层面,通用的做法是降低事件频率、伪装成正常运维行为、使用加密流量外传。对抗演练里,我一般会先看一下蓝队的审计日志保留周期和告警基线,再决定用不用延时通道、跳板机这类低慢手法。在大多数场景下,攻击者用低频率、正常API调用走完整个利用链,蓝队是很难第一时间发现的。
3.4 云原生后渗透:持久化与横向移动的特殊思路
传统内网的后渗透是放免杀、注册计划任务、加启动项。云原生里这套东西很大程度失效了,但找到了自己的替代品。
横向移动的思路从“扫内网端口”变成了“枚举API权限”。拿到一个集群内ServiceAccount后,不要急着扫网段,先枚举API Server上自己有权访问的资源。kubectl auth can-i --list会告诉你这个身份能做什么。如果只能读Pod,看看能不能读其他namespace的Pod,看看Pod里有没有挂其他高权限的ServiceAccount。如果只能读ConfigMap,翻一翻里面有没有数据库密码。很多攻击者没意识到:广泛的“只读”权限比一个狭窄的“读写”权限更有价值——因为只读意味着能看到所有配置,而配置里往往写了所有秘密。
持久化思路从“放文件”变成了“改配置”。修改Deployment的镜像tag、给Service加一个指向恶意后端的selector、新建一个极少被注意的Namespace并部署隐蔽Pod,这些都是云原生里存活时间很长的后门方式。清理的时候也很麻烦:如果蓝队只杀了Pod,没有检查Deployment的镜像tag,重建一次就复活一次;如果只看了默认Namespace,后门Pod在隐蔽Namespace里安然无恙。
数据收割的思路从“打包下载文件”变成了“流式拉取云原生对象”。对象存储桶、数据库快照、ConfigMap里的密钥、日志服务里的历史数据,这些都是可以持续拉取的目标。红队在这个阶段最需要注意的是别触发下载量的异常告警。我会控制拉取速率,分批处理,有时候还会把数据先写到攻击者可控的对象存储里,再在演练结束后转移。
4.1 从攻击面收敛做起:把注定要被打的口子焊死
我不相信蓝队能靠一个银弹产品挡住所有攻击,但我确定防守方能把“攻击者的路越走越窄”。第三部分里拆的那些利用链跃迁点,每个跃迁点都对应一个收敛动作。业务系统该打补丁打补丁,这是常规动作;更关键的是别让攻击者进了业务系统就能拿集群凭证。
我特别想强调一个细节:ServiceAccount自动挂载这件事,绝大多数集群都没关,也没想过要关。默认行为是,只要创建了Pod,就会自动挂一个ServiceAccount Token进去。业务容器不访问API Server,完全不需要这个Token。关掉自动挂载(把automountServiceAccountToken设为false),攻击者进到容器内就少了一个最方便的凭证来源。这个动作改动极小、收益极大,但很多人忽视了。
另一个高性价比的收敛动作是网格化网络策略。很多集群内部的Namespace之间没有网络隔离,某业务Pod攻破后可以直连另一个Namespace里的数据库Pod。用CNI的网络策略或服务网格的授权策略划定东西向流量边界,攻击者的横向移动空间会小很多。这部分投入比上多套安全产品划算。
资产面收敛也一样重要。内网里的测试环境、Dashboard、未鉴权的API接口,都是红队钟爱的突破口。定期做一次全面的暴露面盘点,用扫描工具标记出所有暴露到公网和集群内部的可疑服务和端口,能主动降低被突破的概率。
4.2 检测规则应该围绕“身份行为基线”来建
蓝队经常犯的错是拿主机安全的检测思路来套云原生,比如只在节点上装Agent,盯着文件落地、进程启动、反弹Shell。这些检测在容器里效果不好,原因前面说过:容器是短生命周期的,文件落地等于没用;进程启动的噪声太大,大量正常业务的启动日志会把真正的攻击行为淹没在噪声里。
我建议检测的重点从“行为特征”转向“身份行为基线”。具体做法是:先记录每个身份(ServiceAccount、云平台AK)的正常行为模式,比如某个SA通常只在自己Namespace里创建Deployment,某个AK通常只读某个特定区域的对象存储。一旦发现某个身份出现了它平时不做的动作,比如一个只读AK突然调用写操作、一个只在测试Namespace使用的高权限Token出现在生产Namespace,立即告警。
Kubernetes审计日志是最好的输入源。开启审计日志,日志收集到SIEM里,然后写规则做行为基线分析。比如:
- 某个ServiceAccount的UserAgent突然变了(从
kubectl变成curl)— 可能是Token泄露后被别的工具使用。 - 某个SA的请求源IP从集群内网变成外网 — 可能是Token被外部获取。
- 某个用户的命令执行结果出现了大量异常错误码 — 可能是权限异常或凭证被滥用。
这类检测规则配置起来比纯网络特征检测复杂,但它才符合云原生环境的攻击模型:云原生攻击的核心是“身份滥用”,检测的重点也应该是“身份异常”。
4.3 应急响应的特殊动作:杀Pod不叫处置
云原生环境的应急响应有个常见误区:发现恶意Pod,kubectl delete pod把它删掉,就以为处置完了。实际上,如果攻击者是通过修改Deployment或DaemonSet下发的,删Pod根本没动到根因,控制器会立刻重新拉起一个一模一样的Pod,甚至新Pod在删除瞬间被调度到别的节点上。
真正的处置链条应该是:先隔离(用网络策略切断外联,不直接删)、再溯源(审计日志里找创建者身份、镜像来源、变更时间线)、最后修复(回滚Deployment配置、清理异常ClusterRole绑定、轮换AK和Token)。
还要特别留意集群内的“隐蔽Namespace”。攻击者可能创建一个名字很像业务空间的Namespace,比如在“prod”之间加了个不可见字符,然后在里面部署恶意Pod。常规巡检如果不按Namespace维度做完整性校验,很难发现这种后门。
另一个处置重点是etcd。Kubernetes的所有状态都存在etcd里,攻击者拿到控制面权限后可以直接改etcd的数据,篡改资源配置或注入后门。应急响应时如果只是清理API Server层面的数据,etcd里残留的恶意对象不会消失,甚至可能在集群重启或恢复时再次拉起。所以处置完API Server后,最好做一次etcd数据的整体检查,必要时直接从备份恢复干净数据。
4.4 演练结束之后:从红队的攻击路径反推修复清单
红蓝对抗最有价值的产出不是输赢,而是红队的攻击路径报告。每次演练结束后,我会把红队的每一步攻击动线梳理出来,对照清点防御缺口。这个环节经常能暴露出现有安全体系的盲点,比读十份安全报告有用。
比如某次演练里,红队通过一个低权限的工单系统翻到了内部Wiki,又通过Wiki里的AK走到了对象存储。这个路径里,蓝队当时完全没有监控到“工单系统到Wiki再到云平台”这条链路。原因是日志分别存在三个系统里,没有做关联分析。事后我们建立了跨系统的访问日志关联规则,把这类链路纳入监控。
再比如某次演练里,红队通过一个测试用的K8s Dashboard进入了集群,测试环境和生产环境没有隔离。这个路径揭示的问题不是Dashboard本身,而是环境隔离和配置管理混在一起了。后续引入了Argo CD这类GitOps工具,让生产环境的配置都从Git仓库统一管理,测试环境对生产环境的耦合就此断开。
修复清单不只要列技术项,还要列流程项:哪些系统之间该隔离、哪个凭证管理制度该改版、哪种权限审批要加条件。技术上的补丁能解决一时的问题,但流程上的漏洞不补,下次红队还会从同一个洞钻进来。
5. 常见问题与排查技巧实录
5.1 为什么扫描器报告“集群存在风险”,却复现不了漏洞
这个问题在红蓝对抗里最常见:扫描工具报了一堆高危及严重等级的问题,但到了真实利用环节,一个都吃不动。原因通常是扫描器只做了“配置存在性检查”,没有结合场景做“可利用性验证”。
比如扫描器报告“Kubernetes API Server允许匿名请求”,但如果该API Server只监听在某个内网网段的IP上,公网流量根本到不了,这个“漏洞”就无法被外部利用。再比如报告“某个Pod挂载了Docker Socket”,但该Pod所在的命名空间已经被NetworkPolicy限制只能访问特定网段,即使能读Docker Socket也出不去。
复现不了不代表风险不存在,只是说明“利用条件”还没完全具备。建议的做法是,把扫描结果中“高风险”的问题拿出来,根据真实网络可达性、认证要求、权限要求,重新评估它的可利用性。对抗中真正会被打的,永远是那些可以利用的配置缺陷,而不是所有符合CVE特征的配置项。
5.2 蓝队经常被“同一攻击路径反复打穿”的问题在哪里
很多时候蓝队在攻击路径上加了检测规则,但下一轮对抗里红队换了一层皮,规则就失效了。比如检测规则盯住了“从业务容器执行curl外连”,红队改成用DNS隧道或者直接写到消息中间件里外带数据,规则就拦不住了。
问题不在于单条检测规则好不好,而在于防守方只是在“堵已知路径”,没有做“攻击面建模”。你需要提前想清楚:攻击者可能会用哪些通道外传数据、哪些权限可能被滥用、哪些配置项可能成为跳板。这个建模过程没有工具能代替,只能靠对业务架构和安全体系的全盘了解。
我的习惯是每个季度做一次“红队模拟推演”:把最近半年的新漏洞、新公开的攻击样本、新出现的云平台功能特性,换成我们业务的实际场景,用手工走一遍主干攻击路径。这比上来就布置十条新检测规则扎实得多。
5.3 我看到集群里某个Pod疯狂重启,应该怎么排查
这个现象在云原生环境里非常常见。先别急着下结论,检查顺序可以是:先看Pod事件(kubectl describe pod)里的失败原因,再查对应Deployment的变更记录(kubectl rollout history),接着看节点上的kubelet日志。
有时候不是攻击,只是资源配额不够或者镜像拉取失败。但在对抗演练里,疯狂的Pod重启也可能是攻击者在做资源耗尽测试或者在反复尝试某个利用步骤。关键区别在于:攻击者的Pod往往有不正常的镜像来源,或者来自一个平时不创建的Namespace。看一眼镜像名,就能筛掉90%的误判。
如果发现某个Pod的镜像tag很新、仓库来源和既定的发布渠道对不上,建议立刻走应急响应的隔离流程。重要提示:不要在未确认根因的情况下直接删除Pod——控制器会把它重新拉起来,删除操作反而可能破坏取证现场的完整性。
写在最后:一次对抗演练结束后的复盘经验
每次红蓝对抗结束,我都会收到一堆问题,问得最多的不是“怎么防止被打穿”,而是“为什么工具加了这么多,还是被打穿了”。这个问题很真实。安全产品和检测规则不是堆得越多越好,重要的是让每一个检测点、每一条规则都能对应到攻击者的实际路径上,而不是悬在半空中自嗨。
我个人这两年最大的体会是:云原生攻防的本质不是技术对抗,而是信任模型的对抗。容器镜像、ServiceAccount、云平台AK、RBAC权限,这些都是“被信任的对象”。当信任被错误配置打破时,漏洞就出现了。所以防守方真正该做的,是持续审视这些信任对象是否被过度授权、是否有最小化、是否被滥用。生产环境里加一百个检测点,不如把基础信任模型先焊牢。
最后分享一个小技巧,这个我在文章里也反复提过:无论红队还是蓝队,拿到一个云原生环境,第一件事不是扫端口、不是查漏洞,而是先梳理“哪些身份能做什么事”。你把权限边界捋清了,攻击路径和防御重点基本就浮出水面了。带着这个思路去操作,比追着CVE跑要省力得多,也有效得多。