Use imagens UBI para minimizar vulnerabilidades em contêineres
Rags Srinivas
27 de março de 2020
0 minutos de leituraNa Snyk, trabalhamos continuamente para aprimorar nossas soluções de segurança para contêineres e ambientes cloud-native. Como parte desse esforço, Snyk Container permite que os desenvolvedores assumam total responsabilidade pela segurança de suas imagens de contêiner.
Uma fonte comum de vulnerabilidades em contêineres é a imagem base usada como alicerce para criar imagens personalizadas. Em vez de apenas reagir a novas vulnerabilidades, é recomendável adotar uma abordagem proativa e começar com um conjunto de imagens base bem selecionadas e atualizadas continuamente.
Neste post, vamos conhecer as Red Hat Universal Base Images, que ajudam a atingir esse objetivo.
O que é a Universal Base Image (UBI)?
Anunciadas no Red Hat Summit em 2019, as Universal Base Images da Red Hat são criadas em uma plataforma de nível empresarial, o Red Hat Enterprise Linux (RHEL). São imagens de sistema operacional base para contêineres compatíveis com OCI, com diversas linguagens de runtime e pacotes que podem ser redistribuídos gratuitamente. Por exemplo, as imagens UBI 8 são atualizadas sempre que as imagens base do RHEL 8 são atualizadas e quando CVEs críticas são corrigidas.
Do ponto de vista técnico, elas são praticamente idênticas às imagens do Red Hat Enterprise Linux, o que significa que oferecem segurança, desempenho e ciclos de vida excelentes. Elas são disponibilizadas sob um Contrato de Licença de Usuário Final diferente. É possível criar um aplicativo em contêiner usando UBI, enviá-lo para qualquer servidor de registro, compartilhá-lo facilmente com outras pessoas e, por ser redistribuível gratuitamente, até mesmo implantá-lo em plataformas que não são da Red Hat.
Confira todos os detalhes na documentação da Red Hat sobre criação, execução e gerenciamento de contêineres. As imagens de contêiner certificadas também estão disponíveis no catálogo de contêineres da Red Hat. As imagens UBI abrangem diversas linguagens de programação populares, incluindo dotnet, golang, nodejs, Python, PHP e Ruby.
Você encontra mais informações sobre as imagens UBI nas perguntas frequentes da Red Hat. Como mostramos a seguir, é fácil incorporar imagens UBI ao seu fluxo de trabalho.
Como criar imagens de contêiner usando UBI
Vamos começar com um exemplo de Dockerfile para Python. É possível usar imagens UBI para diferentes runtimes de linguagem seguindo uma abordagem semelhante.
Veja um Dockerfile gerado automaticamente para um exemplo simples de “Hello World!” em Python que usa o Flask.
Em vez de usar python como imagem base, vamos usar a imagem UBI do registro da Red Hat e modificar o Dockerfile conforme mostrado abaixo. (Talvez você precise das credenciais corretas para autenticar e usar as imagens.) Observe que a única alteração está na primeira linha, onde usamos a imagem UBI.
Gerar um aplicativo em contêiner com uma imagem UBI como base é igual a fazer isso com uma imagem que não seja UBI, como mostrado abaixo:
Ao executar o Snyk no aplicativo em contêiner que usa uma imagem UBI como base, você obtém uma lista de vulnerabilidades, conforme mostrado abaixo.
Executar a imagem de contêiner baseada em UBI também é igual a executar o aplicativo baseado em uma imagem que não seja UBI, como mostrado abaixo.
Isso é possível graças ao que a documentação descreve: “As novas Red Hat Universal Base Images permitem criar seu contêiner UMA VEZ e redistribuí-lo gratuitamente em várias plataformas de implantação.”
Ou, se preferir usar o conjunto de ferramentas de contêiner da Red Hat para testar ou executar o aplicativo, você pode usar o seguinte comando:
Agora que vimos um exemplo com Python, em vez de abordar individualmente cada exemplo de runtime de linguagem (que talvez exija algumas pequenas alterações para funcionar com o runtime correspondente), vamos analisar todos em conjunto.
Imagens UBI para várias linguagens
Como mencionamos, há imagens UBI para vários runtimes de linguagem. A execução do Snyk nas diferentes imagens UBI gera resultados resumidos na tabela a seguir.
Imagem UBI | Dependências | Vulnerabilidades |
|---|---|---|
registry.redhat.io/ubi8/nodejs-10 | 373 | 9 |
registry.redhat.io/ubi8/python-36 | 417 | 9 |
registry.redhat.io/ubi8/ruby-26 | 481 | 9 |
registry.redhat.io/ubi8/php-73 | 403 | 9 |
registry.redhat.io/ubi8/go-toolset | 371 | 13 |
registry.redhat.io/ubi8/dotnet-21 | 248 | 10 |
A variedade de linguagens disponíveis nas imagens UBI e o baixo número de vulnerabilidades são resultado do trabalho cuidadoso da Red Hat para selecionar e atualizar esses componentes, incluindo o sistema operacional base, os repositórios yum usados para instalar pacotes e ferramentas, além das linguagens e dos frameworks. Este artigo da Red Hat explica o processo em detalhes, que inclui a manutenção de uma lista de bugs das imagens UBI e sua atualização periódica, em um processo semelhante ao usado no próprio sistema operacional base.
Resumo e próximos passos
Mostramos como é fácil usar imagens UBI como base para aplicativos em contêiner que utilizam diversos runtimes de linguagem. As alterações, incluindo a obtenção da imagem UBI da Red Hat, são fáceis de implementar e incorporar ao pipeline de CI/CD ou desenvolvimento, sem deixar de seguir os fluxos de trabalho habituais.
Do ponto de vista da segurança, as imagens UBI são uma boa opção para colocar seus aplicativos em contêineres. Como vimos, elas passam por um processo rigoroso de manutenção, alinhado ao processo já consolidado do sistema operacional RHEL. Como há imagens UBI para vários runtimes de linguagem, usá-las como base para suas imagens de contêiner ajuda a minimizar as vulnerabilidades no aplicativo.
A Snyk ajuda a proteger o desenvolvimento de aplicativos durante todo o ciclo de vida do desenvolvimento de software, com integrações ao registro de imagens, ao repositório do Dockerfile, aos pipelines de CI/CD e aos clusters do Kubernetes, incluindo ambientes OpenShift 4. O Snyk Container oferece suporte a imagens UBI e RHEL, além de outras distribuições Linux populares.
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.
