GCP - Basic Information

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

Outras maneiras de apoiar o HackTricks:

Hierarquia de Recursos

O Google Cloud utiliza uma Hierarquia de Recursos que é semelhante, conceitualmente, à de um sistema de arquivos tradicional. Isso fornece um fluxo lógico pai/filho com pontos de anexo específicos para políticas e permissões.

Em um nível alto, parece com isso:

Organization
--> Folders
--> Projects
--> Resources

Uma máquina virtual (chamada de Instância de Cálculo) é um recurso. Um recurso reside em um projeto, provavelmente ao lado de outras Instâncias de Cálculo, buckets de armazenamento, etc.

Migração de Projetos

É possível migrar um projeto sem nenhuma organização para uma organização com as permissões roles/resourcemanager.projectCreator e roles/resourcemanager.projectMover. Se o projeto estiver dentro de outra organização, é necessário entrar em contato com o suporte do GCP para movê-los para fora da organização primeiro. Para mais informações, consulte este link.

Políticas de Organização

Permitem centralizar o controle sobre os recursos de nuvem da sua organização:

  • Centralize o controle para configurar restrições sobre como os recursos da sua organização podem ser usados.

  • Defina e estabeleça limites para que as equipes de desenvolvimento permaneçam dentro dos limites de conformidade.

  • Ajude os proprietários de projetos e suas equipes a se moverem rapidamente sem se preocupar em violar a conformidade.

Essas políticas podem ser criadas para afetar toda a organização, pasta(s) ou projeto(s). Os descendentes do nó hierárquico de recursos direcionado herdam a política da organização.

Para definir uma política de organização, você escolhe uma restrição, que é um tipo específico de restrição contra um serviço do Google Cloud ou um grupo de serviços do Google Cloud. Você configura essa restrição com as restrições desejadas.

Casos de uso comuns

  • Limitar o compartilhamento de recursos com base no domínio.

  • Limitar o uso de contas de serviço de Identidade e Gerenciamento de Acesso.

  • Restringir a localização física de recursos recém-criados.

  • Desativar a criação de contas de serviço.

Existem muitas outras restrições que oferecem controle detalhado sobre os recursos da sua organização. Para mais informações, consulte a lista de todas as restrições de serviço de Política de Organização.

Políticas de Organização Padrão

Essas são as políticas que o Google adicionará por padrão ao configurar sua organização GCP:

Políticas de Gerenciamento de Acesso

  • Contatos restritos por domínio: Impede a adição de usuários aos Contatos Essenciais fora dos domínios especificados. Isso limita os Contatos Essenciais a permitir apenas identidades de usuário gerenciadas em seus domínios selecionados para receber notificações da plataforma.

  • Compartilhamento restrito por domínio: Impede a adição de usuários às políticas do IAM fora dos domínios especificados. Isso limita as políticas do IAM a permitir apenas identidades de usuário gerenciadas em seus domínios selecionados para acessar recursos dentro desta organização.

  • Prevenção de acesso público: Impede que os buckets do Cloud Storage sejam expostos ao público. Isso garante que um desenvolvedor não possa configurar buckets do Cloud Storage para ter acesso à internet não autenticado.

  • Acesso uniforme ao nível do bucket: Impede listas de controle de acesso (ACLs) de nível de objeto em buckets do Cloud Storage. Isso simplifica o gerenciamento de acesso aplicando políticas do IAM de forma consistente em todos os objetos em buckets do Cloud Storage.

  • Requer login do SO: As VMs criadas em novos projetos terão o Login do SO habilitado. Isso permite que você gerencie o acesso SSH às suas instâncias usando o IAM sem precisar criar e gerenciar chaves SSH individuais.

