Ryuk é uma das opções de ransomware mais famosas dos últimos anos. Desde que apareceu pela primeira vez no verão de 2018, colecionou
1. Informações gerais
Este documento contém uma análise da variante do ransomware Ryuk, bem como do carregador responsável por carregar o malware no sistema.
O ransomware Ryuk apareceu pela primeira vez no verão de 2018. Uma das diferenças entre o Ryuk e outros ransomwares é que ele tem como objetivo atacar ambientes corporativos.
Em meados de 2019, grupos cibercriminosos atacaram um grande número de empresas espanholas utilizando este ransomware.
Arroz. 1: Trecho do El Confidencial sobre o ataque de ransomware Ryuk [1]
Arroz. 2: Trecho do El País sobre ataque realizado com o ransomware Ryuk [2]
Este ano, Ryuk atacou um grande número de empresas em vários países. Como você pode ver nas figuras abaixo, Alemanha, China, Argélia e Índia foram os mais atingidos.
Ao comparar o número de ataques cibernéticos, podemos ver que Ryuk afetou milhões de utilizadores e comprometeu uma enorme quantidade de dados, resultando em graves perdas económicas.
Arroz. 3: Ilustração da atividade global de Ryuk.
Arroz. 4: 16 países mais afetados por Ryuk
Arroz. 5: Número de usuários atacados pelo ransomware Ryuk (em milhões)
De acordo com o princípio de funcionamento habitual de tais ameaças, este ransomware, após a conclusão da encriptação, mostra à vítima uma notificação de resgate que deve ser paga em bitcoins para o endereço especificado para restaurar o acesso aos ficheiros encriptados.
Este malware mudou desde que foi introduzido pela primeira vez.
A variante desta ameaça analisada neste documento foi descoberta durante uma tentativa de ataque em janeiro de 2020.
Devido à sua complexidade, este malware é frequentemente atribuído a grupos cibercriminosos organizados, também conhecidos como grupos APT.
Parte do código do Ryuk tem uma semelhança notável com o código e a estrutura de outro ransomware bem conhecido, o Hermes, com o qual compartilham uma série de funções idênticas. É por isso que Ryuk foi inicialmente ligado ao grupo norte-coreano Lazarus, que na época era suspeito de estar por trás do ransomware Hermes.
O serviço Falcon X da CrowdStrike posteriormente observou que Ryuk foi de fato criado pelo grupo WIZARD SPIDER [4].
Existem algumas evidências para apoiar esta suposição. Primeiro, esse ransomware foi anunciado no site exploit.in, que é um conhecido mercado russo de malware e já foi associado a alguns grupos russos de APT.
Este fato descarta a teoria de que Ryuk poderia ter sido desenvolvido pelo grupo Lazarus APT, pois não se ajusta à forma como o grupo opera.
Além disso, Ryuk foi anunciado como um ransomware que não funciona em sistemas russos, ucranianos e bielorrussos. Esse comportamento é determinado por um recurso encontrado em algumas versões do Ryuk, onde ele verifica o idioma do sistema no qual o ransomware está sendo executado e interrompe sua execução se o sistema tiver um idioma russo, ucraniano ou bielorrusso. Por fim, uma análise especializada da máquina que foi hackeada pela equipe WIZARD SPIDER revelou vários “artefatos” que teriam sido usados no desenvolvimento do Ryuk como uma variante do ransomware Hermes.
Por outro lado, os especialistas Gabriela Nicolao e Luciano Martins sugeriram que o ransomware pode ter sido desenvolvido pelo grupo APT CryptoTech [5].
Isso decorre do fato de que vários meses antes do aparecimento de Ryuk, este grupo postou informações no fórum do mesmo site de que havia desenvolvido uma nova versão do ransomware Hermes.
Vários usuários do fórum questionaram se a CryptoTech realmente criou o Ryuk. O grupo então se defendeu e afirmou ter evidências de que havia desenvolvido 100% do ransomware.
2. Características
Começamos com o bootloader, cuja função é identificar o sistema em que se encontra para que a versão “correta” do ransomware Ryuk possa ser lançada.
O hash do bootloader é o seguinte:
MD5 A73130B0E379A989CBA3D695A157A495
SHA256 EF231EE1A2481B7E627921468E79BB4369CCFAEB19A575748DD2B664ABC4F469
Uma das características deste downloader é que ele não contém nenhum metadado, ou seja, Os criadores deste malware não incluíram nenhuma informação nele.
Às vezes, eles incluem dados errados para induzir o usuário a pensar que está executando um aplicativo legítimo. No entanto, como veremos mais adiante, se a infecção não envolver interação do usuário (como é o caso deste ransomware), então os invasores não consideram necessário o uso de metadados.
Arroz. 6: Metadados de amostra
A amostra foi compilada no formato de 32 bits para que possa ser executada em sistemas de 32 e 64 bits.
3. Vetor de penetração
A amostra que baixa e executa o Ryuk entrou em nosso sistema por meio de uma conexão remota, e os parâmetros de acesso foram obtidos por meio de um ataque RDP preliminar.
Arroz. 7: Registro de Ataque
O invasor conseguiu fazer login no sistema remotamente. Depois disso, ele criou um arquivo executável com nossa amostra.
Este arquivo executável foi bloqueado por uma solução antivírus antes de ser executado.
Arroz. 8: Bloqueio de padrão
Arroz. 9: Bloqueio de padrão
Quando o arquivo malicioso foi bloqueado, o invasor tentou baixar uma versão criptografada do arquivo executável, que também foi bloqueada.
Arroz. 10: Conjunto de amostras que o invasor tentou executar
Finalmente, ele tentou baixar outro arquivo malicioso através do console criptografado
PowerShell para ignorar a proteção antivírus. Mas ele também foi bloqueado.
Arroz. 11: PowerShell com conteúdo malicioso bloqueado
Arroz. 12: PowerShell com conteúdo malicioso bloqueado
4. Carregador
Quando executado, ele grava um arquivo ReadMe na pasta % Temp%, o que é típico de Ryuk. Este arquivo é uma nota de resgate contendo um endereço de e-mail no domínio protonmail, que é bastante comum nesta família de malware: [email protegido]
Arroz. 13: Exigência de resgate
Enquanto o bootloader está em execução, você pode ver que ele inicia vários arquivos executáveis com nomes aleatórios. Eles são armazenados em uma pasta oculta PÚBLICO, mas se a opção não estiver ativa no sistema operacional "Mostrar arquivos e pastas escondidos", então eles permanecerão ocultos. Além disso, esses arquivos são de 64 bits, ao contrário do arquivo pai, que é de 32 bits.
Arroz. 14: Arquivos executáveis iniciados pela amostra
Como você pode ver na imagem acima, Ryuk lança icacls.exe, que será utilizado para modificar todas as ACLs (listas de controle de acesso), garantindo assim o acesso e modificação de flags.
Ele obtém acesso total de todos os usuários a todos os arquivos do dispositivo (/T), independentemente de erros (/C) e sem mostrar nenhuma mensagem (/Q).
Arroz. 15: Parâmetros de execução de icacls.exe iniciados pela amostra
É importante observar que Ryuk verifica qual versão do Windows você está executando. Para isso ele
executa uma verificação de versão usando GetVersionExW, no qual verifica o valor da bandeira lpVersionInformationindicando se a versão atual do Windows é mais recente que Windows XP.
Dependendo se você estiver executando uma versão posterior ao Windows XP, o carregador de inicialização gravará na pasta do usuário local - neste caso, na pasta %Público%.
Arroz. 17: Verificando a versão do sistema operacional
O arquivo que está sendo escrito é Ryuk. Em seguida, ele o executa, passando seu próprio endereço como parâmetro.
Arroz. 18: Execute Ryuk via ShellExecute
A primeira coisa que Ryuk faz é receber os parâmetros de entrada. Desta vez, existem dois parâmetros de entrada (o próprio executável e o endereço do conta-gotas) que são usados para remover seus próprios rastros.
Arroz. 19: Criando um Processo
Você também pode ver que depois de executar seus executáveis, ele se apaga, não deixando nenhum vestígio de sua presença na pasta onde foi executado.
Arroz. 20: Excluindo um arquivo
5. RYUK
5.1 Presença
Ryuk, como outros malwares, tenta permanecer no sistema o maior tempo possível. Conforme mostrado acima, uma maneira de atingir esse objetivo é criar e executar secretamente arquivos executáveis. Para fazer isso, a prática mais comum é alterar a chave do registro Versão AtualRun.
Neste caso, você pode ver que para este fim o primeiro arquivo a ser lançado VWjRF.exe
(o nome do arquivo é gerado aleatoriamente) é iniciado cmd.exe.
Arroz. 21: Executando VWjRF.exe
Em seguida, digite o comando CORRE Com nome "svchos". Assim, se você quiser verificar as chaves de registro a qualquer momento, poderá facilmente perder essa alteração, dada a semelhança deste nome com svchost. Graças a esta chave, Ryuk garante sua presença no sistema. Se o sistema não tiver ainda não foi infectado, quando você reinicializar o sistema, o executável tentará novamente.
Arroz. 22: A amostra garante presença na chave de registro
Também podemos ver que este executável interrompe dois serviços:
"construtor de ponto de áudio", que, como o próprio nome sugere, corresponde ao áudio do sistema,
Arroz. 23: Amostra interrompe o serviço de áudio do sistema
и Samss, que é um serviço de gerenciamento de contas. Interromper esses dois serviços é uma característica do Ryuk. Neste caso, se o sistema estiver conectado a um sistema SIEM, o ransomware tenta interromper o envio para
Arroz. 24: Amostra interrompe o serviço Samss
5.2 Privilégios
De modo geral, Ryuk começa movendo-se lateralmente dentro da rede ou é lançado por outro malware, como
De antemão, como prelúdio ao processo de implementação, o vemos realizar o processo Personificar-se, o que significa que o conteúdo de segurança do token de acesso será passado para o fluxo, onde será recuperado imediatamente usando ObterCurrentThread.
Arroz. 25: Chame ImpersonateSelf
Vemos então que ele associará um token de acesso a um thread. Vemos também que uma das bandeiras é Acesso desejado, que pode ser usado para controlar o acesso que o thread terá. Neste caso o valor que o edx receberá deverá ser TOKEN_ALL_ACESS ou então - TOKEN_WRITE.
Arroz. 26: Criando um token de fluxo
Então ele vai usar SeDebugPrivilege e fará uma chamada para obter permissões de depuração no thread, resultando em PROCESS_ALL_ACCESS, ele poderá acessar qualquer processo necessário. Agora, como o criptografador já possui um fluxo preparado, resta prosseguir para a etapa final.
Arroz. 27: Chamando SeDebugPrivilege e função de escalonamento de privilégios
Por um lado, temos LookupPrivilegeValueW, que nos fornece as informações necessárias sobre os privilégios que queremos aumentar.
Arroz. 28: Solicitar informações sobre privilégios para escalonamento de privilégios
Por outro lado, temos Ajustar Privilégios de Token, o que nos permite obter os direitos necessários para o nosso stream. Neste caso, o mais importante é Estado Novo, cujo sinalizador concederá privilégios.
Arroz. 29: Configurando permissões para um token
5.3 Implementação
Nesta seção mostraremos como a amostra realiza o processo de implementação mencionado anteriormente neste relatório.
O principal objetivo do processo de implementação, bem como do escalonamento, é obter acesso a cópias de sombra. Para fazer isso, ele precisa trabalhar com um thread com direitos superiores aos do usuário local. Depois de obter esses direitos elevados, ele excluirá cópias e fará alterações em outros processos, a fim de impossibilitar o retorno a um ponto de restauração anterior no sistema operacional.
Como é típico desse tipo de malware, ele usa CreateToolHelp32Snapshotentão ele tira um instantâneo dos processos atualmente em execução e tenta acessá-los usando Openprocess. Ao obter acesso ao processo, ele também abre um token com suas informações para obter os parâmetros do processo.
Arroz. 30: Recuperando processos de um computador
Podemos ver dinamicamente como ele obtém a lista de processos em execução na rotina 140002D9C usando CreateToolhelp32Snapshot. Após recebê-los, ele percorre a lista, tentando abrir processos um por um usando OpenProcess até conseguir. Neste caso, o primeiro processo que ele conseguiu abrir foi "taskhost.exe".
Arroz. 31: Execute dinamicamente um procedimento para obter um processo
Podemos ver que ele subsequentemente lê as informações do token do processo, então chama OpenProcessToken com parâmetro "20008"
Arroz. 32: Leia as informações do token do processo
Ele também verifica se o processo no qual será injetado não é csrss.exe, explorer.exe, lsaas.exe ou que ele tem um conjunto de direitos Autoridade do NT.
Arroz. 33: Processos excluídos
Podemos ver dinamicamente como ele executa a verificação primeiro usando as informações do token do processo em 140002D9C para descobrir se a conta cujos direitos estão sendo usados para executar um processo é uma conta NT AUTORIDADE.
Arroz. 34: Verificação de AUTORIDADE NT
E depois, fora do procedimento, ele verifica se isso não é csrss.exe, explorer.exe ou lsaas.exe.
Arroz. 35: Verificação de AUTORIDADE NT
Depois de tirar um snapshot dos processos, abri-los e verificar se nenhum deles foi excluído, ele está pronto para gravar na memória os processos que serão injetados.
Para fazer isso, primeiro reserva uma área na memória (VirtualAllocEx), escreve nele (Memória de processo de gravação) e cria um thread (CreateRemoteThread). Para trabalhar com estas funções utiliza os PIDs dos processos selecionados, que obteve anteriormente através de CreateToolhelp32Snapshot.
Arroz. 36: Código incorporado
Aqui podemos observar dinamicamente como ele usa o PID do processo para chamar a função VirtualAllocEx.
Arroz. 37: Ligue para VirtualAllocEx
5.4 Criptografia
Nesta seção, veremos a parte de criptografia deste exemplo. Na imagem a seguir você pode ver duas sub-rotinas chamadas "LoadLibrary_EncodeString"E"Encode_Func", que são responsáveis por realizar o procedimento de criptografia.
Arroz. 38: Procedimentos de criptografia
No início podemos ver como ele carrega uma string que posteriormente será utilizada para desofuscar tudo o que for necessário: importações, DLLs, comandos, arquivos e CSPs.
Arroz. 39: Circuito de desofuscação
A figura a seguir mostra a primeira importação que ela desofusca no registro R4. LoadLibrary. Isso será usado posteriormente para carregar as DLLs necessárias. Também podemos ver outra linha no registro R12, que é usada junto com a linha anterior para realizar a desofuscação.
Arroz. 40: Desofuscação dinâmica
Ele continua baixando comandos que serão executados posteriormente para desabilitar backups, pontos de restauração e modos de inicialização seguros.
Arroz. 41: Carregando comandos
Em seguida, ele carrega o local onde irá soltar 3 arquivos: Windows.bat, execute.sct и start.bat.
Arroz. 42: Locais de arquivos
Esses 3 arquivos são usados para verificar os privilégios que cada local possui. Se os privilégios necessários não estiverem disponíveis, Ryuk interrompe a execução.
Continua carregando as linhas correspondentes aos três arquivos. Primeiro, DECRYPT_INFORMATION.html, contém informações necessárias para recuperar arquivos. Segundo, PÚBLICO, contém a chave pública RSA.
Arroz. 43: Linha DECRYPT INFORMATION.html
Terceiro, UNIQUE_ID_DO_NOT_REMOVE, contém a chave criptografada que será utilizada na próxima rotina para realizar a criptografia.
Arroz. 44: Linha ID ÚNICA NÃO REMOVER
Por fim, ele baixa as bibliotecas necessárias junto com as importações e CSPs necessários (RSA aprimorado da Microsoft и Provedor criptográfico AES).
Arroz. 45: Carregando bibliotecas
Após concluída toda a desofuscação, ele passa a realizar as ações necessárias para a criptografia: enumerar todos os drives lógicos, executar o que foi carregado na rotina anterior, fortalecer a presença no sistema, lançar o arquivo RyukReadMe.html, criptografar, enumerar todos os drives de rede , transição para dispositivos detectados e sua criptografia.
Tudo começa com o carregamento"cmd.exe" e registros de chave pública RSA.
Arroz. 46: Preparando para criptografia
Então ele obtém todas as unidades lógicas usando ObterLogicalDrives e desativa todos os backups, pontos de restauração e modos de inicialização seguros.
Arroz. 47: Desativando ferramentas de recuperação
Depois disso, ele fortalece sua presença no sistema, como vimos acima, e grava o primeiro arquivo RyukReadMe.html в TEMP.
Arroz. 48: Publicação de um aviso de resgate
Na imagem a seguir você pode ver como ele cria um arquivo, baixa o conteúdo e o grava:
Arroz. 49: Carregando e gravando o conteúdo do arquivo
Para poder realizar as mesmas ações em todos os dispositivos, ele usa
"icacls.exe", como mostramos acima.
Arroz. 50: Usando icalcls.exe
E, finalmente, ele começa a criptografar arquivos, exceto arquivos “*.exe”, “*.dll”, arquivos de sistema e outros locais especificados na forma de uma lista branca criptografada. Para fazer isso, ele usa importações: CryptAcquireContextW (onde o uso de AES e RSA é especificado), CryptDeriveKey, CryptGenKey, CryptDestroyKey etc. Ele também tenta estender seu alcance aos dispositivos de rede descobertos usando WNetEnumResourceW e depois criptografá-los.
Arroz. 51: Criptografando arquivos do sistema
6. Importações e bandeiras correspondentes
Abaixo segue uma tabela listando as importações e bandeiras mais relevantes utilizadas pela amostra:
7. COI
referências
- usuáriosPublicrun.sct
- Menu IniciarProgramasStartupstart.bat AppDataRoamingMicrosoftWindowsStart
- MenuProgramasStartupstart.bat
Um relatório técnico sobre o ransomware Ryuk foi compilado por especialistas do laboratório antivírus PandaLabs.
8. Links
1. “Everis y Prisa Radio sofre um grave ciberataque que protege seus sistemas.”https://www. elconfidencial.com/tecnologia/2019-11-04/everis-la-ser-ciberataque-ransomware-15_2312019/, Publicado em 04/11/2019.
2. “Um vírus de origem russa ataca importantes empresas espanholas.” https: //elpais.com/tecnologia/2019/11/04/actualidad/1572897654_ 251312.html, Publicado em 04/11/2019.
3. “Artigo VB2019: A vingança de Shinigami: a longa cauda do malware Ryuk.” https://securelist.com/story-of-the-year-2019-cities-under-ransomware-siege/95456/, Publicado em 11 /12/2019
4. “Big Game Hunting com Ryuk: Outro Ransomware Lucrativo direcionado.”https://www. crowdstrike.com/blog/big-game-hunting-with-ryuk-another-lucrative-targeted-ransomware/, publicado em 10/01/2019.
5. “Artigo VB2019: A vingança de Shinigami: a longa cauda do malware Ryuk.” https://www. virusbulletin.com/virusbulletin/2019/10/ vb2019-paper-shinigamis-revenge-long-tail-r
Fonte: habr.com