GCP - IAM, Principais e Enumeração de Políticas de Org
Reading time: 9 minutes
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
Contas de Serviço
Para uma introdução sobre o que é uma conta de serviço, veja:
Enumeração
Uma conta de serviço sempre pertence a um projeto:
gcloud iam service-accounts list --project <project>
Usuários e Grupos
Para uma introdução sobre como Usuários e Grupos funcionam no GCP, consulte:
Enumeração
Com as permissões serviceusage.services.enable
e serviceusage.services.use
, é possível habilitar serviços em um projeto e usá-los.
caution
Observe que, por padrão, os usuários do Workspace recebem a função Criador de Projetos, dando-lhes acesso para criar novos projetos. Quando um usuário cria um projeto, ele recebe a função owner
sobre ele. Assim, ele poderia habilitar esses serviços sobre o projeto para poder enumerar o Workspace.
No entanto, observe que também é necessário ter permissões suficientes no Workspace para poder chamar essas APIs.
Se você puder habilitar o serviço admin
e se seu usuário tiver privilegios suficientes no workspace, você poderia enumerar todos os grupos e usuários com as seguintes linhas.
Mesmo que diga identity groups
, também retorna usuários sem nenhum grupo:
# Enable admin
gcloud services enable admin.googleapis.com
gcloud services enable cloudidentity.googleapis.com
# Using admin.googleapis.com
## List all users
gcloud organizations list #The DIRECTORY_CUSTOMER_ID is the Workspace ID
gcloud beta identity groups preview --customer <workspace-id>
# Using cloudidentity.googleapis.com
## List groups of a user (you can list at least the groups you belong to)
gcloud identity groups memberships search-transitive-groups --member-email <email> --labels=cloudidentity.googleapis.com/groups.discussion_forum
## List Group Members (you can list at least the groups you belong to)
gcloud identity groups memberships list --group-email=<email>
### Make it transitive
gcloud identity groups memberships search-transitive-memberships --group-email=<email>
## Get a graph (if you have enough permissions)
gcloud identity groups memberships get-membership-graph --member-email=<email> --labels=cloudidentity.googleapis.com/groups.discussion_forum
tip
Nos exemplos anteriores, o parâmetro --labels
é obrigatório, então um valor genérico é usado (não é necessário se você usar a API diretamente como PurplePanda faz aqui.
Mesmo com o serviço de administrador habilitado, é possível que você receba um erro ao enumerá-los porque seu usuário de workspace comprometido não tem permissões suficientes:
.png)
IAM
Verifique isso para informações básicas sobre IAM.
Permissões Padrão
De acordo com os docs: Quando um recurso de organização é criado, todos os usuários em seu domínio recebem as funções de Criador de Conta de Cobrança e Criador de Projeto por padrão. Essas funções padrão permitem que seus usuários comecem a usar o Google Cloud imediatamente, mas não são destinadas ao uso na operação regular do recurso de organização.
Essas funções concedem as permissões:
billing.accounts.create
eresourcemanager.organizations.get
resourcemanager.organizations.get
eresourcemanager.projects.create
Além disso, quando um usuário cria um projeto, ele é concedido como proprietário desse projeto automaticamente de acordo com os docs. Portanto, por padrão, um usuário poderá criar um projeto e executar qualquer serviço nele (mineradores? Enumeração de Workspace? ...)
caution
O maior privilégio em uma Organização GCP é a função de Administrador da Organização.
set-iam-policy vs add-iam-policy-binding
Na maioria dos serviços, você poderá alterar as permissões sobre um recurso usando o método add-iam-policy-binding
ou set-iam-policy
. A principal diferença é que add-iam-policy-binding
adiciona uma nova vinculação de função à política IAM existente, enquanto set-iam-policy
irá deletar as permissões anteriormente concedidas e definir apenas as que estão indicadas no comando.
Enumeração
# Roles
## List roles
gcloud iam roles list --project $PROJECT_ID # List only custom roles
gcloud iam roles list --filter='etag:AA=='
## Get perms and description of role
gcloud iam roles describe roles/container.admin
gcloud iam roles describe --project <proj-name> <role-name>
# Policies
gcloud organizations get-iam-policy <org_id>
gcloud resource-manager folders get-iam-policy <folder-id>
gcloud projects get-iam-policy <project-id>
# MISC
## Testable permissions in resource
gcloud iam list-testable-permissions --filter "NOT apiDisabled: true" <resource>
## Grantable roles to a resource
gcloud iam list-grantable-roles <project URL>
cloudasset IAM Enumeration
Existem diferentes maneiras de verificar todas as permissões de um usuário em diferentes recursos (como organizações, pastas, projetos...) usando este serviço.
- A permissão
cloudasset.assets.searchAllIamPolicies
pode solicitar todas as políticas iam dentro de um recurso.
gcloud asset search-all-iam-policies #By default uses current configured project
gcloud asset search-all-iam-policies --scope folders/1234567
gcloud asset search-all-iam-policies --scope organizations/123456
gcloud asset search-all-iam-policies --scope projects/project-id-123123
- A permissão
cloudasset.assets.analyzeIamPolicy
pode solicitar todas as políticas iam de um principal dentro de um recurso.
# Needs perm "cloudasset.assets.analyzeIamPolicy" over the asset
gcloud asset analyze-iam-policy --organization=<org-id> \
--identity='user:email@hacktricks.xyz'
gcloud asset analyze-iam-policy --folder=<folder-id> \
--identity='user:email@hacktricks.xyz'
gcloud asset analyze-iam-policy --project=<project-name> \
--identity='user:email@hacktricks.xyz'
- A permissão
cloudasset.assets.searchAllResources
permite listar todos os recursos de uma organização, pasta ou projeto. Recursos relacionados ao IAM (como funções) incluídos.
gcloud asset search-all-resources --scope projects/<proj-name>
gcloud asset search-all-resources --scope folders/1234567
gcloud asset search-all-resources --scope organizations/123456
- A permissão
cloudasset.assets.analyzeMove
pode ser útil para também recuperar políticas que afetam um recurso como um projeto.
gcloud asset analyze-move --project=<proj-name> \
--destination-organization=609216679593
- Eu suponho que a permissão
cloudasset.assets.queryIamPolicy
também poderia dar acesso para encontrar permissões de principais.
# But, when running something like this
gcloud asset query --project=<proj> --statement='SELECT * FROM compute_googleapis_com_Instance'
# I get the error
ERROR: (gcloud.asset.query) UNAUTHENTICATED: QueryAssets API is only supported for SCC premium customers. See https://cloud.google.com/security-command-center/pricing
testIamPermissions enumeration
caution
Se você não consegue acessar informações do IAM usando os métodos anteriores e está em uma Red Team. Você pode usar a ferramenta https://github.com/carlospolop/bf_my_gcp_perms para forçar suas permissões atuais.
No entanto, observe que o serviço cloudresourcemanager.googleapis.com
precisa estar habilitado.
Privesc
Na página a seguir, você pode verificar como abusar das permissões do IAM para escalar privilégios:
Unauthenticated Enum
GCP - IAM, Principals & Org Unauthenticated Enum
Post Exploitation
Persistence
Se você tiver altos privilégios, você pode:
- Criar novas SAs (ou usuários se estiver no Workspace)
- Dar a principais controlados por você mais permissões
- Dar mais privilégios a SAs vulneráveis (SSRF em vm, Cloud Function vulnerável…)
- …
Org Policies
Para uma introdução sobre o que são Org Policies, verifique:
As políticas do IAM indicam as permissões que os principais têm sobre os recursos por meio de funções, que são atribuídas a permissões granulares. As políticas de organização restrigem como esses serviços podem ser usados ou quais recursos estão desativados. Isso ajuda a melhorar o menor privilégio de cada recurso no ambiente GCP.
gcloud resource-manager org-policies list --organization=ORGANIZATION_ID
gcloud resource-manager org-policies list --folder=FOLDER_ID
gcloud resource-manager org-policies list --project=PROJECT_ID
Privesc
Na página a seguir, você pode verificar como abusar das permissões de políticas organizacionais para escalar privilégios:
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.