Políticas de segurança adicionais para contas de serviço

  • Desativar concessões automáticas do IAM: Impede que as contas de serviço padrão do App Engine e Compute Engine sejam automaticamente concedidas a função Editor em um projeto na criação. Isso garante que as contas de serviço não recebam funções do IAM excessivamente permissivas na criação.

  • Desativar a criação de chaves de conta de serviço: Impede a criação de chaves de conta de serviço públicas. Isso ajuda a reduzir o risco de exposição de credenciais persistentes.

  • Desativar o upload de chaves de conta de serviço: Impede o upload de chaves de conta de serviço públicas. Isso ajuda a reduzir o risco de material de chave vazado ou reutilizado.

Políticas de configuração de rede VPC segura

  • Definir IPs externos permitidos para instâncias de VM: Impede a criação de instâncias de Cálculo com um IP público, que pode expô-las ao tráfego da internet.

  • Desativar a virtualização aninhada de VMs: Impede a criação de VMs aninhadas em VMs do Compute Engine. Isso diminui o risco de segurança de ter VMs aninhadas não monitoradas.

  • Desativar a porta serial da VM: Impede o acesso à porta serial das VMs do Compute Engine. Isso impede a entrada em uma porta serial do servidor usando a API do Compute Engine.

  • Restringir redes autorizadas em instâncias do Cloud SQL: Impede que intervalos de rede públicos ou não internos acessem seus bancos de dados do Cloud SQL.

  • Restringir o Encaminhamento de Protocolo com base no tipo de Endereço IP: Impede o encaminhamento de protocolo de VM para endereços IP externos.

  • Restringir o acesso por IP público em instâncias do Cloud SQL: Impede a criação de instâncias do Cloud SQL com um IP público, que pode expô-las ao tráfego da internet.

  • Restringir a remoção de liens de projeto VPC compartilhado: Impede a exclusão acidental de projetos host VPC compartilhados.

  • Define a configuração de DNS interno para novos projetos como Apenas DNS Zonal: Impede o uso de uma configuração de DNS legada que reduz a disponibilidade do serviço.

  • Ignorar a criação de rede padrão: Impede a criação automática da rede VPC padrão e dos recursos relacionados. Isso evita regras de firewall padrão excessivamente permissivas.

  • Desativar o uso de IPv6 externo na VPC: Impede a criação de sub-redes IPv6 externas, que podem ser expostas a acessos não autorizados pela internet.

Funções do IAM

Elas são como políticas do IAM na AWS, pois cada função contém um conjunto de permissões.

No entanto, ao contrário da AWS, não há um repositório centralizado de funções. Em vez disso, os recursos concedem funções de acesso X a princípios Y, e a única maneira de descobrir quem tem acesso a um recurso é usar o método get-iam-policy sobre esse recurso. Isso pode ser um problema porque isso significa que a única maneira de descobrir quais permissões um princípio tem é perguntar a cada recurso para quem ele está concedendo permissões, e um usuário pode não ter permissões para obter permissões de todos os recursos.

Existem três tipos de funções no IAM:

  • Funções Básicas/Primitivas, que incluem as funções de Proprietário, Editor e Visualizador que existiam antes da introdução do IAM.

  • Funções Predefinidas, que fornecem acesso granular para um serviço específico e são gerenciadas pelo Google Cloud. Existem muitas funções predefinidas, você pode ver todas elas com os privilégios que possuem aqui.

  • Funções Personalizadas, que fornecem acesso granular de acordo com uma lista de permissões especificada pelo usuário.

Existem milhares de permissões no GCP. Para verificar se uma função tem uma permissão, você pode pesquisar a permissão aqui e ver quais funções a possuem.

Você também pode pesquisar aqui funções predefinidas oferecidas por cada produto. Note que algumas funções não podem ser atribuídas a usuários e apenas a SAs por causa de algumas permissões que contêm. Além disso, observe que as permissõesterão efeito se forem atribuídas ao serviço relevante.

Ou verifique se uma função personalizada pode usar uma permissão específica aqui.

pageGCP - IAM, Principals & Org Policies Enum

Utilizadores

No console GCP não há gestão de Utilizadores ou Grupos, isso é feito no Google Workspace. No entanto, é possível sincronizar um provedor de identidade diferente no Google Workspace.

