ESET: Uma análise de novos componentes de zebrócitos

O cibergrupo Sednit está em operação desde pelo menos 2004 e aparece regularmente no noticiário. Acredita-se que Sednit (mais conhecido como Fancy Bear) esteja por trás do crack do Comitê Nacional Democrata dos EUA antes das eleições de 2016, da Agência Mundial Antidopagem (WADA), da rede de televisão TV5Monde e de outros ataques. O arsenal do grupo inclui um conjunto de ferramentas maliciosas, algumas das quais documentamos em um relatório anterior .

Lançamos recentemente um relatório sobre o LoJax , um rootkit UEFI também relacionado ao Sednit e usado em ataques nos Bálcãs, na Europa Central e Oriental.

Em agosto de 2018, os operadores da Sednit implantaram dois novos componentes do Zebrocy e, a partir de agora, vimos um aumento no uso dessa ferramenta. O Zebrocy é uma coleção de gerenciadores de inicialização, conta-gotas e backdoors. Downloaders e conta-gotas são para inteligência, enquanto os backdoors fornecem persistência e spyware. Esses novos componentes têm uma maneira incomum de filtrar dados coletados através dos protocolos de serviço de correio SMTP e POP3.


As vítimas das novas ferramentas se assemelham às vítimas mencionadas em nosso post anterior sobre o Zebrocy , bem como na Kaspersky Lab . Os alvos dos ataques estão na Ásia Central, Europa Central e Oriental, principalmente embaixadas, ministérios das Relações Exteriores e diplomatas.

Revisão



Figura 1. Esquema dos componentes Zebrocy antigos e novos

Por dois anos, o cibergrupo Sednit usou e-mails de phishing como vetor de infecção por Zebrocy (opções 1 e 2 na tabela acima). Após o comprometimento, os atacantes usaram vários gerenciadores de inicialização do primeiro estágio para coletar informações sobre a vítima e, em caso de interesse, após algumas horas ou dias, implantaram uma das backdoors do segundo nível.

O esquema clássico da campanha da Zebrocy é obter a vítima como arquivo no anexo da carta. O arquivo contém dois arquivos, um dos quais é um documento inofensivo e o segundo é um arquivo executável. Os atacantes tentam enganar a vítima chamando o segundo arquivo de um nome típico do documento ou imagem e usando a “extensão dupla”.

Na nova campanha (opção 3 da tabela), um esquema mais complicado é usado - vamos analisá-lo abaixo.

Conta-gotas Delphi


O primeiro binário é um conta-gotas Delphi, o que é bastante incomum para a campanha de Zebrocy. Na maioria dos casos, é um gerenciador de inicialização instalado no sistema da vítima no primeiro estágio do ataque.

Com a ajuda de vários métodos, o conta-gotas complica a engenharia reversa. Nas amostras examinadas, ele usa a palavra-chave fígado para indicar o início e o fim dos elementos-chave, como mostrado abaixo.

$ yara -s tag_yara.yar SCANPASS_QXWEGRFGCVT_323803488900X_jpeg.exe find_tag SCANPASS_QXWEGRFGCVT_323803488900X_jpeg.exe 0x4c260:$tag: l\x00i\x00v\x00e\x00r\x00 0x6f000:$tag: liver 0x6f020:$tag: liver 0x13ab0c:$tag: liver 

A regra YARA acima pesquisa o fígado de cordas. A primeira linha do fígado é usada no código, mas não separa nada, enquanto os outros compartilham o descritor de chave, a imagem (seu hexdump é mostrado abaixo) e o componente criptografado no conta-gotas.

 $ hexdump -Cn 48 -s 0x6f000 SCANPASS_QXWEGRFGCVT_323803488900X_jpeg.exe 0006f000 6c 69 76 65 72 4f 70 65 6e 41 69 72 33 39 30 34 |liverOpenAir3904| 0006f010 35 5f 42 61 79 72 65 6e 5f 4d 75 6e 63 68 65 6e |5_Bayren_Munchen| 0006f020 6c 69 76 65 72 ff d8 ff e0 00 10 4a 46 49 46 00 |liver……JFIF.| 

