Infrastructure as Code: riscos de segurança e como evitá-los

A Infrastructure as Code (IaC) é uma prática essencial do DevOps que reforça o desenvolvimento ágil de software. Neste relatório, identificamos áreas de risco de segurança nas implementações de IaC e as práticas recomendadas para protegê-las.

As crescentes demandas por infraestruturas de TI e o aumento dos pipelines de integração e implantação contínua (CI/CD) aumentaram a necessidade de automação consistente e escalável. É aqui que a Infrastructure as Code (IaC) entra em jogo. IaC é o provisionamento, configuração e gerenciamento de infraestrutura por meio de arquivos formatados e legíveis por máquina. Ao invés de configurar manualmente ambientes locais e em nuvem, administradores e arquitetos podem apenas automatizá-los com a IaC. A IaC funciona bem com a infrastructure as a service (IaaS) e foi adotada pelas organizações para desenvolver e fazer o deploy em nuvem mais rapidamente e com custos reduzidos. 

Embora o conceito de IaC tenha semelhanças com os scripts de programação (que também automatizam os processos de TI), a IaC usa uma linguagem descritiva para codificar provisionamentos e implantações mais adaptáveis (ou seja, o próprio software é responsável por iniciar alterações na infraestrutura). A IaC é considerada especialmente crucial para computação em nuvem e DevOps.

As ferramentas de IaC podem ser categorizadas em dois grupos. As ferramentas de orquestração são para provisionar, organizar e gerenciar componentes de infraestrutura (tais como, CloudFormation e Terraform). As ferramentas de gerenciamento de configuração, por outro lado, destinam-se à instalação, atualização e gerenciamento de software em execução nos componentes de infraestrutura (por exemplo, Ansible, Chef, Puppet e SaltStack). Essas ferramentas permitem que desenvolvedores e arquitetos em nuvem mudem de tarefas manuais e propensas a erros e simplifiquem a configuração e o gerenciamento em larga escala.

Áreas de risco de segurança nas implementações de IaC

Manter o ritmo acelerado dos ciclos de CI/CD através da IaC, no entanto, traz alguns desafios. Por exemplo, uma vulnerabilidade não corrigida em uma ferramenta de IaC pode servir como um ponto de entrada de ameaça para a infraestrutura principal. As vulnerabilidades podem permitir que os invasores ignorem procedimentos, executem código em servidores invadidos ou até mesmo implantem mineradores de criptomoeda. Modelos de IaC com configurações incorretas também podem expor dados confidenciais ou deixar aberturas para ataques.

Segredos de armazenamento

O princípio geral da IaC é que uma única aplicação tem a capacidade de gerenciar vários ambientes descritos nos arquivos de configuração, que assumem a forma de código e o executam (o qual também pode ser malicioso) dentro dos ambientes alvos. Uma aplicação IaC pode usar abordagens diferentes para descrever os ambientes-alvos; o comum é a própria configuração, seu armazenamento e, especialmente, os segredos necessários para conectar-se à infraestrutura gerenciada.

O armazenamento de segredos é importante, pois contém dados confidenciais, como tokens de aplicações necessários para autenticação, chaves Secure Shell (SSH) e senhas. Armazenar esses dados em sistemas de gerenciamento de código-fonte (SCM) (por exemplo, Git) ou em arquivos de texto sem formatação é perigoso — e, do ponto de vista da segurança, irresponsável — pois eles podem ser facilmente expostos. Por exemplo, robôs que rastreiam sites públicos de SCM e procuram segredos podem explorá-los rapidamente e comprometer a infraestrutura (por exemplo, gerando mineradores de criptomoedas). Portanto, recomendamos o uso de cofres para armazenar segredos e referenciá-los dentro dos arquivos de configuração.

Canal de comunicação do mestre

Algumas ferramentas de gerenciamento de configuração IaC (por exemplo, SaltStack) usam a arquitetura do nó mestre (onde os nós – ou nodes – são gerenciados a partir dele). Geralmente, ao acessar a infraestrutura gerenciada a partir de um único ponto (ou seja, um mestre), é crucial proteger o ponto único, pois ele contém todas as especificações de infraestrutura ou implantação, e um comprometimento da segurança afetaria toda a infraestrutura.

O uso de ambientes preparados dentro da nuvem reduz o risco de comprometimento de configurações incorretas e a configuração de infraestruturas do zero.

