Dark background with blue code overlay
Blog

O Kinsing evolui | Blog da Akamai

Evyatar Saias

escrito por

Evyatar Saias

September 16, 2021

Evyatar Saias

escrito por

Evyatar Saias

Evyatar Saias é pesquisador de segurança no departamento de inteligência de segurança da Akamai. 

Introdução

Uma botnet de criptomineração grande e persistente está infectando sistemas em escala na Internet. 

A campanha foi vista pela primeira vez pela SIRT da Akamai em 16 de fevereiro de 2021 e parece ter como alvo os sistemas Windows e Linux. A botnet despertou nosso interesse porque se mostrou altamente ativa em um conjunto diversificado de regiões geográficas, incluindo as Américas, Europa e Ásia. A botnet tem operado usando o mesmo endereço IP de distribuição (194.38.20.199), sem precisar mudar há mais de seis meses. Anteriormente, a campanha visava apenas máquinas Linux, mas foi expandida recentemente também para sistemas Windows.

Infecção de sistemas Windows

Para infectar máquinas Windows, a botnet utiliza o CVE-2020-14883, uma vulnerabilidade que afeta as versões 10.3.6.0.0, 12.1.3.0.0, 12.2.1.3.0, 12.2.1.4.0 e 14.1.1.0.0 do Oracle WebLogic Server. Quando explorada, permite que um invasor faça a execução remota de código (RCE), o que pode resultar em uma apropriação indevida do Oracle WebLogic Server. 

A infeção começa fazendo com que a máquina vítima faça download e execute um arquivo XML chamado wbw.xml. Em máquinas Windows, o arquivo XML é executado por meio da classe ClassPathXmlApplicationContext

Fig. 1) A máquina vítima faz download e executa um arquivo xml remoto por meio da classe ClassPathXmlApplicationContext, CVE-2020-14883 Fig. 1) A máquina vítima faz download e executa um arquivo xml remoto por meio da classe ClassPathXmlApplicationContext, CVE-2020-14883

 

O arquivo wbw.xml obtido contém um comando incorporado do PowerShell, que é executado na máquina da vítima. O comando é:

 

Ele tenta baixar um script do PowerShell chamado “ 1.ps1" na máquina da vítima usando o método System.Net.WebClient.DownloadString . Ele também utiliza o sinalizador de desvio Set-ExecutionPolicy para garantir que nada seja bloqueado e que nenhum prompt ou aviso seja gerado durante a execução. 

Fig. 2) Conteúdo do arquivo wbw.xml que contém um comando do PowerShell que baixa um script do PowerShell chamado 1.ps1 na máquina da vítima Fig. 2) Conteúdo do arquivo wbw.xml que contém um comando do PowerShell que baixa um script do PowerShell chamado 1.ps1 na máquina da vítima

 

O script 1.ps1 baixa um criptominerador executável chamado xmrig.exe, bem como um arquivo config.json , que contém informações de configuração para o minerador consumir,  como endereços de criptocarteiras, pontos de extremidade de criptopools e configurações adicionais. Além disso, o script 1.ps1 também contém uma variável $miner_name que armazena o novo nome para o qual o criptominerador executável, xmrig.exe, será renomeado. Nesse caso, xmrig.exe será  renomeado para “sysupdate” e, em seguida, executado. 

Fig. 3) Uma parte do script do PowerShell 1.ps1 Fig. 3) Uma parte do script do PowerShell 1.ps1
Fig. 4) Uma parte do config.json, que contém configurações para o minerador executável, como pontos de extremidade do pool de mineração e endereços de criptocarteiras. Fig. 4) Uma parte do config.json, que contém configurações para o minerador executável, como pontos de extremidade do pool de mineração e endereços de criptocarteiras.

 

O script 1.ps1 estabelece persistência na máquina da vítima para atualizar o arquivo config.json e o minerador. Isso é feito utilizando SchTasks.exe, que permite a criação, exclusão e execução de tarefas programadas em uma máquina local ou remota no PowerShell. Mais informações sobre SchTasks.exe podem ser encontradas aqui. A tarefa programada é denominada “Serviço de atualização para o Serviço do Windows" e novamente utiliza osinalizador de desvio -ExecutionPolicy para evitar o surgimento de avisos ou prompts durante a execução, bem como o sinalizador oculto -windowstyle para permanecer oculto.