Pode aceder aos utilizadores e grupos do Workspace em https://admin.google.com.

O MFA pode ser forçado para os utilizadores do Workspace, no entanto, um atacante poderia usar um token para aceder ao GCP via cli que não estará protegido por MFA (estará protegido por MFA apenas quando o utilizador fizer login para gerá-lo: gcloud auth login).

Grupos

Quando uma organização é criada, é fortemente sugerido criar vários grupos. Se gerir algum deles, poderá comprometer toda ou uma parte importante da organização:

Grupo

Função

gcp-organization-admins (grupo ou contas individuais necessárias para a lista de verificação)

Administrar qualquer recurso que pertença à organização. Atribua este papel com moderação; os administradores da organização têm acesso a todos os seus recursos do Google Cloud. Alternativamente, devido a esta função ser altamente privilegiada, considere usar contas individuais em vez de criar um grupo.

gcp-network-admins (necessário para a lista de verificação)

Criar redes, sub-redes, regras de firewall e dispositivos de rede como Cloud Router, Cloud VPN e balanceadores de carga na nuvem.

gcp-billing-admins (necessário para a lista de verificação)

Configurar contas de faturação e monitorizar a sua utilização.

gcp-developers (necessário para a lista de verificação)

Desenhar, codificar e testar aplicações.

gcp-security-admins

Estabelecer e gerir políticas de segurança para toda a organização, incluindo gestão de acesso e políticas de restrição da organização. Consulte o guia de fundamentos de segurança do Google Cloud para obter mais informações sobre o planeamento da infraestrutura de segurança do Google Cloud.

gcp-devops

Criar ou gerir pipelines de ponta a ponta que suportam integração e entrega contínuas, monitorização e provisionamento de sistemas.

gcp-logging-admins

gcp-logging-viewers

gcp-monitor-admins

gcp-billing-viewer (já não por padrão)

Monitorizar os gastos em projetos. Os membros típicos fazem parte da equipa financeira.

gcp-platform-viewer (já não por padrão)

Rever informações de recursos em toda a organização do Google Cloud.

gcp-security-reviewer (já não por padrão)

Rever segurança na nuvem.

gcp-network-viewer (já não por padrão)

Rever configurações de rede.

grp-gcp-audit-viewer (já não por padrão)

Ver registos de auditoria.

gcp-scc-admin (já não por padrão)

Administrar o Security Command Center.

gcp-secrets-admin (já não por padrão)

Gerir segredos no Secret Manager.

Política de Palavras-passe Padrão

  • Impor palavras-passe fortes

  • Entre 8 e 100 caracteres

  • Sem reutilização

  • Sem expiração

  • Se as pessoas estiverem a aceder ao Workspace através de um fornecedor terceirizado, estes requisitos não são aplicados.

Contas de Serviço

Estes são os princípios aos quais os recursos podem estar anexados e aceder para interagir facilmente com o GCP. Por exemplo, é possível aceder ao token de autenticação de uma Conta de Serviço anexada a uma VM nos metadados. É possível encontrar alguns conflitos ao utilizar tanto IAM e escopos de acesso. Por exemplo, a sua conta de serviço pode ter a função IAM de compute.instanceAdmin mas a instância que comprometeu foi limitada com a limitação de escopo de https://www.googleapis.com/auth/compute.readonly. Isso impediria que fizesse quaisquer alterações usando o token OAuth atribuído automaticamente à sua instância.

É semelhante aos papéis IAM da AWS. Mas ao contrário da AWS, qualquer conta de serviço pode ser anexada a qualquer serviço (não precisa de permitir via uma política).

Várias das contas de serviço que encontrará são realmente geradas automaticamente pelo GCP quando começa a usar um serviço, como:

PROJECT_NUMBER-compute@developer.gserviceaccount.com
PROJECT_ID@appspot.gserviceaccount.com

