AWS - EKS Post Exploitation
EKS
Para mais informações, verifique
pageAWS - EKS EnumEnumerar o cluster a partir do Console da AWS
Se você tiver permissão eks:AccessKubernetesApi
você pode visualizar objetos do Kubernetes via console do AWS EKS (Saiba mais).
Conectar ao Cluster Kubernetes da AWS
Maneira fácil:
Não é tão fácil assim:
Se você conseguir obter um token com aws eks get-token --name <cluster_name>
mas não tiver permissões para obter informações do cluster (describeCluster), você poderia preparar seu próprio ~/.kube/config
. No entanto, tendo o token, você ainda precisa do endpoint URL para se conectar (se você conseguiu obter um token JWT de um pod, leia aqui) e do nome do cluster.
No meu caso, não encontrei as informações nos logs do CloudWatch, mas encontrei nos userData dos LaunchTemplates e também nos userData das máquinas EC2. Você pode ver essas informações no userData facilmente, por exemplo no próximo exemplo (o nome do cluster era cluster-name):
Do AWS para Kubernetes
O criador do cluster EKS sempre poderá acessar a parte do cluster Kubernetes do grupo system:masters
(k8s admin). No momento desta escrita, não há uma maneira direta de descobrir quem criou o cluster (você pode verificar o CloudTrail). E não há maneira de remover esse privilégio.
A maneira de conceder acesso ao K8s para mais usuários ou funções do IAM da AWS é usando o configmap aws-auth
.
Portanto, qualquer pessoa com acesso de escrita sobre o configmap aws-auth
poderá comprometer o cluster inteiro.
Para mais informações sobre como conceder privilégios extras a funções e usuários do IAM na mesma ou em contas diferentes e como abusar disso, verifique esta página.
Confira também este incrível post para aprender como funciona a autenticação IAM -> Kubernetes.
Do Kubernetes para AWS
É possível permitir uma autenticação OpenID para a conta de serviço do Kubernetes para permitir que eles assumam funções na AWS. Saiba como isso funciona nesta página.
Obter o Endpoint do Servidor de API a partir de um Token JWT
Não encontrei nenhuma documentação que explique os critérios para os 'dois chars' e o 'número'. Mas fazendo alguns testes por conta própria, vejo que estão ocorrendo os seguintes:
gr7
yl4
De qualquer forma, como são apenas 3 caracteres, podemos fazer brute force neles. Use o script abaixo para gerar a lista
Então com wfuzz
Lembre-se de substituir e <região>.
Bypass CloudTrail
Se um atacante obtém credenciais de um AWS com permissão sobre um EKS. Se o atacante configurar seu próprio kubeconfig
(sem chamar update-kubeconfig
) como explicado anteriormente, o get-token
não gera logs no CloudTrail porque não interage com a API da AWS (apenas cria o token localmente).
Portanto, quando o atacante conversa com o cluster EKS, o cloudtrail não registrará nada relacionado ao usuário que foi roubado e acessando-o.
Observe que o cluster EKS pode ter logs habilitados que registrarão esse acesso (embora, por padrão, estejam desativados).
EKS Ransom?
Por padrão, o usuário ou função que criou um cluster SEMPRE terá privilégios de administrador sobre o cluster. E essa é a única forma "segura" de acesso que a AWS terá sobre o cluster Kubernetes.
Portanto, se um atacante comprometer um cluster usando fargate e remover todos os outros administradores e excluir o usuário/função da AWS que criou o Cluster, o atacante poderia ter chantageado o clusterr.
Observe que se o cluster estivesse usando VMs EC2, poderia ser possível obter privilégios de administrador a partir do Nó e recuperar o cluster.
Na verdade, se o cluster estiver usando Fargate, você poderia usar nós EC2 ou mover tudo para EC2 no cluster e recuperá-lo acessando os tokens no nó.
Última actualización