Voltar
Malware Intelligence
Tabela de conteúdo

Sumário executivo

Ameaça

  • Os agentes de ameaças atacam os servidores VMware ESXi usando um script de ransomware personalizado.
  • O ransomware explora uma antiga vulnerabilidade RCE (CVE-2021-21974) nas versões ESXi: 7.0 antes de ESXi70u1c-173255516.7 antes de ESXi670-202102401-SG6.5 antes de ESXi650-202102101-SG

Impacto

  • O ransomware criptografa arquivos armazenados nos servidores usando a cifra de fluxo RSA e Sosemanuk.
  • Isso pode levar à perda de dados, continuidade de negócios e receita.

Mitigação

  • Atualize os servidores para as versões mais recentes e instale os patches necessários.
  • Faça backup regular de todos os dados armazenados nos servidores.

Análise e atribuição

Em 03 de fevereiro de 2023, houve um aumento nos ataques contra servidores VMware ESXi. Os agentes de ameaças estavam aproveitando uma vulnerabilidade antiga (CVE-2021-21974) para obter RCE (Execução Remota de Código) e lançar ataques de ransomware.

A versão do OpenSLP usada nas versões 7.0 do ESXi antes do ESXi70u1c-17325551, 6.7 antes do ESXi670-202102401-SG e 6.5 antes do ESXi650-202102101-SG são vulneráveis a um ataque de estouro de pilha, que permitiu que os invasores executassem a execução remota de código.

Em 03 de fevereiro de 2023, um membro do fórum Bleeping Computer linha, com acesso a um servidor de destino, compartilharam um script e um executável, encontrados em seus servidores ESXi. Esses arquivos foram supostamente usados para criptografar o conteúdo de seus servidores ESXi.

Arquivos relacionados ao ataque compartilhados por um membro

Visão geral dos arquivos

encrypt.sh (O script)

  • O script é usado para preparar o alvo para criptografia e carregar a carga útil do ransomware usada para criptografar o servidor.
  • O script procura extensões de arquivo específicas (.vmdk, .vmx, .vmxf, .vmsd, .vmsn, .vswp, .vmss, .nvram e.vmem) no servidor, calcula seus tamanhos e inicia a criptografia.
  • Ele também é responsável por editar a configuração do servidor e renomear arquivos importantes. Isso é feito para dificultar a restauração do sistema.
  • Depois que todas as operações estiverem concluídas, o script realiza uma limpeza e deixa uma nota de resgate no servidor da vítima.

criptografar binário (carga útil de ransomware)

  • Binário usado pelo script para criptografar os arquivos de destino no servidor.
  • Usa uma chave pública RSA e a cifra de fluxo SOSEMANUK para criptografar arquivos.

Análise técnica (encrypt.sh)

O roteiro foi escrito em Bash. Ele é responsável por preparar o sistema e chamar a carga útil do Ransomware para criptografar arquivos. Uma vez feito isso, ele executa uma limpeza no sistema.

Operações de pré-criptografia

O script começa definindo seu diretório de trabalho como /tmp/. Os arquivos que ele usa para o ataque são armazenados aqui. Depois disso, ele usa o comando lista de processos esxcli vm | grep “Arquivo de configuração” | awk '{print $3}' para encontrar os arquivos de configuração associados às máquinas virtuais no servidor.

Em seguida, ele substitui os nomes dos arquivos da imagem do disco e o arquivo de troca em todos os arquivos de configuração por 1. vmdk e 1. vswp. Isso é feito para dificultar que as vítimas recuperem e reconfigurem as máquinas virtuais, pois identificar as imagens do disco e trocar arquivos será quase impossível.

Definindo o diretório de trabalho e renomeando a imagem do disco e os arquivos de troca associados às VMs no servidor

Depois disso, o script elimina os processos de VM em execução usando o mate comando. O script agora está pronto para iniciar a criptografia de todos os arquivos no servidor.

Eliminando processos de VM em execução

Criptografia

O script inicia suas operações de criptografia fazendo o encriptar executável binário para todos os usuários e grupos, usando o comando chmod +x. Em seguida, ele itera sobre o conteúdo do sistema de arquivos, procurando todos os arquivos com as extensões .vmdk, .vmx, .vmxf, .vmsd, .vmsn, .vswp, .vmss, .nvram e.vmem. Todas essas extensões de arquivo são usadas por máquinas virtuais, por exemplo, imagens de disco, arquivos de configuração, arquivos de troca etc.

Procurando arquivos com as extensões de arquivo de destino

Em seguida, o script calcula os tamanhos dos arquivos que têm as extensões de destino e fornece as extensões e tamanhos do nome do arquivo de destino como argumentos para o encriptar binário, junto com um .pem arquivo chave.

Ao investigar o uso do binário, verifica-se que o .pem arquivo é uma chave pública RSA que é usada no processo de criptografia.

Argumentos adotados pelo binário

Isso inicia o processo de criptografia. Observe que há um .args arquivo criado para cada arquivo criptografado, contendo metadados sobre o arquivo. Isso pode ser necessário para o processo de descriptografia.

Criptografando arquivos

Operações e limpeza pós-criptografia

Depois que os arquivos são criptografados, o script primeiro substitui a Mensagem do Dia (.motd) arquivo com a nota de resgate. Em seguida, ele exclui todos os arquivos de log para encobrir seus rastros. Ele garante que o processo de criptografia termine antes de prosseguir.

Alterando a mensagem do dia para a nota de resgate e excluindo todos os registros

Em seguida, ele exclui o arquivo /sbin/hostd-probe, que é um arquivo usado pelo hospedado daemon para gerenciar máquinas virtuais. Caso exista um backup desse arquivo, ele modifica a data e hora do arquivo para ocultar as alterações feitas no arquivo.

Exclusão e alteração dos arquivos hostd-probe e hostd-probe.bak

Dependendo da compilação do VMware, o script executa operações diferentes. Se a versão de compilação do VMware não for 7.0, ela executará as seguintes etapas para ocultar todos os cron jobs executados pelo usuário root:

  • O script modifica o conteúdo do /var/spool/cron/crontabs/root arquivo. Ele exclui as primeiras 8 linhas do arquivo.
  • Renomeia o novo arquivo com o nome do arquivo original.
  • Exclui o arquivo original.
  • Altera a data e hora do novo arquivo.
Excluindo e recriando o arquivo raiz crontabs

Para a versão 7.0 do VMware build:

  • Ele remove a primeira linha do /sbin/hostd-probe arquivo e sobrescreve o arquivo original.
Excluindo e recriando o arquivo raiz crontabs

Por fim, o script conduz suas operações de limpeza. As operações de limpeza são as seguintes:

  • Excluindo o arquivo /store/packages/vmtools.py. Observe que esse nome de arquivo está associado a um backdoor criado para servidores ESXi no passado.
  • Excluindo a última linha do arquivo /etc/vmware/rhttpproxy/endpoints.confe modificando o carimbo de data/hora.
  • Limpe o conteúdo do /etc/rc.local.d/local.sh arquive e modifique o carimbo de data/hora.
  • Modifique o carimbo de data/hora do /bin/hostd-probe.sh arquivo.
  • Exclua todos os arquivos usados no ataque, que estão armazenados no diretório de trabalho.
Operações de limpeza

Após as operações de limpeza, o script inicia o serviço SSH, possivelmente no caso de o agente da ameaça querer retornar ao servidor.

Análise técnica (encriptar binário)

A carga útil do ransomware usada pelo script é um binário ELF de 64 bits compilado pelo GCC, que atende pelo nome encriptar. Os argumentos usados pelo binário são mostrados abaixo:

Argumentos adotados pelo binário

Operações de pré-criptografia

  • Ele primeiro inicializa o libssl biblioteca usando o init_libssl função. Essa biblioteca contém funções que são usadas na criptografia.
  • Em seguida, ele obtém informações sobre a chave pública RSA fornecida anteriormente e cria um objeto RSA para criptografar os arquivos por RSA. Isso é feito usando o get_pk_data e create_rsa_obj função.
  • Depois disso, ele chama o arquivo_criptografado função
Operações de pré-criptografia

Criptografia

Há duas camadas de criptografia aplicadas:

  • Usando a chave pública RSA anteriormente, os arquivos são primeiro criptografados com RSA. Isso é feito usando o rsa_encrypt função.
  • Em seguida, os arquivos são criptografados posteriormente usando a biblioteca Sosemanuk. Sosemanuk é uma cifra de fluxo, que visa grande eficiência em hardware de baixo custo. Isso é feito usando o sosemauk_encrypt função, que é chamada pelo encrypt_simple função.

As duas funções à esquerda e a função sosemanuk_encrypt sendo chamada dentro da função encrypt_simple à direita

Análise OSINT

A análise do OSINT revelou que mais de 3200 organizações foram infectadas, embora seja difícil determinar o número de servidores vulneráveis. No entanto, o Shodan e o Censys podem ser usados para verificar se há organizações infectadas.

Um exemplo de consulta para verificar o shodan:

html: "Hackeamos sua empresa com sucesso” title: "Como restaurar seus arquivos”

Uma consulta semelhante também pode ser executada no Censys para obter organizações infectadas:

Endereços BTC de resgate

O grupo exige o valor do resgate por meio dos seguintes endereços BTC:

  • 1PAfdd9fwqrwg4vccguy27vtw8xpzmuf1d
  • 1Gequkxf8TEYRFPHPY79trv7xrtmargc92

No entanto, ainda não há transações nos endereços.

Nota de resgate

A nota de resgate exibida às vítimas contém o valor do resgate em Bitcoin e um ID TOX, que as vítimas devem acessar para descriptografar seus arquivos. Alegadamente, a quantidade de Bitcoin e o TOX ID diferem de vítima para vítima.

Um exemplo da nota de resgate exibida às vítimas

Detectando na natureza

Pesquisadores da CloudSEKA equipe de Inteligência de Ameaças da YARA escreveu as regras de detecção da YARA para os dois arquivos usados nesse ataque. Consulte Apêndice.

Indicadores de compromisso (IOCs)

Files Obtained

encrypt.sh

encrypt

SHA256

10C3B6B03A9BF105D264A8E7F30DCAB0A6C59A414529B0AF0A6BD9F1D2984459

11B1B2375D9D840912CFD1F0D0D04D93ED0CDDB0AE4DDB550A5B62CD044D6B66

Apêndice

Regra YARA para detectar o script


rule esxiargs_script
{
    meta:
        Version = "1.0"
        author = "MalwareIntel_TRIAD_CloudSEK"
        Date = "07/02/23"
        Description = "YARA rule to identify script used in ESXiArgs Ransomware attack"

    strings:
        $a1 = "START ENCRYPT: $file_e SIZE: $size_kb STEP SIZE: $size_step" fullword nocase 
        $a2 = "nohup $CLEAN_DIR/encrypt $CLEAN_DIR/public.pem " fullword nocase        
        $a3 = "/bin/ps | /bin/grep encrypt | /bin/grep -v grep | /bin/wc -l" fullword nocase       
    
    condition:
        all of ($a*)

}


Regra YARA para detectar o binário


import "pe"
rule esxiargs_binary
{
    meta:
        Version = "1.0"
        author = "MalwareIntel_TRIAD_CloudSEK"
        Date = "07/02/23"
        Description = "YARA rule to identify Ransomware used in ESXiArgs Ransomware attack"

    strings:
        $a1 = "usage: encrypt   [] [] []" fullword nocase 
        $a2 = "enc_step   -   number of MB to skip while encryption" fullword nocase        
        $a3 = "enc_size   -   number of MB in encryption block" fullword nocase       
        $a4 = "file_size  -   file size in bytes (for sparse files)" fullword nocase
    
    condition:
        uint32(0) == 0x464C457F and all of ($a*)

}

Mehardeep Singh Sawhney
Extremely passionate about cyber security and it's real application in protecting Information Assets. Love learning about new ways to exploit devices
Anirudh Batra
Threat Analyst at CloudSEK
Deepanjli Paulraj
Deepanjli is CloudSEK's Lead Technical Content Writer and Editor. She is a pen wielding pedant with an insatiable appetite for books, Sudoku, and epistemology.

Blogs relacionados