FritzFrog uma nova geração de Botnets Peer-to-Peer

FritzFrog uma nova geração de Botnets Peer-to-Peer. FritzFrog é um botnet Peer-to-Peer (P2P) altamente sofisticado que vem violando ativamente servidores SSH em todo o mundo. Com sua infraestrutura descentralizada, distribui o controle entre todos os seus nós. 

Nessa rede sem um único ponto de falha, os pares se comunicam constantemente entre si para manter a rede viva, resiliente e atualizada. A comunicação P2P é feita em um canal criptografado, usando AES para criptografia simétrica e o protocolo Diffie-Hellman para troca de chaves.

Ao contrário de outros botnets P2P, o FritzFrog combina um conjunto de propriedades que o torna único: ele não tem arquivo, pois monta e executa cargas úteis na memória. É mais agressivo em suas tentativas de força bruta, mas permanece eficiente ao distribuir alvos uniformemente na rede. Finalmente, o protocolo P2P do FritzFrog é proprietário e não é baseado em nenhuma implementação existente.

O malware, que é escrito em Golang, é completamente volátil e não deixa rastros no disco. Ele cria um backdoor na forma de uma chave pública SSH, permitindo que os invasores tenham acesso contínuo às máquinas das vítimas. Desde o início da campanha, identificamos 20 versões diferentes do executável do malware.

A Guardicore descreve em seu site como a campanha FritzFrog foi descoberta, a natureza de sua rede P2P e o funcionamento interno do malware – incluindo o processo de infecção, criptografia de comando e comportamento volátil. O Guardicore Labs fornece um repositório Github contendo um script de detecção, bem como uma lista de Indicadores de Compromisso (IOCs) para esta campanha.

 

Explorando FritzFrog

Guardicore Labs notou essa campanha pela primeira vez como parte de sua pesquisa em andamento da Enciclopédia de Botnet . Em 9 de janeiro, novos incidentes de ataque apareceram onde processos maliciosos chamados ifconfig e nginx foram executados. então começaram a monitorar a atividade da campanha, que aumentou de forma constante e significativa com o tempo, atingindo um total de 13 mil ataques na Rede de Sensores Globais da Guardicore (GGSN). Desde sua primeira aparição, identificamos 20 versões diferentes do binário Fritzfrog.

Gráfico mostrando o número de ataques FritzFrog na Rede de Sensores Globais da Guardicorefonte: Guardicore

O que foi intrigante nesta campanha foi que, à primeira vista, não havia nenhum servidor de comando e controle (CNC) sendo conectado. Foi logo após o início da pesquisa que entendemos que tal CNC não existia.

Para interceptar a rede FritzFrog, a Guardicore Labs desenvolveu um programa cliente em Golang, que realiza o processo de troca de chaves com o malware e é capaz de enviar comandos e receber seus resultados. Esse programa, que chamamos de frogger, permitiu investigar a natureza e o escopo da rede. Usando o Frogger, também foram capazes de entrar na rede “injetando” os próprios nós e participando do tráfego P2P em andamento.

FritzFrog foi encontrado para forças brutas de milhões de endereços IP, entre os quais escritórios governamentais, instituições educacionais, centros médicos, bancos e várias empresas de telecomunicações. Ele violou com sucesso mais de 500 servidores SSH, incluindo aqueles de instituições de ensino superior conhecidas nos EUA e na Europa, e uma empresa ferroviária.

 

Por que “New-Generation”?

FritzFrog tem uma combinação especial de propriedades, o que o torna único no cenário de ameaças:

  • Sem arquivo – FritzFrog opera sem diretório de trabalho e as transferências de arquivos são feitas na memória usando blobs.
  • Atualizando constantemente – bancos de dados de alvos e máquinas violadas são trocados sem problemas.
  • Agressivo – a força bruta é baseada em um extenso dicionário. Em comparação, DDG, um botnet P2P recentemente descoberto, usava apenas o nome de usuário “root”.
  • Eficiente – os alvos são distribuídos uniformemente entre os nós.
  • Proprietário – O protocolo P2P é totalmente proprietário, não dependendo de nenhum protocolo P2P conhecido, como μTP.
Depois que a vítima é violada com sucesso, ela começa a executar o malware empacotado com UPX, que se apaga imediatamente. O processo de malware é executado sob os nomes ifconfig e nginx, para minimizar a suspeita. Como parte de seu processo de inicialização, o malware começa a escutar na porta 1234, esperando por comandos. Os primeiros comandos que uma nova vítima recebe são responsáveis ​​por sincronizar a vítima com o banco de dados de pares de rede e alvos de força bruta.

