7 pontos por ironlung 2023-10-05 | Ainda não há comentários. | Compartilhar no WhatsApp
  • O objetivo deste conteúdo é reforçar a importância da segurança no Kubernetes
  • Locais onde os Secrets são armazenados
    • Quando o usuário declara um recurso com o comando kubectl, o Kubernetes cria o arquivo de manifesto que define esse recurso e o armazena no etcd
    • Quando o usuário declara um recurso Secret, esse Secret também é armazenado no etcd
    • Quando o usuário cria um pod que lê o Secret como volume ou variável de ambiente, o Secret fica armazenado nesse pod
    • Se o etcd onde o Secret é armazenado e o pod que usa esse Secret forem hackeados, é possível descobrir a senha armazenada no Secret
  • Preparação prévia
    • Criar o cluster com kubeadm
    • Para o laboratório, criar previamente três recursos: Secret credit-card, pod app1 e pod app2
  • Hackeando o etcd
    • etcd: armazenamento de dados chave-valor que guarda o estado do cluster Kubernetes. Todas as informações declaradas no Kubernetes são armazenadas aqui. Também é possível ver os Secrets consultando o etcd
    • 1.1 Encontrando a senha com etcdctl
      • Consultar o manifesto do kube-apiserver para obter a certificate authority, a chave pública e a chave privada do servidor etcd
      • Encontrar a senha com o comando etcdctl, usado para manipular o etcd com mais facilidade
    • 1.2 Obter diretamente acessando o banco de dados do etcd
      • Encontrar o processo em que o etcd está rodando e vasculhar todos os dados desse processo para encontrar a senha
        • ps aux | grep etcd - obter o PID do etcd
        • ll /proc/<pid>/fd - aparece um arquivo de link com o nome db
        • cat /proc/<pid>fd/<db> | grep -A10 -B10 credit-card - encontrar a senha criada previamente com esse comando
  • Hackeando o pod
    • Obter com kubectl exec
      • Se houver permissões adequadas para consultar o Kubernetes, é possível obter a senha com o comando kubectl
    • Obter acessando diretamente o contêiner
      • Se for possível usar livremente comandos Docker no worker node, dá para extrair a senha
      • No worker node em que o pod app1 foi agendado, é possível localizar o contêiner e extrair a lista de variáveis de ambiente registradas nele
        • crictl pods - encontrar o Pod ID do app1
        • crictl ps - encontrar o contêiner correspondente ao Pod ID
        • crictl inspect <container id> | grep -A16 env - consultar os detalhes desse contêiner e extrair as variáveis de ambiente
    • Obter com uma ServiceAccount que tenha permissão de acesso ao Secret
      • Se a ServiceAccount do pod tiver permissão de acesso ao Secret, é possível encontrar a senha chamando a API de dentro do pod
  • Como impedir os ataques descritos acima
    • Seguir o princípio do menor privilégio e não criar service accounts com permissões desnecessárias
    • Evitar expor credenciais de usuários e se preparar para ameaças como engenharia social
    • Criptografar o etcd com o recurso EncryptionConfiguration

Ainda não há comentários.

Ainda não há comentários.