GCP - Basic Information

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Ієрархія ресурсів

Google Cloud використовує Ієрархію ресурсів, яка концептуально схожа на традиційну файлову систему. Це забезпечує логічний батьківський/дочірній робочий процес з конкретними точками прикріплення для політик та дозволів.

На високому рівні це виглядає так:

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

Віртуальна машина (називається Екземпляром обчислення) є ресурсом. Ресурс знаходиться в проекті, ймовірно, поруч з іншими Екземплярами обчислення, сховищами даних тощо.

Міграція проектів

Можливо перенести проект без будь-якої організації в організацію з дозволами roles/resourcemanager.projectCreator та roles/resourcemanager.projectMover. Якщо проект знаходиться в іншій організації, потрібно звернутися до підтримки GCP, щоб виділити їх з організації спочатку. Для отримання додаткової інформації перегляньте це.

Політики організації

Дозволяють централізувати контроль над хмарними ресурсами вашої організації:

  • Централізований контроль для налаштування обмежень щодо використання ресурсів вашої організації.

  • Визначте та встановіть обмеження для вашої команди розробників, щоб вони дотримувалися меж відповідності.

  • Допоможіть власникам проектів та їх командам швидко рухатися без страху порушення відповідності.

Ці політики можуть бути створені для впливу на всю організацію, папки або проекти. Потомки цільового вузла ієрархії ресурсів успадковують політику організації.

Для визначення політики організації ви обираєте обмеження, яке є певним типом обмеження проти служби Google Cloud або групи служб Google Cloud. Ви налаштовуєте це обмеження з ваших бажаних обмежень.

Загальні випадки використання

  • Обмеження обміну ресурсами на основі домену.

  • Обмеження використання службових облікових записів Ідентифікації та управління доступом.

  • Обмеження фізичного розташування новостворених ресурсів.

  • Вимкнення створення службових облікових записів

Є багато інших обмежень, які дають вам дрібнозернистий контроль над ресурсами вашої організації. Для додаткової інформації перегляньте список всіх обмежень сервісу політики організації.

Стандартні політики організації

Це політики, які Google додасть за замовчуванням при налаштуванні вашої організації GCP:

Політики управління доступом

  • Обмеження контактів з обмеженим доменом: Запобігає додаванню користувачів до важливих контактів поза вашими вказаними доменами. Це обмежує важливі контакти, щоб дозволити лише керовані ідентифікатори користувачів у ваших вибраних доменах отримувати сповіщення платформи.

  • Обмеження обміну з обмеженим доменом: Запобігає додаванню користувачів до політик IAM поза вашими вказаними доменами. Це обмежує політики IAM, щоб дозволити лише керовані ідентифікатори користувачів у ваших вибраних доменах отримувати доступ до ресурсів у цій організації.

  • Запобігання публічного доступу: Запобігає викладенню віджетів Cloud Storage для загального доступу. Це гарантує, що розробник не може налаштувати віджети Cloud Storage для отримання неавтентифікованого доступу до Інтернету.

  • Однаковий доступ на рівні віджетів: Запобігає спискам керування доступом на рівні об'єктів (ACL) віджетів Cloud Storage. Це спрощує керування доступом, застосовуючи політики IAM послідовно для всіх об'єктів у віджетах Cloud Storage.

  • Вимагати вхід в ОС: ВМ, створені в нових проектах, матимуть увімкнений вхід в ОС. Це дозволяє керувати доступом SSH до вашого екземпляра, використовуючи IAM, не потрібно створювати та керувати окремими ключами SSH.

Додаткові політики безпеки для службових облікових записів

  • Вимкнути автоматичні надання IAM: Запобігає автоматичному наданню ролі редактора IAM стандартним службовим обліковим записам App Engine та Compute Engine при створенні проекту. Це гарантує, що службові облікові записи не отримують надто дозвільні ролі IAM при створенні.

  • Вимкнути створення ключів службового облікового запису: Запобігає створенню публічних ключів службового облікового запису. Це допомагає зменшити ризик викриття постійних облікових даних.

  • Вимкнути завантаження ключів службового облікового запису: Запобігає завантаженню публічних ключів службового облікового запису. Це допомагає зменшити ризик витоку або повторного використання ключового матеріалу.

