O que é a segurança do contêiner Registry?
A segurança do contêiner se concentra na proteção dos registros de contêineres, o armazenamento centralizado e os sistemas de distribuição de imagens de contêineres. Os registros de contêineres desempenham um papel fundamental no ecossistema de contêineres, garantindo a integridade e a segurança dos aplicativos em contêineres. A segurança adequada do registro de contêineres envolve o uso de registros confiáveis, a implementação de controle de acesso rigoroso, o monitoramento de vulnerabilidades e a proteção do servidor de hospedagem. Além disso, é necessário negar conexões inseguras e remover imagens obsoletas. Ao priorizar a segurança do registro de contêineres, as organizações podem proteger seus ambientes em contêineres e manter a confiança dos usuários e clientes.
Explicação sobre a segurança do registro de contêineres
A segurança do registro de contêineres se concentra em um componente crítico do ecossistema de contêineres: o registro de contêineres. Na narrativa mais ampla da segurança do contêiner, o registro atua como guardião das imagens do contêiner, os blocos de construção dos aplicativos em contêineres. Dessa forma, o registro de contêineres é mais do que uma unidade de armazenamento. Trata-se, na verdade, de um ponto de conexão em que a integridade das imagens dos aplicativos é mantida e distribuída.
Entendendo os registros de contêineres
Em um ambiente contêinerizado , como o senhor sabe, os aplicativos com suas dependências são empacotados em contêineres, tornando-os portáteis e fáceis de implantar em várias plataformas. Os registros de contêineres servem a esse processo, fornecendo um local onde as imagens do contêiner podem ser versionadas, recuperadas e implantadas de forma consistente.
O registro de contêineres, portanto, é um sistema centralizado de armazenamento e distribuição de imagens de contêineres. O registro permite que os desenvolvedores e as equipes de operações armazenem, gerenciem e compartilhem imagens de contêineres, que serão usadas para criar e implantar aplicativos e microsserviçosem contêineres.
Registros públicos e privados
As organizações podem usar uma combinação de registros de contêineres públicos e privados para gerenciar suas imagens de contêineres, bem como outros artefatos.
Registros públicos, como o Docker Hub e o GitHub Container Registry, um sub-recurso do GitHub Packages, oferecem uma vasta coleção de imagens de código aberto que as organizações podem usar como base para seus aplicativos. Esses registros geralmente são acessíveis a qualquer pessoa, o que facilita para os desenvolvedores encontrarem e usarem imagens pré-construídas.
Mas as organizações geralmente têm requisitos específicos e software proprietário que exigem o uso de registros privados.
Figura 1: Registro/repositório de contêineres público vs. privado
Os registros de contêineres privados, como o Azure Container Registry, o Amazon Elastic Container Registry e o Google Container Registry, fornecem ambientes seguros e controlados para armazenar e gerenciar imagens proprietárias e artefatos relacionados. Esses registros são acessíveis apenas a usuários autorizados dentro da organização para ajudar a garantir que as informações confidenciais e as imagens personalizadas permaneçam seguras.
Ao usar uma combinação de registros públicos e privados, as organizações podem aproveitar os benefícios das imagens de código aberto e, ao mesmo tempo, manter o controle sobre seu software proprietário. Essa abordagem dupla permite que as organizações otimizem seus fluxos de trabalho de gerenciamento de contêineres e simplifiquem o processo de implantação.
Componentes da segurança do registro de contêineres
Como o registro é fundamental para a forma como um ambiente em contêiner opera - e as organizações podem facilmente ter dezenas de milhares de imagens armazenadas nele - a proteção do registro é essencial para a integridade do ciclo de vida de desenvolvimento de software.
As vulnerabilidades podem comprometer mais do que o aplicativo. Um invasor que aproveitasse uma configuração incorretas poderia obter acesso não autorizado ao sistema CI/CD e mover-se lateralmente para acessar o sistema operacional subjacente. Eles poderiam manipular fluxos legítimos de CI/CD, obter tokens confidenciais e passar para o ambiente de produção, onde a identificação de uma credencial exposta poderia permitir que eles entrassem na rede da organização.
Artigo relacionado: Anatomia de um ataque ao pipeline de suprimentos em nuvem
A segurança do registro começa com o uso apenas de registros e bibliotecas confiáveis. O monitoramento contínuo das alterações de vulnerabilidade é fundamental, juntamente com a proteção do servidor de hospedagem e a implementação de políticas de acesso substanciais. A segurança adequada do registro deve negar conexões inseguras, sinalizar ou remover imagens obsoletas e aplicar restrições rigorosas de autenticação e autorização.
Vamos examinar essas medidas com mais detalhes.
Promoção da integridade de imagens e artefatos em CI/CD
A compreensão dos riscos associados a imagens e artefatos reforça a importância da implementação de verificações rigorosas para garantir sua integridade. Considere a implementação das seguintes estratégias.
Negar conexões inseguras
Embora os registros públicos possam permitir o acesso anônimo às imagens do contêiner, para evitar ataques do tipo man-in-the-middle, adulteração não autorizada e acesso não autorizado a informações confidenciais, o senhor deve manter conexões seguras.
Para negar conexões inseguras, configure seus sistemas para aceitar apenas protocolos seguros, como HTTPS ou conexões criptografadas por TLS. Comece obtendo e instalando um certificado SSL/TLS válido de uma autoridade de certificação (CA) confiável para seu domínio. Em seguida, atualize a configuração do servidor ou do serviço para impor o uso de HTTPS ou TLS, desativando protocolos inseguros como o HTTP. Dependendo da sua configuração, isso pode envolver o ajuste das configurações do servidor da Web (por exemplo, Nginx, Apache), do balanceador de carga ou do aplicativo. Além disso, considere o uso de recursos de segurança como o HSTS (HTTP Strict Transport Security) para instruir os navegadores a sempre usar conexões seguras ao acessar seu site ou serviço.
Remover imagens obsoletas
Estabeleça uma política para definir imagens obsoletas - imagens mais antigas do que um período de tempo específico ou não utilizadas por um determinado período - e use ferramentas de registro ou APIs para listar e filtrar imagens com base na política. Por exemplo, no Docker Registry, use a API do Docker Registry para recuperar metadados de imagens e filtrar por data ou tag do último envio. Em outros registros, APIs semelhantes ou ferramentas CLI podem estar disponíveis. Depois de identificar as imagens obsoletas, use os comandos ou APIs apropriados para excluí-las, certificando-se de seguir as práticas recomendadas do registro para coleta de lixo.
Evite problemas de IAM em registros de terceiros
O gerenciamento de identidade e acesso (IAM) é crucial para as organizações, especialmente em sistemas de gerenciamento de controle de origem (SCM) como o GitHub, em que os repositórios armazenam códigos e ativos valiosos. O IAM inadequado pode levar a riscos de segurança no pipelines de CI/CD. Para otimizar a segurança e a governança dos repositórios, as organizações podem usar o logon único (SSO) e o sistema de gerenciamento de identidade entre domínios (SCIM) para gerenciar os controles de acesso. O SSO, no entanto, só está disponível para o GitHub Enterprise, deixando outras licenças expostas a riscos.
Para mitigar problemas que envolvam endereços de e-mail privados em contas do GitHub, contas fantasmas do GitHub e integração incompleta, aplique a autenticação de dois fatores (2FA), estabeleça um protocolo de integração com contas corporativas dedicadas e mantenha um inventário das contas de usuário. Para organizações habilitadas para SSO, a implementação do SCIM garante o desprovisionamento automático de usuários e elimina o acesso por meio de credenciais obsoletas. A abordagem dos riscos de IAM ajuda a proteger os repositórios, o ecossistema de CI/CD e a manter um alto nível de segurança em todos os sistemas.
Artigo relacionado: Os 3 principais riscos de IAM em sua organização do GitHub
Empregar restrições suficientes de autenticação e autorização
As identidades que recebem mais permissões do que o necessário para o repositório abrem oportunidades para o aumento de privilégios e podem resultar em alterações não autorizadas de código, adulteração do processo de compilação e acesso a dados confidenciais. A automação pode ajudar a validar os controles de acesso, verificar as permissões dos usuários e identificar possíveis vulnerabilidades, permitindo que as organizações adotem medidas proativas de rotina, como:
- Analisar e mapear todas as identidades no ecossistema de engenharia. Para cada identidade, mapeie continuamente o provedor de identidade, as permissões concedidas e as permissões usadas. Assegurar que a análise abranja todos os métodos de acesso programático.
- Remoção de permissões desnecessárias para cada identidade em vários sistemas do ambiente.
- Estabelecer um período aceitável para desativar ou remover contas obsoletas. Desativar e remover identidades que excedam esse período de inatividade.
- Mapeamento de todos os colaboradores externos e alinhamento de suas identidades com o princípio do menor privilégio. Quando possível, conceda permissões com uma data de validade para contas humanas e programáticas.
- Proibir que os funcionários acessem SCMs, CIs ou outras plataformas de CI/CD usando seus endereços de e-mail pessoais ou endereços de domínios que não pertençam à organização. Monitore endereços que não sejam de domínio em diferentes sistemas e remova usuários que não estejam em conformidade.
- Não permitir que os usuários se registrem automaticamente nos sistemas e conceder permissões com base na necessidade.
- Evitar a concessão de permissões básicas em um sistema a todos os usuários e a grandes grupos com contas de usuário atribuídas automaticamente.
- Criar contas dedicadas para cada contexto específico, em vez de usar contas compartilhadas, e conceder o conjunto exato de permissões necessárias para o contexto em questão.
Implementar o armazenamento seguro
Estabelecer um repositório seguro e inviolável para armazenar artefatos. Ative o controle de versão para manter um registro histórico das alterações de artefatos e implemente o monitoramento em tempo real para rastrear e alertar sobre atividades suspeitas. No caso de artefatos comprometidos, configure o sistema para facilitar as reversões para versões anteriores e conhecidas como boas.
Conduzir verificações de validação de integridade do desenvolvimento à produção
Implementar processos e tecnologias que validem a integridade dos recursos em toda a cadeia de fornecimento de software. Quando os desenvolvedores geram um recurso, eles devem assiná-lo usando uma infraestrutura externa de assinatura de recursos. Antes de consumir um recurso nos estágios subsequentes do pipeline, verifique sua integridade com a autoridade de assinatura.
Assinatura de código
As soluções de SCM oferecem o recurso de assinar commits com uma chave exclusiva para cada colaborador, impedindo que commits não assinados avancem pelo pipeline.
Software de verificação de artefatos
Ferramentas projetadas para assinar e verificar códigos e artefatos, como o Sigstore da Linux Foundation, podem impedir que softwares não verificados avancem no pipeline.
Detecção de desvio de configuração
Implementar medidas para detectar desvios de configuração, como recursos em ambientes de nuvem não gerenciados usando um modelo assinado de infraestrutura como código . Esses desvios podem indicar implantações de fontes ou processos não confiáveis.
Empregar assinatura criptográfica
Use a infraestrutura de chave pública (PKI) para assinar criptograficamente os artefatos em cada estágio dos pipelines de CI/CD. Essa prática valida as assinaturas em uma autoridade de certificação confiável antes do consumo. Configure seu pipelines de CI/CD para rejeitar artefatos com assinaturas inválidas ou ausentes para reduzir os riscos de implantar recursos adulterados ou alterações não autorizadas.
Use apenas imagens de contêineres protegidos
As imagens do contêiner podem conter vulnerabilidades que os invasores podem explorar para obter acesso não autorizado ao contêiner e ao seu host. Para evitar isso, use imagens de contêineres seguras e confiáveis de fontes confiáveis e verifique-as regularmente. Ao implantar um contêiner a partir de um registro público, é particularmente importante verificar primeiro se há malware e vulnerabilidades no contêiner.
Impor a validação de várias fontes
Adotar uma estratégia de validação de várias fontes que verifique a integridade dos artefatos usando várias fontes, como somas de verificação, assinaturas digitais e algoritmos de hash seguros, bem como repositórios confiáveis. Mantenha os algoritmos e as chaves criptográficas atualizados para manter sua eficácia.
Validação de recursos de terceiros
Os recursos de terceiros incorporados aos pipelines de compilação e implantação, como os scripts executados durante o processo de compilação, devem passar por uma validação rigorosa. Antes de utilizar esses recursos, calcule o hash deles e compare-o com o hash oficial fornecido pelo provedor de recursos.
Integrar a varredura de segurança
O pipelines de CI/CD deve usar apenas código vetado (aprovado para produção) ao criar imagens. Incorpore ferramentas de varredura de vulnerabilidades - bem como análise de composição de software (SCA) e teste de segurança de aplicativo estático (SAST) - no pipelines de CI/CD para garantir a integridade da imagem antes de enviar as imagens para o registro do qual a implantação de produção as extrairá. Além disso, não se esqueça de seguir as práticas recomendadas. Não crie imagens, por exemplo, antes de remover todos os componentes de software, bibliotecas, arquivos de configuração, segredos, etc. desnecessários.
A adoção de uma abordagem conservadora e cautelosa permitirá que as equipes resolvam as vulnerabilidades no início do processo de desenvolvimento e mantenham um alto nível de qualidade de código, reduzindo o risco de incidentes de segurança. Escolha uma solução de digitalização de imagens do contêiner que possa se integrar a todos os tipos de registro. Plataformas como a Prisma Cloud oferecem aos administradores uma solução flexível e completa de digitalização de imagens.
sandbox de análise de imagem
O uso de uma sandbox de análise de imagem aprimorará a estratégia de segurança do contêiner durante o desenvolvimento e a implantação de aplicativos em contêineres, permitindo que o senhor extraia e execute com segurança imagens de contêineres que possivelmente contenham pacotes desatualizados e vulneráveis e malware incorporado de repositórios externos.
Os recursos da sandbox permitirão que o senhor faça uma varredura em busca de comportamentos anômalos suspeitos de contêineres, como criptomineração, varredura de portas, binários modificados e modificações de módulos do kernel em um ambiente controlado. O senhor pode expor os riscos e identificar dependências suspeitas enterradas na sua cadeia de suprimentos de software que, de outra forma, a análise estática não teria detectado.
- Capture o perfil detalhado do tempo de execução do contêiner
- Avaliar o risco de uma imagem
- Incorporar a análise dinâmica em seu fluxo de trabalho
Estabelecer políticas de validação e cronograma de auditoria
Para garantir a validação adequada da integridade da imagem e do artefato, as organizações devem estabelecer políticas claras que definam os processos de validação. Uma vez estabelecido, audite regularmente a conformidade com as políticas internas para identificar e abordar os pontos fracos, bem como as áreas de não conformidade. O monitoramento e a análise contínuos ajudarão a detectar anomalias e atividades não autorizadas.
Lista de verificação geral da segurança do contêiner
- Use registros e bibliotecas confiáveis
- Proteger o servidor de hospedagem e implementar políticas de acesso robustas
- Implementar restrições suficientes de autenticação e autorização
- Estabelecer um armazenamento seguro para os artefatos
- Realizar verificações de validação de integridade em toda a CI/CD
- Empregar assinatura criptográfica
- Aplicar validação de várias fontes
- Validar recursos de terceiros
- Integrar a verificação de segurança nos pipelines de CI/CD
- Estabelecer políticas de validação e cronogramas de auditoria regulares
Perguntas frequentes sobre o Container Registry
Um pipelines de CI/CD automatiza as etapas envolvidas na transferência do software do controle de versão para as mãos dos usuários finais. Ele engloba a integração contínua (CI) e a implantação contínua (CD), automatizando o processo de entrega de software e alterações na infraestrutura. Normalmente, o pipeline inclui estágios como compilação de código, teste de unidade, teste de integração e implantação. Essa automação garante que o software esteja sempre em um estado implantável, facilitando ciclos de lançamento de software rápidos e confiáveis. Os pipelines de CI/CD são essenciais para as práticas de DevOps, permitindo que as equipes forneçam alterações de código com mais frequência e confiabilidade.
- O SCM ajuda a manter a consistência e a rastreabilidade do código usado para criar imagens de contêineres, permitindo que os desenvolvedores identifiquem facilmente a versão específica do código usada para criar uma imagem do contêiner.
- O SCM permite que os desenvolvedores colaborem no código, garantindo que as imagens do contêiner criadas e armazenadas no registro atendam aos requisitos de qualidade da organização.
- As ferramentas de SCM aprimoram o fluxo de trabalho, integrando-se aos pipelines de CI/CD e automatizando o processo de criação, teste e envio de imagens de contêineres para o registro.
Um webhook é um método para aumentar ou alterar o comportamento de uma página da Web ou de um aplicativo da Web com retornos de chamada personalizados. Esses retornos de chamada podem ser mantidos, modificados e gerenciados por usuários e desenvolvedores terceirizados que não necessariamente têm acesso ao código-fonte da página da Web ou do aplicativo. Na computação em nuvem e no DevOps, os webhooks são usados para acionar fluxos de trabalho automatizados, como pipelines de CI/CD, quando ocorrem eventos específicos em um repositório ou ambiente de implantação. Os webhooks permitem notificações em tempo real e reações automáticas a eventos, aprimorando a automação e a integração entre serviços e ferramentas em nuvem.
O Notary é uma ferramenta de código aberto que fornece uma estrutura para publicar e verificar as assinaturas de conteúdo, como imagens de contêineres. Ele implementa as especificações do The Update Framework (TUF) para o fornecimento seguro de conteúdo e atualizações. O Notary garante que o conteúdo que um usuário recebe é exatamente o que o editor pretendia, protegendo-o contra modificações não autorizadas.
O Notary é comumente usado em conjunto com o Docker Content Trust para assinar e verificar imagens do Docker.