O tráfego em uma porta não padrão, como 1234, pode ser facilmente detectado e bloqueado por firewalls e outros produtos de segurança. Assim, o autor de FritzFrog empregou uma técnica criativa para evitar a detecção e permanecer sob o radar. Em vez de enviar comandos diretamente pela porta 1234, os comandos são enviados à vítima da seguinte maneira: O invasor se conecta à vítima por SSH e executa um cliente netcat na máquina da vítima, que por sua vez se conecta ao servidor do malware. A partir deste ponto, qualquer comando enviado por SSH será usado como entrada do netcat, sendo transmitido ao malware.

O FritzFrog canaliza seus comandos P2P pela porta SSH clássica, executando um cliente netcat local nas máquinas infectadas.
fonte: Guardicore

Os atacantes do Fritzfrog implementaram um canal de comando criptografado com mais de 30 comandos diferentes. Os parâmetros de comando e as respostas são transferidos em estruturas de dados designadas e serializados (“empacotados”) para o formato JSON. Antes do envio, os dados são criptografados usando criptografia simétrica AES e codificados em Base64. Para concordar com a chave de criptografia, os nós envolvidos usam o protocolo de troca de chaves Diffie-Hellman.

Comandos P2P de FritzFrog
Operações de banco de dados Operações de carga útil Operações Administrativas
getdb
pushdb
pushdbzip
getdbzip
getdbnotargetsgettargets
pushtargets
forcetargets
puttargetpoolputblentry
resetowned
pushowned
putowned
getownedgetdeploy
putdeploying
deploystatus
runcript
pushbin
getbin
sharefiles
getStatus
getstats
getblobstats
getpeerstats
getvotestats
mapblobs
getlog
pushlog
getargs
procuração
de ping
comm
saída

Os nós na rede FritzFrog mantêm contato próximo uns com os outros. Eles constantemente pingam uns aos outros para verificar a conectividade, trocar pontos e alvos e manter um ao outro sincronizado. Os nós participam de um processo inteligente de votação, que parece afetar a distribuição de alvos de força bruta pela rede. O Guardicore Labs observou que os alvos são distribuídos uniformemente, de forma que dois nós na rede não tentam “quebrar” a mesma máquina alvo.

Investigando o malware

O binário do FritzFrog é um malware avançado escrito em Golang. Ele opera completamente na memória; cada nó que executa o malware armazena em sua memória todo o banco de dados de alvos e pares. O malware gera vários threads para executar várias tarefas simultaneamente, conforme detalhado na tabela abaixo.

FritzFrog define os seguintes estados em relação ao gerenciamento de vítimas e máquinas alvo.

  1. Target – uma máquina encontrada na fila de destino será alimentada em seguida para o módulo Cracker, que por sua vez fará a varredura e tentará aplicá-la à força bruta;
  2. Deploy – uma máquina que foi violada com sucesso é enfileirada para infecção por malware pelo módulo DeployMgmt;
  3. Owner – uma máquina que foi infectada com sucesso será adicionada à rede P2P pelo módulo Pertencente.

NOME DO MÓDULO FUNCIONALIDADE
Cracker Alvos de força bruta
CryptoComm + Parser Comunicação P2P criptografada
CastVotes Mecanismo de votação para distribuição alvo
TargetFeed Ingestão de alvos de pares
DeployMgmt Módulo worm, implantando malware em máquinas violadas (“crackeadas”)
Possuído Conectando-se às vítimas após a implantação do malware
Montar Montagem de arquivo na memória a partir de blobs
Antivir Eliminação de concorrentes. Elimina processos que exigem CPU com a string “xmr”
Libexec Moeda criptominer

Cada nó que executa o malware tem um thread de trabalho que é responsável por receber comandos, analisá-los e enviá-los para a função apropriada no código.

A função de trabalho mostrada em um desmontador;  Cada ramo corresponde a uma funcionalidade P2P suportada

O malware é transitório – ele tenta sobreviver a reinicializações do sistema. No entanto, um backdoor é deixado para permitir acesso futuro à vítima violada, cujas credenciais de login são salvas pelos pares da rede. O malware adiciona uma chave SSH-RSA pública ao arquivo authorized_keys. Esse backdoor simples permite que os invasores – que possuem a chave privada secreta – façam autenticação sem senha, caso a senha original seja modificada. FritzFrog usou apenas uma única chave pública que é fornecida na abaixo.

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDJYZIsncBTFc+iCRHXkeGfFA67j+kUVf7h/IL+sh0RXJn7yDN0vEXz7ig73hC//2/71sND+x+Wu0zytQhZxrCPzimSyC8FJCRtcqDATSjvWsIoI4j/AJyKk5k3fCzjPex3moc48TEYiSbAgXYVQ62uNhx7ylug50nTcUH1BNKDiknXjnZfueiqAO1vcgNLH4qfqIj7WWXu8YgFJ9qwYmwbMm+S7jYYgCtD107bpSR7/WoXSr1/SJLGX6Hg1sTet2USiNevGbfqNzciNxOp08hHQIYp2W9sMuo02pXj9nEoiximR4gSKrNoVesqNZMcVA0Kku01uOuOBAOReN7KJQBt