Політики конфігурації безпечної мережі VPC

  • Визначити дозволені зовнішні IP-адреси для екземплярів ВМ: Запобігає створенню екземплярів обчислення з публічним IP, що може викластися на інтернет-трафік.

  • Вимкнути вкладену віртуалізацію ВМ: Запобігає створенню вкладених ВМ на ВМ Compute Engine. Це зменшує ризик безпеки внаслідок наявності неконтрольованих вкладених ВМ.

  • Вимкнути послідовний порт ВМ: Запобігає доступу до послідовного порту ВМ Compute Engine. Це запобігає введенню в послідовний порт сервера за допомогою API Compute Engine.

  • Обмежити авторизовані мережі на екземплярах Cloud SQL: Запобігає публічним або не-внутрішнім мережевим діапазонам доступу до ваших баз даних Cloud SQL.

  • Обмежити пересилання протоколу на основі типу IP-адреси: Запобігає пересиланню протоколу ВМ для зовнішніх IP-адрес.

  • Обмежити доступ до публічного IP на екземплярах Cloud SQL: Запобігає створенню екземплярів Cloud SQL з публічним IP, що може викластися на інтернет-трафік.

  • Обмежити видалення ліній проекту спільного VPC: Запобігає випадковому видаленню головних проектів спільного VPC.

  • Встановлює внутрішнє DNS-налаштування для нових проектів на лише зональне DNS: Запобігає використанню застарілого DNS-налаштування, яке має знижену доступність сервісу.

  • Пропустити створення мережі за замовчуванням: Запобігає автоматичному створенню мережі за замовчуванням VPC та пов'язаних ресурсів. Це уникне надто дозвільних правил брандмауера за замовчуванням.

  • Вимкнути використання зовнішніх IPv6 в мережі VPC: Запобігає створенню зовнішніх підмереж IPv6, які можуть бути викладені на несанкціонований доступ до Інтернету.

Ролі IAM

Це схоже на політики IAM в AWS, оскільки кожна роль містить набір дозволів.

Однак, на відміну від AWS, немає централізованого сховища ролей. Замість цього ресурси надають ролі X доступ до принципалів Y, ідиний спосіб дізнатися, хто має доступ до ресурсу - використовувати метод get-iam-policy над цим ресурсом. Це може бути проблемою, оскільки це означає, що єдиний спосіб дізнатися, які дозволи має принципал, - це запитати кожен ресурс, кому він надає дозвіл, і користувач може не мати дозволу отримувати дозволи від усіх ресурсів.

Є три типи ролей в IAM:

  • Базові/примітивні ролі, які включають ролі Власник, Редактор та Переглядач, які існували до введення IAM.

  • Попередньо визначені ролі, які надають дрібнозернистий доступ до конкретної служби та керуються Google Cloud. Існує багато попередньо визначених ролей, ви можете переглянути їх всі разом з привілеями, які вони мають тут.

  • Користувацькі ролі, які надають дрібнозернистий доступ відповідно до списку дозволів, вказаних користувачем.

У GCP існує тисячі дозволів. Щоб перевірити, чи має роль дозволи, ви можете знайти дозвіл тут та подивитися, які ролі його мають.

Ви також можете шукати тут попередньо визначені ролі , запропоновані кожним продуктом. Зверніть увагу, що деякі ролі не можуть бути прикріплені до користув

Користувачі

У консолі GCP немає управління Користувачами або Групами, це робиться в Google Workspace. Однак ви можете синхронізувати інший постачальник ідентичності в Google Workspace.

Ви можете отримати доступ до користувачів та груп Workspaces на https://admin.google.com.

Багатофакторна аутентифікація (MFA) може бути примусовою для користувачів Workspaces, однак зловмисник може використовувати токен для доступу до GCP через cli, який не буде захищений MFA (він буде захищений MFA лише тоді, коли користувач увійде для його генерації: gcloud auth login).

Групи

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

Група

Функція

gcp-organization-admins (група або окремі облікові записи, необхідні для перевірки)

Управління будь-яким ресурсом, який належить організації. Надавайте цю роль обережно; адміністратори організації мають доступ до всіх ваших ресурсів Google Cloud. Альтернативно, оскільки ця функція має високі привілеї, розгляньте можливість використання окремих облікових записів замість створення групи.

gcp-network-admins (необхідно для перевірки)

Створення мереж, підмереж, правил брандмауерів та мережевих пристроїв, таких як Cloud Router, Cloud VPN та хмарні балансувальники.

gcp-billing-admins (необхідно для перевірки)

Налаштування облікових записів та моніторинг їх використання.

gcp-developers (необхідно для перевірки)

Проектування, кодування та тестування додатків.

gcp-security-admins

Встановлення та управління політиками безпеки для всієї організації, включаючи управління доступом та обмеженнями політики організації. Див. посібник з основ безпеки Google Cloud для отримання додаткової інформації про планування інфраструктури безпеки Google Cloud.

gcp-devops

Створення або управління кінцевими конвеєрами, які підтримують безперервну інтеграцію та доставку, моніторинг та надання систем.

gcp-logging-admins

gcp-logging-viewers

gcp-monitor-admins

gcp-billing-viewer (більше не за замовчуванням)

Моніторинг витрат на проекти. Типові члени - частина фінансової команди.