Primeiro, os dados são salvos em uma imagem com o nome de arquivo C: \ Users \ public \ Pictures \ scanPassport.jpg , se esse arquivo ainda não existir.

Curiosamente, o arquivo dropper é chamado SCANPASS_QXWEGRFGCVT_323803488900X_jpeg.exe , que também sugere um esquema de phishing relacionado a passaportes e informações de viagem. Isso pode significar que o operador pode saber o objetivo da mensagem de phishing. O conta-gotas abre a imagem e, se o arquivo já existir, interrompe a execução. Caso contrário, ele abre e recebe o identificador de chave OpenAir39045_Bayren_Munchen . A imagem está ausente, embora o formato esteja correto - veja a figura abaixo.


Figura 2. ScanPassport.jpg

A linha principal do descritor contém Bayren_Munchen - provavelmente uma referência ao time de futebol do FC Bayern Munich. De qualquer forma, o conteúdo do descritor não é importante, mas seu comprimento, com o qual você pode obter a chave XOR para descriptografar o componente.

Para obter a chave XOR, o conta-gotas procura a última palavra-chave hepática e a indenta pelo comprimento do descritor. O comprimento da chave XOR é de 27 (0x1b) bytes (idêntico ao comprimento do descritor de chave).

Usando a chave XOR e um loop simples, o conta-gotas descriptografa a última parte - o componente criptografado localizado imediatamente após a última tag até o final do arquivo. Observe que o cabeçalho MZ do componente executável começa imediatamente após a palavra-chave fígado e a chave XOR é obtida da parte do cabeçalho PE, que geralmente é uma sequência de 0x00 bytes recuperada após a descriptografia do componente, como mostra a figura abaixo.


Figura 3. Componente criptografado (esquerda) versus componente descriptografado (direita)

O componente é redefinido para C: \ Users \ Public \ Documents \ AcrobatReader.txt e converte o arquivo em C: \ Users \ Public \ Documents \ AcrobatReader.exe .

Talvez seja uma tentativa de ignorar a proteção do PC, que gera um aviso quando um arquivo binário libera um arquivo com a extensão .exe em disco.

Mais uma vez, o operador tenta enganar a vítima e, se prestar atenção no diretório, verá a imagem como na figura a seguir:


Figura 4. O componente se parece com um arquivo PDF

Por padrão, o Windows oculta a extensão, e isso é usado por um invasor que despeja o arquivo executável na pasta Documentos e o disfarça em PDF.

Finalmente, o conta-gotas executa o componente hospedado e sai.

MSIL Mail Loader


O componente entregue do conta-gotas anterior é o carregador MSIL embalado com UPX. Para uma melhor compreensão, a lógica do processo é descrita abaixo, o código fonte é fornecido e o esquema de controle é considerado.

O método principal chama Executar para iniciar o aplicativo, que cria o Form1 .

 {   Application.EnableVisualStyles();   Application.SetCompatibleTextRenderingDefault(false);   Application.Run((Form) new Form1()); } 

Formulário1 atribui muitas variáveis, incluindo um novo Timer para sete delas.

    this.start = new Timer(this.components);  this.inf = new Timer(this.components);   this.txt = new Timer(this.components);   this.subject = new Timer(this.components);   this.run = new Timer(this.components);   this.load = new Timer(this.components);   this.screen = new Timer(this.components); 

O objeto Timer possui três campos importantes:

  • Ativado: indica o status do timer ativado.
  • Intervalo: tempo entre eventos em milissegundos
  • Tick: o retorno de chamada é executado após o término do cronômetro e se o cronômetro estiver ativado