Fig. 5) O script do PowerShell 1.ps1 estabelece persistência criando uma tarefa agendada chamada "Serviço de atualização para o Serviço do Windows" para enviar atualizações para o arquivo de configuração e para o minerador executável Fig. 5) O script do PowerShell 1.ps1 estabelece persistência criando uma tarefa agendada chamada "Serviço de atualização para o Serviço do Windows" para enviar atualizações para o arquivo de configuração e para o minerador executável

Infecção de sistemas Linux

A campanha está utilizando vários CVEs para atingir a RCE a fim de infectar sistemas Linux. Junto com o malware Kinsing, que contém um criptominerador, as cargas do Linux também têm  um cavalo de troia de acesso remoto (RAT). Os serviços-alvo incluem o Oracle WebLogic Server, Redis, Apache Solr, PHPUnit e Supervisor XML-RPC.

O CVE-2020-14883 do Oracle WebLogic Server também é utilizado por esta campanha em sistemas Linux. No entanto, diferentemente da versão Windows dessa vulnerabilidade, em que a RCE acontece por meio da classe  ClassPathXmlApplicationContext , no Linux, isso acontece por meio da classe FileSystemXmlApplicationContext . O arquivo XML mal-intencionado é chamado de wb.xml, que baixa um script bash, em vez do wbw.xml anterior para Windows, que baixa um script do PowerShell.

Fig. 6) A máquina vítima faz download e executa um arquivo xml remoto por meio da classe FileSystemXmlApplicationContext, CVE-2020-14883 Fig. 6) A máquina vítima faz download e executa um arquivo xml remoto por meio da classe FileSystemXmlApplicationContext, CVE-2020-14883
Fig. 7) O conteúdo do arquivo wb.xml, que contém um comando bash que baixa e, em seguida, executa um script bash chamado wb.sh na máquina da vítima Fig. 7) O conteúdo do arquivo wb.xml, que contém um comando bash que baixa e, em seguida, executa um script bash chamado wb.sh na máquina da vítima

 

Em sistemas Linux, a infecção começa atingindo a RCE com qualquer um dos CVEs fornecidos na tabela a seguir para baixar um arquivo de script bash na máquina da vítima.

Fig. 8) As CVEs utilizadas pela campanha para infectar vítimas Fig. 8) As CVEs utilizadas pela campanha para infectar vítimas

 

Embora o nome do arquivo de script bash varie entre s.sh , p.sh, sup.sh, d.sh, ex.sh, r.sh, spr.sh, tf.sh ou wb.sh , todos fazem praticamente a mesma coisa.

O script bash elimina todos os mineradores concorrentes que podem existir no sistema e desativa os recursos de segurança e registro. Em seguida, ele faz o download do malware Kinsing (escrito em Golang), estabelece a persistência usando o crontab e, em seguida, inicia a criptomineração.

Fig. 9) Uma parte do script bash mal-intencionado que baixa o criptominerador Kinsing na máquina Linux da vítima Fig. 9) Uma parte do script bash mal-intencionado que baixa o criptominerador Kinsing na máquina Linux da vítima

 

Uma vez executado na máquina da vítima, o malware Kinsing cria um segundo processo chamado kdevtmpfsi no diretório /tmp, que é o criptominerador xmrig, e o executa. O malware Kinsing monitora constantemente o processo kdevtmpfsi para garantir que esteja em execução.

Decodificação do endereço IP de comando & controle 

A maneira como o malware se comunica com o servidor C2 é decodificando o endereço IP C2 no tempo de execução usando uma função chamada getActiveC2CUrl. A função getActiveC2CUrl usa uma cifra de fluxo RC4 para dados hexadecimais de texto sem formatação XOR com uma chave de texto sem formatação que são armazenadas no binário. 

Devido à natureza de como as strings são armazenadas em um binário Golang,  em que todas as strings estáticas ficam basicamente concatenadas umas com as outras, resultando em um grande blob de string, a chave de texto sem formatação e os dados hexadecimais podem ser facilmente ocultados dentro dessa enorme string. Depois de certa reversão na função getActiveC2CUrl , o local na memória e o comprimento da chave e dos dados hexadecimais podem ser encontrados.

Fig. 10) O local na memória e o comprimento dos dados hexadecimais de texto sem formatação C2 e da chave de criptografia são mostrados. Fig. 10) O local na memória e o comprimento dos dados hexadecimais de texto sem formatação C2 e da chave de criptografia são mostrados.

