Voltar
Malware Intelligence
Tabela de conteúdo

Autor: Anandeshwar Unnikrishnan
Co-autor: Aastha Mittal

Categoria:

Inteligência de malware

Tipo/família:

Ransomware

Indústria:

Múltiplo

Região:

Global

O que é BlueSky Ransomware?

O BlueSky Ransomware é um malware moderno que usa técnicas avançadas para evitar as defesas de segurança. Ele se destina principalmente a hosts Windows e utiliza o modelo multithreading do Windows para criptografia rápida. Ele surgiu pela primeira vez no final de junho de 2022 e foi observado que se espalhou por meio de e-mails de phishing, sites de phishing e downloads trojanizados.

Essa análise aprofundada do BlueSky Ransomware abrange os seguintes aspectos técnicos:

  • Procedimento para escalonamento de privilégios
  • Persistência
  • Mecanismo de criptografia
  • Técnicas de evasão

Fase inicial

  • Os módulos necessários para o ransomware são carregados dinamicamente e os endereços de funções interessantes são armazenados em uma matriz para uso posterior.
  • Os endereços da seguinte lista de APIs foram resolvidos:
APIs armazenadasntdll.rtlallocateheapkernel32.createfile wkernel32.setfilepointerkernel32.closehandlekernel32.lstcmpwadvapi32.cryptgenrandomntdll.freeheapkernel32.findclosekernel32.get fileSizeExkernel32.setfileAttributeswkernel32.openprocessshl wapi.path combine wkernel32.encontre o primeiro arquivo exwkernel32.leia o arquivo kernel32.getqueuedcompletionstatuskernel32.mova o arquivo com o kernel progressivo 32.terminateprocesshlwapi.path remova a extensão wkernel32.findnextfile wkernel32.write file kernel32.postqueuedcompletionstatuskernel32.lstrCATWKernel32. Espere por um único objeto
  • Depois de carregar as bibliotecas necessárias, o ransomware continua executando as seguintes tarefas:
    • Verifica se o processo em execução é de 32 bits via Kernel32. É o processo WOW64
    • Descriptografa cadeias de caracteres
    • Ajuste o privilégio do processo para SE_DEBUG através da Ntdll.rtlAdjust Privilege
    • Recupera o seguinte:
      • GUID da máquina de SOFTWARE\\ Microsoft\\ Cryptography
      • ID digital do produto e Data de instalação do SOFTWARE\\ Microsoft\\ Windows NT\\ CurrentVersion
    • Oculta o thread principal do depurador chamando Ntdll.zw Definir tópico de informações passando ThreadHideFromDebugger (0x11) como ThreadInformationClass
  • O ransomware atualiza o status como “Concluído” após a fase inicial e os dados do usuário são bloqueados.
Locking of user data after initial phase
Bloqueio dos dados do usuário após a fase inicial

 

Geração Mutex

O ransomware cria um mutex global ao chamar Kernel 32. Crie o MuteXA API.

Mutex Creation
Criação de mutex

 

Decodificação de strings

O ransomware decodifica todas as strings em tempo de execução. Abaixo estão listadas várias extensões evitadas durante o bloqueio, extensões de dados do usuário bloqueadas e nomes de diretórios para enumeração de arquivos.

Extensões na lista negra

O ransomware impede o bloqueio dos arquivos com as seguintes extensões na lista negra.

Extensões na lista negra“ldf” “icl” “bin” “spl” “diagcab” “ini” “tema” “hta” “scr” “386” “hlp” “ps1” “ico” “icns” “rtp” “diagpkg” “icl” “cmd” “shs” “msu” “lock” “prf” “msc” “rtp” “388 6” “ani” “drv” “ics” “ocx” “dll” “sys” “msstyles” “cmd” “adv” “wpx” “key” “mpa” “bluesky” “mod” “cab” “ani” “theme” “bat” “msp” “cur” “nomedia” “msi” “msi” “nls” “adv” “msi” De” “com” “cpl” “idx” “diagcfg” “exe” “link”

Extensões de dados do usuário

