GCP - IAM, Принципи та Перерахування Політик Організації
Reading time: 8 minutes
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
Облікові записи служб
Для вступу про те, що таке обліковий запис служби, перегляньте:
Перерахування
Обліковий запис служби завжди належить до проекту:
gcloud iam service-accounts list --project <project>
Користувачі та Групи
Для вступу про те, як працюють Користувачі та Групи в GCP, перегляньте:
Перерахування
З правами serviceusage.services.enable
та serviceusage.services.use
можливо увімкнути сервіси в проекті та використовувати їх.
caution
Зверніть увагу, що за замовчуванням користувачам 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
tip
У попередніх прикладах параметр --labels
є обов'язковим, тому використовується загальне значення (це не потрібно, якщо ви використовуєте API безпосередньо, як PurplePanda робить тут.
Навіть з увімкненою службою адміністратора, можливо, ви отримаєте помилку при їх перерахунку, оскільки ваш скомпрометований користувач робочого простору не має достатніх прав:
.png)
IAM
Перевірте це для основної інформації про IAM.
За замовчуванням дозволи
З документації: Коли створюється ресурс організації, всі користувачі у вашому домені автоматично отримують ролі Створювач облікового запису для виставлення рахунків та Створювач проекту. Ці ролі за замовчуванням дозволяють вашим користувачам почати використовувати Google Cloud негайно, але не призначені для використання в регулярній роботі вашого ресурсу організації.
Ці ролі надають дозволи:
billing.accounts.create
таresourcemanager.organizations.get
resourcemanager.organizations.get
таresourcemanager.projects.create
Більше того, коли користувач створює проект, він автоматично отримує права власника цього проекту відповідно до документації. Тому за замовчуванням користувач зможе створити проект і запустити будь-яку службу на ньому (майнери? Перерахунок робочого простору? ...)
caution
Найвищий привілей в організації 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
caution
Якщо ви не можете отримати доступ до інформації IAM за допомогою попередніх методів і ви в Red Team. Ви можете використати інструмент https://github.com/carlospolop/bf_my_gcp_perms для брутфорсу ваших поточних дозволів.
Однак зверніть увагу, що сервіс cloudresourcemanager.googleapis.com
повинен бути увімкнений.
Privesc
На наступній сторінці ви можете перевірити, як зловживати дозволами IAM для ескалації привілеїв:
Unauthenticated Enum
GCP - IAM, Principals & Org Unauthenticated Enum
Post Exploitation
Persistence
Якщо у вас високі привілеї, ви можете:
- Створити нові SAs (або користувачів, якщо в Workspace)
- Надати принципалам, контрольованим вами, більше дозволів
- Надати більше привілеїв вразливим SAs (SSRF у vm, вразлива Cloud Function…)
- …
Org Policies
Для вступу про те, що таке Org Policies, перевірте:
Політики 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
На наступній сторінці ви можете перевірити, як зловживати дозволами організаційних політик для ескалації привілеїв:
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.