No dia 16 de agosto de 2022, a Microsoft anunciou o resultado de sua parceria com a Canonical. Os frutos vão desde o .NET 6 instalável via APT, mas passam também pelas Chiseled Ubuntu Images. Imagens docker super enxutas.
Claro que o anúncio não poderia deixar de falar sobre as novas imagens padrão e a chegada do .NET 6 ao Ubuntu 22.04.
Ainda assim, a estrela do lançamento são as Chiseled Ubuntu Images.
O que são essas Chiseled Ubuntu Images?
Chisel, formão em inglês, nomeia esse tipo de imagem, em tradução livre seria algo como “Imagens Esculpidas”. Elas nascem a partir do Ubuntu, criando o mais próximo que podemos ter de distroless para aplicações e serviços .NET até o momento.
Essas novas imagens de contêiner melhoram significativamente a segurança:
- Imagens ultrapequenas (tamanho e superfície de ataque reduzidos)
- Sem gerenciador de pacotes (evita toda uma classe de ataques)
- Sem shell (evita toda uma classe de ataques)
- Não root (evita toda uma classe de ataques)
Essas imagens são o mais próximo que temos de Distroless images para .NET. Elas são pequenas, não possuem ferramentas auxiliares, sequer terminal elas possuem.
O que é uma imagem distroless?
Todas as imagens docker nascem a partir da imagem scratch, uma imagem vazia. A partir dela, distribuidoras de distribuições Linux criam suas imagens com suas distros.
Sob essas imagens de distros, produtoras de runtimes e sdk’s produzem imagens com seus produtos. .NET, Node, Python, PHP são alguns desses.
Sob as imagens de runtime e sdk, nós desenvolvedores, empacotamos nossas aplicações.
As imagens que usamos, em geral, como runtime são imagens que possuem terminal e uma série de binários desnecessários na maior parte do tempo. São binários essenciais às distribuições, mas desnecessários para nossas aplicações.
O fato desses binários estarem presentes na imagem se traduz em:
- Consumo desnecessário de recursos
- Superfície de ataque maior
- Um risco caso o código contenha falhas que deem o acesso direto ao container ao atacante.
Se você programar algo muito dinâmico e com uma falha muito grande, ao ponto de permitir a execução remota de código malicioso no seu container, esse código poderia acessar qualquer um dos binários para tentar vazar os limites do container.
Se os binários curl, cat, cd, ls, estão disponíveis na imagem, o atacante tem vantagens e facilidades para prosseguir no processo de obtenção de acesso indevido.
Agora vamos supor que você trabalha em alguma empresa em que você tem um diretor ou uma gerência que tem a seguinte política:
Se está funcionando, não mexe!
Ou seja, pela falta de braço, e pelo grande roadmap, não comum, e as vezes nem é “permitido” gastar tempo para revisitar projetos que não sofrem alteração. Afinal, se está funcionando não há porque mexer. né?!
Pronto, basta uma biblioteca com um conhecido problema de segurança, como aconteceu com Log4J para você estar vulnerável, pois seus projetos potencialmente estão rodando há meses ou anos sem atualização alguma.
Claro que você já errou por desconsiderar a necessidade de produzir novas imagens para projetos inertes (que não sofreram mudança), nem que seja para assegurar a atualização das imagens-base, que traz consigo updates de segurança.
Assim quando menor a imagem (em quantidade de pacotes e binários) menores são as necessidades de atualização. Simplesmente porque tem menos coisas para mudar. Ao mesmo passo, as imagens menores trafegam mais rápido pela rede na hora de distribuir entre as máquinas que precisam rodar instâncias daquela imagem, enquanto também economizam disco e memória.
Embora o resultado com as Chiseled Ubuntu Images não sejam de fato Distroless, é o mais próximos que vamos conseguir do lado de cá! Vale a pena dar uma olhada.
É importante ficar atento que não há terminal dentro da imagem portanto o troubleshooting também é mais complexo.
O anúncio oficial saiu no post .NET 6 is now in Ubuntu 22.04 onde você encontra todos os detalhes.
0 comentários