Voltar
Malware Intelligence
Tabela de conteúdo

Nos últimos anos, os ataques de ransomware se tornaram cada vez mais comuns, com novas cepas sendo descobertas o tempo todo. Uma dessas cepas é o ransomware BlackCat, que vem causando estragos em organizações em todo o mundo. O ALPHV, também conhecido como BlackCat, é uma família de ransomware vista pela primeira vez no final de 2021 e tem como alvo várias empresas em todos os setores. Os operadores do ransomware são vistos empregando técnicas de dupla extorsão, que envolvem não apenas criptografar o sistema, mas também roubar arquivos confidenciais de suas vítimas. Alegadamente, outra ferramenta é usada com o ransomware para roubar dados.

O ransomware BlackCat é escrito em Rust e vem na forma de uma ferramenta de linha de comando, que pode ser executada com argumentos diferentes. Ele é capaz de eliminar vários processos e serviços. Um de seus principais recursos é a capacidade de aumentar os privilégios e ignorar o Controle de Conta de Usuário (UAC). Esse malware sofisticado usa criptografia AES ou ChaCha20 (dependendo de sua configuração) para criptografar todos os arquivos no sistema da vítima. Além disso, ele tem recursos de evasão de sandbox, dificultando a análise da amostra. O ransomware exige argumentos para ser executado, impossibilitando sua análise em uma sandbox. Neste blog, examinaremos mais de perto as características e os aspectos técnicos desse ransomware escrito em Rust.

Visão geral da campanha histórica

Foi testemunhado que os atacantes que usam o ransomware BlackCat também usam uma ferramenta roubadora.NET chamada ExMatter, desenvolvida pelo mesmo grupo APT, para baixar arquivos da máquina vítima. É isso que torna esse ataque ainda mais formidável, pois dá aos atacantes a vantagem de usar uma técnica conhecida como extorsão dupla, que envolve a pressão adicional de vazar arquivos roubados, possivelmente contendo dados confidenciais. (Consulte o Apêndice para uma regra da YARA que ajuda na caça ao BlackCat.)

Análise técnica

O binário BlackCat vem na forma de uma ferramenta de linha de comando que pode ser executada usando argumentos diferentes. Por exemplo:

  • Ao usar —verboso, os registros criados pelo BlackCat serão exibidos no console.
  • O —ui A opção exibe uma exibição semelhante à GUI na janela do terminal, mostrando o progresso e as informações relacionadas aos arquivos que estão sendo criptografados no sistema.
Captura de tela do tipo GUI exibida ao usar a opção UI

Desses argumentos, apenas um deles é essencial para a execução do binário, que é o token de acesso argumento.

Lista dos argumentos que podem ser usados durante a execução do binário

Operações de pré-criptografia

Conforme mencionado anteriormente, o binário só será executado se for fornecido com um token de acesso de 32 caracteres. Ele usa o Obtenha a linha de comando W API para verificar se o token de acesso foi fornecido corretamente.

Usando getCommandLineW para verificar se o token de acesso foi fornecido corretamente

Dependendo da versão do Ransomware, esse token pode ser aleatório (como neste exemplo) ou, conforme visto nas versões mais recentes, esse token de acesso é uma chave de 32 caracteres usada para criptografar a configuração do Ransomware incorporada ao binário. As versões mais recentes fazem isso para impedir que os pesquisadores de segurança extraiam a configuração. Isso também serve como uma medida anti-sandboxing, pois as ferramentas de análise automatizadas não poderão executar a amostra, a menos que estejam configuradas para fornecer o token de acesso.

Nota de resgate

Depois que o token de acesso é fornecido ao binário, o Ransomware prossegue descriptografando a nota de resgate incorporada no binário e armazenando-a para uso posterior. Ele também define a nota de resgate como papel de parede da área de trabalho.

Nota de resgate decifrada armazenada para uso posterior

Depois disso, o Ransomware se prepara para aumentar os privilégios criando um novo tópico usando o Criar tópico API.

Escalação de privilégios e desvio do UAC

