Skip to main content

Como proteger ferramentas de Infraestrutura como Código?

Escrito por
blog key rotation issues scanning snyk iac

27 de novembro de 2020

0 minutos de leitura

Como o nome indica, Infraestrutura como Código (IaC) é a prática de definir como código e arquivos de configuração a infraestrutura na qual suas aplicações são executadas. Isso nos permite não apenas automatizar o provisionamento dos recursos, mas também submetê-los aos mesmos processos de ciclo de vida que, historicamente, eram aplicados apenas à base de código da aplicação. Se você está começando com IaC, confira este artigo, no qual explicamos o que é Infraestrutura como Código (IaC) e quais são as implicações de segurança do seu uso no mundo real.

Há muitas ferramentas de automação de infraestrutura para implementar IaC. Muitas são oferecidas por provedores de nuvem pública, como o CloudFormation da Amazon Web Services e o Resource Manager (ARM) do Azure, além de projetos compatíveis com várias plataformas de infraestrutura, como Hashicorp Terraform e Pulumi.

Slide de citação da SnykCon 2020 sobre incorporar a segurança ao trabalho diário em vez de adicioná-la posteriormente, baseada no livro *Accelerate*, de Nicole Forsgren, Jez Humble e Gene Kim.

Essas ferramentas de IaC baseadas em linguagens declarativas são ideais para técnicas de análise estática, que permitem detectar e corrigir problemas de segurança com mais eficácia antes mesmo de a infraestrutura definida ser implantada. As práticas recomendadas de segurança para IaC estão em constante evolução. Ao desenvolvermos o produto Snyk IaC, buscamos facilitar ao máximo a adoção de IaC pelas organizações, ajudando os desenvolvedores não apenas a identificar problemas, mas também a entender seu contexto e como corrigi-los.

Vamos conhecer algumas das ferramentas populares de Infraestrutura como Código e as medidas de segurança que você pode aplicar no código para proteger suas aplicações e plataformas.

Ferramentas de Infraestrutura como Código

Soluções oferecidas por provedores de nuvem

AWS CloudFormation, Azure Resource Manager (ARM), e Google Deployment Manager (GDM)Todos os principais provedores de nuvem criam suas próprias ferramentas de IaC para automatizar o provisionamento de infraestrutura. Elas definem declarativamente o estado desejado das implantações usando modelos JSON ou YAML. No caso do Google Deployment Manager, também é possível usar Jinja e Python.

Amazon Cloud Development Kit (CDK)Lançado em 2019, o Amazon Cloud Development Kit (CDK) permite que desenvolvedores definam implantações usando linguagens de programação de alto nível, como JavaScript, Python ou C# (veja a lista completa de linguagens aqui). Além de oferecer uma sintaxe mais familiar, ele permite a integração com IDEs e o empacotamento de padrões em bibliotecas reutilizáveis e estruturas de código testadas, sem depender de copiar e colar JSON/YAML entre projetos. O CDK gera JSON do CloudFormation. Assim, a Amazon oferece um ambiente voltado para desenvolvedores que ainda aproveita sua ferramenta de orquestração de infraestrutura CloudFormation, testada em larga escala.

Soluções para várias nuvens

Hashicorp TerraformO Terraform é uma ferramenta de provisionamento automatizado que pode provisionar e configurar uma grande variedade de plataformas e produtos por meio de plugins de provedores.

PulumiO Pulumi é um projeto de IaC de código aberto que oferece SDKs em várias linguagens de programação para provisionar e gerenciar recursos em diversas plataformas.

Problemas que merecem atenção e exemplos de análise

Independentemente do provedor de nuvem ou da ferramenta de IaC escolhida, há alguns pontos comuns que merecem atenção do ponto de vista da segurança. Vamos analisar alguns deles com exemplos usando Terraform e AWS. Todos esses exemplos estão neste repositório do GitHub. Também incluí capturas de tela que mostram como a ferramenta Snyk IaC apresenta os possíveis problemas encontrados.

Credenciais

No diretório principal do nosso repositório Git, há um arquivo main.tf com vários problemas comuns. A análise da Snyk aponta um problema de alta gravidade e cinco de gravidade média, como mostra a imagem abaixo.

Uma verificação de segurança lista problemas relacionados a credenciais da AWS e senhas do IAM ao lado de código Terraform que define credenciais do provedor AWS e uma política de senhas.

