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

As imagens do Docker podem agrupar binários e bibliotecas arbitrárias em um único blob de dados. Inspecionar o que realmente está dentro de uma imagem ajuda a avaliar sua adequação e a identificar quaisquer riscos à segurança.
A maneira mais fácil de explorar o conteúdo de uma imagem envolve iniciar um contêiner, obter uma sessão shell e, em seguida, usar comandos de terminal regulares como ls e cd para visualizar sua estrutura de diretório de dentro. Isso não é ideal em ambientes críticos para a segurança, embora – 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.
Criando um contêiner sem iniciá-lo
docker create é uma contraparte menos conhecida do docker run. Ele cria um novo contêiner sobre uma determinada imagem sem iniciá-lo. Você pode iniciá-lo mais tarde com o comando docker start.
Criar um novo contêiner não é perigoso, pois permanecerá inerte até ser executado. Você pode compará-lo aproximadamente à definição das configurações de uma VM que você não usa. Mesmo que esteja configurado para inicializar a partir de um ISO de sistema operacional corrompido, você não causará nenhum dano ao seu ambiente.
docker criar --nome suspeito-contêiner suspeito-imagem: mais recente
Publicidade
O comando acima cria um novo contêiner denominado contêiner suspeito que será baseado na imagem suspeita: imagem mais recente.
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 comando docker export. 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 exportar contêiner suspeito > suspeito-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 de imagens e listar e visualizar arquivos.
Se você não precisa salvar ou abrir o arquivo, preferindo obter a lista de arquivos em seu terminal, modifique o comando tar:
docker exportar contêiner suspeito | tar t > suspeito-contêiner-arquivos. txt
tar t lista o conteúdo do arquivo de entrada. Você vai acabar com uma lista de tudo em sua imagem dentro de fichas-contêiner. txt.
Usando o “ salvamento de imagem do docker ”
Uma variação dessa técnica é usar o salvamento de imagem do docker. Este comando salva diretamente os dados de uma imagem em um arquivo tar.
imagem docker salvar imagem-suspeita: mais recente > suspeito-imagem. tar
Publicidade
Este método produz um arquivo que se concentra na imagem, não em containers criados a partir dela. O tar incluirá um arquivo manifest. json, descrevendo 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 a função 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.
Listando camadas com “ histórico de imagens do docker ”
Outra maneira de inspecionar o conteúdo de uma imagem é visualizar sua lista de camadas com o comando docker image history.
imagem-suspeita do histórico da imagem docker: mais recente
Isso expõe as instruções do Dockerfile que compunham as camadas da imagem. Não permitirá que você veja arquivos e diretórios individuais no sistema de arquivos da imagem, mas pode ser mais eficaz em destacar comportamentos suspeitos.
Cada linha na saída do comando representa uma nova camada na imagem. O item “ CRIADO POR ” coluna 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 nas instruções RUN, alterações inesperadas de variáveis de ambiente e instruções CMD e ENTRYPOINT suspeitas.
Publicidade
As duas últimas camadas são indiscutivelmente as mais importantes para avaliar ao inspecionar o histórico de uma imagem. Eles informam exatamente o que será iniciado quando você executar o docker ou iniciar um contêiner. 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 oferece 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 pelo histórico de imagens do docker 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 de sistema operacional instalados, dependências de linguagem de programação e 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: o mais recente após a instalação do Anchore. Isso fornece uma lista completa do conteúdo do sistema de arquivos da imagem de destino.

Outra opção é o Dive, uma 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. Esta 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.
Publicidade
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.
Nenhum comentário