gcp-platform-viewer (більше не за замовчуванням)

Перегляд інформації про ресурси в організації Google Cloud.

gcp-security-reviewer (більше не за замовчуванням)

Перегляд безпеки хмари.

gcp-network-viewer (більше не за замовчуванням)

Перегляд конфігурацій мережі.

grp-gcp-audit-viewer (більше не за замовчуванням)

Перегляд журналів аудиту.

gcp-scc-admin (більше не за замовчуванням)

Адміністрування Центру керування безпекою.

gcp-secrets-admin (більше не за замовчуванням)

Управління секретами в Менеджері секретів.

Політика паролів за замовчуванням

  • Застосовувати складні паролі

  • Від 8 до 100 символів

  • Неможливість повторного використання

  • Немає терміну дії

  • Якщо люди отримують доступ до Workspace через постачальника сторонніх послуг, ці вимоги не застосовуються.

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

Це принципали, які ресурси можуть мати прикріпленими та отримувати доступ для взаємодії з GCP. Наприклад, можливо отримати аутентичний токен Службового облікового запису, прикріпленого до ВМ, у метаданих. Можливі конфлікти при використанні IAM та обмежень доступу одночасно. Наприклад, вашому службовому обліковому запису може бути надана роль IAM compute.instanceAdmin, але екземпляр, який ви порушили, має обмеження області https://www.googleapis.com/auth/compute.readonly. Це може перешкодити внесенню змін за допомогою токена OAuth, який автоматично призначається вашому екземпляру.

Це схоже на ролі IAM в AWS. Але, на відміну від AWS, будь-який службовий обліковий запис може бути прикріплений до будь-якої служби (не потрібно дозволяти це через політику).

Декілька службових облікових записів, які ви знайдете, фактично автоматично генеруються GCP при початку використання служби, наприклад:

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

Проте також можливо створювати та прикріплювати до ресурсів власні службові облікові записи, які будуть виглядати наступним чином:

SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com

Області доступу

Області доступу додаються до створених токенів OAuth для доступу до кінцевих точок API GCP. Вони обмежують дозволи токену OAuth. Це означає, що якщо токен належить Власнику ресурсу, але не має в області токену доступу до цього ресурсу, токен не може бути використаний для (зло)вживання цих привілеїв.

Google фактично рекомендує не використовувати області доступу і повністю покладатися на IAM. Веб-портал управління фактично це накладає, але області доступу все ще можуть бути застосовані до екземплярів за допомогою власних облікових записів служб програмно.

Ви можете побачити, які області призначені, запитавши:

```bash curl 'https://www.googleapis.com/oauth2/v1/tokeninfo?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" }

Попередні **обсяги** - це ті, які генеруються **за замовчуванням** за допомогою **`gcloud`** для доступу до даних. Це тому, що при використанні **`gcloud`** ви спочатку створюєте токен OAuth, а потім використовуєте його для звернення до кінцевих точок.

Найважливіший обсяг серед них, ймовірно, - **`cloud-platform`**, що в основному означає, що можливий **доступ до будь-якого сервісу в GCP**.

Ви можете **знайти список** [**всіх можливих обсягів тут**](https://developers.google.com/identity/protocols/googlescopes)**.**

Якщо у вас є облікові дані для браузера **`gcloud`**, можливо **отримати токен з іншими обсягами**, виконавши щось на зразок:
```bash
# 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>"

Політики IAM, Прив'язки та Учасники Terraform

Як визначено в terraform на https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/google_project_iam, використовуючи terraform з GCP є різні способи надання основному доступу до ресурсу:

  • Учасники: Ви встановлюєте основних як учасників ролей без обмежень щодо ролі або основних. Ви можете встановити користувача як учасника ролі, а потім встановити групу як учасника тієї ж ролі, а також встановити цих основних (користувача та групу) як учасників інших ролей.

  • Прив'язки: Декілька основних можуть бути прив'язані до ролі. Ці основні все ще можуть бути прив'язані або бути учасниками інших ролей. Однак, якщо основний, який не прив'язаний до ролі, встановлений як учасник прив'язаної ролі, то наступного разу, коли прив'язка застосовується, учасництво зникне.

  • Політики: Політика є авторитетною, вона вказує ролі та основних, і після цього ці основні не можуть мати більше ролей, а ці ролі не можуть мати більше основних, якщо тільки політика не буде змінена (навіть в інших політиках, прив'язках або учасництвах). Отже, коли роль або основний вказано в політиці, всі його привілеї обмежуються цією політикою. Очевидно, це можна обійти у випадку, якщо основний отримує можливість змінювати політику або дозволи на підвищення привілеїв (наприклад, створити нового основного та прив'язати йому нову роль).

Посилання

Last updated