In this article
Tudo o que você precisa saber sobre segurança de contêineres em tempo de execução
Sistemas de orquestração de contêineres, como o Kubernetes, oferecem uma maneira mais simples de configurar e gerenciar contêineres em grande escala. Com o aumento da adoção de contêineres, o uso desses sistemas de orquestração disparou. Atualmente, por exemplo, o Kubernetes oferece orquestração para mais de três quartos dos aplicativos conteinerizados. É claro que a popularidade dessas plataformas faz delas alvos comuns de cibercriminosos. O Kubernetes combate esse risco oferecendo políticas de segurança para pods e gerenciamento de desvios para ajudar a proteger os contêineres durante o desenvolvimento — mas o que acontece quando os contêineres entram em execução?
Embora o Docker e o Kubernetes ofereçam diversas ferramentas para incorporar segurança aos contêineres, eles não protegem o próprio ambiente de execução. Como resultado, surgiu uma ampla gama de ferramentas, processos e políticas para proteger contêineres em produção.
Vamos explicar os riscos relacionados à execução de contêineres e os processos que você pode usar para proteger seus contêineres em produção.
O desafio de proteger contêineres em execução
Práticas como incorporar segurança às compilações de contêineres e criar imagens de contêiner menores ajudam a garantir que nenhum problema de segurança seja incorporado à imagem do contêiner. Ainda assim, diversas ameaças podem surgir quando um contêiner está em execução, incluindo:
Vulnerabilidades recém-descobertas em aplicativos presentes em imagens antigas
Desvio de configuração, como a alteração não autorizada de privilégios de usuário
Ataques de escalonamento de privilégios que permitem que invasores acessem segredos, volumes de armazenamento ou outros recursos
Implantação de contêineres que exploram falhas no controle de acesso
Ativação de código malicioso gravado dentro de um contêiner
Ferramentas de monitoramento de contêineres, como Prometheus e Grafana, costumam ser implantadas para melhorar o desempenho e a eficiência dos contêineres em execução, mas não foram projetadas para fins de segurança.
Como identificar e corrigir riscos em tempo de execução de contêineres
Para proteger contêineres em execução, é essencial monitorar eventos importantes, como logins. Mas a segurança em tempo de execução vai além do simples monitoramento de eventos. Ela começa com a incorporação da segurança à arquitetura, usando ferramentas de aplicação de políticas que definem e aplicam regras no Kubernetes ou no nível do kernel. Em seguida, ferramentas de análise podem examinar logs de auditoria, infraestrutura como código (IaC), configurações e o próprio código do aplicativo para identificar novas vulnerabilidades ou configurações incorretas em produção.
Quem é responsável pela segurança em tempo de execução de contêineres?
Tradicionalmente, a responsabilidade por proteger o ambiente de execução dos aplicativos ficava a cargo de equipes de segurança especializadas. Mas a velocidade e a complexidade do desenvolvimento ágil e nativo da nuvem fazem com que os desenvolvedores participem cada vez mais da redução dos riscos de segurança no próprio código. Eles estão antecipando a segurança no ciclo de desenvolvimento, incorporando-a às primeiras etapas do planejamento e da programação.
As responsabilidades dos desenvolvedores pela segurança também estão se estendendo por todo o ciclo de vida dos contêineres: do planejamento, da programação e da análise à implantação e ao ambiente de execução. Agora, eles também precisam acompanhar o ciclo de desenvolvimento e considerar o que acontece quando seus contêineres entram em execução.
Como escolher configurações seguras para o ambiente de execução do mecanismo de contêineres
As configurações do ambiente de execução do mecanismo de contêineres podem limitar a capacidade dos invasores de ampliar seu alcance após uma violação de rede. Confira algumas configurações recomendadas que oferecem proteção adicional à sua organização:
Não execute como root
Os contêineres devem ser executados como usuários, não como root. Para isso, defina primeiro o ID do usuário no Dockerfile e, em seguida, execute o contêiner como esse usuário. Assim, fica fácil limitar o acesso com controles de acesso baseados em função.
Use por padrão um sistema de arquivos raiz somente leitura
Isso impede que invasores assumam o controle de uma máquina ou gravem código malicioso no host.
Limite o acesso aos hosts de contêineres
Desabilite o acesso SSH aos servidores. Isso ajuda a impedir que invasores e malwares escapem dos contêineres e ataquem o sistema host.
Remova recursos do Linux
Recursos permitem ajustar com precisão os privilégios no kernel, como a capacidade de ler o log de auditoria ou ignorar verificações de permissão. Remover recursos do Linux de um contêiner limita a capacidade dos invasores de manipular o kernel.
Não execute em modo privilegiado
Os ambientes de execução de contêineres contam com medidas robustas para proteger os contêineres do sistema host. Evite executar em modo privilegiado, pois isso contorna a maioria dessas verificações.
Analise o ambiente de execução com análise de IaC para detectar configurações incorretas
É fácil para os desenvolvedores introduzirem configurações incorretas ao configurar a infraestrutura na nuvem e o orquestrador de contêineres. A análise de IaC com o Snyk IaC detecta automaticamente configurações incorretas no Kubernetes e em outras ferramentas e envia informações úteis às ferramentas do fluxo de trabalho dos desenvolvedores.
Para saber mais sobre as configurações de segurança em tempo de execução, leia nosso artigo: 10 configurações de contexto de segurança do Kubernetes que você precisa conhecer | Snyk.
A parceria entre Sysdig e Snyk para a segurança de contêineres em tempo de execução
Não existe uma solução única nem um botão mágico para proteger contêineres em execução, por isso é importante integrar protocolos de segurança sempre que possível. A prioridade é identificar vulnerabilidades e configurações incorretas e corrigir os problemas mais críticos. A segurança é uma forma de gerenciamento de riscos, então é importante identificar tanto as vulnerabilidades quanto suas consequências. Além disso, é importante aproveitar as ferramentas e configurações do Kubernetes para fortalecer a postura de segurança dos contêineres.
Segurança de contêineres que prioriza os desenvolvedores
O Snyk encontra e corrige automaticamente vulnerabilidades em imagens de contêiner e workloads do Kubernetes.
Embora uma solução totalmente automatizada de segurança em tempo de execução de contêineres consiga detectar a maioria dos problemas, ainda é preciso contar com o olhar criterioso dos desenvolvedores para corrigi-los. As ferramentas de análise podem revelar vulnerabilidades ou configurações incorretas no ambiente de execução, mas o desenvolvedor ainda precisa voltar ao código correspondente para aplicar as correções. Isso desperdiça tempo e recursos e pode fazer com que um problema passe despercebido. É aí que a Snyk entra. A Snyk identifica problemas e recomenda correções diretamente nos fluxos de trabalho dos desenvolvedores. Ferramentas como Snyk Container e Kubernetes Configuration Security permitem analisar contêineres Docker e configurações do Kubernetes e receber feedback nas ferramentas de CI/CD.
Além disso, a Snyk firmou uma parceria com a Sysdig para levar essa abordagem de segurança que prioriza os desenvolvedores ao ambiente de execução. A segurança em tempo de execução da Sysdig usa o projeto de código aberto Falco para detectar, em tempo real, invasões, ameaças e vulnerabilidades em contêineres e no Kubernetes. A integração entre Snyk e Sysdig envia essas informações diretamente às equipes de desenvolvimento, para que possam priorizar e aplicar correções.
Perguntas frequentes
O que é segurança em tempo de execução de contêineres?
A segurança em tempo de execução de contêineres engloba as ferramentas e os processos usados para protegê-los contra ameaças e vulnerabilidades quando chegam à produção. As estratégias de segurança em tempo de execução de contêineres geralmente contam com um forte componente de automação, enquanto desenvolvedores e equipes de segurança cuidam das configurações dos contêineres e da análise do ambiente em execução para identificar vulnerabilidades e desvios de configuração.
O que é a varredura de contêineres em tempo de execução?
A varredura de contêineres em tempo de execução consiste em usar ferramentas e processos para analisar contêineres em produção. Essas ferramentas ajudam a identificar vulnerabilidades ou problemas de configuração e, em seguida, corrigem-nos automaticamente ou sugerem soluções aos desenvolvedores. O uso de mecanismos de políticas pode ajudar a automatizar o processo com regras de detecção, que o scanner pode usar para identificar comportamentos ou atividades inesperados.
O que é segurança em tempo de execução do Kubernetes?
A segurança em tempo de execução do Kubernetes consiste no uso de ferramentas e processos para proteger todos os componentes do ambiente de execução do Kubernetes. Os desenvolvedores podem aproveitar as ferramentas e configurações integradas do Kubernetes para reforçar a segurança, como o controle do tráfego de entrada e saída da rede nos pods. Mecanismos de políticas que se integram ao Kubernetes por meio de APIs permitem controlar com mais rigor o comportamento dos usuários e o tráfego de rede. Por fim, com um scanner de runtime, profissionais de DevSecOps podem identificar novas vulnerabilidades e desvios de configuração no ambiente em produção.
Os contêineres são seguros?
Os contêineres não são seguros por padrão, por isso é importante que desenvolvedores e equipes de segurança incorporem a segurança de contêineres desde o início. Os contêineres e as aplicações estão cada vez mais complexos, então nem sempre é viável esperar que os desenvolvedores conheçam todas as ferramentas e os processos que podem usar para protegê-los. Ferramentas como Snyk e Sysdig ajudam a identificar ameaças diretamente no código dos contêineres e no ambiente em que eles são executados. As informações sobre vulnerabilidades e configurações incorretas são então disponibilizadas aos desenvolvedores em seus fluxos de trabalho habituais.