# GCP Pentesting {{#include ../../banners/hacktricks-training.md}} ## Основна інформація **Перед початком пентестингу** середовища **GCP**, є кілька **основних речей, які вам потрібно знати** про те, як це працює, щоб допомогти вам зрозуміти, що потрібно робити, як знаходити неправильні налаштування та як їх експлуатувати. Концепції, такі як **ієрархія організації**, **дозволи** та інші основні концепції пояснені в: {{#ref}} gcp-basic-information/ {{#endref}} ## Лабораторії для навчання - [https://gcpgoat.joshuajebaraj.com/](https://gcpgoat.joshuajebaraj.com/) - [https://github.com/ine-labs/GCPGoat](https://github.com/ine-labs/GCPGoat) - [https://github.com/lacioffi/GCP-pentest-lab/](https://github.com/lacioffi/GCP-pentest-lab/) - [https://github.com/carlospolop/gcp_privesc_scripts](https://github.com/carlospolop/gcp_privesc_scripts) ## Методологія GCP Pentester/Red Team Для аудиту середовища GCP дуже важливо знати: які **послуги використовуються**, що **експонується**, хто має **доступ** до чого, і як внутрішні GCP послуги та **зовнішні послуги** з'єднані. З точки зору Red Team, **перший крок до компрометації середовища GCP** - це отримати деякі **облікові дані**. Ось кілька ідей, як це зробити: - **Витоки** в github (або подібних) - OSINT - **Соціальна** інженерія (перевірте сторінку [**Workspace Security**](../workspace-security/index.html)) - **Повторне використання паролів** (витоки паролів) - Вразливості в GCP-розміщених додатках - [**Server Side Request Forgery**](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html) з доступом до метаданих - **Читання локальних файлів** - `/home/USERNAME/.config/gcloud/*` - `C:\Users\USERNAME\.config\gcloud\*` - 3-ті сторони **зламані** - **Внутрішній** співробітник Або шляхом **компрометації неавтентифікованої служби**, що експонується: {{#ref}} gcp-unauthenticated-enum-and-access/ {{#endref}} Або, якщо ви проводите **огляд**, ви можете просто **попросити облікові дані** з цими ролями: {{#ref}} gcp-permissions-for-a-pentest.md {{#endref}} > [!NOTE] > Після того, як ви змогли отримати облікові дані, вам потрібно знати, **кому належать ці облікові дані**, і **до чого вони мають доступ**, тому вам потрібно виконати деяку базову енумерацію: ## Базова енумерація ### **SSRF** Для отримання додаткової інформації про те, як **перерахувати метадані GCP**, перевірте наступну сторінку hacktricks: {{#ref}} https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html {{#endref}} ### Whoami В GCP ви можете спробувати кілька варіантів, щоб спробувати вгадати, хто ви: ```bash #If you are inside a compromise machine gcloud auth list curl -H "Content-Type: application/x-www-form-urlencoded" -d "access_token=$(gcloud auth print-access-token)" https://www.googleapis.com/oauth2/v1/tokeninfo gcloud auth print-identity-token #Get info from the token #If you compromised a metadata token or somehow found an OAuth token curl -H "Content-Type: application/x-www-form-urlencoded" -d "access_token=" https://www.googleapis.com/oauth2/v1/tokeninfo ``` Ви також можете використовувати API-інтерфейс `/userinfo`, щоб отримати більше інформації про користувача: ```bash curl -H "Content-Type: application/x-www-form-urlencoded" -H "Authorization: OAuth $(gcloud auth print-access-token)" https://www.googleapis.com/oauth2/v1/userinfo curl -H "Content-Type: application/x-www-form-urlencoded" -H "Authorization: OAuth " https://www.googleapis.com/oauth2/v1/userinfo ``` ### Перерахунок організацій ```bash # Get organizations gcloud organizations list #The DIRECTORY_CUSTOMER_ID is the Workspace ID gcloud resource-manager folders list --organization # Get folders gcloud projects list # Get projects ``` ### Принципи та IAM Перерахунок Якщо у вас достатньо прав, **перевірка привілеїв кожної сутності в обліковому записі GCP** допоможе вам зрозуміти, що ви та інші ідентичності можете робити і як **підвищити привілеї**. Якщо у вас недостатньо прав для перерахунку IAM, ви можете **викрасти їх за допомогою брутфорсу**, щоб з'ясувати.\ Перевірте **як виконати перерахунок і брутфорс** в: {{#ref}} gcp-services/gcp-iam-and-org-policies-enum.md {{#endref}} > [!NOTE] > Тепер, коли ви **маєте деяку інформацію про свої облікові дані** (і якщо ви червона команда, сподіваюсь, ви **не були виявлені**). Час з'ясувати, які сервіси використовуються в середовищі.\ > У наступному розділі ви можете перевірити деякі способи **перерахунку деяких загальних сервісів.** ## Перерахунок Сервісів GCP має вражаючу кількість сервісів, на наступній сторінці ви знайдете **базову інформацію, перерахунок** шпаргалок, як **уникнути виявлення**, отримати **постійність** та інші **трюки після експлуатації** про деякі з них: {{#ref}} gcp-services/ {{#endref}} Зверніть увагу, що вам **не потрібно** виконувати всю роботу **вручну**, нижче в цьому пості ви можете знайти **розділ про** [**автоматичні інструменти**](#automatic-tools). Більше того, на цьому етапі ви могли виявити **більше сервісів, доступних для неавтентифікованих користувачів,** ви можете мати можливість їх експлуатувати: {{#ref}} gcp-unauthenticated-enum-and-access/ {{#endref}} ## Підвищення Привілеїв, Після Експлуатації та Постійність Найбільш поширений спосіб, коли ви отримали деякі облікові дані хмари або скомпрометували деякий сервіс, що працює в хмарі, - це **зловживати неправильно налаштованими привілеями**, які може мати скомпрометований обліковий запис. Тож перше, що вам слід зробити, - це перерахувати свої привілеї. Більше того, під час цього перерахунку пам'ятайте, що **дозволи можуть бути встановлені на найвищому рівні "Організації"** також. {{#ref}} gcp-privilege-escalation/ {{#endref}} {{#ref}} gcp-post-exploitation/ {{#endref}} {{#ref}} gcp-persistence/ {{#endref}} ### Публічно Відкриті Сервіси Під час перерахунку сервісів GCP ви могли знайти деякі з них, **які відкривають елементи в Інтернет** (порти VM/Контейнерів, бази даних або сервіси черг, знімки або бакети...).\ Як пентестер/червона команда, ви завжди повинні перевіряти, чи можете ви знайти **чутливу інформацію / вразливості** на них, оскільки вони можуть надати вам **додатковий доступ до облікового запису AWS**. У цій книзі ви повинні знайти **інформацію** про те, як знайти **відкриті сервіси GCP і як їх перевірити**. Щодо того, як знайти **вразливості у відкритих мережевих сервісах**, я б рекомендував вам **шукати** конкретний **сервіс** в: {{#ref}} https://book.hacktricks.wiki/ {{#endref}} ## GCP <--> Workspace Півотування **Скомпрометування** принципів в **одній** платформі може дозволити зловмиснику **скомпрометувати іншу**, перевірте це в: {{#ref}} gcp-to-workspace-pivoting/ {{#endref}} ## Автоматичні Інструменти - У **консолі GCloud**, на [https://console.cloud.google.com/iam-admin/asset-inventory/dashboard](https://console.cloud.google.com/iam-admin/asset-inventory/dashboard) ви можете бачити ресурси та IAM, що використовуються проектом. - Тут ви можете побачити активи, підтримувані цим API: [https://cloud.google.com/asset-inventory/docs/supported-asset-types](https://cloud.google.com/asset-inventory/docs/supported-asset-types) - Перевірте **інструменти**, які можна [**використовувати в кількох хмарах тут**](../pentesting-cloud-methodology.md). - [**gcp_scanner**](https://github.com/google/gcp_scanner): Це сканер ресурсів GCP, який може допомогти визначити, який **рівень доступу мають певні облікові дані** на GCP. ```bash # Install git clone https://github.com/google/gcp_scanner.git cd gcp_scanner virtualenv -p python3 venv source venv/bin/activate pip install -r requirements.txt # Execute with gcloud creds python3 __main__.py -o /tmp/output/ -g "$HOME/.config/gcloud" ``` - [**gcp_enum**](https://gitlab.com/gitlab-com/gl-security/threatmanagement/redteam/redteam-public/gcp_enum): Bash-скрипт для перерахунку середовища GCP за допомогою gcloud cli та збереження результатів у файл. - [**GCP-IAM-Privilege-Escalation**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation): Скрипти для перерахунку високих IAM привілеїв та для ескалації привілеїв у GCP, зловживаючи ними (я не зміг запустити скрипт для перерахунку). - [**BF My GCP Permissions**](https://github.com/carlospolop/bf_my_gcp_permissions): Скрипт для брутфорсу ваших привілеїв. ## gcloud config & debug ```bash # Login so gcloud can use your credentials gcloud auth login gcloud config set project security-devbox gcloud auth print-access-token # Login so SDKs can use your user credentials gcloud auth application-default login gcloud auth application-default set-quota-project security-devbox gcloud auth application-default print-access-token # Update gcloud gcloud components update ``` ### Захоплення мережі gcloud, gsutil... Пам'ятайте, що ви можете використовувати **параметр** **`--log-http`** з **`gcloud`** cli, щоб **друкувати** **запити**, які виконує інструмент. Якщо ви не хочете, щоб журнали редагували значення токена, використовуйте `gcloud config set log_http_redact_token false` Крім того, для перехоплення зв'язку: ```bash gcloud config set proxy/address 127.0.0.1 gcloud config set proxy/port 8080 gcloud config set proxy/type http gcloud config set auth/disable_ssl_validation True # If you don't want to completely disable ssl_validation use: gcloud config set core/custom_ca_certs_file cert.pem # Back to normal gcloud config unset proxy/address gcloud config unset proxy/port gcloud config unset proxy/type gcloud config unset auth/disable_ssl_validation gcloud config unset core/custom_ca_certs_file ``` ### Налаштування токена OAuth у gcloud Щоб **використати ексфільтрований токен OAuth облікового запису служби з кінцевої точки метаданих**, ви можете просто зробити: ```bash # Via env vars export CLOUDSDK_AUTH_ACCESS_TOKEN= gcloud projects list # Via setup echo "" > /some/path/to/token gcloud config set auth/access_token_file /some/path/to/token gcloud projects list gcloud config unset auth/access_token_file ``` ## Посилання - [https://about.gitlab.com/blog/2020/02/12/plundering-gcp-escalating-privileges-in-google-cloud-platform/](https://about.gitlab.com/blog/2020/02/12/plundering-gcp-escalating-privileges-in-google-cloud-platform/) {{#include ../../banners/hacktricks-training.md}}