Kubelet Authentication & Authorization

Aprenda hacking na AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks:

Autenticação do Kubelet

Da documentação:

Por padrão, solicitações ao endpoint HTTPS do kubelet que não são rejeitadas por outros métodos de autenticação configurados são tratadas como solicitações anônimas e recebem um nome de usuário system:anonymous e um grupo system:unauthenticated.

Os 3 métodos de autenticação são:

  • Anônimo (padrão): Use definindo o parâmetro --anonymous-auth=true ou no arquivo de configuração:

"authentication": {
"anonymous": {
"enabled": true
},
  • Webhook: Isso irá habilitar os tokens de portador da API kubectl como autorização (qualquer token válido será válido). Permita com:

  • certifique-se de que o grupo de API authentication.k8s.io/v1beta1 está habilitado no servidor de API

  • inicie o kubelet com as flags --authentication-token-webhook e --kubeconfig ou use a seguinte configuração:

"authentication": {
"webhook": {
"cacheTTL": "2m0s",
"enabled": true
},

O kubelet chama a API TokenReview no servidor API configurado para determinar informações do usuário a partir de tokens de portador

  • Certificados de cliente X509: Permitem autenticar via certificados de cliente X509

  • consulte a documentação de autenticação do apiserver para mais detalhes

  • inicie o kubelet com a flag --client-ca-file, fornecendo um pacote CA para verificar os certificados de cliente. Ou com a configuração:

"authentication": {
"x509": {
"clientCAFile": "/etc/kubernetes/pki/ca.crt"
}
}

Autorização do Kubelet

Qualquer solicitação que seja autenticada com sucesso (incluindo uma solicitação anônima) é então autorizada. O modo de autorização padrão é AlwaysAllow, que permite todas as solicitações.

No entanto, o outro valor possível é webhook (que é o que você encontrará principalmente por aí). Este modo irá verificar as permissões do usuário autenticado para permitir ou negar uma ação.

Observe que mesmo que a autenticação anônima esteja habilitada, o acesso anônimo pode não ter permissões para realizar qualquer ação.

A autorização via webhook pode ser configurada usando o parâmetro --authorization-mode=Webhook ou via o arquivo de configuração com:

"authorization": {
"mode": "Webhook",
"webhook": {
"cacheAuthorizedTTL": "5m0s",
"cacheUnauthorizedTTL": "30s"
}
},

O kubelet chama a API SubjectAccessReview no servidor de API configurado para determinar se cada solicitação é autorizada.

O kubelet autoriza solicitações de API usando a mesma abordagem de atributos de solicitação que o apiserver:

  • Ação

Verbo HTTPverbo de solicitação

POST

create

GET, HEAD

get (para recursos individuais), list (para coleções, incluindo conteúdo completo do objeto), watch (para observar um recurso individual ou coleção de recursos)

PUT

update

PATCH

patch

DELETE

delete (para recursos individuais), deletecollection (para coleções)

  • O recurso que se comunica com a API do Kubelet é sempre nodes e o subrecurso é determinado a partir do caminho da solicitação recebida:

API do Kubeletrecursosubrecurso

/stats/*

nodes

stats

/metrics/*

nodes

metrics

/logs/*

nodes

log

/spec/*

nodes

spec

todos os outros

nodes

proxy

Por exemplo, a seguinte solicitação tentou acessar as informações dos pods do kubelet sem permissão:

curl -k --header "Authorization: Bearer ${TOKEN}" 'https://172.31.28.172:10250/pods'
Forbidden (user=system:node:ip-172-31-28-172.ec2.internal, verb=get, resource=nodes, subresource=proxy)
  • Recebemos um Proibido, então a solicitação passou na verificação de Autenticação. Caso contrário, teríamos recebido apenas uma mensagem Não autorizado.

  • Podemos ver o nome de usuário (neste caso, do token)

  • Verifique como o recurso era nodes e o subrecurso proxy (o que faz sentido com as informações anteriores)

Referências

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

Última actualización