O ransomware BlackCat realiza um desvio do UAC abusando do Microsoft COM (modelo de objeto componente). Esse ataque envolve o uso de objetos COM de um binário conhecido como Microsoft CMSTP (Connection Manager Profile Installer), particularmente o CMSTPLUS interface {3E5FC7F9-9A51-4367-9063-A120244FBEC7}.

O ransomware usa Objeto CoGet para se registrar com o CLSID {3E5FC7F9-9A51-4367-9063-A120244FBEC7}, que é usado legitimamente para executar aplicativos com privilégios elevados. Essa técnica permite que ele ignore o prompt do UAC e execute suas ações maliciosas sem ser detectado ou bloqueado pelas medidas de segurança do sistema.

Usando CogetObject para se registrar com {3E5FC7F9-9A51-4367-9063-A120244FBEC7} para obter privilégios elevados

Depois que o ransomware eleva os privilégios, ele é executado dentro do thread recém-criado e transfere seus argumentos da instância anterior.

O BlackCat se executa dentro do novo thread com privilégios elevados usando os mesmos argumentos de antes.

Depois disso, o BlackCat usa o Valor Privilegiado de Pesquisa API para procurar identificadores locais para uma lista de privilégios. Cada um desses privilégios permite que o processo em execução execute operações no nível do sistema. (Consulte o Apêndice para obter uma lista completa e uma descrição de cada privilégio). O binário então usa Ajuste os privilégios do token a fim de conceder a si mesma esses privilégios.

Lista de privilégios buscados pela BlackCat

 

Usando LookupPrivilegeValueW e AdjustTokenPrivileges para conceder privilégios a si mesmo

Finalmente, o BlackCat encerra sua preparação para criptografia fazendo o seguinte:

  • Excluindo todas as cópias de sombra de volume usando vssadmin e wmic comandos, tornando a recuperação de dados muito mais difícil.
  • Desativando o reparo automático usando edição bcd, para evitar a recuperação de arquivos relacionados ao sistema.
  • Limpando registros de eventos.
  • Encerramento de todos os serviços e processos ativos.

Nota: O BlackCat tem sua configuração embutida em si mesmo e a descriptografa em tempo de execução. A configuração contém informações sobre a chave pública a ser usada para criptografar a chave, quaisquer serviços específicos a serem encerrados, uma lista de exceções etc.

Captura de tela exibindo a configuração do BlackCat

Criptografia de dados

A amostra de BlackCat utilizada para esta análise emprega AES para criptografia. As etapas envolvidas na criptografia são as seguintes:

  • O BlackCat primeiro atravessa o sistema usando um loop de Encontre o primeiro arquivo e Encontre o próximo arquivo para encontrar todos os arquivos no sistema.
  • A nota de resgate é gravada em cada diretório usando Gravar arquivo.
Captura de tela do nota de resgate deixada por BlackCat

  • Usando BCryptGen Aleatório, o ransomware calcula uma chave AES aleatória.
  • Um bloco JSON é criado para cada arquivo, que contém a chave AES usada para criptografar o arquivo e as informações sobre o arquivo.
Bloco JSON contendo informações sobre a chave e o arquivo

  • A chave AES é ainda mais criptografada usando a chave pública RSA armazenada na configuração BlackCat.
  • O arquivo é criptografado usando AES e o conteúdo é gravado no arquivo usando Ler arquivo e Gravar arquivo. A nova extensão do arquivo é mencionada na configuração do BlackCat.
Usando o AES para criptografar o arquivo

Operações pós-criptografia

Assim que o BlackCat terminar de criptografar todos os arquivos no sistema, o papel de parede do Desktop é alterado, instruindo o usuário a consultar a nota de resgate.

Fundo da área de trabalho alterado

O URL.onion especificado na nota de resgate é exclusivo para cada vítima, pois cada amostra usa um token de acesso diferente, fornecido ao URL como parâmetro. O URL onion contém informações sobre os arquivos criptografados/roubados e instruções sobre como pagar o resgate.

Indicadores de compromisso (IOCs)

SHA256

