11 pontos por GN⁺ 2025-03-16 | 1 comentários | Compartilhar no WhatsApp
  • O autor conseguiu recuperar os dados de uma empresa infectada pelo ransomware Akira sem pagar resgate
  • O código-fonte usado no processo de recuperação está disponível no GitHub
  • O ransomware Akira possui várias variantes e esta variante está ativa desde o fim de 2023
  • Nas versões anteriores (antes de meados de 2023), havia um bug que permitiu à Avast desenvolver um descriptografador, mas, após isso ser divulgado, os atacantes atualizaram a criptografia
  • Os hashes das amostras do ransomware podem ser verificados no GitHub

Resumo de como recuperar arquivos do ransomware Akira (variante Linux/ESXI 2024)

Abordagem da solução

Análise inicial

  • O ransomware usa o horário atual em nanossegundos como seed
  • Como o horário de modificação de arquivos no Linux tem resolução de nanossegundos, foi identificada a possibilidade de recuperar a seed
  • Foi tentada uma abordagem de força bruta com base no timestamp dos arquivos modificados

Processo de criptografia complexo

  • O ransomware usa 4 valores de seed (tempo em nanossegundos)
  • A geração de chave aplica o hash SHA-256 1500 vezes em sequência
  • O sistema de arquivos VMware VMFS armazena o horário de modificação apenas com resolução de segundos
  • Por causa da criptografia multithread, é difícil reconstruir o timing exato

Engenharia reversa

  • O código foi escrito em C++, o que dificultou a análise, mas ele não era ofuscado
  • Pelas mensagens de erro, foi confirmado o uso da biblioteca Nettle
  • O gerador aleatório é baseado no algoritmo Yarrow256 e usa o seguinte código
void generate_random(char *buffer, int size)  
{  
    uint64_t t = get_current_time_nanosecond();  
    char seed[32];  
    snprintf(seed, sizeof(seed), "%lld", t);  
    struct yarrow256_ctx ctx;  
    yarrow256_init(&ctx, 0, NULL);  
    yarrow256_seed(&ctx, strlen(seed), seed);  
    yarrow256_random(&ctx, size, buffer);   
}  
  • Ao gerar a chave, ocorrem 4 chamadas de generate_random()
    • chacha8_key (32 bytes)
    • chacha8_nonce (16 bytes)
    • kcipher2_key (16 bytes) × 2

Avaliação da viabilidade de força bruta

Estratégia principal

  • Gerar dois timestamps (t3, t4), convertê-los em seeds e então gerar números aleatórios
  • Usar esses números aleatórios como chave e IV do KCipher2, criptografar e comparar o resultado com o arquivo criptografado

Análise de desempenho

  • Converter 100 milhões de timestamps leva 3 horas (na CPU)
  • Com GPU, a velocidade de conversão cai para menos de 6 minutos
  • Para um intervalo de 1 segundo, há cerca de 500 trilhões de pares possíveis
  • Após otimizações para GPU, uma RTX 3090 consegue processar 1,5 bilhão de operações de criptografia por segundo

Tipos de arquivo VMWare e estratégia de recuperação

FLAT-VMDK

  • Os primeiros 8 bytes do VMDK podem ser recuperados a partir do bootloader
  • É necessário verificar as informações do sistema operacional no arquivo VMX e instalar o mesmo sistema operacional

SESPARSE

  • O padrão do cabeçalho do arquivo foi identificado no código-fonte do QEMU
  • O cabeçalho começa com 0x00000000cafebabe

Outros arquivos

  • É possível verificar timestamps iniciais em arquivos NVRAM, arquivos VMX, arquivos de log etc.

Recuperação de timestamps

Logs do ESXi

  • Os logs do ESXi registram o tempo de execução com precisão de milissegundos
  • Se não houver logs em milissegundos, é possível estimar a partir de horários em segundos

Horário de modificação do sistema de arquivos

  • No ESXi, como a resolução é de segundos, é difícil estimar o horário exato

Criptografia multithread

  • A criptografia dos arquivos é processada em paralelo de acordo com o número de núcleos de CPU
  • O horário de modificação do arquivo tende a ficar próximo do momento em que a criptografia foi concluída

Implementação da ferramenta de força bruta

Algoritmo KCipher2

  • Foi usada uma versão modificada do KCipher2, não a versão padrão (incluindo tratamento de endian)
  • Foram feitas otimizações para GPU com CUDA

Melhorias de desempenho

  • Uso de memória compartilhada para melhorar o desempenho
  • Remoção de cópia de memória para aumentar a velocidade
  • Implementação de processamento paralelo de arquivos → cerca de 1,5 bilhão por segundo