Em primeiro lugar, nunca inclua credenciais de qualquer tipo no controle de versão. Parece óbvio, mas fóruns na internet estão repletos de exemplos de repositórios de código que contêm credenciais — muitos deles públicos! Infelizmente, muitos desses exemplos só foram descobertos depois de serem explorados. Isso costuma acontecer quando alguém inclui o arquivo por engano. Uma situação especialmente traiçoeira ocorre quando uma credencial é incluída e depois removida em um commit posterior: o desenvolvedor pode não perceber, mas ela continua no histórico do repositório. Há técnicas para detectar esse problema, como usar arquivos .gitignore ou scripts de hook de pré-commit, por exemplo, o “git-secrets” do AWS Labs.

Também encontramos vários problemas relacionados às senhas de contas do IAM. É importante observar que há uma política por conta da AWS e que, ao configurar uma, você substituirá a política padrão fornecida pela Amazon. Por isso, especifique todas essas opções.

Criptografia em serviços de armazenamento

Por padrão, os volumes EBS têm a criptografia ativada, mas os buckets do S3 não. É importante verificar ambos para garantir a conformidade com as políticas da sua empresa e as diretrizes regulatórias aplicáveis. No nosso repositório de demonstração, declaramos alguns recursos de armazenamento no arquivo modules/storage/main.tf, que você pode ver sendo analisado abaixo:

A verificação de segurança sinaliza um bucket S3 e um volume EBS sem criptografia no código Terraform, com rótulos de gravidade para vulnerabilidades médias e baixas

Aqui, vemos exemplos das duas violações sinalizadas, além de um aviso de prioridade mais baixa sobre a ausência de logs de acesso ao servidor do S3. Ao abrir um desses alertas, você encontra detalhes sobre o problema, seu impacto e uma recomendação de como resolvê-lo.

A classificação de gravidade alta, média ou baixa de cada política pode ser alterada para corresponder às políticas da sua organização.

Faixas de entrada e saída de grupos de segurança e firewalls

No arquivo modules/vpc/main.tf, encontramos outro problema comum: o acesso de entrada foi configurado de forma mais abrangente do que provavelmente deveria.

A descoberta da análise de segurança mostra um grupo de segurança da AWS permitindo tráfego de entrada aberto, ao lado de um código Terraform que permite SSH de 0.0.0.0/0.

Assim como no caso das credenciais codificadas, isso costuma acontecer durante o desenvolvimento ou a resolução de problemas e acaba sendo incluído por engano no controle de versão junto com outras alterações. Neste exemplo, é muito improvável que alguém realmente queira abrir a porta 22 para toda a internet — mas é isso que pode estar acontecendo. É fundamental restringir o tráfego de entrada e saída das suas redes e permitir acesso apenas às faixas de IP que realmente precisam dele.

Rotação de chaves

No nosso último exemplo, temos o arquivo modules/pki/main.tf, em que uma chave foi configurada sem rotação.

A verificação do Snyk IaC sinaliza a rotação desativada de chaves do AWS KMS, enquanto o código Terraform define enable_key_rotation como true.

Este é outro caso em que o comportamento padrão muitas vezes não é o mais adequado do ponto de vista do fortalecimento da segurança. É claro que essa recomendação pressupõe que sua organização não tenha um processo separado para rotacionar chaves. Mas, se você usa o serviço de gerenciamento de chaves do provedor de nuvem, é bem provável que a melhor opção seja deixar essa tarefa a cargo dele.

Quão seguras são suas iniciativas de IaC?

Agora que você viu alguns exemplos de problemas que podem passar despercebidos com facilidade no código de IaC, quanto você confia na segurança do seu? Lembre-se: segurança não deve ser deixada para depois. Você pode executar essas mesmas verificações — além de outras para provedores de nuvem e Kubernetes — no seu repositório agora mesmo, gratuitamente, e identificar problemas antes que sejam implantados ou explorados.

Crie uma conta gratuita na Snyk e siga as instruções para criar um projeto a partir do seu repositório. Em poucos minutos, você receberá recomendações práticas para corrigir os problemas encontrados.

Comece a participar de desafios de Capture the Flag

Aprenda a resolver desafios de Capture the Flag assistindo sob demanda ao nosso workshop virtual introdutório.

Publicado em: