A empresa Guardicore, especializada na proteção de datacenters e sistemas em nuvem, descobriu um novo malware de alta tecnologia chamado FritzFrog, que atinge servidores baseados em Linux. O FritzFrog combina um worm que se espalha por meio de um ataque de brute force a servidores com porta SSH aberta e componentes para a construção de um botnet descentralizado, operando sem nós de comando e sem um único ponto de falha.
Para formar o botnet, é utilizado um protocolo P2P próprio, onde os nós interagem entre si, coordenam a organização de ataques, mantêm a operação da rede e monitoram o estado uns dos outros. Novas vítimas são encontradas por meio de ataques de brute force a servidores que aceitam solicitações via SSH. Ao detectar um novo servidor, é realizado um ataque de dicionário com combinações comuns de nomes de usuários e senhas. O controle pode ser feito através de qualquer nó, dificultando a identificação e bloqueio dos operadores do botnet.
De acordo com os pesquisadores, o botnet já possui cerca de 500 nós, entre os quais estão servidores de várias universidades e uma grande companhia ferroviária. É destacado que o principal alvo dos ataques são as redes de instituições educacionais, centros médicos, instituições governamentais, bancos e empresas de telecomunicações. Após a comprovação do servidor, um processo de mineração da criptomoeda Monero é organizado nele. A atividade deste malware é registrada desde janeiro de 2020.
Uma característica do FritzFrog é que ele mantém todos os dados e o código executável apenas na memória. As alterações no disco se limitam apenas à adição de uma nova chave SSH no arquivo authorized_keys, que é posteriormente utilizado para acessar o servidor. Os arquivos de sistema não são modificados, o que torna o worm invisível para sistemas que verificam a integridade por meio de somas de verificação. Na memória, também são mantidos dicionários para ataques de senha e dados para mineração, que são sincronizados entre os nós através do protocolo P2P.
Componentes maliciosos se camuflam com processos como «ifconfig», «libexec», «php-fpm» e «nginx». Os nós de botnets monitoram o estado dos vizinhos e, em caso de reinicialização do servidor ou até mesmo reinstalação do SO (se o arquivo authorized_keys modificado foi transferido para o novo sistema), reativam novamente os componentes maliciosos no host. A comunicação usa SSH padrão - o malware também inicia um «netcat» local, que se vincula à interface localhost e escuta o tráfego na porta 1234, a qual os nós externos acessam através de um túnel SSH, utilizando a chave do authorized_keys para a conexão.
O código dos componentes FritzFrog é escrito na linguagem Go e opera em modo multithread. O malware inclui vários módulos que são executados em diferentes threads:
- Cracker — realiza tentativas de quebra de senhas em servidores alvo.
- CryptoComm + Parser — organiza uma conexão P2P criptografada.
- CastVotes — mecanismo para seleção conjunta de hosts alvo para ataque.
- TargetFeed — obtém uma lista de nós para ataque a partir de nós vizinhos.
- DeployMgmt — implementação de um verme que espalha código malicioso em servidores comprometidos.
- Owned — responsável pela conexão a servidores onde o código malicioso já está em execução.
- Assemble — compila um arquivo na memória a partir de blocos transmitidos separadamente.
- Antivir — módulo que suprime programas maliciosos concorrentes, identifica e finaliza processos contendo a string «xmr», consumindo recursos de CPU.
- Libexec — módulo para mineração de criptomoedas Monero.
O protocolo P2P utilizado pelo FritzFrog suporta cerca de 30 comandos, responsáveis pela transmissão de dados entre nós, execução de scripts, transferência de componentes de malware, consultas de estado, troca de logs, ativação de proxies, entre outros. As informações são transmitidas por um canal criptografado separado com serialização no formato JSON. O algoritmo de criptografia utilizado é uma cifra assimétrica AES e a codificação Base64. O protocolo DH () é utilizado para troca de chaves. Para determinar o estado, os nós trocam constantemente pacotes de ping.
Todos os nós do botnet suportam um banco de dados distribuído com informações sobre sistemas atacados e comprometidos. Os alvos de ataque são sincronizados por toda a botnet — cada nó ataca um alvo diferente, ou seja, dois nós diferentes da botnet não atacarão o mesmo host. Os nós também coletam e transmitem estatísticas locais para os vizinhos, como o tamanho da memória livre, uptime, carga da CPU e atividade de entradas via SSH. Essas informações são utilizadas para decidir se iniciarem o processo de mineração ou se o nó será usado apenas para atacar outros sistemas (por exemplo, a mineração não é iniciada em sistemas sobrecarregados ou em sistemas com conexões frequentes do administrador).
Para identificar o FritzFrog, os pesquisadores propuseram um simples . Para determinar a comprometimento do sistema,
podem ser usados indicadores como a presença de uma conexão escutando na porta 1234, a presença de em authorized_keys (um mesmo SSH key é instalado em todos os nós) e a presença na memória de processos em execução como ‘ifconfig’, ‘libexec’, ‘php-fpm’ e ‘nginx’, que não possuem arquivos executáveis relacionados (‘/proc//exe’ aponta para um arquivo remoto). Um indicativo também pode ser a presença de tráfego na porta de rede 5555, que ocorre quando o malware se conecta ao pool típico web.xmrpool.eu durante o processo de mineração da criptomoeda Monero.
Fonte: opennet.ru