Os arquivos com as seguintes extensões de dados do usuário são direcionados especificamente.

Extensões de dados do usuário“ckp” “dbs” “mrg” “qry” “wdb” “sqlite3” “dbc” “dwg” “dbt” “mwb” “sdb” “db” “sqlitedb” “mdf” “db3” “dbv” “myd” “sql” “sqlite” “db-shm” “dacpac” “dbf” de” “ndf” “tmd” “accdb” “db-wal”

Nomes de diretório

O ransomware usa esses nomes de diretório para fins de enumeração de arquivos.

Nomes de diretório“$recycle.bin” “boot” “windows” “perflogs” “appdata” “arquivos de programa” “windows.old” “todos os usuários”” usuários” “programdata” “$windows. ~ws” “informações de volume do sistema” “$windows. ~bt” “arquivos de programa (x86)”

Pré-criptografia

Algoritmo criptográfico

O contexto criptográfico é um tipo de dados autenticados adicionais que consiste em pares arbitrários não secretos de nome e valor. Durante a fase de inicialização, o ransomware adquire o contexto criptográfico do AdvAPI32.CryptAdquire Context API. O provedor criptográfico usado pelo malware é o “Microsoft Enhanced Cryptographic Provider v1.0” e o esquema de criptografia selecionado é o RSA.

Acquiring cryptographic context
Adquirindo contexto criptográfico

Dados de recuperação

Antes da execução da função de criptografia, o ransomware grava os dados necessários para a recuperação dos arquivos bloqueados no registro. Os seguintes dados são gravados:

  • BOLHA DE RECUPERAÇÃO
  • Chave pública X25519
Writing data needed for recovery of locked files
Gravação de dados necessários para a recuperação de arquivos bloqueados

 

Updated view of the registry
Visualização atualizada do registro

 

Nota de resgate

Se a gravação dos dados de descriptografia falhar, o ransomware não executará a rotina responsável pela criptografia dos dados do usuário. Após uma operação de registro bem-sucedida, o ransomware gera uma nota de resgate como tarefa inicial na função que executa o bloqueio.

Ransom note generation
Geração de notas de resgate

 

As etapas a seguir são executadas:

  • Um ID de recuperação aleatório e exclusivo para a vítima é gerado e armazenado no buffer de pilha.
  • O ransomware Bluesky cria uma nota de resgate nos formatos “.txt” e “.html”.
  • Dois blocos de 1000 (4096) bytes de memória de pilha são alocados para armazenar as notas finais de resgate.
  • Dois buffers temporários (txt_ransom_note_buffer e html_ransom_note_buffer) são alocados para armazenar notas codificadas recuperadas do binário.
  • Um especificador de string de formato de local é usado como espaço reservado para a ID de recuperação gerada na etapa inicial.
  • A função”Sub_2866E0” é responsável por formatar a nota substituindo “%s” pelo valor da ID de recuperação, que tem 242 caracteres.
  • O resultado é então armazenado na memória, para ser usado posteriormente pela função responsável por gravar a nota no sistema de arquivos.
Decoded note in the buffer
Nota decodificada no buffer

Término do processo

Depois de criar a nota de resgate, o ransomware enumera os processos em execução no sistema comprometido. O Informações do sistema de consulta Ntdll.zw A API é chamada passando a classe SystemInformation (0x5) para obter a lista de processos do sistema. A lista é usada pelo ransomware para eliminar seletivamente os processos.

Enumeration of processes running on the compromised system
Enumeração dos processos em execução no sistema comprometido

 

Process Termination Task
Tarefa de encerramento do

 

As etapas a seguir são executadas para encerrar os processos em execução:

  • O ransomware começa a analisar a estrutura do processo para recuperar o nome da imagem e usa shlwapi.pathRemove Extensions W API para remover a extensão (.exe) do nome.
  • Depois que o nome do processo sem extensão é recuperado, o ransomware chama Sub_2869B0 para calcular o tamanho do nome do processo.
  • Em seguida, uma chamada é feita para Sub_2868C0 para converter os caracteres em minúsculas para uniformidade.
  • Finalmente, uma codificação de bytes personalizada é usada para converter a string em um valor hexadecimal.
  • O valor hexadecimal gerado é verificado em relação a uma matriz de valores codificados dos processos a serem encerrados.
