GCP - IAM, Principals & Org Policies Enum

Підтримайте HackTricks

Облікові записи служб

Для вступу про те, що таке обліковий запис служби, перегляньте:

GCP - Basic Information

Перелік

Обліковий запис служби завжди належить проекту:

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

Користувачі та Групи

Для вступу про те, як працюють Користувачі та Групи в GCP, перегляньте:

GCP - Basic Information

Перерахування

З правами serviceusage.services.enable та serviceusage.services.use можливо увімкнути сервіси в проекті та використовувати їх.

Зверніть увагу, що за замовчуванням, користувачам Workspace надається роль Створювач проекту, що дає їм доступ до створення нових проектів. Коли користувач створює проект, йому надається роль owner над ним. Отже, він може увімкнути ці сервіси в проекті, щоб мати можливість перерахувати Workspace.

Однак, зверніть увагу, що також потрібно мати достатньо прав у Workspace, щоб мати можливість викликати ці API.

Якщо ви можете увімкнути сервіс admin і якщо ваш користувач має достатні привілеї в workspace, ви можете перерахувати всі групи та користувачів за допомогою наступних рядків. Навіть якщо вказано identity groups, це також повертає користувачів без жодних груп:

# 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

У попередніх прикладах параметр --labels є обов'язковим, тому використовується загальне значення (це не потрібно, якщо ви використовуєте API безпосередньо, як PurplePanda робить тут.

Навіть з увімкненою службою адміністратора, можливо, ви отримаєте помилку при їх перерахунку, оскільки ваш скомпрометований користувач робочого простору не має достатніх прав:

IAM

Перевірте це для основної інформації про IAM.

За замовчуванням дозволи

З документації: Коли створюється ресурс організації, всі користувачі у вашому домені автоматично отримують ролі Створювач облікового запису для виставлення рахунків та Створювач проекту. Ці ролі за замовчуванням дозволяють вашим користувачам почати використовувати Google Cloud негайно, але не призначені для використання в регулярній роботі вашого ресурсу організації.

Ці ролі надають дозволи:

  • billing.accounts.create та resourcemanager.organizations.get

  • resourcemanager.organizations.get та resourcemanager.projects.create

Більше того, коли користувач створює проект, він автоматично отримує права власника цього проекту відповідно до документації. Тому за замовчуванням користувач зможе створити проект і запустити будь-яку службу на ньому (майнери? Перерахунок робочого простору? ...)

Найвищий привілей в організації GCP - це роль Адміністратор організації.

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

У більшості служб ви зможете змінити дозволи над ресурсом, використовуючи метод add-iam-policy-binding або set-iam-policy. Головна різниця полягає в тому, що add-iam-policy-binding додає нове зв'язування ролі до існуючої політики IAM, тоді як set-iam-policy видалить раніше надані дозволи та встановить лише ті, що вказані в команді.

Перерахунок

# 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

Існують різні способи перевірити всі дозволи користувача в різних ресурсах (таких як організації, папки, проекти...) за допомогою цього сервісу.

  • Дозвіл cloudasset.assets.searchAllIamPolicies може запитувати всі політики iam всередині ресурсу.

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
  • Дозвіл cloudasset.assets.analyzeIamPolicy може запитувати всі політики iam суб'єкта всередині ресурсу.

# 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 дозволяє перераховувати всі ресурси організації, папки або проєкту. Включені ресурси, пов'язані з IAM (наприклад, ролі).

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 може бути корисним для отримання політик, що впливають на ресурс, такий як проект.

gcloud asset analyze-move --project=<proj-name> \
--destination-organization=609216679593
  • Я припускаю, що дозвіл cloudasset.assets.queryIamPolicy також може надати доступ для знаходження дозволів принципів

# 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

Якщо ви не можете отримати доступ до інформації IAM за допомогою попередніх методів і ви в Red Team. Ви можете використати інструмент https://github.com/carlospolop/bf_my_gcp_perms для брутфорсу ваших поточних дозволів.

Однак зверніть увагу, що сервіс cloudresourcemanager.googleapis.com повинен бути увімкнений.

Privesc

На наступній сторінці ви можете перевірити, як зловживати дозволами IAM для ескалації привілеїв:

GCP - IAM Privesc

Unauthenticated Enum

GCP - IAM, Principals & Org Unauthenticated Enum

Post Exploitation

GCP - IAM Post Exploitation

Persistence

Якщо у вас високі привілеї, ви можете:

  • Створити нові SAs (або користувачів, якщо в Workspace)

  • Надати принципалам, контрольованим вами, більше дозволів

  • Надати більше привілеїв вразливим SAs (SSRF у vm, вразлива Cloud Function…)

Org Policies

Для вступу про те, що таке Org Policies, перегляньте:

GCP - Basic Information

Політики IAM вказують на дозволи, які мають принципали над ресурсами через ролі, які мають призначені детальні дозволи. Політики організації обмежують, як ці сервіси можуть використовуватися або які функції вимкнені. Це допомагає покращити принцип найменших привілеїв для кожного ресурсу в середовищі 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

На наступній сторінці ви можете перевірити, як зловживати дозволами політик організації для ескалації привілеїв:

GCP - Orgpolicy Privesc
Підтримати HackTricks

Last updated