A função getActiveC2CUrl decodifica os dados hexagonais C2 e, em seguida, juntamente com a chave, eles são passados para uma segunda função chamada RC4. A função personalizada RC4 usa a função func (c *Cipher) XORKeyStream(dst, src []byte) internamente a partir do pacote golang rc4 para gerar o endereço IP C2.

Quando os dados hexagonais C2 e a chave são obtidos, a função getActiveC2CUrl pode sofrer engenharia reversa e ser reescrita posteriormente em Golang para calcular o endereço IP C2 ativo.

Fig. 11) A função getActiveC2CUrl() é reescrita em Golang com os dados hexadecimais C2 e a chave obtidos para gerar o endereço IP C2 ativo. Fig. 11) A função getActiveC2CUrl() é reescrita em Golang com os dados hexadecimais C2 e a chave obtidos para gerar o endereço IP C2 ativo.

Recursos de RAT

O malware Kinsing tem recursos de cavalo de troia de acesso remoto (RAT) que podem ser encontrados em uma função chamada doTask() dentro do binário. A função doTask contém algumas chamadas de função interessantes que executa com base em uma determinada entrada

  • runTaskWithScan()

  • updateTask()

  • startCmd()

  • execTaskOut()

  • masscan()

  • socks()

  • backconnect()

  • runTaskWithHttp()

  • downloadAndExecute()

 

Uma dessas funções interessantes é startCmd() , que permite que um comando arbitrário seja executado na máquina da vítima.

 

Fig. 12) A função doTask() em um formulário descompilado está mostrando os recursos RAT do malware. Em destaque, a função startCmd() incorporada, que permite que um comando arbitrário seja executado na máquina da vítima. Fig. 12) A função doTask() em um formulário descompilado está mostrando os recursos RAT do malware. Em destaque, a função startCmd() incorporada, que permite que um comando arbitrário seja executado na máquina da vítima.

Comunicação de comando & controle

O malware se comunica com o C2,185.154.53.140, via HTTP.  Ele envia as solicitações HTTP C2 regularmente, recebe instruções a serem executadas e fornece verificações de integridade simples.

A máquina infectada envia as informações C2 a cada solicitação HTTP sobre seu status atual e recursos do sistema, como número de núcleos, memória, sistema operacional, se os privilégios raiz foram obtidos ou não e muito mais.  Todos esses parâmetros são fornecidos ao servidor C2 usando cabeçalhos HTTP personalizados.

 Fig. 13) Uma solicitação POST feita de uma máquina infectada para o C2, que contém informações sobre os recursos do sistema da vítima e os privilégios obtidos Fig. 13) Uma solicitação POST feita de uma máquina infectada para o C2, que contém informações sobre os recursos do sistema da vítima e os privilégios obtidos

Um ponto de extremidade que a máquina infectada solicita constantemente para receber instruções é  /get. Quando uma máquina infectada faz uma solicitação GET ao ponto de extremidade /get do C2, o malware tenta imediatamente baixar novos scripts de shell mal-intencionados adicionais do IP de distribuição original 194.38.20.199.

Fig. 14) A máquina infectada faz uma solicitação GET para o ponto de extremidade /get do C2 e, como resultado, busca novos scripts de shell do IP de distribuição original 194.38.20.199 Fig. 14) A máquina infectada faz uma solicitação GET para o ponto de extremidade /get do C2 e, como resultado, busca novos scripts de shell do IP de distribuição original 194.38.20.199

 

Os scripts bash que são então baixados do IP de distribuição original 194.38.20.199 como resultado do acesso ao ponto de extremidade /get do C2 são chamados de ph.sh e spre.sh. Esses dois arquivos são diferentes do script bash de infecção inicial que vimos anteriormente. Cada um deles tem uma finalidade diferente e contém vetores de infecção adicionais.


Primeiro, vamos examinar o script ph.sh , que faz download de um rootkit chamado libsystem.so do ponto de extremidade 194.38.20.199/libsystem.so , além do malware Kinsing existente na máquina da vítima. Em seguida, o script ph.sh pré-carrega esse rootkit em /etc/ld.so.preload

Fig. 15) Uma parte do script bash ph.sh que pré-carrega o rootkit libsystem.so obtido em /etc/ld.so.preload Fig. 15) Uma parte do script bash ph.sh que pré-carrega o rootkit libsystem.so obtido em /etc/ld.so.preload

 

O script ph.sh também estabelece um segundo mecanismo de persistência, além das tarefas cron já existentes que foram injetadas anteriormente pelo script inicial. Ele faz isso registrando um serviço de sistema que periodicamente reinfectará o host.

Fig. 16) Uma parte do script bash ph.sh que cria um serviço de sistema para estabelecer persistência e reinfecta o host periodicamente. Fig. 16) Uma parte do script bash ph.sh que cria um serviço de sistema para estabelecer persistência e reinfecta o host periodicamente.

 

Se quiser saber mais sobre o rootkit libsystem.so que o script ph.sh instala e seu funcionamento interno, a Trend Micro escreveu um blog fantástico sobre esse rootkit específico que pode ser encontrado aqui

O segundo arquivo de script bash interessante que é obtido devido a uma resposta /get do ponto de extremidade C2 é spre.sh. Seu objetivo é espalhar a infecção para outros hosts encontrando credenciais ssh de qualquer host ao qual a vítima tenha acesso e examinando  ~/.ssh/config , ~/.bash_history  e  .ssh/known_hosts. O script spre.sh então fará tentativas no ssh dos hosts descobertos usando as credenciais obtidas que foram encontradas e os infectam também.

 

Fig. 17) O script bash spre.sh espalha a infecção para outros hosts usando ssh ao encontrar credenciais ssh em ~/.ssh/config ~/.bash_history e .ssh/known_hosts Fig. 17) O script bash spre.sh espalha a infecção para outros hosts usando ssh ao encontrar credenciais ssh em ~/.ssh/config ~/.bash_history e .ssh/known_hosts

 

Outro ponto de extremidade C2 interessante do qual a máquina infectada solicita instruções é o ponto de extremidade /mg . Quando a máquina infectada faz uma solicitação GET ao ponto de extremidade /mg , o C2 responde com alguns caracteres, e a máquina infectada começa imediatamente a se comunicar com um terceiro endereço IP, 95.181.179.88, que parece ser responsável por fornecer comandos de mineração para a máquina infectada na forma de uma carga JSON-RPC por HTTP.

Fig. 18) A máquina infectada faz uma solicitação GET ao ponto de extremidade /mg do C2 Fig. 18) A máquina infectada faz uma solicitação GET ao ponto de extremidade /mg do C2

O que fazer

Para mitigar essas ameaças, a SIRT da Akamai aconselha o monitoramento dos processos em seus sistemas quanto a um consumo de recursos anormalmente alto e atividade de rede suspeita. Um alto uso anormal de um determinado processo pela CPU pode ser um indicador de atividade de criptomineração.

A SIRT da Akamai também recomenda que você verifique com frequência as tarefas cron registradas nas crontabs de seus sistemas para garantir que as tarefas cron não estejam se comunicando com nenhum endereço IP desconhecido, que é uma técnica comum para o malware Linux estabelecer persistência, e a campanha discutida não é exceção.

Em sistemas Windows, o mesmo deve ser feito com o PowerShell usando SchTasks.exe /Query para exibir todas as tarefas agendadas que possam ter sido criadas por essa campanha. Verifique também os processos em execução nos seus sistemas Linux e certifique-se de que os processos com o nome kinsing ou kdevtmpfsi não estejam em execução e que um processo chamado sysupdate não esteja em execução em seus sistemas Windows.

Adicione autenticação forte a seus sistemas sempre que possível. Senhas fracas podem sofrer facilmente ataques de força bruta. Além disso, certifique-se de que os serviços que são alvos da campanha discutida, que incluem Oracle WebLogic Server, Redis, Apache Solr, PHPUnit e Supervisor XML-RPC, não estejam conectados à Internet se não precisarem estar, o que reduz muito o risco de esses serviços serem infectados. Por exemplo, se uma instância do Redis for usada apenas por sistemas internos, ela não precisará estar conectada à Internet. 

A SIRT da Akamai também recomenda verificar seus sistemas em relação às indicações de comprometimento (IOC) fornecidas na seção de IoCs abaixo para garantir que seus sistemas não estejam infectados.  Além disso, aplique patches em seus sistemas regularmente e siga as práticas recomendadas.

Indicações de comprometimento (IOC)

IPs

IP

Descrição

185.154.53.140

Comando & controle 

194.38.20.199

Distribuição de malware 

95.181.179.88

