Image for post
Image for post

Vulnerabilidades em contêiner

O anonimato que as transações permitem, suportado por uma rede descentralizada como Blockchain, bem como a segurança cada vez mais alta contra infecções do tipo ransomware, devido às políticas de detecção e prevenção implementadas nos últimos tempos, fizeram com que os cibercriminosos optassem por novas estratégias fraudulentas, uma delas conhecida como “cryptojacking”.

A Plataforma como Serviço (PaaS) é um ambiente completo de desenvolvimento e implantação em nuvem, com recursos que permitem a entrega dedes as aplicações mais simples até a aplicações corporativas sofisticadas.

Image for post
Image for post
Ilustração 1 PaaS [1]

Um contêiner é uma unidade de software padrão que empacota o código e todas as suas dependências para que uma aplicação seja executada de maneira rápida e confiável de um ambiente de computação para outro. Uma imagem de contêiner Docker é um pacote de software leve, independente e executável que inclui tudo o necessário para executar uma aplicação: código, tempo de execução, ferramentas do sistema, bibliotecas do sistema e configurações do sistema. [2]

Image for post
Image for post
Ilustração 2 arquitetura interna do Docker [2]

Contêineres e máquinas virtuais têm benefícios semelhantes de isolamento e alocação de recursos, mas funcionam de maneira diferente, pois contêineres virtualizam o sistema operacional em vez do hardware.

Os contêineres são uma abstração na camada de aplicação que agrupa código e dependências. Vários contêineres podem ser executados na mesma máquina e compartilhar o núcleo do sistema operacional com outros contêineres, cada um dos quais é executado como processos isolados no espaço do usuário. Os contêineres ocupam menos espaço que as máquinas virtuais, portanto, conseguem lidar com mais aplicações e exigem menos máquinas virtuais e sistemas operacionais.

Máquinas virtuais (VMs) são uma abstração de hardware físico que transforma um servidor em múltiplos servidores. O hipervisor permite que várias máquinas virtuais sejam executadas em uma única máquina. Cada VM inclui uma cópia completa de um sistema operacional, da aplicação, dos binários e bibliotecas necessários, que ocupam dezenas de GB, diferentemente dos contêineres, nos quais o tamanho é consideravelmente menor.

Image for post
Image for post
Ilustração 3 SEQ Ilustración \* ARABIC Arquitetura interna da VM 2

As criptomoedas tiveram início em 2009, desde então, sua evolução vem aumentando, consolidando-se como um método de pagamento válido.

Mais e mais instituições e governos estão começando a aceitar esse tipo de comércio, incluindo países como Austrália, Japão, Suíça, Noruega e Holanda.

O anonimato que as transações permitem, suportado por uma rede descentralizada como Blockchain, bem como a segurança cada vez mais alta contra infecções do tipo ransomware, devido às políticas de detecção e prevenção implementadas nos últimos tempos, fizeram com que os cibercriminosos optassem por novas estratégias fraudulentas, uma delas conhecida como “cryptojacking”.

O termo cryptojacking deriva da junção de Cryptocurrency (criptomoeda) e Hijacking (Sequestro), sendo definido como o uso ilegítimo de um dispositivo eletrônico, sem o consentimento e conhecimento do usuário, pelos cibercriminosos. [3]

O surgimento desse método tem sido paralelo ao aumento das cotações de moedas virtuais, além de ser relativamente fácil de criar e automatizar com dificuldade em detectar sua presença no dispositivo infectado.

Para entender como os cibercriminosos agem, é essencial saber, pelo menos, como obter criptomoedas (mineração), conceitos importantes como wallet (carteira) e Blockchain (blockchain). O primeiro refere-se à carteira digital (comum em sites de compras), enquanto o segundo é semelhante a um livro de contas que incorpora cada uma das transações realizadas.

Enquanto a origem e o destino dessas transações são anônimos, a quantidade de dinheiro e o tempo em que a transação foi feita são sempre conhecidos e podem ser consultados no Blockchain. A mineração consiste em calcular uma série de algoritmos para verificar as transações realizadas até aquele momento.

