GCP - Non-svc Persistance
Estas são técnicas úteis uma vez que, de alguma forma, você tenha comprometido algumas credenciais GCP ou uma máquina rodando em um ambiente GCP.
Token Hijacking
Authenticated User Tokens
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 refresh token, client ID e client secret, execute:
A validade dos tokens de atualização pode ser gerenciada em Admin > Security > Google Cloud session control, e por padrão está definida para 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:
Then, gcloud will use the state and code with a some hardcoded client_id
(32555940559.apps.googleusercontent.com
) and client_secret
(ZmssLNjJy2998hD4CTg2ejr2
) to get the final refresh token data.
Note que a comunicação com localhost é em HTTP, então é possível interceptar os dados para obter um refresh token, no entanto, esses dados são válidos apenas uma vez, então isso seria inútil, é mais fácil apenas ler o refresh token do arquivo.
OAuth Scopes
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:
Depois de executá-lo, foi verificado que este aplicativo suporta estes escopos:
é interessante ver como este app suporta o escopo drive
, o que poderia permitir a um usuário escalar de GCP para Workspace se um atacante conseguir forçar o usuário a gerar um token com este escopo.
Veja como abusar disso aqui.
Service Accounts
Assim como com usuários autenticados, se você conseguir comprometer o arquivo de chave privada de uma service account, você poderá acessá-la geralmente pelo tempo que quiser. No entanto, se você roubar o token OAuth de uma service account, isso pode ser ainda mais interessante, porque, mesmo que por padrão esses tokens sejam úteis apenas por uma hora, se a vítima deletar a chave privada da API, o token OAuth ainda será válido até expirar.
Metadata
Obviamente, enquanto você estiver dentro de uma máquina rodando no ambiente GCP, você poderá acessar a service account anexada a essa máquina contatando o endpoint de metadata (note que os tokens OAuth que você pode acessar neste endpoint geralmente são restritos por escopos).
Remediações
Algumas remediaçõ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
Last updated