No entanto, também é possível criar e anexar a recursos contas de serviço personalizadas, que terão a seguinte aparência:

SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com

Escopos de Acesso

Os escopos de acesso são anexados aos tokens OAuth gerados para acessar os endpoints da API do GCP. Eles restringem as permissões do token OAuth. Isso significa que se um token pertence a um Proprietário de um recurso, mas não tem no escopo do token para acessar esse recurso, o token não pode ser usado para (ab)usar esses privilégios.

O Google na verdade recomenda que os escopos de acesso não sejam usados e que se confie totalmente no IAM. O portal de gerenciamento da web na verdade faz cumprir isso, mas os escopos de acesso ainda podem ser aplicados às instâncias usando contas de serviço personalizadas programaticamente.

Você pode ver quais escopos estão atribuídos consultando:

curl 'https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=<access_token>'

{
"issued_to": "223044615559.apps.googleusercontent.com",
"audience": "223044615559.apps.googleusercontent.com",
"user_id": "139746512919298469201",
"scope": "openid https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/appengine.admin https://www.googleapis.com/auth/sqlservice.login https://www.googleapis.com/auth/compute https://www.googleapis.com/auth/accounts.reauth",
"expires_in": 2253,
"email": "username@testing.com",
"verified_email": true,
"access_type": "offline"
}

Os escopos anteriores são os gerados por padrão ao usar o gcloud para acessar dados. Isso ocorre porque ao usar o gcloud você primeiro cria um token OAuth e depois o utiliza para entrar em contato com os endpoints.

O escopo mais importante dentre esses potencialmente é o cloud-platform, o que basicamente significa que é possível acessar qualquer serviço no GCP.

Você pode encontrar uma lista de todos os escopos possíveis aqui.

Se você tiver credenciais de navegador do gcloud, é possível obter um token com outros escopos, fazendo algo como:

# Maybe you can get a user token with other scopes changing the scopes array from ~/.config/gcloud/credentials.db

# Set new scopes for SDKs credentials
gcloud auth application-default login --scopes=https://www.googleapis.com/auth/userinfo.email,https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/sqlservice.login,https://www.googleapis.com/auth/appengine.admin,https://www.googleapis.com/auth/compute,https://www.googleapis.com/auth/accounts.reauth,https://www.googleapis.com/auth/admin.directory.user,https://www.googleapis.com/auth/admin.directory.group,https://www.googleapis.com/auth/admin.directory.domain,https://www.googleapis.com/auth/admin.directory.user

# Print new token
gcloud auth application-default print-access-token

# To use this token with some API you might need to use curl to indicate the project header with --header "X-Goog-User-Project: <project-name>"

Políticas IAM do Terraform, Vínculos e Associações de Membros

Conforme definido pelo terraform em https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/google_project_iam usando o terraform com GCP, existem diferentes maneiras de conceder acesso a um principal sobre um recurso:

  • Associações de Membros: Você define principais como membros de funções sem restrições sobre a função ou os principais. Você pode colocar um usuário como membro de uma função e depois colocar um grupo como membro da mesma função e também definir esses principais (usuário e grupo) como membros de outras funções.

  • Vínculos: Vários principais podem ser vinculados a uma função. Esses principais ainda podem ser vinculados ou ser membros de outras funções. No entanto, se um principal que não está vinculado à função for definido como membro de uma função vinculada, na próxima vez que o vínculo for aplicado, a associação desaparecerá.

  • Políticas: Uma política é autoritativa, indica funções e principais e então, esses principais não podem ter mais funções e essas funções não podem ter mais principais a menos que essa política seja modificada (nem mesmo em outras políticas, vínculos ou associações). Portanto, quando uma função ou principal é especificado na política, todos os seus privilégios são limitados por essa política. Obviamente, isso pode ser contornado no caso em que o principal recebe a opção de modificar a política ou permissões de escalonamento de privilégios (como criar um novo principal e vinculá-lo a uma nova função).

Referências

Última actualización