Falando de uma perspectiva de alto nível, minar uma moeda virtual se traduz em resolver computacionalmente um “problema matemático” relacionado à criptografia, a complexidade é determinada, primeiro, pela competência de diversas equipes para resolver esse problema e também pela complexidade do problema matemático em si.

Do mesmo modo, em muitas das criptomoedas, foi estabelecido um máximo de moedas que podem existir, portanto, há cada vez menos para “minerar”.

Embora existam vários tipos de ataques, o objetivo principal são os equipamentos do usuário.

O objetivo final da criação de código é reduzir a complexidade do processo de mineração, como isso é realizado? Dividindo o esforço computacional entre o maior número possível de computadores, o que se traduz em menor tempo para obter criptomoedas.

Método pelo qual se busca obter informações pessoais ou confidenciais dos usuários por meio da fraude, recorrendo à representação da identidade digital de uma entidade confiável.

Usando e-mails de spam ou phishing, o invasor pode tentar induzir o usuário a baixar e/ou executar um programa supostamente legítimo, mas que, na realidade, é um cryptominer.

Image for post
Image for post
Ilustração 4 Documento com código nocivo

São ferramentas que automatizam a busca por vulnerabilidades em um sistema para infectá-lo. Eles costumam acessam o navegador ou algum complemento instalado para baixar o código nocivo.

Image for post
Image for post
Ilustração 5 Exemplo de injeção de código nocivo

Na maioria dos casos, os cibercriminosos procuram infectar servidores de grande porte, para poder minerar criptomoedas o mais rápido possível, com base em duas rotas principais:

1) Infectar o equipamento por qualquer uma das técnicas mencionadas acima (engenharia social)

2) Usar técnicas mais específicas para atacar servidores, como explorar vulnerabilidades, força bruta, injeção SQL, etc.

Em agosto de 2018, a unidade 42, identificou um worm de criptojacking chamado “Graboid”, que se estendia a mais de 2.000 hosts de Docker não seguros.

Embora ataques de propagação de malware com criptografia tenham ocorrido, é a primeira vez que a propagação foi realizada por meio de contêineres, especificamente no Docker Engine (Community Edition), pois o software de proteção de terminal mais tradicional não inspeciona dados e atividades dentro dos contêineres. Após a execução da imagem no host comprometido, o malware é baixado dos servidores de comando e controle (C2)[3], pesquisa periodicamente novos hosts vulneráveis e escolhe o próximo destino aleatório para propagação do worm.

Image for post
Image for post
Ilustração 7 Descrição geral de worm

Uma pesquisa foi realizada através do mecanismo de pesquisa Shodan[1]. Nesta pesquisa, mais de 2.000 mecanismos Docker estão expostos de maneira insegura à Internet. Sem autenticação e/ou autorização, o invasor pode assumir o controle total do Docker Engine e do host associado. O invasor aproveita esse ponto de entrada para implantar e espalhar o worm. A Figura 6 mostra como o malware é entregue e propagado. O invasor comprometeu um daemon sem segurança do Docker, executou o contêiner malicioso do Docker extraído do Docker Hub, baixou os scripts e uma lista de host vulnerável do C2 e escolheu repetidamente o próximo alvo para propagar o worm.

O Graboid, realiza a propagação dentro dos contêineres, escolhe aleatoriamente seus objetivos em cada iteração. Instalar o worm no primeiro alvo, parar a mineração no segundo alvo e começa a minerar no terceiro alvo. Esse procedimento ou comportamento leva a uma mineração muito aleatória, por exemplo, se um host X for comprometido, o contêiner malicioso não será iniciado imediatamente; ele precisará aguardar até que outro host comprometido escolha o host X e inicie o processo de mineração [4]

[1]Shodan é um mecanismo de busca que permite que usuário o encontre tipos de equipamentos conectados à Internet específicos iguais ou diferentes.

O passo-a-passo de como o invasor e o worm já agem dentro do host é o seguinte:

1) Passo 1

O invasor escolhe um host não seguro do Docker como destino e envia comandos remotos para baixar e implementar a imagem maliciosa do Docker. A imagem contém uma ferramenta do cliente Docker que é usada para se comunicar com outros hosts do Docker.