Gerencia operações de criptomineração

195.3.146.118

Distribuição de malware de backup

 

Arquivos

SHA-256

Nome

Descrição

8ca0229fb64e3f1819375cf1daf32104c37c0d0923bdc35cb6bea655ecd1a6a4

s.sh

194.38.20.199/s.sh, script bash que baixa malware Kinsing

ede8fdb68d777efcc0538b465d640cbb2c061bd49461f76d65f68c135ff8bbb6

p.sh

194.38.20.199/p.sh, script bash que baixa malware Kinsing

0e79ec7b00c14a4c576803a1fd2e8dd3ea077e4e98dafa77d26c0f9d6f27f0c9

d.sh

194.38.20.199/d.sh, script bash que baixa malware Kinsing

6e35b5670953b6ab15e3eb062b8a594d58936dd93ca382bbb3ebdbf076a1f83b

spr.sh        

194.38.20.199/spr.sh, script bash que baixa malware Kinsing

818179ac928027a5c26c9b13d3d830b7331c3e4c46ba1e305867e3d4accaf3ef

r.sh

194.38.20.199/r.sh, script bash que baixa malware Kinsing

56ac2321e481708ea72e2bf7710e66c3455afa729b24f6a6ba9065ae0cca8fb3

ex.sh

194.38.20.199/ex.sh, script bash que baixa malware Kinsing

05e5ad89443b58805ae2eb2628d3eef1d6cbcc338bced23f422abe5ce60ff82d

tf.sh

194.38.20.199/tf.sh, script bash que baixa malware Kinsing

274b11542fcb30065c4cc0976ce33252ba2812756f7e22f6d80fae1acadf5c4c

wb.sh

194.38.20.199/wb.sh, script bash que baixa malware Kinsing

6e25ad03103a1a972b78c642bac09060fa79c460011dc5748cbb433cc459938b

kinsing

194.38.20.199/kinsing, o binário do malware Kinsing

7d31843ce5231c95ce07a609cb4473fe53b95a8d0685df9d666de348d17c69ff

arquivo config.json

194.38.20.199/config.json, configuração json para minerador XMRIG

c38c21120d8c17688f9aeb2af5bdafb6b75e1d2673b025b720e50232f888808a

libsystem.so

194.38.20.199/libsystem.so, um binário de rootkit

5e5b5171a95955ecb0fa8f9f1ba66f313165044cc1978a447673c0ac17859170

xmrig.exe

194.38.20.199/xmrig.exe,

minerador XMRIG para Windows

49ff0329b9ad42c7fb17e6a2d80b316ed6b759ab5dfd04a5aba42b97225494cf

wbw.xml

194.38.20.199/wbw.xml, arquivo xml que baixa um script do powershell para infectar sistemas Windows

25b545dc3423d5c3c0181f559486643a7097b5fd87b32f0347ed667cbf3fb38e

wb.xml

194.38.20.199/wb.xml, arquivo xml que baixa um script bash para infectar sistemas Linux

6b9e23cb675be370a18a0c4482dc566be28920d4f1cd8ba6b4527f80acf978d3

curl-amd64

194.38.20.199/curl-amd64 , binário curl

fecd30cd7802f8ac4137a2d0659b3052411a99d809a5aefb48f8b821905100f3

al.sh

194.38.20.199/al.sh, script bash que interrompe o serviço aegis 

cb2ca16246a687b34fa1ba76015cb4aa3b50b4ecca4550478eb580c4725ab48f

cron.sh

194.38.20.199/cron.sh, script bash que atualiza a crontab

d7cda9e427d0848352a1158c68a2577c1600965fb9dbb32bc1e10af1a442d284

ph.sh

194.38.20.199/ph.sh, script bash que baixa o malware Kinsing e o rootkit libsystem.so

f4c319e43296ab323615ac4bd4b7601991218ecb6d6043b1c040a96f1a33f14f

spre.sh

194.38.20.199/spre.sh, script bash que espalha a infecção para outros hosts via ssh

dd603db3e2c0800d5eaa262b6b8553c68deaa486b545d4965df5dc43217cc839  

kdevtmpfsi

O processo do criptominerador Kinsing



Evyatar Saias

escrito por

Evyatar Saias

September 16, 2021

Evyatar Saias

escrito por

Evyatar Saias

Evyatar Saias é pesquisador de segurança no departamento de inteligência de segurança da Akamai.