Pular para o conteúdo principal

DOE AGORA Qualquer valor

[QuickNote] Descriptografando a configuração C2 do Warzone RAT

[QuickNote] Descriptografando a configuração C2 do Warzone RAT

Publicado: 25 de março de 2023 em Meus tutoriais , [QuickNote] Descriptografando a configuração C2 do Warzone RAT
Tags:  ,  ,  ,  , 
1 votos


1. Introdução

Warzone RATé um tipo de malware capaz de se infiltrar no computador da vítima e fornecer aos invasores acesso remoto e controle sobre o sistema. O malware ganhou notoriedade por seus recursos avançados e capacidade de evitar a detecção, tornando-se uma séria ameaça à segurança do computador.

O Warzone RAT normalmente se espalha por e-mails de phishing ou outras técnicas de engenharia social, nas quais os invasores induzem as vítimas a baixar e instalar o malware em seus sistemas. Depois que o malware é instalado, ele pode executar uma variedade de ações maliciosas, incluindo roubo de senhas, captura de tela e registro de teclas digitadas. Ele também pode baixar e executar malware adicional, dando aos invasores ainda mais controle sobre o sistema da vítima.

Um dos principais recursos do Warzone RAT é sua capacidade de criptografar seus dados de configuração, tornando difícil para os especialistas em segurança analisar e entender como o malware opera.Atualmente, existem duas variantes do malware em circulação, cada uma usando um método diferente para decodificar sua configuração. A primeira variante usa criptografia RC4 padrão, enquanto a segunda variante usa uma versão modificada do RC4. Essa modificação torna ainda mais desafiador descriptografar e analisar os dados de configuração do malware.

2. Análise

Sample1: 00930cccd81e184577b1ffeebf08ee6a32dd0ef416435f551c64d2bcb61d46cf (use RC4 padrão)

Sample2: 61f8bf26e80b6d6a7126d6732b072223dfc94203bb7ae07f493aad93de5fa342 (use RC4 modificado)

No Warzone RAT, as informações de configuração são armazenadas na .bss seção PE do código do malware. .bss seção é normalmente usada para armazenar dados não inicializados. O formato da configuração é o seguinte: [Key length] [RC4 key] [Encrypted data]Abaixo está uma ilustração da configuração armazenada na .bssseção em ambos os exemplos.

As etapas para executar o processo de recuperação de informações e cópia de dados do.bss seção para a memória são os mesmos em ambas as amostras. O pseudo-código é mostrado abaixo:

O pseudocódigo em função wzr_decrypt_config em ambas as amostras é o mesmo, o que envolve extrair a chave RC4 e os dados criptografados e, em seguida, usar o RC4 para descriptografar a configuração. A diferença está na função wzr_perform_rc4.

A função wzr_perform_rc4 no exemplo 1 usa RC4 padrão para descriptografar a configuração. Seu pseudocódigo é mostrado abaixo:

Assim, podemos facilmente usar o CyberChef para executar a decodificação de configuração ou escrever um script Python para automatizar amostras semelhantes.

O pseudocódigo para a função wzr_perform_rc4 no exemplo 2, conforme mostrado abaixo. Antes da descriptografia, ele aloca uma matriz de 250 bytes, preenchida com valores zero. Em seguida, copia o extraídorc4_key nesta matriz. Finalmente, ele chama a wzr_rc4_crypt função, que usa oRC4 modificadoalgoritmo para descriptografar a configuração.

O pseudocódigo completo dowzr_rc4_cryptfunção é a seguinte:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
void __thiscall wzr_rc4_crypt(wzr_rc4_data *rc4_info, _BYTE *data)
{
  idx = 0;
  if ( rc4_info->rc4Sbox )
  {
    if ( rc4_info->rc4_key_250b )
    {
      rc4_info->counter2 = 0;
      LOBYTE(i) = 0;
      rc4_info->counter1 = 0;
 
      do
      {
        rc4_info->rc4Sbox[i] = rc4_info->counter1;
        i = rc4_info->counter1 + 1;
        rc4_info->counter1 = i;
      }
      while ( i < 256 );
   
      rc4_info->counter1 = 0;
      for ( i = 0; i < 256; rc4_info->counter1 = i )
      {
        rc4Sbox = rc4_info->rc4Sbox;
        rc4_info->counter2 += rc4Sbox[i] + rc4_info->rc4_key_250b[i % 250];
        rc4Sbox[i] ^= rc4Sbox[rc4_info->counter2];
        // swap values
        rc4_info->rc4Sbox[LOBYTE(rc4_info->counter2)] ^= rc4_info->rc4Sbox[LOBYTE(rc4_info->counter1)];
        rc4_info->rc4Sbox[LOBYTE(rc4_info->counter1)] ^= rc4_info->rc4Sbox[LOBYTE(rc4_info->counter2)];
        i = rc4_info->counter1 + 1;
      }
      rc4_info->counter1 = 0;
      rc4_info->counter2 = 0;
      // Decrypt data
      if ( rc4_info->data_length )
      {
        j = 0;
        do
        {
          rc4_info->counter1 = j + 1;
          rc4Sbox = rc4_info->rc4Sbox;
          k = (j + 1);
          rc4Sbox_value1 = rc4Sbox[k];
          rc4_info->counter2 += rc4Sbox_value1;
          rc4Sbox_value1_ = rc4Sbox_value1;
          rc4Sbox_value2 = rc4Sbox[rc4_info->counter2];
          rc4Sbox[k] = rc4Sbox_value2;
          rc4_info->rc4Sbox[LOBYTE(rc4_info->counter2)] = rc4Sbox_value1;
          rc4Sbox_ = rc4_info->rc4Sbox;
          data[idx] ^= rc4Sbox_[(rc4_info->counter2 + rc4Sbox_value2)] ^ (rc4Sbox_[(rc4Sbox_value2 + rc4Sbox_value1_)]
                                                                        + rc4Sbox_[(rc4Sbox_[((0x20 * rc4_info->counter2) ^ (rc4_info->counter1 >> 3))]
                                                                                  + rc4Sbox_[((0x20 * rc4_info->counter1) ^ (rc4_info->counter2 >> 3))]) ^ 0xAA]);
          j = ++rc4_info->counter1;
          ++idx;
        }
        while ( idx < rc4_info->data_length );
      }
    }
  }
}

