☸️kubernetes pentesting

Kubernetes Pentesting

Theory

Kubernetes Architecture

Understanding the entirety of the Kubernetes architecture 2 will help you analyze its weaknesses. The first component would be to understand the control plane. The control plane of Kubernetes itself is made up of the containers listed next.

NOTE The control plane of a system is the plane, or zone, in which the system operates outside of its standard workloads. This zone is responsible for the backend of the system and organizes the components that make up the system. The plane that a user would interact with for a workload on Kubernetes, such as the web applications hosted on Kubernetes, would be called the data plane.

API Server

The API Server is the heart of the system, and it is integral for communication between the Kubernetes Nodes and the Kubernetes Components.

Etcd

This is a key/value store that contains the database for control plane components. It is a fileless equivalent to the /etc directory in a Unix operating system.

kube-scheduler

This is the scheduling system; it maintains the operation of the containers. The kube- scheduler looks at what should be running, how it should be running, and whether it should be running and then ensures those operations execute.

kube-controller-manager

This is a series of controllers that maintain different operating components. Each controller has a specific task, and the manager organizes them.

cloud-controller-manager

The cloud-controller- manager is an abstraction for each cloud, and this allows for Kubernetes to work across different cloud providers or on-premises systems.

Kubelet

The Kubernetes Agent that communicates back to the Kubernetes API Server.

Kube-proxy

A port-forwarding tool that’s like SSH port forwarding. This allows the operator of the system to communicate with individual containers that are internally available in the cluster.


Practical

Find Kubernetes API Servers

First Method

  • Certificate transparency reports

  • Brute-forcing DNS entries

  • Information disclosure through people submitting code blocks or samples

Second Method

we can find these same endpoints if we have access to a container in which they are connected to an existing cluster.

  • Control plane: Port 6443, Kubernetes API server

  • TCP: Inbound, 2379-2380, etcd server client API

  • Worker node(s): TCP Inbound, 10250, Kubelet API

Kubernetes Native URIs

  • /version The response may include a keyword like gitVersion, goVersion, or “platform”.

  • /api/v1/pods If you get an answer with “apiVersion” and do not see “pods is forbidden,” then you have found a critical system issue where unauthenticated users can get to pods.

  • /api/v1/info Same as pods, but this is an additional endpoint to ensure that general-purpose permissions are appropriately set.

  • /ui This is the lesser-used Kubernetes Dashboard project URI, which should never be exposed to the Internet.

Scanners may also be keying into specific text in the HTML that is returned by scans:

  • “Kubernetes Dashboard” This string reveals HTML that could indicate the presence of the Kubernetes Dashboard.

Fingerprint Kubernetes Servers

Hacking Kubernetes from Within

Get AWS EKS Authentication Token

Kubestriker

This application allows you to scan, specify a URL, or use a configuration file to attack a Kubernetes environment.

Run an Ubuntu-based Container Image

Enumeration on Ubuntu Container

Attack API Server

There are two ways to approach this:

  • We can move our tools onto the local container. The downside is that we may be caught by any monitoring tools installed in the cluster, such as EDR tools or tools specific to Kubernetes Admission Controller scanning or Kubernetes Container scanning. Sysdig has an open source agent that can provide this type of telemetry. The tools generally will understand how to use the existing credentials in this case.

  • We can move the tokens outside the cluster and then attach to our clusters remotely using those keys. This is done by using the /var/run/secrets/kubernetes.io/serviceaccount/token, ca.crt, and the IP or hostname of the server.

Fist Option

This attack will do the following:

  1. Install a container node with a backdoor listener that executes a Bash shell.

  2. Start it with all local privileges and then mount the host disk to the local system.

Files Needed:

ncat-svc.yml This file exposes the port to the cluster.

ncat.yml This is the main deployment script.

Write the files in Container

Once these two files are on the remote server, we will need to download the kubectl file. Once we have all these pieces in the system, we can then have the kubectl apply a new pod to do the following:

  1. The pod will open port 9999.

  2. It will mount all the host’s PIDs, environment variables, and networking.

  3. It will mount the root file system right into the container.

We can then connect on that port to gain access to the container, which has elevated privileges:


REFERENCES

  • https://kubernetes.io/partners/#conformance

  • https://kubernetes.io/docs/concepts/architecture/

  • https://aws.amazon.com/eks/getting-started/

  • https://microservices-demo.github.io/

  • https://isc.sans.edu/forums/diary/Using+Certificate+Transparency+as+an+Attack+Defense+Tool/24114/

  • https://github.com/coreos/coreos-kubernetes/blob/master/Documentation/kubernetes-networking.md

  • https://istio.io/

  • https://www.github.com/mosesrenegade/tools-repo/

Was this helpful?