Explore a atividade de cibergrupos da equipe Donot



O grupo APT Donot Team (também conhecido como APT-C-35, SectorE02) está ativo desde pelo menos 2012. O interesse dos atacantes visa obter informações confidenciais e propriedade intelectual. Entre os objetivos dos criminosos estão os países do sul da Ásia, em particular o setor público do Paquistão. Em 2019, observamos suas atividades em Bangladesh, Tailândia, Índia, Sri Lanka e Filipinas, além de fora da região asiática - na Argentina, nos Emirados Árabes Unidos e no Reino Unido.

Durante vários meses, seguimos alterações no código dos downloaders maliciosos do grupo. Neste artigo, consideraremos um dos vetores de ataque, abordaremos os carregadores mencionados com mais detalhes e abordaremos os recursos da infraestrutura de rede.

Cadeia de ataque


No início da infecção, a vítima recebe um documento do MS Word no formato Office Open XML. Apesar da falta de evidências explícitas, acreditamos com confiança que o vetor de penetração inicial é direcionado ao email de phishing com um anexo do escritório. O documento em si não é malicioso, mas abusa da capacidade de carregar automaticamente elementos externos para iniciar o documento da próxima etapa.



Acessando um objeto externo vinculado

O arquivo de download é um documento RTF que explora a vulnerabilidade CVE-2018-0802 no Microsoft Equation. A operação principal do shellcode é precedida por uma cadeia de operações intermediárias que descriptografam a próxima camada com um XOR de byte único com as teclas 0x90 e 0xCE:



Descriptografia pelo primeiro código de shell do segundo



Descriptografia pelo segundo código de shell do terceiro



Descriptografia pelo terceiro código de shell do principal

O shellcode principal executa as seguintes ações:

  • Um XOR de byte único com a chave 0x79 descriptografa dados binários do arquivo % TEMP% \ one .
  • Cria os arquivos executáveis C: \ Windows \ Tasks \ Serviceflow.exe e C: \ Windows \ Tasks \ sinter.exe . Estes são os downloaders de grupos maliciosos, sobre os quais falaremos.
  • Cria o arquivo C: \ Windows \ Tasks \ S_An.dll , no qual dois bytes 0x90 são gravados.
  • Cria o arquivo C: \ Windows \ Tasks \ A64.dll . Dependendo da capacidade do sistema, esta é uma versão x64 ou x86 modificada do utilitário UACMe para aumentar os privilégios no sistema. Além de contornar o controle do UAC, a biblioteca cria e executa o script BAT % TEMP% \ v.bat , que registrará um dos gerenciadores de inicialização criados anteriormente como um serviço usando os seguintes comandos:

sc create ServiceTool displayname= "ServiceFill" binpath= "C:\Windows\Tasks\Serviceflow.exe" start= "auto" sc start ServiceTool 


imagem

Decodificando cadeias de script BAT em bibliotecas UACMe modificadas

  • Cria e executa o script JScript C: \ Windows \ Tasks \ bin.js. Sua tarefa é iniciar a biblioteca A64.dll através da exportação do RnMod usando rundll32.
  • Cria um atalho WORDICON.lnk no diretório de inicialização. Sua tarefa é iniciar o carregador de inicialização sinter.exe após a reinicialização do sistema.
  • Cria um atalho Support.lnk no diretório de inicialização. Sua tarefa é executar o script JScript bin.js após a reinicialização do sistema.



Código de shell principal descompilado

Portanto, nesse estágio, dois gerenciadores de inicialização são fixos com segurança no sistema, cuja operação discutiremos em mais detalhes.

Carregadoras Lo2


Apesar da classificação, os trojans têm tarefas diferentes. Portanto, o arquivo Serviceflow.exe tem uma função de watchdog. Ele coleta informações sobre o sistema:

  • nome de usuário
  • nome do computador
  • o conteúdo dos diretórios \ Arquivos de Programas \ e \ Arquivos de Programas (x86) \
  • Versão do SO
  • dados do processador -

e grava os resultados em um arquivo log.txt. Ele verifica a existência dos arquivos A64.dll e sinter.exe no diretório \ Windows \ Tasks \ e, se necessário, baixa-os do novo servidor de gerenciamento [.] Top Skills e o inicia em nome do usuário atual, extraindo o token correspondente do processo winlogon.exe. O Trojan sinter.exe sinaliza um invasor sobre infecção, acessando hxxps://mystrylust.pw/confirm.php e envia informações pré-coletadas sobre o sistema para o skillsnew [.] Top. Em seguida, se o computador da vítima tiver mais interesse, ele receberá o conteúdo do arquivo customer.txt em hxxp://docs.google.com/uc?id=1wUaESzjGT2fSuP_hOJMpqidyzqwu15sz&export=download . O arquivo contém o nome do servidor de controle carro [.] Drivethrough.top, com o qual ocorre mais interação. Os componentes para download estão localizados no diretório \ AppData \ Roaming \ InStore \ e sua inicialização é fornecida usando o agendador de tarefas.