847FB7609F53ED334D5AFFBB07256C21CB5E6F68B1CC14004F5502D714D2A456

3a08e3bfec2db5dbece359ac9ac9662e65361a8625a0122e68b56cd5ef3aedf8ce1

9802a1e8fb425ac3a7c0a7fca5a17cfcb7f3f5f0962deb29e3982f0bece95e26

f7a038f9b91c40e9d67f4168997d7d8c12c2d27cd9e36c413dd021796a24e083

Apêndice

Lista de privilégios e responsabilidades de segurança visados pela BlackCat

Security Privilege

Responsibility

SeIncreaseQuotaPrivilege

Allows a process to increase the memory quota assigned to it.

SeSecurityPrivilege

Allows a process to read or modify the security settings of objects in the system.

SeTakeOwnershipPrivilege

Allows a process to take ownership of any object in the system.

SeLoadDriverPrivilege

Allows a process to load device drivers.

SeSystemProfilePrivilege

Allows a process to gather profiling information for the entire system.

SeSystemtimePrivilege

Allows a process to change the system time.

SeProfileSingleProcessPrivilege

Allows a process to profile a single process.

SeIncreaseBasePriorityPrivilege

Allows a process to increase the base priority of a thread.

SeCreatePagefilePrivilege

Allows a process to create a pagefile.

SeBackupPrivilege

Allows a process to perform backup and restore operations.

SeRestorePrivilege

Allows a process to restore backed-up objects.

SeShutdownPrivilege

Allows a process to shut down the system.

SeDebugPrivilege

Allows a process to debug other processes.

SeSystemEnvironmentPrivilege

Allows a process to modify system environment variables.

SeChangeNotifyPrivilege

Allows a process to receive notifications when an object is modified.

SeRemoteShutdownPrivilege

Allows a process to shut down remote systems.

SeUndockPrivilege

Allows a process to undock a laptop computer.

SeManageVolumePrivilege

Allows a process to manage volume and disk configurations.

SeImpersonatePrivilege

Allows a process to impersonate other users or groups.

YARA Rule for BlackCat Threat Hunting