Figura 1. Uma visão geral de alto nível de uma arquitetura de nó mestre

O mestre precisa ter um canal de comunicação seguro para poder se comunicar e gerenciar os nós. Existem duas abordagens diferentes para gerenciá-los:

  • Instalar um agente customizado para gerenciar o nó a fim de executar determinadas tarefas
  • Usar software e protocolos de comunicação comumente disponíveis para gerenciar nós (também conhecidos como “sem agente”), como a execução de scripts bash via protocolo SSH

Do ponto de vista da segurança, o uso de um protocolo de rede personalizado traz outra superfície de ataque e até possíveis vulnerabilidades à tona, como nos casos do CVE-2020-11651 e do CVE-2020-11652, que são vulnerabilidades noframework de gerenciamento do SaltStack Salt usado em data centers e servidores em nuvem.

CVE-2020-11651 é um problema no manuseio do protocolo de rede personalizado que pode permitir que um usuário não autenticado realize uma execução remota de código (RCE) dentro de toda a infraestrutura. CVE-2020-11652, por outro lado, é uma vulnerabilidade de percurso que pode permitir que outras partes leiam arquivos arbitrários. Nos dois casos, um agente mal-intencionado tem a capacidade de obter a chave raiz, bem como o acesso ao mestre e, consequentemente, a toda a infraestrutura. As duas vulnerabilidades do SaltStack foram críticas o suficiente para que os pesquisadores da F-Secure que descobriram as falhas decidissem não liberar nenhum código de prova de conceito.

Figura 2. Uma amostra de um patch CVE-2020-11651 que limita os métodos de exposição

O agente mal-intencionado foi rápido ao atingir as plataformas criadas na infraestrutura de gerenciamento. Os mineradores de criptomoeda haviam infectado servidores em nuvem e, consequentemente, aumentado o uso da CPU e sistemas sobrecarregados em instâncias vulneráveis do Salt. Agentes maliciosos também procuraram comprometer a chave de assinatura de um servidor de transparência de certificados (CT) que pode ter sido exposta a vulnerabilidades críticas.

Análises mais detalhadas do CVE-2020-11651 e CVE-2020-11652 podem ser encontradas neste artigo da Trend Micro Research.

Privilégios do usuário

Privilégios de usuário são outra consideração de segurança. Se uma aplicação IaC for usada para gerenciar a implantação de aplicações, é improvável que exija privilégios de root na máquina de destino. Seguir o princípio do menor privilégio pode ser um desafio, mas deve atenuar o risco de comprometimento.

O mesmo princípio também se aplica ao implantar em nuvens públicas como Amazon Web Services (AWS). Uma conta ou função atribuída apenas para uma finalidade específica (por exemplo, máquinas virtuais preparadas para a geração) deve ser usada com capacidades limitadas. A transferência de credenciais de provedor de nuvem com acesso de administrador para tarefas menos privilegiadas é uma prática insegura.

Templates IaC

A ativação da implantação ágil por meio do provisionamento e do gerenciamento da infraestrutura de nuvem é feita por meio de templates de IaC, que são arquivos de definição legíveis por máquina que constroem ambientes que implantam e executam código de fontes externas. Entretanto, eles não estão isentos de riscos. Esses modelos fazem parte dos processos de IaC e podem involuntariamente usar sistema operacional ou imagens de contêiner de fontes não confiáveis. Essas fontes podem abrir portas para ameaças como backdoors e mineradores de criptomoedas. 

Os templates de IaC também podem ter vulnerabilidades e configurações padrão não seguras que podem levar à exposição de dados. As vulnerabilidades podem apresentar riscos adicionais às infraestruturas de nuvem implantadas pela IaC e aos dados armazenados, especialmente se desnecessariamente expostos à Internet pública. Os manipuladores devem primeiro verificar os templates de IaC quanto a configurações não seguras e outras possíveis fraquezas no início do processo de desenvolvimento. A varredura regular usando um serviço de gerenciamento de postura de segurança em nuvem também auxilia na identificação e correção de erros de configuração.

Principais tópicos e práticas recomendadas

A IaC implanta e gerencia infraestruturas, incluindo bancos de dados, servidores de rede, serviços e máquinas virtuais. É uma prática essencial do DevOps que reforça o desenvolvimento ágil de software. A IaC ajuda a acelerar o desenvolvimento e gerenciar com eficiência as infraestruturas. Sem a IaC, os desenvolvedores e as equipes de TI mantêm as configurações de ambientes de implantação individuais. Esse processo manual pode levar a inconsistências e problemas de segurança nessas implantações. 