Linhas descriptografadas de fragmentos de comando e modelo de tarefa

O resultado do trabalho de downloaders maliciosos é a incorporação dos componentes da estrutura yty no sistema, que permitem extrair informações mais completas sobre a vítima, incluindo arquivos com extensões especificadas, linhas de entrada interceptadas, uma lista de processos, capturas de tela. Vamos deixar a consideração da operação de plug-ins fora do escopo deste artigo.

Examinando outras amostras semelhantes, encontramos os caminhos e nomes de projetos deixados nas informações de depuração:

  • D: \ Soft \ DevelopedCode_Last \ BitDefenderTest \ m0 \ New_Single_File \ Lo2 \ SingleV2 \ Release \ BinWork.pdb
  • D: \ Soft \ DevelopedCode_Last \ BitDefenderTest \ m0 \ New_Single_File \ Lo2
    \ SingleV2_Task_Layout_NewICON \ Release \ BinWork.pdb
  • D: \ Soft \ DevelopedCode_Last \ BitDefenderTest \ m0 \ New_Single_File \ Lo2
    \ SingleV2_Task_Layout_NewICON_N_Lnk \ Release \ BinWork.pdb
  • D: \ Soft \ DevelopedCode_Last \ BitDefenderTest \ m0 \ New_Single_File \ Lo2 \ SingleV3 \ Release \ WorkFile.pdb
  • D: \ Soft \ DevelopedCode_Last \ BitDefenderTest \ m0 \ Off \ Off_New_Api \ Release \ C ++ \ ConnectLink.pdb
  • D: \ Soft \ DevelopedCode_Last \ BitDefenderTest \ m0 \ Off \ Off_New_Api \ Release \ C ++ \ TerBin.pdb
  • D: \ Soft \ DevelopedCode_Last \ BitDefenderTest \ m0 \ yty 2.0 - Com pedaços AES LOC PARA XP Apenas Bit-Change_Name \ Release \ TaskTool.pdb
  • D: \ Soft \ DevelopedCode_Last \ BitDefenderTest \ yty 2.0 - Com os AES Chunks OFFS Apenas Bit \ Release \ C ++ \ MsBuild.pdb
  • D: \ Soft \ DevelopedCode_Last \ yty 2.0 \ Release \ C ++ \ Setup.pdb

Além da substring "yty 2.0", que conecta os cavalos de Troia à estrutura mencionada acima, também observamos a substring "Lo2", que pode ser abreviada como "Loader 2".

Nas versões dos gerenciadores de inicialização até meados de 2018, todas as linhas usadas eram armazenadas em um arquivo aberto em um arquivo. Nas versões seguintes, os atacantes começaram a usar a criptografia de cadeias. De versão para versão, o algoritmo mudou da seguinte maneira:

  • A partir de maio de 2018: inverta a linha e codifique o Base64.
  • A partir de abril de 2019: execute as etapas anteriores duas vezes .
  • A partir de janeiro de 2019: criptografe a string com o algoritmo AES no modo CBC e codifique o Base64. Exemplo de código Python para descriptografia:

 import base64 from Cryptodome.Cipher import AES aeskey = (0x23, 0xd4, 0x67, 0xad, 0x96, 0xc3, 0xd1, 0xa5, 0x23, 0x76, 0xae, 0x4e, 0xdd, 0xca, 0x13, 0x55) def aes_decrypt(data, aeskey): iv = bytes(list(range(0, 16))) key = bytes(aeskey) aes = AES.new(key, AES.MODE_CBC, iv) return aes.decrypt(data).decode().strip('\x00') def base64_aes_decrypt(data, aeskey): data = base64.b64decode(data) data = aes_decrypt(data, aeskey) return data 

  • A partir de junho de 2019: execute uma subtração cíclica em caracteres com uma determinada matriz de bytes, codifique usando UTF-8 e codifique Base64. Exemplo de código Python para descriptografia:

 subgamma = (0x2d, 0x55, 0xf, 0x59, 0xf, 0xb, 0x60, 0x33, 0x29, 0x4e, 0x19, 0x3e, 0x57, 0x4d, 0x56, 0xf) def sub_decrypt(data, subgamma): o = '' length = len(data) subgamma_length = len(subgamma) for i in range(length): o += chr((0x100 + ord(data[i]) - subgamma[i%subgamma_length]) & 0xff) return o def base64_utf8_sub_decrypt(data, subgamma): data = base64.b64decode(data) data = data.decode('utf-8') data = sub_decrypt(data, subgamma) return data 

  • A partir de outubro de 2019: execute o XOR cíclico caractere por caractere com uma matriz de bytes especificada e codifique Base64 duas vezes . A peculiaridade do algoritmo XOR é que, se o valor do caractere da string corresponder ao valor do caractere na matriz de bytes fornecida, o XOR não será necessário. Exemplo de código Python para descriptografia:

 xorgamma = (0x56, 0x2d, 0x61, 0x21, 0x16) def modxor_decrypt(data, xorgamma): o = '' length = len(data) xorgamma_length = len(xorgamma) for i in range(length): c = data[i] if c != xorgamma[i%xorgamma_length]: c = data[i] ^ xorgamma[i%xorgamma_length] o += chr(c) return o def base64_modxor_decrypt(data, xorgamma): data = base64.b64decode(data) data = modxor_decrypt(data, xorgamma) return data 