O arquivo de malware executa vários comandos shell na máquina local, alguns deles periodicamente, para monitorar o estado do sistema. Por exemplo, ele executa free -m para verificar a disponibilidade de RAM, uptime, journalctl -S @ 0 -u sshd para monitorar logins SSH e outros comandos que geram estatísticas de uso de CPU. Essas estatísticas estão disponíveis para serem consumidas por outros nós da rede e são usadas para determinar, por exemplo, se um criptominer deve ser executado ou não.

O malware executa um processo separado – denominado libexec – para extrair a moeda Monero. O minerador é baseado no popular minerador XMRig e se conecta ao pool público web.xmrpool.eu pela porta 5555.

Uma rede semelhante a um torrent do mal

O Fritzfrog depende da capacidade de compartilhar arquivos pela rede, tanto para infectar novas máquinas quanto para executar cargas maliciosas, como o criptominer Monero.

Para compartilhar e trocar arquivos entre nós, o Fritzfrog usa uma abordagem furtiva e sem arquivos. Os arquivos são divididos em blobs – volumes de dados binários – que são mantidos na memória. O malware rastreia os blobs disponíveis, armazenando-os em um mapa junto com o valor de hash de cada blob.

Quando um nó A deseja receber um arquivo de seu par, o nó B, ele pode consultar o nó B sobre quais blobs ele possui usando o comando getblobstats . Então, o nó A pode obter um blob específico por seu hash, seja pelo comando P2P getbin ou por HTTP, com a URL http: //: 1234 / . Quando o nó A tem todos os blobs necessários – ele monta o arquivo usando um módulo especial denominado Assemble e o executa.

Saída do comando "getblobstats".  Cada nó na rede relata quais blobs de arquivo ele possui, a partir da lista de arquivos com suporte.

Atribuição

Rastrear os operadores de um botnet P2P é uma tarefa complicada; devido à sua natureza distribuída, os comandos podem ser enviados de e para qualquer nó da rede. Ainda assim, tentamos compará-lo com botnets P2P anteriores vistos no cenário de ameaças.

Mesmo quando comparado com botnets P2P anteriores, o FritzFrog parece único; ele não usa IRC como o IRCflu , ele opera na memória ao contrário do DDG e é executado em máquinas baseadas em Unix – ao contrário do botnet InterPlanetary Storm . Se houver, ele tem alguma semelhança – especialmente no que diz respeito à nomenclatura de funções e números de versão – com Rakos , um botnet P2P escrito em Golang e analisado pela ESET em 2016.

Detecção e Mitigação

Guardicore Labs fornece um script de detecção FritzFrog para ser executado em servidores SSH. Ele procura os seguintes indicadores FritzFrog:

  • Execução de processos nginx, ifconfig ou libexec cujo arquivo executável não existe mais no sistema de arquivos (como visto abaixo)
  • Porta de escuta 1234

Além disso, o tráfego TCP na porta 5555 pode indicar o tráfego de rede para o pool Monero.

ubuntu@ip-111-11-11-11:~$ ./detect_fritzfrog.sh
FritzFrog Detection Script by Guardicore Labs
=============================================
 
[*] Fileless process nginx is running on the server.
[*] Listening on port 1234
[*] There is evidence of FritzFrog's malicious activity on this machine.
 
FritzFrog aproveita o fato de que muitas soluções de segurança de rede impõem tráfego apenas pela porta e protocolo. Para superar essa técnica furtiva, as regras de segmentação baseadas em processos podem impedir facilmente essas ameaças.

Senhas fracas são o facilitador imediato dos ataques de FritzFrog. A Guardicore recomenda escolher senhas fortes e usar autenticação de chave pública, que é muito mais seguro. Além disso, é crucial remover a chave pública do FritzFrog do arquivo authorized_keys , evitando que os invasores acessem a máquina. Roteadores e dispositivos IoT frequentemente expõem SSH e, portanto, são vulneráveis ​​ao FritzFrog; considere alterar sua porta SSH ou desabilitar completamente o acesso SSH a eles se o serviço não estiver em uso.

 

Fonte: Guardicore 

Veja também:

Sobre mindsecblog 1765 Artigos
Blog patrocinado por MindSec Segurança e Tecnologia da Informação Ltda.

1 Trackback / Pingback

  1. 350 milhões de endereços de e-mail descriptografados deixados expostos

Deixe sua opinião!