Com a IaC, a infraestrutura é definida dentro dos arquivos de texto (código). Embora permita que os usuários especifiquem várias propriedades, suas implementações ruins podem levar a deploys inseguros. As configurações incorretas são uma grande preocupação de segurança em ambientes em nuvem, incluindo ferramentas de IaC. A falta de conhecimento de segurança no pipeline de IaC pode levar ao comprometimento de toda a infraestrutura.

Para proteger ambientes híbridos e de nuvem pública, recomendamos as seguintes medidas:

  • Aplique o princípio do menor privilégio. Os privilégios de conta nos serviços em nuvem devem ser limitados, especialmente quando vinculados a provedores de nuvem pública. As permissões e o acesso às ferramentas devem ser restritos para impedir que os invasores consigam uma posição nos nós. Dessa forma, as configurações de IaC são armazenadas com segurança e o vazamento de dados é evitado.
  • Use plug-ins de segurança de IaC. Os plug-ins de segurança no ambiente de desenvolvimento integrado (IDE) ajudam a reduzir possíveis problemas nos modelos de IaC antes da implantação.
  • Atualize o software de infraestrutura para a versão mais recente. Os patches de segurança devem ser aplicados imediatamente quando disponíveis. (Correções para as vulnerabilidades acima mencionadas do Salt já foram lançadas.)
  • Não exponha um sistema central. Um servidor central não deve ser exposto na Internet para impedir a disseminação de elementos comprometidos para outros componentes ao longo do pipeline.
  • Melhore a postura de segurança e compliance. A segurança em tempo real que detecta configurações incorretas nos provedores de serviços em nuvem deve ser empregada para garantir a proteção no pipeline. Soluções que possuem uma função de correção automática também podem ajudar a corrigir falhas.

Fernando Cardoso, arquiteto de soluções da Trend Micro, fornece mais recomendações sobre como adicionar segurança ao pipeline IaC no vídeo a seguir:


Soluções de segurança em nuvem da Trend Micro

A Trend Micro ajuda as equipes de DevOps a criar com segurança, a publicar rapidamente e a rodar em qualquer lugar. A solução Trend Micro™ Hybrid Cloud Security fornece segurança poderosa, simplificada e automatizada no pipeline de DevOps da organização e oferece várias técnicas de defesa contra ameaças XGen™ para proteger workloads físicos, virtuais e em nuvem no runtime. Ele é desenvolvido com a plataforma Cloud One™, que fornece às organizações uma visão única dos ambientes de nuvem híbrida e segurança em tempo real por meio dos serviços Network Security, Workload Security, Container Security, Application Security, File Storage Security, e Conformity.

Trend Micro™ Cloud One™ – Conformity é um serviço de gerenciamento de postura de segurança e compliance e compliance em nuvem que permite que as organizações obtenham segurança em tempo real para suas infraestruturas na nuvem. Ele fornece verificações automatizadas de segurança e compliance, visibilidade total e relatórios simplificados e integração perfeita do worklflow.

Para organizações que procuram segurança de workload em execução, imagem de contêiner e armazenamento de arquivos e objetos como software, as soluções Deep Security™ e o Deep Security Smart Check podem fazer varredura dos workloads e imagens de contêiner em busca de malware e vulnerabilidades a qualquer momento no pipeline de desenvolvimento a fim de evitar ameaças antes de serem implantadas.

O Trend Micro Deep Security e Vulnerability Protection protegem os usuários contra ataques que visam vulnerabilidades relacionadas ao SaltStack através das seguintes regras:

  • 1010265 – SaltStack Salt Authorization Weakness Vulnerability (CVE-2020-11651)
  • 1010267 – SaltStack Salt Directory Traversal Vulnerability (CVE-2020-11652)
  • 1010266 – SaltStack Vulnerabilities Exploitation Detected

A solução Trend Micro ™ TippingPoint® protege os clientes através das seguintes regras:

  • 37750: TCP: SaltStack Salt Authentication Bypass Vulnerability (CVE-2020-11651)
  • 37782: TCP: SaltStack Salt Directory Traversal Vulnerability (CVE-2020-11652)
  • 37032: HTTP: Backdoor.Linux.Kinsackor.A Runtime Detection