2) Etapa 2

O script dentro do contêiner com o sistema operacional (pocow/centos) baixa 4 scripts de shell do C2 e os executa um por um. Esses scripts são: live.sh, worm.sh, cleanxmrs.sh e xmr.sh.

3) Etapa 3

O lise.sh envia o número da CPU disponível no host comprometido para o C2.

4) Etapa 4

O 4worm.sh baixa um arquivo “IP” que contém uma lista com mais de 2000 IPs. Esses IPs são os hosts finais sem segurança da API do Docker. O worm.sh escolhe aleatoriamente um dos IPs como destino e usa a ferramenta cliente do docker para extrair e implantar o contêiner pocow/centos remotamente.

5) Etapa 5

O clearxmr.sh seleciona aleatoriamente um dos hosts vulneráveis no arquivo IP e interrompe os contêineres de cryptojacking no destino. O cleanxmr.sh para não apenas o contêiner de criptografia que implementa o worm, mas também outros contêineres, se estiverem em execução.

6) Etapa 6

O xmr.sh seleciona um dos hosts vulneráveis no arquivo IP aleatoriamente e implementa a imagem gakeaws/nginx no host de destino. Esta imagem contém o xmrig binário mascarado como nginx.

As etapas de 1 a 6 são repetidas periodicamente em cada host comprometido. O último intervalo de atualização conhecido é definido como 100 segundos. O intervalo de atualização, além dos scripts de Shell e listagem de IP, é baixado do C2 após o início do contêiner.

Image for post
Image for post
Ilustração 8 Imagens Docker comprometidas

Entender que uma das condições básicas para a existência de uma vulnerabilidade é a existência de uma fraqueza.

O importante é tomar as medidas correspondentes para impedir que terceiros causem algum tipo de vulnerabilidade. No caso específico do Docker, há certas medidas que precisam ser tomadas.

1) Host

É a parte mais importante do ambiente do Docker, pois é onde a infraestrutura é suportada e onde os contêineres serão executados.

a) Permissões de usuário

É essencial limitar os usuários que possam controlar o daemon do Docker. Como padrão, é apenas o usuário root.

b) Auditoria de arquivos e diretórios

Como o daemon do Docker é executado com privilégios de root, todos os diretórios devem ser auditados constantemente.

2) Docker Daemon

É responsável por gerenciar o ciclo de vida das diferentes imagens na máquina host.

a) Limitação de tráfego entre contêineres. A possibilidade de que o tráfego entre contêineres possa ser visto é uma fonte indireta de divulgação de dados para outros contêineres. Para limitar o tráfego entre contêineres implantados, existe o comando: docker –icc=false

Aplicando boas práticas de segurança aplicadas ao Host e ao Demon, além de seus arquivos de configuração, a outra parte seria a imagem.

Um arquivo Dockerfile contém todas as configurações e instruções necessárias para criar uma imagem; portanto, é necessário criar Dockerfiles de maneira minimalista em termos de aplicações, usuários, serviços etc.

1) Execução com usuário não root

Como padrão, os contêineres são executados com o usuário root; portanto, esses privilégios estão disponíveis; a solução mais apropriada é limitar o usuário de execução exclusivamente à aplicação desejada.

Para adicionar o usuário ao arquivo Dockerfile, é necessário usar o comando;

RUN useradd <opciones>

USER <usuario>

2) Integridade de imagens

Cada imagem possui um hash SHA256 que permite verificar se a imagem foi modificada.

Para isso, existem dois comandos incluídos no arquivo Dockerfile que permitem assinar a imagem ao construí-los:

DOCKER_CONTENT_TRUST

DOCKER_CONTENT_TRUST_SERVER

O primeiro comando permite ativar e desativar a verificação do Docker Content Trust. Caso esteja ativado, o docker verificará a integridade da imagem, sendo o repositório público ou privado.

A segunda ordem permite definir o URL onde o servidor Notary está localizado. Na maioria dos casos, as empresas com imagens oficiais no Docker Hub realizam esse processo internamente.

