GCP - Add Custom SSH Metadata
Last updated
Last updated
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
A modificação de metadados em uma instância pode levar a riscos de segurança significativos se um atacante obtiver as permissões necessárias.
No GCP, sistemas Linux frequentemente executam scripts do Python Linux Guest Environment for 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 atacante puder modificar metadados personalizados, ele poderá fazer com que o daemon encontre uma nova chave pública, que será processada e integrada ao 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 atacante poderá comprometer o host.
Examinar Chaves SSH Existentes na Instância:
Execute o comando para descrever a instância e seus metadados para localizar chaves SSH existentes. A seção relevante na saída estará sob metadata
, especificamente a chave ssh-keys
.
Preste atenção ao formato das chaves SSH: o nome de usuário precede a chave, separado por dois pontos.
Preparar um Arquivo de Texto para Metadados da Chave SSH:
Salve os detalhes dos nomes de usuários e suas respectivas chaves SSH em um arquivo de texto chamado meta.txt
. Isso é essencial para preservar as chaves existentes enquanto adiciona novas.
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.
Adicione a nova chave pública ao meta.txt
, imitando o formato encontrado nos metadados da instância.
Atualizar os Metadados da Chave SSH da Instância:
Aplique os metadados atualizados da chave SSH à instância usando o comando gcloud compute instances add-metadata
.
Acessar 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).
Se nenhum usuário interessante for encontrado, é possível criar um novo que receberá privilégios sudo
:
É possível ampliar o alcance do acesso SSH a várias Máquinas Virtuais (VMs) em um ambiente de nuvem aplicando chaves SSH em nível de projeto. Essa abordagem permite o acesso SSH a qualquer instância dentro do projeto que não tenha bloqueado explicitamente as chaves SSH em nível de projeto. Aqui está um guia resumido:
Aplicar Chaves SSH em Nível de Projeto:
Use o comando gcloud compute project-info add-metadata
para adicionar chaves SSH do meta.txt
aos metadados do projeto. Essa 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 nível de projeto" habilitada.
SSH em Instâncias Usando Chaves em Nível de Projeto:
Com as chaves SSH em nível de projeto em vigor, você pode SSH em qualquer instância dentro do projeto. Instâncias que não bloqueiam chaves em nível de projeto aceitarão a chave SSH, concedendo acesso.
Um método direto para SSH em uma instância é usar o comando gcloud compute ssh [INSTANCE]
. Este comando usa seu nome de usuário atual e as chaves SSH definidas em nível de projeto para tentar o acesso.
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)