Como inspecionar o conteúdo de uma imagem Docker sem iniciar um contêiner


0

As imagens do Docker podem agrupar binários e bibliotecas arbitrárias em um único blob de dados. Inspecionar o que está realmente dentro de uma imagem ajuda a avaliar sua adequação e identificar quaisquer riscos de segurança.

A maneira mais fácil de explorar o conteúdo de uma imagem envolve iniciar um contêiner, obter uma sessão de shell e, em seguida, usar comandos de terminal regulares como ls e cd para visualizar sua estrutura de diretório de dentro. No entanto, isso não é ideal em ambientes de segurança crítica – criar um contêiner com uma imagem desconhecida pode expô-lo a um script de ponto de entrada malicioso.

Aqui estão as técnicas que você pode usar para inspecionar os arquivos de uma imagem sem iniciar um contêiner.

Criação de um contêiner sem iniciá-lo

docker create é uma contraparte menos conhecida de docker run. Ele cria um novo contêiner sobre uma determinada imagem sem iniciá-lo. Você poderia lançá-lo mais tarde com o docker start comando.

Criar um novo contêiner não é perigoso, pois ele permanecerá inerte até ser executado. Você pode comparar isso a definir as configurações de uma VM que você não usa. Mesmo que ele seja configurado para inicializar a partir de um ISO de sistema operacional corrompido, você não causará nenhum dano ao ambiente.

docker create --name suspect-container suspect-image:latest
Propaganda

O comando acima cria um novo contêiner chamado suspect-container que será baseado no suspect-image:latest imagem.

Exportando o sistema de arquivos do contêiner

Agora que você tem um contêiner válido, mas interrompido, pode exportar seu sistema de arquivos usando o docker export comando. Como o contêiner nunca foi iniciado, você pode ter certeza de que a exportação representa com precisão o sistema de arquivos definido pelas camadas de sua imagem.

docker export suspect-container > suspect-container.tar

Você acabará com um arquivo tar em seu diretório de trabalho que contém tudo dentro de sua imagem. Abra ou extraia este arquivo usando seu software favorito para navegar pelos diretórios da imagem e listar e visualizar arquivos.

Se você não precisa salvar ou abrir o arquivo, em vez de preferir obter a lista de arquivos em seu terminal, modifique o tar comando:

docker export suspect-container | tar t > suspect-container-files.txt

tar t lista o conteúdo do arquivo de entrada. Você acabará com uma lista de tudo em sua imagem dentro suspect-container-files.txt.

Usando “docker image save”

Uma variação desta técnica está usando docker image save. Este comando salva diretamente os dados de uma imagem em um arquivo tar.

docker image save suspect-image:latest > suspect-image.tar
Propaganda

Este método produz um arquivo focado na imagem, não em containers criados a partir dela. O alcatrão incluirá um manifest.json arquivo, que descreve as camadas da imagem e um conjunto de diretórios contendo o conteúdo de todas as camadas individuais.

Isso é útil quando você está avaliando o papel de cada camada na construção da imagem. No entanto, criar e exportar um contêiner interrompido é uma maneira mais acessível de navegar pelo sistema de arquivos final da imagem.

Camadas de listagem com “histórico de imagem docker”

Outra maneira de inspecionar o conteúdo de uma imagem é visualizar sua lista de camadas com o docker image history comando.

docker image history suspect-image:latest

Isso expõe as instruções do Dockerfile que compunham as camadas da imagem. Ele não permitirá que você veja arquivos e diretórios individuais no sistema de arquivos da imagem, mas pode ser mais eficaz para destacar o comportamento suspeito.

Cada linha na saída do comando representa uma nova camada na imagem. A coluna “CREATED BY” mostra a instrução Dockerfile que criou a camada.

Verificar a lista de camadas ajuda a identificar rapidamente ações suspeitas que podem indicar que você está usando uma imagem maliciosa. Procure binários desconhecidos em RUN instruções, mudanças inesperadas de variáveis ​​de ambiente e suspeitas CMD e ENTRYPOINT afirmações.

Propaganda

As duas últimas camadas são indiscutivelmente as mais importantes para avaliar ao inspecionar o histórico de uma imagem. Eles dizem exatamente o que será lançado quando você docker run ou docker start um container. Se qualquer instrução parecer suspeita ou desconhecida, considere o uso das técnicas acima para inspecionar completamente os binários ou scripts referenciados.

Acessar o sistema de arquivos de uma imagem fornece uma visão muito granular de seu conteúdo, onde o conteúdo malicioso pode facilmente passar despercebido, mesmo após a inspeção manual. A lista de camadas exposta por docker image history não pode ajudá-lo a encontrar itens disfarçados do sistema de arquivos, mas é mais eficaz em revelar operações claramente maliciosas, como downloads furtivos de spyware ou substituições de variáveis ​​de ambiente.

Ferramentas de Terceiros

Ferramentas de código aberto de terceiros também estão disponíveis para ajudá-lo a listar o conteúdo das imagens. Normalmente, eles oferecem recursos de filtragem para que você possa enumerar rapidamente os pacotes do sistema operacional instalado, as dependências da linguagem de programação e os arquivos comuns.

A inspeção de imagem é integrada ao mecanismo de varredura de contêiner Anchore. Você pode usá-lo executando anchore-cli image content my-image:latest depois de instalar o Anchore. Isso fornece uma lista completa do conteúdo do sistema de arquivos da imagem de destino.

Outra opção é o Dive, ferramenta expressamente construída para visualizar o conteúdo das imagens. Ele usa uma abordagem baseada em camadas e destaca as mudanças no sistema de arquivos feitas com cada nova camada. Você navega pelo sistema de arquivos usando uma visualização de terminal interativa baseada em árvore.

Conclusão

As imagens do Docker geralmente são opacas no ponto de consumo. Registros populares não fornecem uma lista de arquivos em suas APIs ou interfaces de usuário. Essa funcionalidade também não está integrada ao Docker CLI. Embora muitos desenvolvedores usem as imagens no estado em que se encontram, uma imagem não auditada pode ser intolerável em ambientes de alto risco.

Propaganda

Você pode inspecionar uma imagem suspeita exportando-a para um arquivo e navegando em seu conteúdo. Isso mantém a imagem inerte, evitando que conteúdo malicioso seja executado, enquanto fornece uma visão completa do sistema de arquivos que seria criado em um contêiner.

Você pode aumentar ainda mais sua postura de segurança combinando a exploração manual de conteúdo com varreduras automatizadas de imagens. Isso acelera o processo de detecção de vulnerabilidades conhecidas, mas pode não ser eficaz na localização de novos arquivos maliciosos depositados em locais ocultos. O uso de várias técnicas permite que você espalhe sua cobertura e capture o maior conjunto possível de arquivos suspeitos.


Like it? Share with your friends!

0

0 Comments

Your email address will not be published. Required fields are marked *