O malware Capoae aumenta sua força: usa várias vulnerabilidades e táticas para se espalhar
Introdução
Recentemente, chegaram às manchetes uma infinidade de malwares de mineração de criptografia empacotados com UPX escritos em Golang visando sistemas Linux e aplicativos da Web. A tática principal do malware é se espalhar ao tirar proveito de sistemas vulneráveis e de credenciais administrativas fracas. Depois de infectados, esses sistemas são usados para minerar criptomoeda. Dei o nome de "Cafoae" à amostra que examinei para este post, com base na saída do código para o meu terminal.
Nessa mesma época em que as notícias estavam se espalhando sobre esses ataques de malware de mineração de criptografia, os honeypots do SIRT foram infectados com malware PHP que chegou através de uma adição de backdoor a um plugin WordPress chamado download-monitor.
O download-monitor foi instalado depois que as credenciais fracas de administrador WordPress do honeypot foram descobertas. Um binário Golang de 3MB empacotado com UPX também foi baixado no /tmp. Após o exame, ficou claro que o malware tinha alguma funcionalidade de descriptografia e um arquivo criptografado armazenado em outro diretório.
Ao analisar ainda mais os logs de acesso do honeypot, observa-se que uma solicitação foi feita com uma carga útil ofuscada enviada em um parâmetro GET.
Esse argumento de dw é codificado em rot13() e base64. Quando o valor base64 volta ao conteúdo original e é decodificado por rot13, ele se torna:
A carga útil tem duas partes: o local (url) do arquivo que será baixado e o caminho (dir) para colocá-lo no sistema de arquivos da máquina comprometida.
O arquivo wp.txt é baixado e renomeado para wp.php, e então é excluído depois de ser executado. No entanto, o conteúdo desse arquivo foi perdido devido às limitações do meu sistema de registro. O arquivo ProductList.php também é renomeado anexando uma string aleatória ao final do nome do arquivo para evitar que usuários comuns o encontrem. A string parece ser gerada com a seguinte função bash que usa um md5sum da saída do comando de data.
echo $(date|md5sum|awk -v n="$(date +%s)" '{print substr($1,1,n%7+6)}')
O arquivo ./wp-content/plugins/download-monitor/src/Libs/uaparser/regexes.php é um shell da Web criptografado que usa um parâmetro como um argumento "daw". Ele é chamado a partir do script ProductList.php principal, onde a carga de dw é descriptografada e executada. A chave de descriptografia da carga útil é baseada na string User-Agent da solicitação.
Outro shell da Web é adicionado como uma porta traseira localizada em ./wp-admin/includes/class-wp-page-n3RkIo.php
Ele contém um shell da Web simples que pode ser usado para carregar arquivos:
Conetando-se ao ProductList.php O script com um navegador da Web e a string User-Agent correta gera a seguinte interface shell da Web:
O que está no código binário
Depois de descompactar o malware com "upx -d", podemos analisar a estrutura binária real. Examinar essa estrutura mostra que ela tem funções voltadas para algumas vulnerabilidades bem conhecidas e estruturas de gerenciamento de conteúdo. Algumas das funções mais interessantes estão listadas abaixo. Com base nos nomes das funções e na desmontagem no R2, podemos inferir o que está acontecendo.
O malware Golang pode ser encontrado em VirusTotal com uma data de origem de 9/8/2021:
$ ./redress -compiler Capoae
Versão do compilador: go1.15.4 (2020-11-05T21:21:32Z)
Usando o Redress, podemos ver que o binário foi compilado com o Go v1.15.4.
Aprofundando ainda mais, também encontramos o código de exploração para CVE-2020-14882, que visa o Oracle WebLogic Server com uma execução remota de código (RCE) não autenticada.
O binário usa uma lista de credenciais de log-in de baixa segurança para forçar o caminho para os sistemas que executam SSH. Uma vez autenticado com êxito, o malware instala uma chave pública no .ssh/authorized_keys.
Aqui vemos mais código de exploração, desta vez, visando CVE-2018-20062, uma vulnerabilidade de execução remota de código bem conhecida e amplamente explorada no ThinkPHP.
Esta seção contém outro mecanismo de propagação. Aqui, o malware tenta aplicar força bruta aos pares de credenciais fracas de contra as instalações do WordPress descobertas por meio da API do WordPress XMLRPC.
Desmontagem parcial das funções que visam as instalações do Jenkins para CVE-2019-1003029 e CVE-2019-1003030, ambos são vulnerabilidades de RCE.
O código Guard.go mantém a persistência adicionando uma entrada ao crontab.
Na captura de tela acima, uma lista de funções vinculadas ao arquivo xmRIG_linux_amd64.go é exibida. Essas são vinculações de shell que expõem métodos para interface de mineração de criptografia. A campanha de mineração aproveita o popular software de mineração XMRig, mas é lançada e monitorada pelo malware em última instância.
Um verificador de porta também está incluído no malware e é usado para localizar portas e serviços abertos. Ele se destina a endereços IP gerados aleatoriamente, verificando portas nas quais ele pode lançar suas várias cargas úteis de exploração.
Detonação de malware
Após a execução do binário Golang, uma única string vaga foi impressa no terminal.
Analisando uma estrutura da execução, podemos ver o que os bytes não imprimíveis dentro do texto teriam sido se meu terminal tivesse suporte a caracteres cirílicos.
A saída é, na verdade, "Сканирование", que "digitalização" em russo. Por isso, decidi usar apenas os caracteres ASCII que foram renderizados no meu terminal na detonação inicial e nomearam a amostra de malware Cafoae.
Depois que o malware Capoae é executado, ele tem formas muito inteligentes de persistência. O malware primeiro escolhe um caminho de sistema de aparência legítima em uma pequena lista de locais em um disco onde você provavelmente encontrará binários de sistema. Em seguida, ele gera um nome de arquivo aleatório de seis caracteres e usa essas duas partes para se copiar no novo local do disco e se excluir.
Feito isso, ele injeta/atualiza uma entrada do Crontab que acionará a execução desse binário recém-criado. Quando essa detonação ocorre, todo o processo ocorre novamente. Isso garante que o processo de eliminar a infecção seja parecido com um jogo de bater na marmota, com uma infecção/carga útil em constante movimento.
Entre os exploits de RCE comuns para Oracle WebLogic, como CVE-2020-14882 e CVE-2018-20062 que impactou o ThinkPHP, podemos ver que a estrutura de gerenciamento de conteúdo do WordPress é especificamente direcionada. O malware ataca credenciais de login fracas para obter acesso.
O tema gravável de exploração escreveu um pequeno script PHP para footer.php no tema twentynineteen que baixou o arquivo ldr.sh e o executou. A string user-agent usada é o método pelo qual o host foi infectado. Na captura de tela abaixo, podemos ver que a string User-Agent está definida como "brute_wordpress_admin".
Analisando o exploitUploadPlugin é possível instalar um plug-in usando a interface do painel de administração. A Figura 10 destaca algumas das strings de parâmetros de instalação do plug-in mostradas na desmontagem.
É claro que o objetivo desse malware é extrair criptomoeda. O arquivo de configuração do pool de mineração de criptografia é mostrado abaixo, revelando que os agentes de ameaça estão usando um pool de mineração hospedado em ntup.net, uma empresa de VPS russa.
Conclusões finais
As campanhas de mineração de criptografia continuam evoluindo. O uso de várias vulnerabilidades e táticas pela campanha de Cafoae destaca a intenção desses operadores de entrar no máximo de máquinas possível.
A boa notícia é que as mesmas técnicas que recomendamos para a maioria das organizações para manter os sistemas e redes seguros ainda se aplicam aqui. Não use credenciais fracas ou padrão para servidores ou aplicativos implantados. Certifique-se de manter os aplicativos implantados atualizados com os patches de segurança mais recentes e verifique-os de tempos em tempos.
Ficar de olho no consumo de recursos do sistema acima do normal, nos processos de execução incomuns/inesperados, nos artefatos suspeitos (arquivos, entradas crontab, chaves SSH, etc.) e entradas suspeitas de registro de acesso, etc., ajudarão você a identificar máquinas potencialmente comprometidas. Incluímos também uma lista de indicadores de comprometimento (IoCs) abaixo que podem ser usados para verificar sistemas de arquivos e tráfego de rede quanto a possíveis infecções.
IoCs
SHA256SUM
Capoae 7d1e2685b0971497d75cbc4d4dac7dc104e83b20c2df8615cf5b008dd37caee0 empacotado em UPX
fd8f419f0217be0037ba7ae29baf4c3a08c8f2751b0b1be847b75bd58d6e153f Capoae UPX desempacotado
5a791205bc08396bc413641ea6e5d9fd5ef3f86caf029f51d4da65be700a2b1e ProductList-n3RkIo.php
f37cc420165fb809eb34fbf9c8bf13236a0cc35dee210db5883107a08a70f66d class-wp-page-n3RkIo.php
3521fab245023c56cf5562bd562d6ba98445a052155eb2e40c4a13a9343e6eb regexes.php
ed14f470c95759cc0dca86fd913714b6733af8c0aaa35e3a7ad6604455e2230 sys.i686 empacotado em UPX
af7c5617a89c40aac9eb2e573a37a2d496a5bcaa9f702fa919f86485e857cb74 sys.x86_64 empacotado em UPX
7eb444671ab338eccadf81d43166661ccb4b1e487836ab41e2245db61dceed31 ldr.sh
IPs
198.100.145.141
23.238.128.118
69.12.66.218
207.126.93.190