No processo de escrever um script para descriptografia, descobrimos que algumas linhas individuais não podiam ser descriptografadas. Mas então descobriu-se que qualquer um dos outros métodos de descriptografia descritos acima era adequado para essas seqüências. Depois de garantir que apenas um método de decodificação de dados foi implementado em cada amostra, chegamos à conclusão de que os invasores simplesmente esqueceram de excluir linhas não utilizadas ou substituí-las por criptografadas corretamente para a próxima versão do malware.



As linhas em uma das amostras do carregador de inicialização foram criptografadas de várias maneiras, enquanto no arquivo executável apenas uma

Tais erros estão sempre nas mãos dos pesquisadores: por exemplo, repetidamente entre as linhas esquecidas vieram os servidores de controle de intrusos, anteriormente desconhecidos para nós.

Recursos da infraestrutura de rede


Para garantir a integridade, observamos alguns recursos característicos que ajudarão a conectar futuros ataques de agrupamento:

  • A maioria dos servidores de gerenciamento é alugada pelo fornecedor DigitalOcean, LLC (ASN 14061) e está localizada em Amsterdã.
  • Os invasores não usam os mesmos servidores para nomes DNS diferentes: para cada novo nome de domínio, eles preferem reservar um novo host dedicado.
  • Na maioria dos casos, os dados de registro dos proprietários de domínio são ocultados pelos serviços de privacidade. Os seguintes serviços são usados ​​para isso: WhoisGuard, Inc.; Serviço de Proteção à Privacidade Whois, Inc .; Domínios por Proxy, LLC; Fundação de Proteção à Privacidade Whois. Em alguns casos, os dados estão disponíveis e você pode seguir a abordagem geral para preencher os campos.



Informações de domínio WHOIS burningforests [.] Com



Informações de domínio WHOIS serviço de armazenamento em nuvem [.] Com

  • Os mais utilizados são os TLDs .top, .pw, .space, .live e .icu.

Conclusão


A equipe Donot se destaca pelo uso de ferramentas próprias em cada estágio do ataque. Técnicas aplicadas para complicar a análise de código - por um lado, a falta de tentativas de ocultar ou mascarar cuidadosamente suas ações no sistema - por outro. Múltiplos ataques contra os mesmos objetivos podem indicar não apenas um interesse especial no círculo escolhido de vítimas, mas também confirmar a baixa eficiência das táticas e técnicas utilizadas.

Postado por Alexey Vishnyakov, Positive Technologies

COI
6ce1855cf027d76463bb8d5954fcc7bb - carregador de inicialização no formato MS Word
hxxp: //plug.msplugin.icu/MicrosoftSecurityScan/DOCSDOC
21b7fc61448af8938c09007871486f58 - conta-gotas no formato MS Word
71ab0946b6a72622aef6cdd7907479ec - Carregador Lo2 em C: \ Windows \ Tasks \ Serviceflow.exe
22f41b6238290913fc4d196b8423724d - Carregador Lo2 em C: \ Windows \ Tasks \ sinter.exe
330a4678fae2662975e850200081a1b1 - versão modificada x86 do UACMe
22e7ef7c3c7911b4c08ce82fde76ec72 - versão modificada x64 do UACMe
skillsnew [.] topo
hxxps: //mystrylust.pw/confirm.php
hxxp: //docs.google.com/uc? id = 1wUaESzjGT2fSuP_hOJMpqidyzqwu15sz & export = download
carro [.] drivethrough.top
burningforests [.] com
serviço de armazenamento em nuvem [.] com

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


All Articles