Os campos são indicados da seguinte forma:

   this.start.Enabled = true;   this.start.Interval = 120000;   this.start.Tick += new EventHandler(this.start_Tick);   this.inf.Interval = 10000;   this.inf.Tick += new EventHandler(this.inf_Tick);   this.txt.Interval = 120000;   this.txt.Tick += new EventHandler(this.txt_Tick);   this.subject.Interval = 120000;   this.subject.Tick += new EventHandler(this.subject_Tick);   this.run.Interval = 60000;   this.run.Tick += new EventHandler(this.run_Tick);   this.load.Interval = 120000;   this.load.Tick += new EventHandler(this.load_Tick);   this.screen.Interval = 8000;   this.screen.Tick += new EventHandler(this.screen_Tick); 

Para cada objeto, o intervalo de intervalo é definido de 8 segundos a 2 minutos. Um retorno de chamada é adicionado ao manipulador de eventos. Observe que apenas start define o valor como true para Enabled , o que significa que após 2 minutos (12.000 milissegundos = 120 segundos), start_Tick será chamado pelo manipulador de eventos.

    private void start_Tick(object sender, EventArgs e)   {       try       {           this.start.Enabled = false;           Lenor lenor = new Lenor();           this.dir = !Directory.Exists(this.label15.Text.ToString()) ? this.label16.Text.ToString() + "\" : this.label15.Text.ToString() + "\";           this.att = this.dir + "audev.txt";           this._id = lenor.id(this.dir);           this.inf.Enabled = true;       } 

Além disso, cada método demonstra um comportamento idêntico - altera o valor Enabled para false no início. O método é executado e altera o valor Ativado do próximo objeto para true , o que ativa o próximo timer. A variável Enabled é usada pelo operador para criar algo como uma máquina de estado - se a função não funcionar, o mecanismo repetirá sua execução até receber um resultado positivo. O tempo entre as execuções de duas funções pode ser usado como uma tentativa de ignorar a proteção antivírus adicionando um atraso.

Agora, depois de descrever a estrutura de cada método, passamos ao algoritmo de controle. A seguir, é apresentada uma visão geral das etapas na forma de troca de emails entre caixas de correio.


Figura 5. Troca de email

Malvar verifica a existência de um caminho específico usado para despejar cada um dos arquivos durante a execução. Se possível, use C: \ Users \ Public \ Videos \ , caso contrário, C: \ Documents and Settings \ All Users \ Documents \ como o diretório padrão. Observe que o segundo caminho é específico para o Windows XP, enquanto o primeiro caminho é específico para o Vista e superior.

Um ID de 16 bytes é gerado concatenando o número de série do volume C: e o nome de usuário; Ele é armazenado no arquivo audev.txt .

O carregador de inicialização coleta as seguintes informações:
- caminho atual do aplicativo
- versão do sistema operacional
- diretório do sistema
- domínio do usuário
- nome do carro
- nome de usuário
- fuso horário atual
- data atual
- uma lista de unidades lógicas e informações sobre cada uma delas (modelo, número de série etc.)
- listando os diretórios C: \ Arquivos de programas \ e C: \ Arquivos de programas (x86) \
- lista de processos

Esses dados são armazenados no arquivo C: \ Users \ Public \ Videos \ si.ini e enviados por carta no anexo via SMTPS usando a porta padrão 465. O corpo da mensagem contém a linha SI (que pode significar Informações do sistema), o destinatário da mensagem é sym777. g@post.cz . Para toda a troca de informações, o assunto das letras é indicado como id .

O operador decidiu criar vários endereços sobressalentes e envia a mesma carta para outros dois destinatários, provavelmente, caso o endereço principal não funcione. Após enviar a carta, o carregador de inicialização exclui o arquivo si.ini .

Durante a primeira execução do malware, um arquivo set.txt é criado com o texto {System_Parametrs = 10} dentro e uma entrada na chave de registro do Windows.


Figura 6. Persistência no registro

Uma captura de tela é obtida com o nome scx.bin no computador da vítima e enviada por anexo de e-mail com o texto SC (que pode significar captura de tela) no corpo da mensagem.

Após o envio, o malware entra em contato com a caixa de correio kae.mezhnosh@post.cz usando o protocolo POP3 sobre SSL (porta 995) e procura mensagens com um assunto que corresponda ao ID . Se essa mensagem existir e o corpo não estiver vazio, o malware a descriptografará e enviará uma mensagem com okey no corpo para sym777.g@post.cz . O conteúdo de uma mensagem recebida anteriormente é limpo e analisado da seguinte maneira:

 string[] strArray = this._adr.Replace("B&", "").Replace("Db", "").Split('%');       string str1 = strArray[0];       string str2 = strArray[1]; 

Duas linhas são obtidas: a primeira é a senha e a segunda é o nome de usuário para o endereço de email.

Novas credenciais são usadas para conectar-se à caixa de correio recebida, procurar nela uma mensagem com um tópico que corresponda ao ID do malvari e um aplicativo com a string audev no nome do arquivo. Se as duas condições forem atendidas, o malware armazenará o aplicativo e excluirá a mensagem do servidor.

Um log de mensagens é enviado para sym777.g@post.cz , e as mensagens recebidas pelo POP3 são enviadas pelo destinatário com dados do usuário recebidos recentemente.

O esquema de ataque complica a investigação. Primeiramente, se você tiver um carregador de inicialização com letras, não poderá se conectar à caixa de correio que contém a próxima etapa.

Em segundo lugar, se você receber credenciais para correio, ainda não poderá obter a próxima carga útil, pois ela será excluída após o recebimento.

Quando o carregador de inicialização grava com êxito o anexo no disco, ele envia uma mensagem pelo correio com okey2 no corpo e o anexo l.txt contendo 090 . O mesmo arquivo é substituído por zeros e o malware tenta receber outra mensagem. Se isso funcionar, o arquivo l.txt é enviado com okey3 no corpo. O conteúdo do anexo é o diretório e o nome do arquivo. Malvar move o arquivo audev para este endereço. Por fim, o malware envia um email com okey4 no corpo e l.txt no anexo. Isso inicia o arquivo executável, audev.exe, e verifica a presença da linha audev na lista de processos.

   Process.Start(this.rn);   foreach (Process process in Process.GetProcesses())   {       if (process.ProcessName.Contains("audev")) } 

Se esse nome for encontrado, a última letra será enviada, contendo no corpo okey5 e l.txt no anexo. Por fim, l.txt e set.txt são excluídos, a chave de registro criada do Windows é excluída e o programa é encerrado.

Delphi Mail Downloader


A principal função do gerenciador de inicialização é avaliar a importância de um sistema comprometido e, se parecer interessante, carregar e executar o último gerenciador de inicialização Zebrocy.

O arquivo binário é escrito em Delphi e empacotado usando UPX. Uma definição completa do objeto TForm1 pode ser encontrada na seção com seus recursos, mostrando alguns parâmetros de configuração usados. As seções a seguir descrevem a inicialização, os recursos e o protocolo de rede do carregador de inicialização.

Inicialização


Primeiro, descriptografa o conjunto de strings que são endereços de email e senhas. O operador aplica o algoritmo de criptografia AES ECB . Cada linha é descriptografada em local hexadecimal, onde os quatro primeiros bytes correspondem ao tamanho final da linha descriptografada (as linhas descriptografadas no final podem conter algum recuo). O objeto TForm1 contém duas chaves AES: a primeira é usada para criptografar dados e a segunda é usada para descriptografar.

Os endereços de correio e as senhas são usados ​​pelo operador para enviar comandos aos malvari, bem como para obter informações coletadas do computador da vítima. Os protocolos de comunicação SMTP e POP3 são aplicados - ambos via SSL. Para usar o OpenSSL, o malware reduz e usa duas bibliotecas dinâmicas do OpenSSL: libeay32.dll (98c348cab0f835d6cf17c3a31cd5811f86c0388b) e ssleay32.dll (6d981d71895581dfb103170486b8614f7f203bdc) .


Figura 7. Propriedades da DLL do OpenSSL

Observe que todos os arquivos são despejados no diretório ativo do malware : C: \ Users \ Public \ .

A persistência é fornecida durante a primeira execução dos malvari por meio da conhecida técnica de script do script de entrada. Um arquivo com o script registration.bat é criado e várias linhas são gravadas a partir do objeto TForm1 . O script final é o seguinte:

 reg add HKCU\Environment /v "UserInitMprLogonScript" /t REG_EXPAND_SZ /d "C:\Users\Public\Videos\audev.exe" /f del C:\Users\Public\Videos\registr.bat exit 

Por último, mas não menos importante, o malware cria um ID , da mesma maneira que nos binários Zebrocy descritos anteriormente. Ele obtém o nome de usuário usando a API do Windows GetUserNameW e adiciona o número de série da unidade C: \ ao início.

As possibilidades


Dado que existem várias condições e procedimentos para coletar informações sobre a vítima, a seguir é apresentada uma descrição de suas várias capacidades. A configuração da verificação é armazenada no objeto TForm1 , onde são agrupadas sete possibilidades diferentes para coletar informações do computador da vítima.

Começando com uma verificação simples, as primeiras informações que o malware pode obter estão relacionadas a arquivos com as seguintes extensões: .docx, .xlsx, .pdf, .pptx, .rar, .zip, .jpg, .bmp, .tiff . Para cada um dos arquivos encontrados no disco, o malware recebe o caminho completo e a data da última modificação. Essas informações são criptografadas usando a chave AES, sobre a qual falamos anteriormente, e armazenadas no arquivo 0.txt . Outra verificação é direcionada às extensões .dat, .json, .db e, como no caso anterior, obtém o caminho completo e a última data em que o arquivo foi alterado. Em seguida, os criptografa e os armazena no arquivo 57.txt .

A listagem de processos em execução é outro recurso do malvari que permite armazenar informações em um arquivo 08.txt . É assim:

 ======Listing_of_processes======= [System Process] System smss.exe csrss.exe wininit.exe csrss.exe winlogon.exe services.exe lsass.exe […] 

O arquivo i.txt coleta informações gerais sobre o computador da vítima, bem como algumas informações sobre os malvari (número da versão e o caminho no qual é executado). Veja o exemplo abaixo:

 v7.00 C:\Users\Public\Videos\audev.txt ============================================ Log_Drivers: C: fixed; size= 102297 Mb, free=83927 Mb S/N: [redacted] ================================================== OSV: Windows 7 WinType: 32 WinDir: C:\Windows Lang: English (United States) TZ: UTC1:0 Romance Standard Time HostN: [redacted]-PC User: [redacted] ===============S_LIST===================== C:\Program Files\Common Files C:\Program Files\desktop.ini C:\Program Files\DVD Maker C:\Program Files\Internet Explorer C:\Program Files\Microsoft.NET C:\Program Files\MSBuild C:\Program Files\Reference Assemblies C:\Program Files\Uninstall Information C:\Program Files\Windows Defender […] 

O malware pode capturar capturas de tela, salvas no formato 2 \ [AAAA-mm-dd HH-MM-SS] -Image_001.jpg , e gera outro arquivo 2 \ sa.bin , preenchido com uma lista de caminhos para os arquivos de todas as capturas de tela capturadas. A última opção é listar componentes de rede e dados do sistema, o resultado é gravado em 4.txt .

Protocolo de rede


O carregador de correio Delphi é uma adição relativamente nova ao kit de ferramentas Zebrocy, pois fornece uma nova maneira de filtrar dados e receber comandos do operador. A exfiltração é bastante simples, mas faz muito barulho na rede, uma vez que os arquivos criptografados coletados anteriormente são enviados via SMTPS, cada versão do arquivo é três vezes maior.



O assunto da mensagem é o ID da vítima e o arquivo é enviado como um anexo com uma palavra-chave correspondente ao conteúdo do arquivo. Observe que para cada arquivo há uma versão criptografada sendo enviada.



Capturas de tela e arquivos para as duas verificações também são enviados, mas com palavras-chave diferentes.




Figura 8. Exemplo de uma mensagem com dados transmitidos

Enquanto a exfiltração dos dados usa o protocolo SMTP, o arquivo binário é associado ao endereço de email tomasso25@ambcomission.com via POP3 e análise de mensagens. O corpo da carta contém várias palavras-chave interpretadas pelo malware como comandos.



Após a execução, o log do depurador e o resultado dos comandos (se houver) são enviados de volta ao operador. Por exemplo, após um comando de verificação, o operador recebe um arquivo contendo uma lista de arquivos com extensões correspondentes, juntamente com cada um desses arquivos.

Enquanto esse carregador de inicialização possui funções de backdoor, ele despeja no sistema um carregador de inicialização no Delphi, já associado a esse grupo, que descrevemos em um artigo anterior sobre o Zebrocy.

Conclusão


No passado, já vimos a interseção entre o Zebrocy e o malware tradicional Sednit. Pegamos a Zebrocy lançando o backdoor principal da Sednit no sistema XAgent, portanto, com um alto grau de certeza, atribuímos a autoria da Zebrocy a esse cibergrupo.

No entanto, a análise dos arquivos binários revelou erros no nível da linguagem, bem como o desenvolvimento, indicando um nível diferente de qualificação dos autores. Os dois gerenciadores de inicialização usam protocolos de correio para filtrar dados e têm mecanismos idênticos para coletar as mesmas informações. No entanto, eles criam muito ruído na rede e no sistema, criando muitos arquivos e enviando-os. No processo de análise do carregador de correio no Delphi, parecia-nos que algumas funções haviam desaparecido, mas as linhas ainda permaneciam no arquivo binário. Este kit de ferramentas é usado pela equipe da Sednit, mas acreditamos que está sendo desenvolvido por outra equipe - menos experiente em comparação com os criadores dos componentes tradicionais da Sednit.

Os componentes de zebrócitos são uma adição ao kit de ferramentas Sednit, e eventos recentes podem explicar o aumento do uso ativo dos binários de zebrócitos, em vez dos malvari tradicionais.

Indicadores de compromisso



Nomes de arquivo, SHA-1 e detecção por produtos da ESET

1. SCANPASS_QXWEGRFGCVT_323803488900X_jpeg.exe - 7768fd2812ceff05db8f969a7bed1de5615bfc5a - Win32 / Sednit.ORQ
2. C: \ Usuários \ público \ Imagens \ scanPassport.jpg - da70c54a8b9fd236793bb2ab3f8a50e6cd37e2df
3. C: \ Usuários \ Público \ Documentos \ AcrobatReader. {Exe, txt} - a225d457c3396e647ffc710cd1edd4c74dc57152 - MSIL / Sednit.D
4. C: \ Usuários \ Público \ Vídeos \ audev.txt - a659a765536d2099ecbde988d6763028ff92752e - Win32 / Sednit.CH
5.% TMP% \ Indy0037C632.tmp - 20954fe36388ae8b1174424c8e4996ea2689f747 - Win32 / TrojanDownloader.Sednit.CMR
6.% TMP% \ Indy01863A21.tmp - e0d8829d2e76e9bb02e3b375981181ae02462c43 - Win32 / TrojanDownloader.Sednit.CMQ

E-mail

carl.dolzhek17@post.cz
shinina.lezh@post.cz
P0tr4h4s7a@post.cz
carl.dolzhek17@post.cz
sym777.g@post.cz
kae.mezhnosh@post.cz
tomasso25@ambcomission.com
kevin30@ambcomission.com
salah444@ambcomission.com
karakos3232@seznam.cz
rishit333@ambcomission.com
antony.miloshevich128@seznam.cz

Source: https://habr.com/ru/post/pt437236/


All Articles