Kubernetes Network Attacks

Ataques de Rede no Kubernetes

Apoie o HackTricks e obtenha benefícios!

Introdução

O Kubernetes, por padrão, conecta todos os contêineres em execução no mesmo nó (mesmo que pertençam a diferentes namespaces) até a camada 2 (ethernet). Isso permite que um contêiner malicioso execute um ataque de ARP spoofing aos contêineres no mesmo nó e capture seu tráfego.

No cenário, serão criadas 4 máquinas:

  • ubuntu-pe: Máquina privilegiada para escapar para o nó e verificar métricas (não é necessário para o ataque)

  • ubuntu-attack: Contêiner malicioso no namespace padrão

  • ubuntu-victim: Máquina vítima no namespace kube-system

  • mysql: Máquina vítima no namespace padrão

echo 'apiVersion: v1
kind: Pod
metadata:
  name: ubuntu-pe
spec:
  containers:
  - image: ubuntu
    command:
      - "sleep"
      - "360000" 
    imagePullPolicy: IfNotPresent
    name: ubuntu-pe
    securityContext:
      allowPrivilegeEscalation: true
      privileged: true
      runAsUser: 0 
    volumeMounts:
    - mountPath: /host
      name: host-volume
  restartPolicy: Never 
  hostIPC: true 
  hostNetwork: true 
  hostPID: true 
  volumes:
  - name: host-volume
    hostPath:
      path: /
---
apiVersion: v1
kind: Pod
metadata:
  name: ubuntu-attack
  labels:
    app: ubuntu
spec:
  containers:
  - image: ubuntu
    command:
      - "sleep"
      - "360000" 
    imagePullPolicy: IfNotPresent
    name: ubuntu-attack
  restartPolicy: Never
---
apiVersion: v1
kind: Pod
metadata:
  name: ubuntu-victim
  namespace: kube-system
spec:
  containers:
  - image: ubuntu
    command:
      - "sleep"
      - "360000" 
    imagePullPolicy: IfNotPresent
    name: ubuntu-victim
  restartPolicy: Never
---
apiVersion: v1
kind: Pod
metadata:
  name: mysql
spec:
  containers:
  - image: mysql:5.6
    ports:
      - containerPort: 3306
    imagePullPolicy: IfNotPresent
    name: mysql
    env:
      - name: MYSQL_ROOT_PASSWORD
        value: mysql
  restartPolicy: Never' | kubectl apply -f -
kubectl exec -it ubuntu-attack -- bash -c "apt update; apt install -y net-tools python3-pip python3 ngrep nano dnsutils; pip3 install scapy; bash"
kubectl exec -it ubuntu-victim -n kube-system -- bash -c "apt update; apt install -y net-tools curl netcat mysql-client; bash"
kubectl exec -it mysql bash -- bash -c "apt update; apt install -y net-tools; bash"

Rede Básica do Kubernetes

Se você deseja mais detalhes sobre os tópicos de rede introduzidos aqui, consulte as referências.

ARP

Em geral, a rede de pod para pod dentro do nó está disponível por meio de uma ponte que conecta todos os pods. Essa ponte é chamada de "cbr0". (Alguns plugins de rede instalarão sua própria ponte.) O cbr0 também pode lidar com a resolução ARP (Protocolo de Resolução de Endereço). Quando um pacote de entrada chega ao cbr0, ele pode resolver o endereço MAC de destino usando ARP.

Isso implica que, por padrão, cada pod em execução no mesmo nó será capaz de comunicar-se com qualquer outro pod no mesmo nó (independentemente do namespace) no nível Ethernet (camada 2).

{%

Na máquina Ubuntu

dig google.com [...] ;; SEÇÃO DE RESPOSTA: google.com. 1 IN A 1.1.1.1


<div data-gb-custom-block data-tag="hint" data-style='info'>

Se você tentar criar seu próprio script de DNS spoofing, se você **apenas modificar a resposta DNS** isso **não vai funcionar**, porque a **resposta** terá um **IP de origem** o endereço IP do **pod malicioso** e **não será aceito**.\
Você precisa gerar um **novo pacote DNS** com o **IP de origem** do **DNS** onde a vítima enviou a solicitação DNS (que é algo como 172.16.0.2, não 10.96.0.10, esse é o IP do serviço DNS do K8s e não o IP do servidor DNS, mais sobre isso na introdução).

</div>

## Capturando Tráfego

A ferramenta [**Mizu**](https://github.com/up9inc/mizu) é um visualizador de tráfego de API simples, mas poderoso, para Kubernetes, permitindo que você **veja toda a comunicação de API** entre microservices para ajudar na depuração e solução de problemas de regressões.\
Ele instalará agentes nos pods selecionados e coletará suas informações de tráfego e mostrará em um servidor web. No entanto, você precisará de permissões elevadas do K8s para isso (e não é muito furtivo).

## Referências

* [https://www.cyberark.com/resources/threat-research-blog/attacking-kubernetes-clusters-through-your-network-plumbing-part-1](https://www.cyberark.com/resources/threat-research-blog/attacking-kubernetes-clusters-through-your-network-plumbing-part-1)
* [https://blog.aquasec.com/dns-spoofing-kubernetes-clusters](https://blog.aquasec.com/dns-spoofing-kubernetes-clusters)

<details>

<summary><strong>Apoie o HackTricks e obtenha benefícios!</strong></summary>

* Se você quiser ver sua **empresa anunciada no HackTricks** ou se quiser acessar a **última versão do PEASS ou baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm).
* **Compartilhe seus truques de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) no github.

</details>

Última actualización