Por Brandon Lum
Publicado em 23 de abril de 2020
Quando se trata de segurança de imagem de contêiner, você deve ter ouvido falar sobre assinaturas de imagens, como Docker Content Trust e Red Hat Image Signing. Essas tecnologias garantem a integridade e procedência da imagem do contêiner, verificando se ela foi criada por alguém em quem confiamos e se não foi adulterada.
Esta é uma grande melhoria na segurança da imagem do contêiner, mas lacunas de segurança permanecem na proteção da confidencialidade das imagens e na garantia de que hosts não confiáveis não as executem. Por exemplo, se um registro for comprometido, não queremos que nossos algoritmos ultrassecretos sejam roubados. Além disso, queremos ter segurança criptográfica adicional de forma que, se, de algum modo, uma imagem for roubada, não possa ser executada em máquinas não certificadas (tal como de uma perspectiva de conformidade).
O Container Image Security é um espaço problemático que a IBM Research vem enfrentando com a colaboração de especialistas em contêineres da containerd, da Red Hat e da comunidade Open Container Initiative (OCI). Por meio dessa colaboração, uma definição de imagem criptografada de contêiner em torno da OCI foi desenvolvida, permitindo a criptografia de camadas dessa imagem. Hoje, as imagens criptografadas de contêiner são suportadas em vários projetos em todo o ecossistema, incluindo containerd, crio, skopeo e o projeto Docker Distribution.
Pré-requisitos
Para obter o máximo deste artigo, você deve ter conhecimento básico em tecnologia de contêiner e conhecimento básico em criptografia e segurança.
Tempo estimado
Dedique cerca de 10 minutos para ler este artigo.
O que são imagens de contêiner criptografadas?
Imagens criptografadas de contêiner são imagens OCI com camadas criptografadas. Para o propósito deste artigo, pense em camadas como partes de uma imagem de contêiner. A maneira de identificar se uma imagem inclui conteúdo criptografado é simples. Se uma camada da imagem possuir um tipo de mídia com um sufixo +encrypted no final, a camada está criptografada! Por exemplo: application/vnd.oci.image.layer.v1.tar+gzip+encrypted.
Esse sufixo indica às ferramentas que a parte da imagem está criptografada, e o usuário fornecerá parâmetros (por meio de argumentos de linha de comando ou arquivos de configuração) para poder descriptografar a parte criptografada da imagem. Os tipos de chaves com suporte devem ser familiares aos desenvolvedores atualmente (chaves RSA/GPG). Os protocolos subjacentes utilizados para gerenciar a autorização de descriptografia são PKCS#7, JSON Web Encryption e OpenPGP. Esses protocolos são projetados para funcionar com a infraestrutura de chave pública (PKI) existente de uma empresa.
Usos avançados de imagens criptografadas de contêiner
Por meio do uso de imagens criptografadas, podemos desprivilegiar o registro (tornando-o aberto a um público mais amplo) e estamos menos preocupados no caso de um comprometimento do registro. No entanto, a proteção do conteúdo da imagem criptografada quando ela sai do ambiente de construção de contêiner para ser implantada em registros e, posteriormente, ser usada por um sistema de tempo de execução de contêiner em produção é apenas a ponta do iceberg em termos de como a criptografia de contêiner pode ser utilizada.
Conformidade, controle de exportação, proteção de conteúdo digital
Em ambientes de alta confiança, a criptografia de imagens pode ser utilizada para fornecer garantias de onde uma imagem pode ser executada. Em vez de criptografar uma imagem para um desenvolvedor, "Alice", a criptografia pode ser executada para um "PROD Cluster" ou "PROD Clusters em data centers da UE". Desse modo, afirma-se que certas imagens são executadas apenas em locais lógicos ou físicos particulares. Isso pode ser utilizado para impor a política de uso, bem como a proteção de conteúdo digital e o controle de exportação por meio do gerenciamento de chaves apropriado, bootstrap de confiança e atestado de confiança.
Esses conceitos são descritos com mais detalhes na postagem do blog: Como as imagens criptografadas trazem conformidade no Kubernetes.
Desprivilegiando a cloud: TEEs e imagens criptografadas
Outro uso de imagens criptografadas é na execução de cargas confidenciais em Trusted Execution Environments (TEEs). Alguns exemplos desses ambientes são TEEs baseados em processos e virtualização, como Intel SGX, AMD SEV, Intel MKTME e IBM PEF. Utilizando os serviços de entrega e atestado de chaves de um TEE, a carga da imagem de um contêiner é criptografada e a confidencialidade da carga é mantida por meio de memória criptografada durante a execução do contêiner. Isso protege a confidencialidade da carga de trabalho do contêiner, mesmo do provedor de cloud.
Esses conceitos são descritos com mais detalhes na postagem do blog: O que você define é o que você implanta (Imagens de contêiner criptografadas + TEEs).
Criptografia enquanto se mantém os benefícios dos contêineres
Uma das principais prioridades ao projetar a especificação e tecnologia para criptografia de imagem de contêiner é garantir que haja pouco efeito nas vantagens dos contêineres. Por exemplo, uma associação comum com a criptografia é que ela está em competição direta com a desduplicação. No entanto, em nosso design, ainda permitimos a maior parte da desduplicação ao:
Executarmos criptografia no nível da camada, permitindo, assim, o compartilhamento de camadas não sensíveis;
Desassociarmos a autorização de chave com o conteúdo da camada. Por exemplo, a autorização de chave para as partes é feita por meio dos metadados de manifesto da imagem, em vez de parte do blob de dados. Isso permite o compartilhamento de blobs criptografados entre vários destinatários;
Outra pedra fundamental da tecnologia de contêiner é o pipeline DevOps, incluindo a varredura de imagens neste pipeline. Existem várias maneiras sugeridas de coexistir a exposição com a criptografia:
Execute a verificação antes de enviar para um registro público;
Criptografe somente as camadas superiores (SO, middleware e pacotes ainda podem ser verificados);
Com um scanner confiável (por exemplo, seu próprio serviço de digitalização ou provedor de digitalização confiável), pode-se autorizar a chave privada do scanner para descriptografar a imagem.
Estes são alguns exemplos de como a criptografia de imagens de contêiner foi projetada para funcionar com ecossistemas de contêineres existentes.
Resumo
Se você deseja saber mais sobre imagens criptografadas de contêiner e como utilizá-las no contexto do Kubernetes atualmente (em 1.17), visite nossa sessão no Kubecon EU: Onde suas imagens estão sendo executadas? Pare de se preocupar e comece a criptografar!
Enquanto isso, para dar um mergulho mais profundo nas imagens de contêiner criptografadas e testar a tecnologia por conta própria, vários recursos estão disponíveis:
Minhas postagens no blog:
Como as imagens criptografadas trazem conformidade no Kubernetes (via CRI-O)
O que você define é o que você implanta (imagens de contêiner criptografadas + TEEs)
Conversas anteriores:
DockerCon 2019: Habilitando cargas de trabalho de contêiner de alta segurança/confidenciais com imagens criptografadas – Brandon Lum, Justin Cormack, https://youtu.be/9LyPUy4XYbs
Kubecon Shanghai 2019: Protegendo código confidencial com imagens de contêiner criptografadas no Kubernetes – Brandon Lum, Harshal Patil, https://sched.co/NrpO
Kubecon Amsterdam 2020: Onde suas imagens estão sendo exibidas? Pare de se preocupar e comece a criptografar! - Brandon Lum, Harshal Patil, https://sched.co/Zepc
...
Quer ler mais conteúdo especializado de programação? Conheça o IBM Blue Profile e tenha acesso a matérias exclusivas, novas jornadas de conhecimento e testes personalizados. Confira agora mesmo, consiga as badges e dê um upgrade na sua carreira!
…..
Quer dar o próximo grande passo na sua jornada profissional? Participe do Cloud Training, um curso online e gratuito que vai te preparar para o exame da certificação IBM Cloud Foundations. Inscreva-se já!