RTX 3090 vs RTX 4090

  • A RTX 4090 é cerca de 2,3 vezes mais rápida → leva 7 dias
  • RTX 3090 → cerca de 16 dias

Etapas da recuperação

1. Extração de timestamps

  • Verificar o horário de modificação com o comando stat
  • Extrair o horário de início da execução a partir dos logs do ESXi

2. Extração dos dados criptografados

  • Extrair blocos criptografados de VMDK, SESPARSE etc.

3. Medição da velocidade do servidor

  • Usar a ferramenta timing-patch do GitHub

4. Divisão do trabalho

  • Criar e dividir o arquivo de configuração
  • Configurar para permitir execução paralela na GPU

5. Aluguel de GPU e execução

  • Runpod → custo de cerca de US$ 116 por 7 dias
  • Vast.ai → mais barato, mas a velocidade pode variar conforme o estado da máquina

6. Execução da força bruta do KCipher2

./akira-bruteforce run2 config.json  

7. Execução da força bruta do Chacha8

  • Necessária no caso de arquivos grandes

8. Execução da descriptografia

./decrypt filename.vmdk <t1> <t2> <t3> <t4>  

Resultados de desempenho

  • RTX 3090 → 1,5 bilhão de operações por segundo
  • RTX 4090 → 3,5 bilhões de operações por segundo
  • Com 16 RTX 4090 → recuperação possível em menos de 10 horas

Possibilidade de recuperação e limitações

  • A probabilidade de sucesso na recuperação do ransomware é inferior a 0,1%
  • A recuperação é possível quando certas condições específicas são atendidas
  • O método de criptografia pode mudar dependendo da variante do ransomware

Conclusão

  • Recuperar dados de ransomware é extremamente difícil, mas pode ser possível em condições específicas
  • A força bruta baseada em GPU é a ferramenta central
  • O autor publicou o código de recuperação como open source, mas não consegue oferecer suporte adicional

Observações adicionais

  • Consulte o arquivo README.md no GitHub
  • O código foi escrito para a situação específica de um cliente → não é uma ferramenta genérica
  • Gerar o arquivo de configuração, ajustar o timing etc. exige conhecimento de nível administrador de sistemas

1 comentários

 
GN⁺ 2025-03-16
Comentários no Hacker News
  • Alguém mencionou a "vida útil limitada" do ransomware. Por causa disso, apagou um comentário dizendo que isso não afetaria outras vítimas, mas publicou uma resposta sobre o assunto

    • Isso está errado. O que é limitado é o número de ataques em que a vítima pode recuperar os arquivos
    • Se você acha que o autor foi a única pessoa a usar esse ataque, isso também está errado
    • Recomendou o livro The Ransomware Hunting Team. É um livro interessante sobre os bastidores de como as vítimas recuperam seus arquivos
  • Houve uma pergunta sobre por que usar timestamps

    • Espero não soar maldoso, e fico feliz que não usem, mas isso parece um erro bem básico
    • Fico me perguntando se deixei passar alguma coisa ou se simplesmente há mais pessoas que escolhem não cometer crimes
  • O texto foi agradável de ler e trouxe o nível certo de detalhes para satisfazer a curiosidade sobre o processo

    • Muitos elogios ao autor por ter criado esse processo e fornecido detalhes interessantes
  • Se os aplicativos fossem isolados em sandbox por padrão, o problema de ransomware seria menor

  • "Estimei no CPU do meu mini PC uma taxa de 100.000 timestamps por segundo calculados em bytes aleatórios (usando todos os núcleos)"

    • Gostaria de saber mais detalhes sobre o mini PC: processador, RAM, preço e se é fanless
  • Fiquei curioso sobre por que os primeiros 65k são criptografados com KCipher2 e o restante com outra coisa. Parece estranho

  • "Espero que, depois de publicar isso, os atacantes mudem a criptografia de novo"

    • Se eles vão perceber isso, então por que publicar? Fornecer um descriptografador tão detalhado por fama na internet parece irresponsável
    • É uma leitura interessante e estimula a curiosidade intelectual, mas manter os detalhes em sigilo parece melhor para a comunidade como um todo
  • "Toda vez que escrevo sobre ransomware no meu blog indonésio, muita gente pede ajuda com ransomware"

    • Só verificar se um ransomware é recuperável já pode exigir horas de esforço e tempo (por exemplo, quando o malware está ofuscado/protegido)
    • Portanto, a opinião é: não peçam que isso seja feito de graça
    • Então a resposta é: cobre por isso