Process names the threat actor wants to terminate
Nomes de processos que o agente da ameaça deseja encerrar

 

  • Na fase inicial, o identificador para “Shell_Traywnd”, que é obtido usando Usuário 32. Encontre o Windows A, é passado para o Obtenha o ID do processo de thread do Windows API para obter o ID do processo de explorer.exe. (explorer.exe é responsável por criar “Shell_Traywnd”). O ID do processo é armazenado na memória.
  • Se houver uma correspondência, o ID do processo de destino, obtido na fase inicial, é passado para Sub_2910F0.
  • O malware verifica se o ID do processo é do seu próprio processo ou do explorer.exe. Após a verificação, um identificador para processar é recuperado via Kernel 3.2. Processo aberto API.
  • Somente processos “não críticos” são encerrados para evitar a verificação de bugs (tela azul da morte). Se o identificador de processo passado não for crítico, ele será encerrado via Kernel3.2. Encerrar processo.
The function sub_2910F0
A função sub_2910F0

 

  • O ransomware chama Processo de informações de consulta ntdll.nt passando processBreakOnTermination (0x1d) como a InformationClass para identificar processos críticos.
Call to NtQueryInformationProcess Class
Chamada para a classe NtQueryInformationProcess

 

Lixeira vazia

Após o término do processo, o ransomware esvazia a lixeira ligando Shell32. Esvazie a lixeira.

Emptying the recycle bin
Esvaziando a lixeira

 

Criptografia

Modelo de segmentação: portas de conclusão de E/S do Windows em poucas palavras

  • O ransomware Bluesky executa a criptografia utilizando portas de conclusão de E/S. As portas de conclusão de E/S fornecem um modelo de segmentação eficiente para processar várias solicitações de entrada-saída (E/S) assíncronas em um sistema multiprocessador.
Threading model using the IO ports
Modelo de rosqueamento usando as portas IO

 

  • O thread principal cria a porta de conclusão de E/S via Criar porta de conclusão de IO. A porta criada pode ser associada a vários identificadores de arquivo. Quando a operação de E/S assíncrona em um dos identificadores de arquivos é concluída, um pacote de conclusão de E/S é enfileirado na ordem FIFO na porta associada.
  • O thread de trabalho executa uma chamada para Status de conclusão pós-fila para enfileirar os dados associados. No caso do ransomware, os dados serão o caminho absoluto dos arquivos do usuário que aguardam na fila para serem criptografados.
  • Outro thread de trabalho executa Obter status de conclusão na fila para desenfileirar o conteúdo da fila principal. Normalmente, no ransomware, esse tópico é responsável por realizar a criptografia e a geração de notas de resgate.
  • A seção a seguir contém uma descrição detalhada de cada uma das funções mencionadas acima.

Criar porta de conclusão de IO

A chamada para createIOCompletionPort envolve as seguintes etapas:

  • O thread principal recupera a contagem de processadores da estrutura PEB (Process Environment Block).
  • Uma chamada para Criar porta de conclusão de IO é feito passando a contagem do processador como valor do parâmetro numberOfConcurrentThreads.
  • Vários segmentos de trabalho são criados chamando Kernel32. Criar tópico.
  • Para cada thread, uma máscara de afinidade (uma máscara de bits indicando em qual processador um thread deve ser executado) é definida chamando Kernel32.setThreadAffinity Mask.
  • O thread principal executa a enumeração e as chamadas básicas da unidade Status de conclusão pós-fila.
Calling CreatIoCompletionPort
Chamando CreatioCompletionPort

 

Retrieving processor count from PEB
Recuperando a contagem de processadores do PEB

 

PostQueuedCompletionStatus Function
Função PostQueuedCompletionStatus

 

As seguintes APIs são usadas para enumeração de drives no sistema:

  • Kernel32.getLogicalDriveStrings SW
  • Kernel 32. Obtenha o tipo de unidade W