rule win_blackcat_auto {

    meta:
        author = "Felix Bilstein - yara-signator at cocacoding dot com"
        date = "2023-03-28"
        version = "1"
        description = "Detects win.blackcat."
        info = "autogenerated rule brought to you by yara-signator"
        tool = "yara-signator v0.6.0"
        signator_config = "callsandjumps;datarefs;binvalue"
        malpedia_reference = "https://malpedia.caad.fkie.fraunhofer.de/details/win.blackcat"
        malpedia_rule_date = "20230328"
        malpedia_hash = "9d2d75cef573c1c2d861f5197df8f563b05a305d"
        malpedia_version = "20230407"
        malpedia_license = "CC BY-SA 4.0"
        malpedia_sharing = "TLP:WHITE"

    /* DISCLAIMER
     * The strings used in this rule have been automatically selected from the
     * disassembly of memory dumps and unpacked files, using YARA-Signator.
     * The code and documentation is published here:
     * https://github.com/fxb-cocacoding/yara-signator
     * As Malpedia is used as data source, please note that for a given
     * number of families, only single samples are documented.
     * This likely impacts the degree of generalization these rules will offer.
     * Take the described generation method also into consideration when you
     * apply the rules in your use cases and assign them confidence levels.
     */


    strings:
        $sequence_0 = { c3 81f90a010000 7e6a 81f9e2030000 0f8fcc000000 81f90b010000 }
            // n = 6, score = 600
            //   c3                   | ret                 
            //   81f90a010000         | cmp                 ecx, 0x10a
            //   7e6a                 | jle                 0x6c
            //   81f9e2030000         | cmp                 ecx, 0x3e2
            //   0f8fcc000000         | jg                  0xd2
            //   81f90b010000         | cmp                 ecx, 0x10b

        $sequence_1 = { 85f6 0f8482000000 bb03000000 8d0437 }
            // n = 4, score = 600
            //   85f6                 | test                esi, esi
            //   0f8482000000         | je                  0x88
            //   bb03000000           | mov                 ebx, 3
            //   8d0437               | lea                 eax, [edi + esi]

        $sequence_2 = { 885405cc 48 eb19 89ca 83fa63 7fbe }
            // n = 6, score = 600
            //   885405cc             | mov                 byte ptr [ebp + eax - 0x34], dl
            //   48                   | dec                 eax
            //   eb19                 | jmp                 0x1b
            //   89ca                 | mov                 edx, ecx
            //   83fa63               | cmp                 edx, 0x63
            //   7fbe                 | jg                  0xffffffc0

        $sequence_3 = { f20f104808 8d45d4 894dec c645f004 8d4dec }
            // n = 5, score = 600
            //   f20f104808           | movsd               xmm1, qword ptr [eax + 8]
            //   8d45d4               | lea                 eax, [ebp - 0x2c]
            //   894dec               | mov                 dword ptr [ebp - 0x14], ecx
            //   c645f004             | mov                 byte ptr [ebp - 0x10], 4
            //   8d4dec               | lea                 ecx, [ebp - 0x14]

        $sequence_4 = { 3d32210000 747b 3d33210000 0f8571050000 8b07 }
            // n = 5, score = 600
            //   3d32210000           | cmp                 eax, 0x2132
            //   747b                 | je                  0x7d
            //   3d33210000           | cmp                 eax, 0x2133
            //   0f8571050000         | jne                 0x577
            //   8b07                 | mov                 eax, dword ptr [edi]

        $sequence_5 = { b005 5e 5d c3 81f90a010000 7e6a 81f9e2030000 }
            // n = 7, score = 600
            //   b005                 | mov                 al, 5
            //   5e                   | pop                 esi
            //   5d                   | pop                 ebp
            //   c3                   | ret                 
            //   81f90a010000         | cmp                 ecx, 0x10a
            //   7e6a                 | jle                 0x6c
            //   81f9e2030000         | cmp                 ecx, 0x3e2

        $sequence_6 = { 747b 3d33210000 0f8571050000 8b07 83f00a }
            // n = 5, score = 600
            //   747b                 | je                  0x7d
            //   3d33210000           | cmp                 eax, 0x2133
            //   0f8571050000         | jne                 0x577
            //   8b07                 | mov                 eax, dword ptr [edi]
            //   83f00a               | xor                 eax, 0xa

        $sequence_7 = { b806000000 c7460400000000 894608 c70601000000 83c430 }
            // n = 5, score = 600
            //   b806000000           | mov                 eax, 6
            //   c7460400000000       | mov                 dword ptr [esi + 4], 0
            //   894608               | mov                 dword ptr [esi + 8], eax
            //   c70601000000         | mov                 dword ptr [esi], 1
            //   83c430               | add                 esp, 0x30

        $sequence_8 = { 89d0 ba3e000000 897e0c f7e2 }
            // n = 4, score = 600
            //   89d0                 | mov                 eax, edx
            //   ba3e000000           | mov                 edx, 0x3e
            //   897e0c               | mov                 dword ptr [esi + 0xc], edi
            //   f7e2                 | mul                 edx

        $sequence_9 = { c6410b00 66c741090000 8b45ec 894110 c7411400000000 b801000000 8901 }
            // n = 7, score = 600
            //   c6410b00             | mov                 byte ptr [ecx + 0xb], 0
            //   66c741090000         | mov                 word ptr [ecx + 9], 0
            //   8b45ec               | mov                 eax, dword ptr [ebp - 0x14]
            //   894110               | mov                 dword ptr [ecx + 0x10], eax
            //   c7411400000000       | mov                 dword ptr [ecx + 0x14], 0
            //   b801000000           | mov                 eax, 1
            //   8901                 | mov                 dword ptr [ecx], eax

    condition:
        7 of them and filesize < 29981696
}

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
Hansika Saxena
Product Manager at CloudSEK with a background in cyber threat intelligence and a focus on user experience. She bridges research with product design to shape solutions that are intuitive and impactful.

Blogs relacionados