Com o pseudocódigo acima, podemos reescrever o código de decodificação em Python da seguinte maneira. Este é o código que escrevi e você pode escrevê-lo à sua maneira, desde que execute a tarefa corretamente.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
def SIGNEXT(x, b):
    m = (1 << (b -1))
    x = x & ((1 << b) -1)
    return ((x ^ m) - m)
 
# This routine is responsible for decrypting the stored C2.
def rc4_customized_decryptor(data, key):
    idx = 0
    counter1 = 0
    counter2 = 0
     
    # Initialize RC4 S-box
    rc4Sbox = list(range(256))
     
    # Modify RC4 S-box
    for i in range(256):
        counter2 += (rc4Sbox[i] + key[i%250])
        counter2 = counter2 & 0x000000FF
        rc4Sbox[i] ^= rc4Sbox[counter2]
        rc4Sbox[counter2 & 0xFF] ^= rc4Sbox[counter1 & 0xFF]
        rc4Sbox[counter1 & 0xFF] ^= rc4Sbox[counter2 & 0xFF]
        counter1 = i+1       
     
    # Decrypt data
    counter1 = 0
    counter2 = 0
    j = 0
    decrypted = []
    while(idx < len(data)):
        counter1 = j + 1
        k = (j+1)
        rc4Sbox_value1 = rc4Sbox[k]
        counter2 += (SIGNEXT(rc4Sbox_value1, 8) & 0xFFFFFFFF)
        rc4Sbox_value1_ = (SIGNEXT(rc4Sbox_value1, 8) & 0xFFFFFFFF)
        rc4Sbox_value2 = rc4Sbox[counter2 & 0x000000FF]
        rc4Sbox[k] = rc4Sbox_value2
        rc4Sbox[(counter2 & 0x000000FF)] = rc4Sbox_value1
        tmp1 = rc4Sbox[((0x20 * counter1) ^ (counter2 >> 3)) & 0x000000FF]
        tmp2 = rc4Sbox[((0x20 * counter2) ^ (counter1 >> 3)) & 0x000000FF]
        tmp3 = rc4Sbox[((tmp1 + tmp2) & 0x000000FF) ^ 0xAA]
        tmp4 = rc4Sbox[(rc4Sbox_value2 + rc4Sbox_value1_) & 0x000000FF]
        tmp5 = (tmp3 + tmp4) & 0x000000FF
        tmp6 = rc4Sbox[(counter2 + rc4Sbox_value2) & 0x000000FF]
        decrypted.append(data[idx] ^ (tmp5 ^ tmp6))
         
        counter1 += 1
        j = counter1
        idx += 1
     
    return bytes(decrypted)

Abaixo estão os resultados do uso de um script Python para extrair a configuração do Warzone RAT dos exemplos usados ​​no artigo.

3. Fim

O artigo gostaria de concluir aqui. Espero que ele forneça informações úteis para você durante o processo de análise do malware Warzone RAT. Para se proteger contra o Warzone RAT e outros tipos de malware, os usuários devem tomar precauções, como ser cautelosos ao abrir anexos de e-mail, usar senhas fortes e manter o software atualizado. Também é importante usar um software antivírus e mantê-lo atualizado regularmente. Ao seguir essas etapas, os usuários podem ajudar a se proteger contra a ameaça do Warzone RAT e outros tipos de malware.

4. Referências

https://research.openanalysis.net/warzone/malware/config/2021/05/31/warzone_rat_config.html

https://exploitreversing.files.wordpress.com/2022/11/mas_6-1.pdf

Comentários

Ebook

Postagens mais visitadas