Um exemplo da introdução dos seguintes comandos no arquivo Dockerfile:

  • export DOCKER_CONTENT_TRUST=1
  • export DOCKER_CONTENT_TRUST_SERVER=”https://notary.docker.io”

É comum entrar no arquivo Dokerfile para declarar diferentes tipos de segredos como conexões bbdd, declarando usuário e senha. Uma das soluções seria delegar essas funções a orquestradores como Kubernetes ou Docker Swarm.

Dentro do mundo tecnológico, é essencial estar sempre à frente. Muitas empresas que aceitam esse desafio e optam por uma infraestrutura de microsserviços deixam de lado a segurança, priorizando questões como desempenho, redução de custos, versatilidade da infraestrutura e outros problemas relacionados.

Hoje, essas empresas são o centro de ataques cibernéticos; a segurança não é mais o que costumava ser, ela deve ter uma função principal e deve ser levada em consideração desde a concepção do design da nova infraestrutura.

No documento, foi explicado de que forma os cibercriminosos estão à espreita para explorar as fraquezas e, assim, conceber novas vulnerabilidades. O aspecto especial do “Caso Graboid” não é o fato em si de como o worm se move entre os diferentes contêineres; mas o modo como ele conseguiu entrar no Docker Hub por meio de uma imagem infectada, ignorando a segurança do host.

Parte da segurança é estar preparada e não subestimar os mínimos detalhes. Outro detalhe importante é a capacidade de extrair novos scripts do C2 periodicamente, com isso, sendo capaz de reutilizar com facilidade o ransomware ou qualquer outro malware que comprometa completamente os hosts. Se um worm mais poderoso fosse criado com um método de infiltração semelhante, ele poderia causar danos muito maiores. Algumas últimas recomendações:

  • Não expor o daemon do Docker à Internet sem primeiro ter um método de autenticação adequado
  • Usar o SSH para conectar-se ao daemon do Docker remotamente.
  • Usar regras de firewall, incluindo tráfego de entrada.
  • Nunca baixar imagens do Docker de sites desconhecidos e/ou usuários desconhecidos.

[1]A unidade 42, é uma equipe de inteligência global que faz parte da empresa Palo Alto Networks, cuja principal função é a investigação e divulgação de suas descobertas, que são compartilhadas livremente. Os documentos de análise incluem ferramentas, técnicas e procedimentos que os invasores executam para comprometer a segurança das organizações.

A unidade 42 é uma autoridade reconhecida em ameaças cibernéticas, sendo frequentemente procurada por empresas e agências governamentais em todo o mundo.

² O nome “Graboid” é derivado do filme “O Ataque dos Vermes Malditos” de 1990, pois o worm se comporta de maneira semelhante aos vermes de areia desse filme, ele se move em pequenas rajadas de velocidade, mas de forma não inteligente.

[1]Servidores de comando e controle podem ser controlados diretamente pelos operadores do malware, além de poder executar em equipamentos infectados.

[1]Shodan é um mecanismo de busca que permite que usuário o encontre tipos de equipamentos conectados à Internet específicos iguais ou diferentes.

Referências

[1] Microsoft, https://azure.microsoft.com/, »2019. [Online]. Disponível: https://azure.microsoft.com/es-es/overview/what-is-paas/. [Último acesso: Novembro de 2019].

[2] Docker, «Docker», novembro de 2019. [Online]. Disponível: https://www.docker.com/resources/what-container.

[3] National Cryptojacking Center, «Cryptojacking», CCN, 2019.

[4] Unit 42, «Graboid: First-Ever Cryptojacking Worm Found in Images on Docker Hub,» 16 de outubro de 2019. [Online]. Disponível: https://unit42.paloaltonetworks.com/graboid-first-ever-cryptojacking-worm-found-in-images-on-docker-hub/. [Último acesso: Novembro de 2019].

[5] Kubernetes, «Kubernetes-Secrets», novembro de 2019. [Online]. Disponível: https://kubernetes.io/docs/concepts/configuration/secret/. [Último acesso: 2019].

[6] Docker, «Docker,» 2019. [Online]. Disponível: https://docs.docker.com/engine/swarm/secrets/.

Written by

Exponential intelligence for exponential companies

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store