A enumeração adicional de arquivos é realizada criando um thread de trabalho para Status de conclusão pós-fila.

Creation of worker thread for PostQueuedCompletionStatus
Criação de um thread de trabalho para PostQueuedCompletionStatus

 

O tópico principal chama mpr.wnet para abrir o Enumw para enumerar recursos de rede e criar um thread de trabalho igual ao anterior que executa a chamada postQueuedCompletionStatus.

Calling mpr.WNetOpenEnumW function
Chamando a função mpr.NetOpenEnumw

 

Tópico de trabalho: PostQueuedCompletionStatus

The worker thread that performs the PostQueuedCompletionStatus
O thread de trabalho que executa o PostQueuedCompletionStatus

 

O tópico recém-criado para PostQueuedCompletionStatus leva ao seguinte:

  • Os arquivos são enumerados via Kernel32. Encontre o primeiro arquivo EXW e Kernel32. Encontre o próximo arquivo.
  • Se for um diretório, a função de thread é chamada recursivamente para realizar a enumeração do arquivo.
  • Se for um arquivo de usuário, o caminho absoluto será enfileirado para a fila de conclusão via Status de conclusão pós-fila ligar.
  • Esse thread de trabalho é responsável por reunir os arquivos para criptografia.

Tópico de trabalho: getQueuedCompletionStatus

Esse thread de trabalho é responsável por fazer o bloqueio real dos arquivos do usuário. O ransomware esconde esse tópico do depurador via Ntdll.zw Definir tópico de informações passando ThreadHideFromDebugger como a classe ThreadInformation.

Calling ntdll.ZwSetInformationThread function
Chamando a função Ntdll.ZWSetInformationThread

 

O thread decodifica a extensão de arquivo “.bluesky” e prossegue com a criptografia. O Kernel 32. Obtenha o status de conclusão em fila é chamado em um loop infinito para recuperar o caminho absoluto dos dados do usuário.

Decoding file extension “.bluesky”
Extensão de arquivo de decodificação “.bluesky”

 

O sub_288780 A função é responsável por criptografar os dados. O thread verifica se o item desenfileirado é um diretório ou um arquivo.

  • Se for um arquivo, ele criptografará os dados usando as seguintes APIs:
    • Kernel32.Criar arquivo W
    • Kernel32.defina o ponteiro do arquivo
    • Kernel32. Leia o arquivo
    • Kernel32. Escrever arquivo
  • Se o item for um diretório, então Sub_28EDA0 é executado para despejar a nota de resgate. As cadeias de caracteres do nome do arquivo são decodificadas dinamicamente.
File name strings being decoded
Cadeias de caracteres de nome de arquivo sendo decodificadas

 

Execution of sub_28EDA0
Execução de Sub_28EDA0

 

O conteúdo da nota gerado pelo ransomware é gravado no disco chamando:

  • Kernel32.Criar arquivo W
  • Kernel32. Escrever arquivo
Ransom note being written on the disk
Nota de resgate sendo escrita no disco

Pós-criptografia

Depois que os dados do usuário são bloqueados com sucesso, o ransomware executa as seguintes operações:

  • Libera o mutex criado na fase inicial
  • Define o estado do thread como ES_Continous
  • Destrói a pilha alocada
  • Sai do processo via Kernel32.exitProcess
Post encryption functions
Funções de pós-criptografia

 

Indicadores de compromisso (IOCs)

MD5961fa85207cdc4ef86a076bbff07a40953c95a43491832f50e96327c1d23da405ef5cf7dd67af3650824cbc49ffa9999efec04688a493077cea9786243c25656d8a44d2ed34b5fee7c8e243c25656d8a44d2ed34b5fee7c8e243c25656d8a44d2ed34b5fee7c8e24d998f805d9848974fba78de7f3f3a0bbec7dd502d4

Apêndice

Ransom Note in .txt format
Nota de resgate em formato.txt

 

Ransom Note in .html format
Nota de resgate em formato.html

 

Nenhum item encontrado.

Blogs relacionados