K8s集群入侵排查技巧
随着k8s的应用越来越广泛,它已经成为IT基础设施的重要组成部分,同时也成为攻击者的重点目标。一旦集群遭受入侵,我们需要第一时间做出应急响应,以最短时间内恢复业务正常运行。K8s安全事件概述在K 2025-11-13 03:33:43 Author: www.freebuf.com(查看原文) 阅读量:1 收藏

随着k8s的应用越来越广泛,它已经成为IT基础设施的重要组成部分,同时也成为攻击者的重点目标。一旦集群遭受入侵,我们需要第一时间做出应急响应,以最短时间内恢复业务正常运行。

K8s安全事件概述

在K8s应急场景中,我们可以根据K8s的不同层级,将安全事件分为三类,针对不同的阶段选择不同的应对方式。

Pod容器入侵排查

当Pod遭受入侵时,我们需要进入Pod里面进行入侵排查。

进入容器

最直接的方法就是进入有问题的Pod内执行命令,通常可以使用kubectl exec命令在指定的Pod容器中操作。

kubectl exec -it nginx-5c47845dd7-k6dp9 -- bash

这种方法虽然简单易用,但受限于运行中的应用Pod环境,往往缺少排查问题所需的命令或工具,无法满足深入分析的需求,导致效率低下。

Pod调试

K8s提供了kubectl debug命令,通过临时容器共享命名空间的方式分析业务容器,而且可以从临时容器访问业务容器的文件系统,根文件系统位于/proc/1/root目录下。

kubectl debug -it nginx-5c47845dd7-k6dp9 --image=busybox:latest --target=nginx

这种方式可以更加通用,可以满足深入分析和排查问题的需求,灵活高效,不会影响业务容器应用。

Pod日志

虽然可以使用kubectl exec命令进入Pod内部查看日志,K8s使用kubectl logs命令查看Pod日志。

kubectl logs web-86cd4d65b9-pwwlm

Node节点入侵排查

当Node节点遭受入侵时,我们需要安全排查节点服务器的安全状态,以确认入侵的影响。

节点调试

kubectl debug node是Kubernetes提供的强大节点调试工具,它让集群管理员能够在无需直接SSH访问的情况下深入检查节点状态,特别适用于无法通过SSH直接访问节点的场景。

当需要调试某个节点时,可以使用kubectl debug node命令,这个命令会在目标节点上创建一个临时容器,访问节点服务器,并提供一个交互式的Shell环境。临时容器运行在主机的命名空间中,节点根文件系统挂载在/host上。

kubectl debug -it node/node --image=busybox:latest

节点相关日志

容器标准输出: /var/lib/docker/containers/<Container-ID>/-json.log
容器日志: /var/log/containers/*.log
kubelet日志: journalctl -u kubelet

K8s集群入侵排查

K8s Audit记录了集群中所有API Server的请求,当K8s集群遭受入侵时,K8s Audit拥有独特的视角,可以帮助我们看清集群层面的攻击行为,重点关注sourceIPS、user、userAgent、verb等字段,发现K8s集群层面的攻击行为,定位问题的根源。

API Server未授权访问

攻击特征:未认证用户尝试使用集群管理员权限执行操作。

user: {"username":"system:unsecured", "groups":["system:masters","system:authenticated"]}

使用泄露的服务账户token

攻击特征:user.username可能包含服务账号,userAgent字段包含curl。

"user.username"="system:serviceaccount:test:bypass" userAgent="curl/7.68.0"

使用泄露的kubeconfig文件

攻击特征:sourceIPs不在信任范围,userAgent包含kubectl信息。

"sourceIPs{}"="192.168.44.133" userAgent="kubectl/v1.28.2 (linux/amd64) kubernetes/89a4ea3"

创建特权Pod

攻击特征:攻击者成功创建特权Pod。

verb=create "responseStatus.code"=201 "requestObject.spec.containers{}.securityContext.privileged"=true

挂载hostPath

攻击特征:攻击者将宿主机的根目录/以hostPath的方式挂载到容器。

verb=create "responseStatus.code"=201 "responseObject.spec.volumes{}.hostPath.path"="/"

创建CronJob

攻击特征:攻击者成功创建CronJob。

verb=create "responseStatus.code"=201 "objectRef.resource"=cronjobs

文章来源: https://www.freebuf.com/articles/457259.html
如有侵权请联系:admin#unsafe.sh