Visão Geral
A implementação de testes de vulnerabilidade tornou-se comum em registros de imagens de contêineres. Para compreender a importância das contramedidas de vulnerabilidade quando as empresas utilizam contentores como o Kubernetes, organizámos a inspeção de vulnerabilidades e normas internacionais relacionadas.
Post relacionado
Aqui no blog tenho um outro post que ensina como fazer um teste de vulnerabilidade do tipo SAST, utilizando o Semgrep para realizar scan em imagem Docker:
Integre Semgrep SAST no GitLab CI para automatizar a segurança do seu código e encontrar vulnerabilidades cedo
Primeiros passos
Os módulos contidos na imagem do contêiner estão constantemente melhorando e melhorando seus esforços para reduzir a vulnerabilidade. Imagens de contêiner uma vez construídas também são encontradas toda vez, um módulo com vulnerabilidades é descoberto. A medida contra a vulnerabilidade é atualizar para o módulo de contramedida e reconstruir a imagem do contêiner.
Selecionando uma imagem confiável
O código contido no contêiner é importante para a segurança. A maioria das imagens no contêiner são pacotes de código aberto, como Linux OS, servidores web, bancos de dados SQL, linguagens de programação e cada um desses projetos OSS também distribui na imagem do contêiner, então você precisa construir a imagem sozinho. No entanto, como acontece com o download de código de fontes externas, você deve verificar a origem da imagem do contêiner, o autor e se ela contém código malicioso dentro.
Basicamente você deve seguir os seguintes princípios:
- As imagens básicas, os pacotes de SO, os pacotes de linguagem de programa e o código do aplicativo trazem ameaças de segurança ao ambiente em execução do contêiner?
- As bibliotecas e os módulos usados pelo aplicativo estão atualizados e não são vulneráveis?
- Imagens básicas como SO e middleware estão usando as últimas versões lançadas e não são vulneráveis?
- Você sabe com que frequência a imagem do contêiner é atualizada ou há uma maneira de saber o que foi atualizado?
Exemplos de ataques previamente descobertos
Entender quais vulnerabilidades estão em um contêiner é importante para entender e abordar sua importância. Portanto, aqui estou listando os problemas de vulnerabilidade descobertos anteriormente.
Ataque afogado
DROWN mostra que apenas suportar SSLv2 é uma ameaça para servidores e clientes modernos. Permite que um atacante descriptografe conexões TLS modernas entre clientes e servidores atualizados enviando sondas para um servidor que suporta SSLv2 e usa o mesma chave privada.
Explorar uma vulnerabilidade chamada “DROWN Attack” permite que os invasores descriptografem o TLS e leiam e roubem comunicações confidenciais, como senhas, números de cartão de crédito, segredos comerciais e dados financeiros, publicados em março de 2016. Em uma medição, 33% de todos os servidores HTTPS estavam vulneráveis a ataques. Após isso, procedeu-se à aplicação do programa de correção e, a partir de 2019 Laboratórios SSL Estima-se que seja vulnerável a 1,2% dos servidores HTTPS.
Fontes:
- Explicação do ataque de afogamento (Drown Attack)
- CVE-ID CVE-2016-0800
Ataque de Vaca Suja
As vulnerabilidades do “Dirty COW” estão presentes no kernel do Linux desde setembro de 2007 e foram descobertas e exploradas em outubro de 2016. Essa vulnerabilidade afeta todos os sistemas operacionais baseados em Linux, incluindo o Android, e é muito séria. Os atacantes podem explorar essa vulnerabilidade para obter autoridade de raiz. Esta vulnerabilidade existe no código copy-on-light no kernel do Linux. Copy-on-light ( Copy-On-Write ) é uma das estratégias de otimização, mesmo que lhe seja pedido para duplicar dados grandes, pode lê-los (entre Read ), na verdade não faça nada e duplique). Em seguida, reescreva os dados (copie e reescreva quando Write) ocorrer. Se você não reescrevê-lo mesmo se você duplicá-lo, o custo de proteger a área de memória e processar a cópia dos dados na memória será desperdiçado. Portanto, o processamento estratégico descrito acima pode melhorar a velocidade de processamento e reduzir o tempo de CPU. Para mais informações, consulte o link abaixo.
Fontes:
- Vaca Suja (Dirty Cow)
- CVE-ID CVE-2016-5195
Vulnerabilidade da glibc
Glibc é uma implementação da biblioteca padrão libc do Projeto GNU. libc é o nome de biblioteca padrão para a linguagem C, e é uma biblioteca que coleta partes básicas, como chamadas de sistema. A maioria dos programas escritos em C usa libc. E o glibc é baseado em libc com funcionalidade adicional significativa, e no Linux, que herdou as características do UNIX, o glibc forma a base do sistema Linux. A Glibc está quase totalmente em conformidade com os padrões ISO C, POSIX e Unix98 e possui uma API de internacionalização em vigor. Um grande número de vulnerabilidades foram descobertas no glibc, que tem um histórico tão grande do passado, e você pode consultar a lista de vulnerabilidades, CVE-ID, CWE-ID, Score, etc. no link a seguir. Deve-se notar que muitos foram descobertos em 2019.
Fonte:
Base de dados de vulnerabilidades
Quando uma vulnerabilidade é descoberta, ela é registrada no banco de dados de vulnerabilidades de cada organização que desenvolve e distribui produtos SE. MITRA (Miter) é o nome de uma organização de pesquisa sem fins lucrativos apoiada pelo governo dos EUA, incluindo CERT/CC, HP, IBM, OSVDB, Red Hat e Symantec: “Mais de 80 sites de informações sobre grandes vulnerabilidades”. Em cooperação com o acima exposto, estamos trabalhando para coletar informações sobre vulnerabilidades e numerar CVEs sem duplicação.
Instituto Nacional de Padrões e Tecnologia NIST Base de dados de informações de vulnerabilidade gerida por NVD Há. O NVD fornece ao NVD informações detalhadas sobre as informações de vulnerabilidade lançadas pelo CVE. E é caracterizada pelo fato de que o CVSS especificou a pontuação para o perigo.
A CVE possui um sistema de certificação de compatibilidade CVE, e ferramentas de inspeção de vulnerabilidades e serviços de informações de prevenção de vulnerabilidades, etc., atendem à exibição exata dos números de identificação CVE, atendem a outros requisitos funcionais e solicitam que a MITRE receba a certificação de compatibilidade CVE. .. Uma vez certificado, o logotipo CVE pode ser usado e será listado na lista de sites certificados.
Iniciativas e fontes nacionais
- CERT.br – publicação de estatísticas sobre serviços vulneráveis e notificações de CVEs aplicáveis a ativos no Brasil.
Excelente para monitorar exposição nacional.
- Boletins do CAIS/RNP – alertas periódicos com CVEs, orientações de atualização e correção.
Varredura de vulnerabilidade
Os scanners de vulnerabilidade permitem que pacotes contendo vulnerabilidades conhecidas sejam incluídos em uma imagem de contêiner ou inspecionados. No entanto, o excesso de crença é uma coisa proibida porque esse tipo de ferramenta não encontra todas as vulnerabilidades. Por outro lado, se os resultados da inspeção relatarem o problema, não é necessariamente um problema que deve ser resolvido imediatamente.
Por exemplo, as seguintes razões podem ser consideradas:
- Casos que não utilizam os recursos de vulnerabilidade relatados
- Quando em container, ele move apenas o processo mínimo necessário, portanto, o caso é uma vulnerabilidade sem problemas práticos.
- Distribuidor Linux (Red Hat etc.) backporting para fornecer um programa de correção
Como pode haver falsos positivos e não detecção, é desejável criar uma imagem compacta, como não acreditar demais no scanner de vulnerabilidade e reduzir os pacotes dependentes. Isso reduz a probabilidade de incluir vulnerabilidades e reduz o tempo gasto em falsos positivos.
Scanners de vulnerabilidade
Existem vários scanners de código aberto e serviços comerciais, então vou resumir o que parece representativo abaixo …
Banco Docker para Segurança
O Docker Bench for Security é um script que verifica as melhores práticas gerais apropriadas para implantar um contêiner Docker em produção, todas as inspeções são automatizadas CIS Docker Benchmark v1.2.0. Isso é fornecido pela imagem do contêiner, para que qualquer pessoa possa avaliar facilmente o contêiner docker.
Essa ferramenta é executada no host do Docker para inspecionar a configuração do host do Docker e os contêineres em serviço e é um exemplo do que você fez no nó mestre do Kubernetes. Scripts Shell são inspecionados para cada disciplina para mostrar resultados.
Para executar basta seguir o comando abaixo:
|
|
O resultado abaixo esperado:
|
|
O relatório de Benchmark no meu ambiente destacou que no meu caso atualmente existe nove imagens Docker e dezenove contêineres (dos quais dezessete estão ativos). Isso não é necessariamente um problema, mas sugere revisar se há sobra de artefatos ou instâncias ociosas, pois isso pode acarretar confusão operacional e possíveis brechas.
Com isso, no meu teste, a pontuação final foi 9 (em um universo de 105 testes avaliáveis). Como referência, quanto mais próximo do total de pontos possível, mais alinhado seu ambiente está com as recomendações do CIS Benchmarks.
Em suma, seus principais focos de atenção devem ser:
- Fortalecer o ambiente do host e segmentar as partições do Docker.
- Atualizar o Docker para uma versão suportada e com patches de segurança.
- Remover privilégios de kernel desnecessários dos contêineres, retirando flags como NET_ADMIN e –privileged.
- Fazer uma limpeza criteriosa das imagens e instâncias ativas, eliminando o que estiver desnecessário.
Essas ações não só elevam sua pontuação, mas aumentam significativamente a robustez do ambiente.
Anchore (Âncora)
O Anchore é uma ferramenta para inspecionar a segurança do contêiner usando dados CVE e políticas definidas pelo usuário.
Anchor engine é um projeto de código aberto. Os motores âncora fornecem serviços centralizados, como auditoria, análise e certificação de imagens de contêineres. O mecanismo de ancoragem é fornecido como uma imagem de contêiner do Docker e pode ser executado sozinho ou em um ambiente de orquestração, como o Kubernetes ou o Docker Swarm. O usuário pode então usar a API RESTful ou a âncora CLI para operar o mecanismo de âncora.
A implantação do mecanismo de ancoragem em seu ambiente fará o download da imagem do registro de contêiner e as políticas personalizáveis do usuário analisarão, avaliarão e verificarão as práticas de segurança, conformidade e melhores práticas.
Exemplo de inspeção de vulnerabilidade por motor âncora
Nesse exemplo irei utilizar o Docker-Compose pelo fato de ser mais fácil do que experimentar com o Kubernetes, então pode fazer isso como um método simplificado para testes. No meu ambiente, mover o motor de ancoragem por cerca de uma hora deixou o motor do Docker sem resposta, resultando em uma condição instável que exigia uma reinicialização do Docker. Eu simplesmente não acho que a alocação de memória seja suficiente, mas parece desejável usá-la com o CI/CD no cluster do Kubernetes para uso total.
Primeiro de tudo, crie um diretório para copiar o Docker-Compose YAML, execute o contêiner do mecanismo âncora e copie o arquivo Docker-Compose YAML localmente de dentro do contêiner. Em seguida, remova o recipiente usado.
|
|
Inicie o sistema do motor de ancoragem com o comando docker-compose
|
|
Verifique os containers em execução:
|
|
Imediatamente após iniciar o mecanismo de ancoragem, não tenho dados de vulnerabilidade, portanto, o download será iniciado. Desta vez, para uma tentativa rápida, escolha os meios simplificados de executar o comando anchor-cli
a partir do contêiner lançado no docker-compose.
|
|
No meu ambiente, completei o download de dados de vulnerabilidade em cerca de uma hora. Este mecanismo de ancoragem é uma versão gratuita, portanto, o suporte não inclui nada que exija um contrato de assinatura, como o RHEL.
Vou listar um relatório sobre a inspeção de vulnerabilidade das imagens de contêiner do NGINX
que construí há alguns meses. Um URL com um ID de vulnerabilidade e detalhes são exibidos. Esta é certamente uma ferramenta útil. Se você pode obter um relatório de vulnerabilidade como um comando, anchore-cli
image wait ao fazer isso, depois de registrar a imagem, você pode esperar até que a inspeção de vulnerabilidade seja concluída.
|
|
Material de referência
- Análise de Contêineres de Ancoragem, https://docs.anchore.com/current/
- Âncora/motor de ancoragem GitHub https://github.com/anchore/anchore-engine
Considerações finais
Todos esses processos que fizemos de forma manual, para testes podem ser incorporados em uma verificação de vulnerabilidade no pipeline do CI/CD, os problemas podem ser descobertos cedo e resolvidos. Após a conclusão da etapa de compilação, execute uma verificação e um relatório de vulnerabilidade. Se uma vulnerabilidade grave for descoberta, implemente medidas de vulnerabilidade sem prosseguir para a próxima etapa de teste, como um “breaker” da pipeline, exibindo o “exit code 1” ou algo do tipo. Alguns dos scanners acima também podem realizar um teste de vulnerabilidade a partir da CLI e encerrar abruptamente a etapa com o código de terminação quando uma vulnerabilidade significativa é descoberta.