GCP - IAM, Prensipler & Org Politikaları Enum

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Hizmet Hesapları

Hizmet hesabının ne olduğu hakkında bir giriş için kontrol edin:

GCP - Basic Information

Sayım

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’ın nasıl çalıştığı hakkında bir giriş için kontrol edin:

GCP - Basic Information

Sayım

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

Caution

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 owner rolü verilir. Böylece, Workspace’i sayabilmek için projede bu hizmetleri etkinleştirebilir.

Ancak, bu API’leri çağırabilmek için Workspace’te yeterli izinlere sahip olmanız gerektiğini unutmayın.

Eğer admin hizmetini etkinleştirebiliyorsanız ve kullanıcınızın workspace’te yeterli ayrıcalıkları varsa, aşağıdaki satırlarla tüm grupları ve kullanıcıları sayabilirsiniz.
identity groups desede, 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

Tip

Önceki örneklerde --labels parametresi gereklidir, bu nedenle genel bir değer kullanılmıştır (API’yi doğrudan kullanıyorsanız gerekmiyor, PurplePanda burada yaptığı gibi.

Admin hizmeti etkin olsa bile, ele geçirilmiş workspace kullanıcınızın yeterli izinlere sahip olmaması nedeniyle bunları listelemekte hata almanız mümkündür:

IAM

IAM hakkında temel bilgiler için bunu kontrol edin.

Varsayılan İzinler

belgelere göre: Bir organizasyon kaynağı oluşturulduğunda, alanınızdaki tüm kullanıcılara varsayılan olarak Faturalama Hesabı Oluşturucu ve Proje Oluşturucu rolleri verilir. Bu varsayılan roller, kullanıcılarınızın Google Cloud’u hemen kullanmaya başlamasına olanak tanır, ancak organizasyon kaynağınızın normal işletiminde kullanılmak üzere tasarlanmamıştır.

Bu roller aşağıdaki 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. Bu nedenle, varsayılan olarak, bir kullanıcı bir proje oluşturabilecek ve üzerinde herhangi bir hizmet çalıştırabilecektir (madenciler? Workspace listeleme? …)

Caution

GCP Organizasyonu’ndaki en yüksek ayrıcalık Organizasyon Yöneticisi rolüdür.

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

Çoğu hizmette, bir kaynak üzerindeki izinleri add-iam-policy-binding veya set-iam-policy yöntemini kullanarak değiştirebileceksiniz. Ana fark, add-iam-policy-binding mevcut IAM politikasına yeni bir rol bağlaması eklerken, set-iam-policy daha önce verilmiş izinleri silip yalnızca komutta belirtilenleri ayarlayacaktır.

Listeleme

# 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

Bu hizmeti kullanarak bir kullanıcının farklı kaynaklardaki (örneğin organizasyonlar, klasörler, projeler…) tüm izinlerini kontrol etmenin farklı yolları vardır.

  • cloudasset.assets.searchAllIamPolicies izni, bir kaynağın içindeki tüm iam politikalarını talep edebilir.
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 kaynağın içindeki bir ilkenin tüm iam politikalarını talep edebilir.
# 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'
  • cloudasset.assets.searchAllResources izni, bir organizasyonun, klasörün veya projenin tüm kaynaklarını listelemeye olanak tanır. 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
  • cloudasset.assets.analyzeMove izni, bir proje gibi bir kaynağı etkileyen politikaları almak için de faydalı olabilir.
gcloud asset analyze-move --project=<proj-name> \
--destination-organization=609216679593
  • Sanırım cloudasset.assets.queryIamPolicy izni, ilkelerin izinlerini bulmak için 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 enumeration

Caution

Eğer önceki yöntemleri kullanarak IAM bilgilerine erişemiyorsanız ve bir Kırmızı Takım içindeyseniz. Mevcut izinlerinizi brute-force etmek için https://github.com/carlospolop/bf_my_gcp_perms aracını kullanabilirsiniz.

Ancak, cloudresourcemanager.googleapis.com hizmetinin etkinleştirilmesi gerektiğini unutmayın.

Privesc

Aşağıdaki sayfada IAM izinlerini kötüye kullanarak ayrıcalıkları artırma yöntemini kontrol edebilirsiniz:

GCP - IAM Privesc

Unauthenticated Enum

GCP - IAM, Principals & Org Unauthenticated Enum

Post Exploitation

GCP - IAM Post Exploitation

Persistence

Eğer yüksek ayrıcalıklarınız varsa şunları yapabilirsiniz:

  • Yeni SA’lar (veya Workspace’te kullanıcılar) oluşturun
  • Kendiniz tarafından kontrol edilen ilkelere daha fazla izin verin
  • Zayıf SA’lara daha fazla ayrıcalık verin (vm’de SSRF, zayıf Cloud Function…)

Org Policies

Org Policies’in ne olduğunu öğrenmek için kontrol edin:

GCP - Basic Information

IAM politikaları, ilkelere roller aracılığıyla kaynaklar üzerinde sahip oldukları izinleri belirtir; bu roller ayrıntılı izinler 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

Privesc

Aşağıdaki sayfada örgüt politikası izinlerini kötüye kullanarak ayrıcalıkları artırma yöntemini kontrol edebilirsiniz:

GCP - Orgpolicy Privesc

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin