/ O que é segurança de IaC
O que é segurança de IaC
A segurança de infraestrutura como código (IaC) é a incorporação de uma cobertura de segurança na nuvem, consistente e dimensionável, que ajuda a detectar configurações incorretas no código no início do ciclo de vida de desenvolvimento do software para evitar vulnerabilidades em tempo de execução. Ela permite que as organizações apliquem medidas de segurança em modelos de IaC ao longo de seu ciclo de vida, seja em repositórios de código, ferramentas de integração e entrega contínuas (CI/CD) ou no IDE do desenvolvedor.
Por que a segurança da infraestrutura como código é importante
Os requisitos de negócios e a adoção de DevOps estão fazendo com que os aplicativos sejam distribuídos e implantados mais rápido do que nunca. Essa tendência pode ter um efeito negativo tanto no âmbito da conformidade quanto da segurança, onde regulamentações e ameaças cibernéticas estão em constante evolução.
Quando os desenvolvedores desconhecem os requisitos de conformidade (ou esses requisitos são inacessíveis), vulnerabilidades podem ser introduzidas no ambiente de produção. As organizações precisam combater isso diminuindo a distância entre as equipes de segurança e DevOps, já que a responsabilidade pela segurança está rapidamente sendo transferida para os engenheiros de DevOps.
O problema decorre da dependência de processos manuais e ferramentas isoladas que não conseguem acompanhar a velocidade de desenvolvimento e os ciclos de lançamento contínuos. Você precisa fornecer aos seus desenvolvedores uma plataforma colaborativa e sem atritos, que permita que eles identifiquem e corrijam problemas rapidamente para que possam aplicar políticas de segurança e conformidade consistentes, sem sacrificar a velocidade.
A segurança de IaC deve:
- Verificar o código em busca de erros de configuração, vulnerabilidades e implantações inseguras que violem os padrões de segurança
- Comparar as verificações de configuração em relação às práticas recomendadas de segurança e controles de conformidade
- Alertar e guiar desenvolvedores/engenheiros sobre remediações e implantações seguras
- Aplicar barreiras de proteção ao reprovar pull requests e processos de CI/CD com vulnerabilidades críticas diretamente nas ferramentas utilizadas, impedindo possíveis violações quando necessário
Antes de discutirmos mais a importância da segurança de IaC, vamos dar uma olhada no que exatamente é IaC e por que ela é importante para as operações modernas.
O que é infraestrutura como código
Infraestrutura como código (IaC) é um código descritivo, comumente escrito em markup (JSON, YAML, etc.) ou linguagens proprietárias (por exemplo, Terraform HCL), usada para provisionar e gerenciar as configurações de recursos da infraestrutura de nuvem. A infraestrutura como código proporciona maior produtividade e agilidade, reduz erros humanos, fornece padronização para implantação e mantém o controle de versão da configuração da infraestrutura.
As ferramentas de IaC existem em diversas formas: de plataformas dedicadas de gerenciamento da infraestrutura a ferramentas de gerenciamento de configuração e código aberto, há uma infinidade de opções disponíveis. Algumas das opções mais populares incluem HashiCorp Terraform, AWS CloudFormation e Azure Resource Manager.
Benefícios da IaC
A IaC oferece uma série de benefícios que se concentram principalmente em flexibilidade e velocidade. Ela permite que você:
- Provisione e gerencie recursos de nuvem de forma rápida e fácil
- Automatize os processos de implantação codificando a infraestrutura de nuvem
- Expanda a infraestrutura por meio da nuvem
Esses benefícios eliminam a necessidade de configurações manuais demoradas e reduz o risco de erros humanos. Além disso, eles permitem que os engenheiros instituam o controle de versão, o que permite às equipes de DevOps; vamos abordar isso em mais detalhes.
Por que a IaC é importante para DevOps
A IaC permite que as equipes de TI gerenciem e provisionem data centers por meio de arquivos escritos. Isso não apenas reduz o custo de criação e execução de aplicativos, como também facilita o compartilhamento de dados entre as equipes, bem como a automatização da escrita de scripts, o que alivia a sobrecarga das equipes de DevOps quando elas são encarregadas de criar aplicativos na nuvem.
Além disso, a IaC permite que as equipes de DevOps provisionem e executem uma infinidade de ambientes de teste, além de permitir que os desenvolvedores sejam mais diversificados no uso da linguagem, se necessário. Com essa flexibilidade adicional, essas equipes podem se concentrar em criar, testar e executar aplicativos de alta qualidade em menos tempo e a um custo menor.
No entanto, por esses mesmos motivos, a IaC também pode tornar a infraestrutura mais vulnerável.
Riscos de segurança associados à IaC
A IaC oferece benefícios operacionais, como provisionamento rápido de infraestrutura de TI em uma abordagem declarativa em vez de uma abordagem imperativa. Entretanto, seu impacto na segurança representa um grande desafio devido ao seu impacto potencial nos recursos.
Se um único recurso for configurado incorretamente de forma manual, o escopo do erro será limitado somente a esse recurso, mas cometer um erro no código que pode ser usado para provisionar automaticamente 100 ou mais recursos representa um risco de segurança muito maior.
Alcançar segurança de IaC abrangente é um desafio para as organizações. Ela pode trazer muitos benefícios, mas também pode criar vulnerabilidades perigosas.
Cinco riscos da IaC
A infraestrutura como código pode deixar sua organização em risco de:
- Uma ampla superfície de ataque: configurações incorretas de IaC podem expandir a superfície de ataque (por exemplo, configurações incorretas de grupos de segurança que deixam ativos inadvertidamente expostos à internet).
- Exposição de dados: os modelos de IaC podem conter vulnerabilidades e configurações padrão inseguras que podem levar à exposição de dados (por exemplo, segredos incorporados no código do Terraform que são verificados para controle de origem).
- Privilégios excessivos: os desenvolvedores geralmente usam contas com privilégios para provisionar aplicativos na nuvem e os recursos de infraestrutura subjacentes, o que pode levar ao acesso não autorizado a dados sigilosos ou a uma possível violação.
- Violações de conformidade: as organizações precisam estar em conformidade com uma série de padrões regulatórios, como GDPR, HIPAA, PCI DSS e SOC2. Se as proteções de políticas baseadas nesses padrões não forem aplicadas no processo de IaC, isso pode levar a falhas de conformidade.
- Atrito entre equipes multifuncionais: os desenvolvedores estão acelerando a implantação para entregar produtos de qualidade com prazos apertados. Por outro lado, as equipes de segurança têm pouca visibilidade do código e pouco controle sobre as alterações feitas. Dessa forma, aplicar diretrizes de segurança, seja com base na conformidade regulatória, nas práticas recomendadas ou na política da empresa, torna-se um verdadeiro desafio se não houver integração entre as equipes de DevOps e SecOps.
Como funciona a segurança de IaC
A segurança de IaC prioriza a identificação precoce de vulnerabilidades no código. Ou seja, desenvolvedores e engenheiros de DevOps recebem feedback de segurança sobre seu código no início do processo. A segurança de IaC oferece aos desenvolvedores essa visibilidade ao:
- Verificar modelos de IaC antes de serem enviados ao controle de origem
- Comparar configurações
- Identificar configurações incorretas, vulnerabilidades e violações de políticas
Com esses processos implementados, as equipes de SecOps são prontamente notificadas sobre quaisquer problemas que precisam ser corrigidos antes da implantação de um aplicativo.
Práticas recomendadas para segurança de IaC
Aqui estão algumas das práticas recomendadas de segurança de IaC que podem ser facilmente integradas ao ciclo de vida de desenvolvimento:
Obtenha visibilidade do inventário de ativos
Durante as operações de IaC, você deve identificar, marcar, monitorar e manter um inventário dos ativos implantados. Recursos não marcados devem ser monitorados cuidadosamente, pois são difíceis de rastrear e causam desvios. Sempre que os recursos forem desativados, a configuração associada deverá ser excluída e os dados também deverão ser protegidos ou excluídos.
Identifique e corrija desvios de ambiente
O ideal é que as configurações nos ambientes de desenvolvimento sejam uniformes. Mas os proprietários dos aplicativos às vezes precisam fazer modificações em seus aplicativos e na infraestrutura subjacente. Sem monitoramento ou ferramentas adequadas, o acúmulo descontrolado desses fatores leva a desvios de configuração, o que pode deixar a infraestrutura exposta e criar brechas de segurança e conformidade.
Proteja ativos embutidos no código
Dados sigilosos, como chaves secretas, chaves privadas, chaves SSH, chaves de acesso/secretas e chaves de API embutidas no código de IaC podem fornecer acesso fácil a serviços ou operações subjacentes e ajudar os invasores a se moverem lateralmente. Ter credenciais expostas espalhadas pelo código de IaC que é enviado a sites de controle de versão (por exemplo, GitHub) pode representar um grande risco para as organizações.
Proteja contas de desenvolvedor
As contas dos desenvolvedores precisam ser protegidas contra invasores. É importante reforçar e monitorar as contas dos desenvolvedores, rastrear alterações nas configurações de IaC e verificar se as alterações são autorizadas e intencionais. Alterações não autorizadas podem causar adulteração do modelo ou da configuração da IaC, o que pode resultar em vazamento de código.
Restrinja o acesso a ambientes
As equipes de segurança precisam ter um único ponto de controle que permita o gerenciamento consistente de contas privilegiadas, credenciais e segredos em cada um dos ambientes de desenvolvimento e processamento. Isso permite que elas controlem o uso atual e futuro de credenciais privilegiadas, detectem problemas de configuração de acesso com o contexto necessário, dimensionem corretamente o acesso de identidade e as permissões e apliquem consistentemente a política de privilégio mínimo.
Aplique proteções
As equipes de segurança devem aplicar proteções de políticas nativas da nuvem, que incorporem verificações, para proteger infraestruturas multinuvem contra desvios de configuração e alertar sobre violações, aplicar políticas de segurança consistentes durante a compilação e o tempo de execução e fornecer orientações claras aos desenvolvedores sobre como resolver vulnerabilidades e riscos. Por exemplo, pode-se desejar que o build de CI/CD seja reprovado caso um determinado limite de segurança não seja atingido.
Deixamos uma coisa bem clara: a IaC pode beneficiar muito sua organização, mas traz riscos de segurança que você não pode ignorar. Para aproveitar ao máximo a IaC, você precisa de um parceiro de cibersegurança que tenha criado uma solução com DevSecOps em mente, domine a proteção de dados na nuvem e, acima de tudo, ajude você a aproveitar ao máximo seu investimento em IaC. Esse parceiro é a Zscaler.
Como o controle de postura pode ajudar
O Posture Control é uma plataforma de proteção de aplicativos nativos da nuvem (CNAPP) projetada para ajudar suas equipes de desenvolvimento e segurança a trabalharem juntas para criar um programa abrangente de segurança de infraestrutura como código (IaC) do zero.
Principais recursos
Visibilidade e controle
- Identifique problemas e visualize a postura de segurança e conformidade do seu repositório de código
- Investigue e corrija facilmente violações por categoria, gravidade da política, controles de conformidade, tags e status
- Obtenha visibilidade detalhada sobre a violação de código, repositório de código, pull request, build de CI/CD e outras informações críticas para rastrear o problema até a origem
Avaliação contínua
- Verifica continuamente os modelos de IaC (por exemplo, Terraform HCL, modelos AWS CloudFormation, arquivos YAML de manifesto de aplicativo Kubernetes e Helm charts) conforme o código é atualizado ou enviado em repositórios de código e as compilações são acionadas em sistemas de CI/CD
- Verifique o código em busca de violações de políticas de segurança o mais cedo possível (IDE do desenvolvedor) para fornecer feedback imediato ao desenvolvedor
- Avalie os modelos de IaC quanto a problemas de segurança, não conformidade e outras configurações incorretas ou configurações padrão inseguras (por exemplo, ausência de criptografia, rastreamento de identidade e credenciais) em busca de permissões excessivas, recursos expostos publicamente como cargas de trabalho, buckets de armazenamento, funções de grupo de segurança fracas e muito mais.
- Compare continuamente a configuração observada com o estado desejado para relatar, notificar e corrigir desvios de configuração inesperados
- Verifique o código enviado aos repositórios de código e reprove a compilação em sistemas de CI/CD quando vulnerabilidades críticas são identificadas
Produtividade aprimorada
- Melhore a experiência de desenvolvimento identificando problemas com o contexto certo, orientação de segurança integrada e recomendações para resolver problemas nativamente em seus ecossistemas de DevOps, ferramentas como IDEs, repositórios de código e sistemas de CI/CD
- Automatize a segurança de IaC e incorpore-a aos processos existentes para reduzir o atrito entre desenvolvedores e membros da equipe de segurança, operações e conformidade (uma prática recomendada de DevSecOps)
Alertas
- Integre com ferramentas de abertura de incidentes para gerar alertas quase em tempo real, permitindo que notificar e alertar os proprietários e equipes certos com o contexto necessário sobre problemas, impacto e ação necessária para corrigir um problema