GCP - Non-svc Persistance
Essas são técnicas úteis uma vez que, de alguma forma, você comprometeu algumas credenciais GCP ou máquina em execução em um ambiente GCP.
Sequestro de Token
Tokens de Usuário Autenticado
Para obter o token atual de um usuário, você pode executar:
Verifique nesta página como usar diretamente este token usando gcloud:
Para obter os detalhes para gerar um novo token de acesso, execute:
Também é possível encontrar tokens de atualização em $HOME/.config/gcloud/application_default_credentials.json
e em $HOME/.config/gcloud/legacy_credentials/*/adc.json
.
Para obter um novo token de acesso atualizado com o token de atualização, ID do cliente e segredo do cliente, execute:
A validade dos tokens de atualização pode ser gerenciada em Admin > Segurança > Controle de sessão do Google Cloud, e por padrão está definida como 16h, embora possa ser configurada para nunca expirar:
Fluxo de autenticação
O fluxo de autenticação ao usar algo como gcloud auth login
abrirá um prompt no navegador e, após aceitar todos os escopos, o navegador enviará uma solicitação como esta para a porta http aberta pela ferramenta:
Então, o gcloud usará o estado e o código com um client_id
hardcoded (32555940559.apps.googleusercontent.com
) e client_secret
(ZmssLNjJy2998hD4CTg2ejr2
) para obter os dados finais do token de atualização.
Note que a comunicação com localhost é feita em HTTP, então é possível interceptar os dados para obter um token de atualização, no entanto esses dados são válidos apenas uma vez, então isso seria inútil, é mais fácil apenas ler o token de atualização do arquivo.
Escopos do OAuth
Você pode encontrar todos os escopos do Google em https://developers.google.com/identity/protocols/oauth2/scopes ou obtê-los executando:
É possível ver quais escopos a aplicação que gcloud
usa para autenticar pode suportar com este script:
Após executá-lo, foi verificado que este aplicativo suporta esses escopos:
Contas de Serviço
Assim como com usuários autenticados, se você conseguir comprometer o arquivo de chave privada de uma conta de serviço, poderá acessá-la geralmente pelo tempo que desejar. No entanto, se você roubar o token OAuth de uma conta de serviço, isso pode ser ainda mais interessante, porque, mesmo que por padrão esses tokens sejam úteis apenas por uma hora, se a vítima excluir a chave de API privada, o token OAuth ainda será válido até expirar.
Metadados
Obviamente, enquanto estiver dentro de uma máquina em execução no ambiente GCP, você poderá acessar a conta de serviço vinculada a essa máquina entrando em contato com o endpoint de metadados (observe que os tokens Oauth que você pode acessar neste endpoint geralmente são restritos por escopos).
Soluções
Algumas soluções para essas técnicas são explicadas em https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2
Referências
Última actualización