GCP - IAM, Principals & Org Policies Enum

AWS hacklemeyi sıfırdan ileri seviyeye öğrenin htARTE (HackTricks AWS Red Team Expert) ile

HackTricks'i desteklemenin diğer yolları:

Hizmet Hesapları

Hizmet hesabı nedir hakkında bir giriş için şu bağlantıya bakın:

pageGCP - Basic Information

Numaralandırma

Bir hizmet hesabı her zaman bir projeye aittir:

gcloud iam service-accounts list --project <project>

Kullanıcılar ve Gruplar

GCP'de Kullanıcılar ve Gruplar nasıl çalıştığı hakkında bir giriş için şu linke bakabilirsiniz:

pageGCP - Basic Information

Numaralandırma

serviceusage.services.enable ve serviceusage.services.use izinleri ile bir projede hizmetleri etkinleştirmek ve kullanmak mümkündür.

Varsayılan olarak, Workspace kullanıcılarına Proje Oluşturucu rolü verilir, bu da onlara yeni projeler oluşturma erişimi sağlar. Bir kullanıcı bir proje oluşturduğunda, ona üzerinde owner rolü verilir. Bu nedenle, Workspace'i numaralandırabilmek için bu hizmetleri etkinleştirebilir.

Ancak, bu API'ları çağırabilmek için Workspace'ta yeterli izne sahip olmak da gereklidir.

Eğer admin hizmetini etkinleştirebilirseniz ve kullanıcıınızın Workspace'ta yeterli ayrıcalıkları varsa, aşağıdaki satırlarla tüm grupları ve kullanıcıları numaralandırabilirsiniz. kimlik grupları dese de, grubu olmayan kullanıcıları da döndürür:

# 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

Önceki örneklerde --labels parametresinin gerekliliği belirtilmiştir, bu yüzden genel bir değer kullanılmıştır (API doğrudan kullanıldığında gerekli değildir, PurplePanda'nın burada yaptığı gibi.

Yönetici hizmeti etkin olsa bile, etkilenen çalışma alanı kullanıcınızın yeterli izinlere sahip olmadığından dolayı bunları sıralarken bir hata almanız mümkündür:

IAM

IAM hakkında temel bilgiler için buraya bakın.

Varsayılan İzinler

Belgelerden: Bir organizasyon kaynağı oluşturulduğunda, varsayılan olarak tüm alanınızdaki kullanıcılara Billing Account Creator ve Project Creator rolleri verilir. Bu varsayılan roller, kullanıcılarınızın Google Cloud'u hemen kullanmaya başlamalarına olanak tanır, ancak organizasyon kaynağınızın düzenli işleyişinde kullanılması amaçlanmamıştır.

Bu roller, şu izinleri verir:

  • billing.accounts.create ve resourcemanager.organizations.get

  • resourcemanager.organizations.get ve resourcemanager.projects.create

Ayrıca, bir kullanıcı bir proje oluşturduğunda, belgelere göre otomatik olarak o projenin sahibi olur. Dolayısıyla, varsayılan olarak, bir kullanıcı bir proje oluşturabilir ve üzerinde herhangi bir hizmeti çalıştırabilir (madenciler? Workspace sıralaması? ...)

GCP Organizasyonunda en yüksek ayrıcalık Organization Administrator rolüdür.

set-iam-policy vs add-iam-policy-binding

Çoğu hizmette, bir kaynağın üzerindeki izinleri değiştirebilirsiniz, add-iam-policy-binding veya set-iam-policy yöntemini kullanarak. Temel fark, add-iam-policy-binding'in mevcut IAM politikasına yeni bir rol bağlaması eklemesi iken set-iam-policy'in önceden verilen izinleri silecek ve yalnızca komutta belirtilenleri ayarlayacak olmasıdır.

Sıralama

# 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>

Bulut Varlık IAM Numaralandırma

Bir kullanıcının farklı kaynaklardaki (örneğin organizasyonlar, klasörler, projeler...) tüm izinlerini kontrol etmek için bu hizmeti kullanmanın farklı yolları vardır.

  • cloudasset.assets.searchAllIamPolicies izni, bir kaynağın içindeki tüm iam politikalarını isteyebilir.

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
  • İzin cloudasset.assets.analyzeIamPolicy, bir kaynak içindeki bir öznenin tüm iam politikalarını isteyebilir.

# 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'
  • İzin cloudasset.assets.searchAllResources, bir organizasyonun, klasörün veya projenin tüm kaynaklarını listeleme izni verir. IAM ile ilgili kaynaklar (roller gibi) dahildir.

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
  • İzin cloudasset.assets.analyzeMove bir proje gibi bir kaynağı etkileyen politikaları da almak için kullanışlı olabilir

gcloud asset analyze-move --project=<proj-name> \
--destination-organization=609216679593
  • Tahmin ediyorum ki cloudasset.assets.queryIamPolicy izni aynı zamanda prensiplerin izinlerini bulmaya erişim sağlayabilir.

# 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 numaralandırma

Eğer önceki yöntemlerle IAM bilgilerine erişemiyorsanız ve Kırmızı Takım'da bulunuyorsanız, mevcut izinlerinizi kaba kuvvet uygulamak için https://github.com/carlospolop/bf_my_gcp_perms adlı aracı kullanabilirsiniz.

Ancak, hizmetin cloudresourcemanager.googleapis.com etkinleştirilmiş olması gerektiğini unutmayın.

Privesc

Aşağıdaki sayfada izinleri kötüye kullanarak ayrıcalıkları yükseltme hakkında bilgi edinebilirsiniz:

pageGCP - IAM Privesc

Kimlik Doğrulamasız Numaralandırma

pageGCP - IAM, Principals & Org Unauthenticated Enum

Saldırı Sonrası İşlemler

pageGCP - IAM Post Exploitation

Kalıcılık

Yüksek ayrıcalıklara sahipseniz şunları yapabilirsiniz:

  • Yeni Hizmet Hesapları (veya kullanıcılar, Workspace'te ise)

  • Kendiniz tarafından kontrol edilen prensiplere daha fazla izin vermek

  • Daha fazla ayrıcalık vermek (vm'de SSRF, zayıf Cloud Function'lar için...)

  • ...

Org Politikaları

Org Politikaları hakkında genel bir bilgi için şuraya bakabilirsiniz:

pageGCP - Basic Information

IAM politikaları roller aracılığıyla prensiplerin kaynaklar üzerindeki izinlerini belirtir ve ayrıcalıklı izinleri atar. Organizasyon politikaları bu hizmetlerin nasıl kullanılabileceğini veya hangi özelliklerin devre dışı bırakılacağını kısıtlar. Bu, GCP ortamındaki her kaynağın en az ayrıcalığını artırmaya yardımcı olur.

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

İst Privileges

Aşağıdaki sayfada, yetkileri yükseltmek için org politikaları izinlerini kötüye kullanma yöntemlerini kontrol edebilirsiniz:

pageGCP - Orgpolicy Privesc

Last updated