Precisa de computação em nuvem? Comece agora mesmo

Dark background with blue code overlay
Blog

O malware Capoae aumenta sua força: usa várias vulnerabilidades e táticas para se espalhar 

Larry Cashdollar

escrito por

Larry Cashdollar

September 16, 2021

Larry Cashdollar

escrito por

Larry Cashdollar

Larry W. CashDollar trabalha na área de segurança como pesquisador de vulnerabilidade há mais de 18 anos e atualmente é membro da equipe de resposta a incidentes de segurança da Akamai Technologies. Estudou Ciência da Computação na Universidade do Sul do Maine. Larry documentou mais de 150 CVEs e até apresentou sua pesquisa no BSIS Boston, OWASP Rhode Island e Defcon. Ele gosta do ar livre e de reconstruir motores de motocicletas de pequeno porte em seu tempo livre.

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.

captura de tela

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:  

Fig. 2) a string acima na figura 1 é decodificada. Fig. 2) a string acima na figura 1 é decodificada

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.

Fig. 3) string User-Agent sendo usada como chave de descriptografia Fig. 3) string User-Agent sendo usada como chave de descriptografia

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:

Fig. 4) um pequeno arquivo carrega o script shell da Web Fig. 4) um pequeno arquivo carrega o script shell da Web

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:

Fig. 5) Webshell depois de ser descriptografado e executado Fig. 5) Webshell depois de ser descriptografado e executado

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.

Fig. 6) Saída da execução do malware Capoae Fig. 6) Saída da execução do malware Capoae

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. 

Fig. 7) Saída do strace mostrando a palavra russa para "Shenning". Fig. 7) Saída do strace mostrando a palavra russa para "Shenning".

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. 

Fig. 8) Entrada de Crontab Fig. 8) Entrada de Crontab

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. 

Fig. 9) Uma lista de funções específicas do WordPress Fig. 9) Uma lista de funções específicas do WordPress

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".

Fig. 10) Captura de pacotes de modificação para footer.php Fig. 10) Captura de pacotes de modificação para footer.php

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. 

Fig. 11) Uma desmontagem parcial do exploitUploadPlugin Fig. 11) Uma desmontagem parcial do exploitUploadPlugin

É 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.

Fig. 12) O arquivo de configuração do minerador em JSON Fig. 12) O arquivo de configuração do minerador em JSON

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


Larry Cashdollar

escrito por

Larry Cashdollar

September 16, 2021

Larry Cashdollar

escrito por

Larry Cashdollar

Larry W. CashDollar trabalha na área de segurança como pesquisador de vulnerabilidade há mais de 18 anos e atualmente é membro da equipe de resposta a incidentes de segurança da Akamai Technologies. Estudou Ciência da Computação na Universidade do Sul do Maine. Larry documentou mais de 150 CVEs e até apresentou sua pesquisa no BSIS Boston, OWASP Rhode Island e Defcon. Ele gosta do ar livre e de reconstruir motores de motocicletas de pequeno porte em seu tempo livre.