Análise do comportamento do Trojan Pegasus na rede

O código fonte do Trojan bancário Pegasus foi publicado recentemente. Apesar da menção do grupo Carbanak em nome do arquivo, pesquisadores do Minerva Labs negaram o envolvimento do Trojan nesse grupo e provaram seu envolvimento no grupo Buhtrap (Ratopak). Dentro do arquivo, há uma breve descrição do trabalho do Trojan, seus códigos-fonte, uma descrição do sistema de pagamento bancário e os dados de funcionários de muitos bancos russos.

A arquitetura do código-fonte desse malware é bastante interessante. A funcionalidade é dividida em módulos montados em um único "binpack" no estágio de compilação. O processo de compilação também inclui a assinatura de arquivos executáveis ​​com um certificado do arquivo tric.pfx, que não está no arquivo morto.

Não menos curiosa é a atividade de rede do Pegasus, que, após a infecção, tenta se espalhar dentro do domínio e sabe como proxy de dados entre máquinas que usam pipes e o transporte Mailslot. Nós nos concentramos em estudar os recursos da atividade de rede do Trojan e adicionamos rapidamente o Pegasus detecta o produto PT Network Attack Discovery . Isso permitirá que todos os seus usuários detectem oportunamente a atividade desse cavalo de Troia e suas modificações na rede. Neste artigo, darei uma descrição detalhada dos mecanismos de distribuição de rede e a interação entre cópias do Pegasus.



Introdução


Uma vez na máquina, o módulo principal InstallerExe injeta o código no svchost.exe usando a técnica Process Hollowing e, após inicializar os módulos principais, o Pegasus inicia vários processos paralelos:

  1. Replicação de Domínio - envolve inteligência na rede e tenta se espalhar para outras máquinas Windows.
  2. O Ouvinte do Mailslot ouve mensagens de broadcast do slot de correio, através das quais o Pegasus envia contas mineradas. O nome do slot é gerado em tempo de compilação.
  3. O ouvinte do servidor de tubos escuta o tubo do Windows com o nome gerado em nome da máquina. Esses tubos são usados ​​principalmente para detectar outras cópias do Pegasus na rede e sua interação.
  4. Senhas de logon periodicamente, a cada poucos minutos, tentam despejar dados da conta com um módulo da Mimikatz.
  5. A conectividade de rede é responsável pela comunicação com o servidor CnC e mensagens periódicas.

// start transports which links data with our CB-manager pwInitPipeServerAsync(dcmGetServerCallback()); mwInitMailslotServer(dcmGetServerCallback()); ... // start broadcasting creds to other machines cmStartupNetworkBroadcaster(); 

Replicação de domínio


Um dos subsistemas do Pegasus é responsável pelo movimento lateral em uma rede Windows. A distribuição é dividida em duas etapas importantes:

  1. Detecção de carros vizinhos.
  2. Tentativa de replicação em uma máquina.

A descoberta de máquinas vizinhas em um domínio é feita através de duas chamadas de API:

NetServerEnum, que requer o serviço Navegador e chama WNetOpenEnum / WNetEnumResource.
Todas as máquinas encontradas no domínio devem ser verificadas se já estiverem infectadas. O Pegasus pesquisa o nome do tubo gerado a cada 200 milissegundos por mais de 20 vezes seguidas. Usamos esse comportamento anormal como um dos indicadores da atividade do Pegasus no domínio. Como não detectou nenhum sinal de infecção, o malware prossegue para a próxima etapa - tentativa de replicação.

A replicação é a seguinte. Usando as contas encontradas (KM) no host, o Pegasus tenta efetuar login na máquina usando o protocolo SMB nas esferas IPC $ e ADMIN $ e, se houver acesso ao IPC $ e não houver acesso ao ADMIN $, o Pegasus conclui que está certo a conta é insuficiente e deve ser marcada como inválida. Tendo obtido acesso ao ADMIN $ ball, que é um alias para a pasta% windir%, o malware tenta determinar a arquitetura da máquina para usar o módulo apropriado no futuro.

O algoritmo de determinação da arquitetura é baseado em cabeçalhos de arquivo PE na máquina remota. Como um arquivo, o Pegasus tenta ler os 4 primeiros kilobytes do notepad.exe na pasta% windir%. Uma desvantagem óbvia desse método é que, no Windows Server 2012, o bloco de notas está localizado no caminho% windir% \ System32.

Localização notepad.exe no Windows 7:

 C:\Users\Administrator>where notepad.exe C:\Windows\System32\notepad.exe C:\Windows\notepad.exe 

No Windows Server 2012:

 C:\Users\Administrator>where notepad.exe C:\Windows\System32\notepad.exe 

Se não detectar o notepad.exe, o Pegasus não poderá infectar o servidor, mesmo que tenha informações da conta com os direitos necessários. A simples ausência de bloco de notas em% windir% pode interromper a distribuição do Pegasus no Windows Server 2012. O uso do regedit.exe a esse respeito é mais confiável.

Após definir com êxito a arquitetura do servidor de destino, o Pegasus carrega um pequeno conta-gotas RSE (Remote Service Exe) com cerca de 10 kilobytes de tamanho, cuja tarefa é carregar o pacote de bin dos módulos Pegasus através do tubo de forma clara e transferir o controle para o módulo Shellcode. O nome do conta-gotas é composto de maneira pseudo-aleatória e consiste em uma sequência de caracteres hexadecimais de 8 a 15 caracteres. O gerador pseudo-aleatório é inicializado dependendo do nome da máquina de destino e será o mesmo entre as partidas para evitar possíveis desordens de% windir% com cópias anteriores do conta-gotas.



O conta-gotas é verificado quanto à integridade e possível exclusão pelo antivírus, após o qual é iniciado por um dos dois mecanismos implementados - SCM ou WMI, e primeiro o Pegasus tenta iniciar o RSE por meio do mecanismo WMI e, somente depois, usando o Service Control Manager (SCM). Isso ocorre porque o SCM deixa mais rastreamentos nos logs do Windows. Os criadores do Pegasus também planejaram outros métodos de distribuição - Wsh Remote, Powershell Remoting, Task Scheduler e um módulo para executar comandos via RDP estava em desenvolvimento.

Como mencionado acima, após um lançamento bem-sucedido, o conta-gotas verifica e abre o canal para ouvir e transfere o controle para a carga útil recebida.



Como o código Pegasus é injetado pelo método Process Hollowing no processo svchost.exe, nem o módulo InstallerExe original deve permanecer no disco no caso de uma infecção primária, nem o conta-gotas RSE no caso de distribuição. Se o conta-gotas ainda estiver acessível por um caminho conhecido, o Pegasus o removerá do seu próprio modo:

  1. substituindo o conteúdo do arquivo por dados aleatórios;
  2. sobrescrever com dados vazios (zeros);
  3. renomear arquivo;
  4. exclusão de arquivo.



Após uma infecção bem-sucedida, o processo de distribuição da Replicação de Domínio é iniciado novamente.

Trabalhos de e-mail


Depois que o Pegasus obtiver acesso aos dados da conta de outra cópia do Pegasus ou do módulo mod_LogonPasswords, ele começará a transmitir dados dos EUA por domínio. A distribuição é realizada usando o mecanismo SMB baseado em Mailslot, que permite a transmissão unidirecional de uma pequena porção de dados em um domínio. A distribuição ocorre de acordo com um nome de slot gerado aleatoriamente e, para que todas as máquinas infectadas no domínio possam enviar e receber dados por um único nome, o gerador pseudo-aleatório de nomes é inicializado a partir da variável TARGET_BUILDCHAIN_HASH especificada na configuração durante a compilação.

Como o mecanismo Mailslot impõe um limite no tamanho máximo do pacote, apenas um KM é enviado por vez, de acordo com o princípio da última hora de correspondência: entre todos os KMs disponíveis, o domínio cuja última data de correspondência é a mais antiga é enviado por domínio.

Os dados no Mailslot não são transmitidos em texto não criptografado, mas agrupados em três camadas de criptografia XOR, e as chaves são transmitidas junto com os dados. A primeira camada de dados é o envelope NetMessageEnvelope com verificação de integridade de dados pelo algoritmo SHA1, usado para todos os dados transmitidos pela rede local. 4 bytes de dados no início do pacote são a chave, que é alterada por mudanças de bits de 5 bits à direita por ciclo. Dentro do envelope, há uma estrutura de dados codificada em XOR com campos diretos nos EUA e a data em que foram adicionados. A chave de 8 bytes também está localizada no início da estrutura, mas é aplicada sem compensações. Após decodificar a estrutura do KM, resta apenas desserializar os campos individuais das estruturas ENC_BUFFER, como nome do computador, nome do domínio, nome do usuário e senha. Esses campos são criptografados com uma chave de 8 bytes com compensações. O script para descriptografar o pacote Mailslot e um exemplo desse pacote podem ser encontrados aqui: script , PCAP .

O período para o envio de mensagens do Mailslot na versão de lançamento varia de 20 segundos a 11 minutos.

 // some random wait before making next step DbgPrint("going to sleep"); #ifdef _DEBUG // debug - 2-5 s Sleep(rg.rgGetRnd(&rg, 2000, 5000)); #else // release - 20 - 650 s //Sleep(rg.rgGetRnd(&rg, 2000, 65000) * 10); Sleep(rg.rgGetRnd(&rg, 2000, 15000)); #endif 

Além de trocar contas, o mecanismo Mailslot é usado para procurar uma máquina infectada com acesso à Internet e para anunciar o acesso à Internet. O envelope NetMessageEnvelope armazena o tipo de mensagem que está sendo enviada. A troca de dados entre a máquina sem acesso e a máquina com acesso à Internet é realizada através dos tubos.

Obras de tubulação


Para comunicação bidirecional ou transferência de grandes quantidades de dados, as cópias Pegasus usam pipes como canal de comunicação. O nome do canal, embora também seja gerado por um gerador pseudo-aleatório, mas depende do nome da máquina e da construção e, portanto, permite que as partes do cliente e do servidor usem o mesmo nome.

Na comunicação unidirecional, por exemplo, ao transferir o binpack durante a replicação para outra máquina, os dados não são criptografados e transmitidos de forma clara. O Binpack começa com uma estrutura SHELLCODE_CONTEXT com um comprimento de 561 bytes.



Durante a transmissão bidirecional, por exemplo, proxy de dados entre uma cópia do Pegasus sem acesso à Internet e um servidor CnC, a mesma estrutura de envelope NetMessageEnvelope com criptografia XOR é usada como no caso do Mailslot, porque permite distinguir entre diferentes tipos de mensagens no campo id.

Em termos de arquitetura, o proxy de dados é realizado por meio de uma solicitação para transferir uma parte dos dados (PMI_SEND_QUERY), receber a identificação da solicitação em resposta e consultar o status da tarefa por identificação (PMI_CHECK_STATUS_QUERY). Como regra, outra estrutura do Envelope é transferida como carga, adicionando várias funcionalidades e outra camada de criptografia.

Além disso, trabalhar com pipes não termina na interação entre máquinas infectadas. O módulo mod_KBRI_hd injeta código nos processos cmd.exe que intercepta as chamadas MoveFileExW e analisa todos os dados que estão sendo copiados, pois isso faz parte do processo de pagamento. Se o arquivo copiado contiver dados de interesse dos invasores - dados com pagamentos, uma notificação sobre isso será enviada ao servidor CnC. A comunicação entre o módulo mod_KBRI injetado no cmd.exe e uma cópia do Pegasus é realizada dentro da máquina infectada por meio de um canal cujo nome não é gerado, mas está codificado no código fonte:

 \.\pipe\pg0F9EC0DB75F67E1DBEFB3AFA2 

A funcionalidade do módulo também inclui a substituição de contas de dados em tempo real, de acordo com o modelo. Um exemplo de padrões para pesquisar na captura de tela.

Tráfego Cnc


Um fluxo separado é responsável pela troca direta de dados com o servidor CnC, que verifica a fila de blocos de dados de processos internos ou outras cópias de malware a cada poucos minutos e os envia ao servidor.

Durante a inicialização do módulo mod_NetworkConnectivity, ele executa uma verificação de vários estágios da conexão de rede:

1) Detectando configurações do servidor proxy e tentando se conectar ao www.google.com :

  • Na ramificação do registro \\ Software \\ Microsoft \\ Windows \\ CurrentVersion \\ Internet Settings.
  • Via WPAD (chame WinHttpGetProxyForUrl).
  • Por meio da configuração de proxy para o usuário atual (chame WinHttpGetIEProxyConfigForCurrentUser).

2) Verificando a conexão com os servidores de atualização da Microsoft e os dados retornados ( authrootseq.txt , authrootstl.cab , rootsupd.exe )

3) Testando conexões HTTPS com um dos 6 endereços:


Somente após passar todas as verificações, a Pegasus acredita que possui o acesso necessário à rede externa e pode anunciar isso através do domínio Mailslot com uma mensagem. Além disso, o Pegasus pode se disfarçar e se comunicar com o servidor CnC apenas durante o horário comercial - das 9h às 19h, horário local.

O Pegasus envia pedaços de dados embrulhados em um envelope com o cálculo do hash da quantia no formato criptografado usando a criptografia DES no modo CRYPT_MODE_CBC / PKCS5_PADDING. A chave de criptografia depende apenas da variável durante a compilação e, portanto, podemos descriptografar o tráfego entre o malware e o servidor, conhecendo apenas seu BUILDCHAIN_HASH. No código-fonte dentro do arquivo morto, essa variável tinha o valor 0x7393c9a643eb4a76. Um script para descriptografar o Check-in no servidor e um exemplo desse pacote podem ser encontrados aqui: script , PCAP .

Ele transfere esse conteúdo (estrutura INNER_ENVELOPE) para o servidor CnC durante o Check-in ou junto com qualquer dado. Inicialmente, existem 28 bytes de um envelope com um campo de comprimento e uma soma SHA1.



Os mesmos dados são transferidos entre máquinas durante o proxy através de pipes, mas agrupados dentro do envelope NetMessageEnvelope que conhecemos com uma soma de hash e criptografia XOR.

O operador CnC pode enviar comandos para execução às cópias e mensagens do Pegasus com comandos ou outros dados, por exemplo, EID_CREDENTIALS_LIST pode conter suas próprias camadas de criptografia de campo, como vimos no exemplo de contas de transmissão.

Detecção


Antes de tudo, estávamos interessados ​​em detectar a atividade do Pegasus na rede e, depois de estudar cuidadosamente os códigos-fonte e executar no ambiente de teste, descobrimos essas anomalias e artefatos de rede que indicam claramente a presença desse malware complexo na rede. O Pegasus realmente pode ser chamado de versátil - ele usa ativamente o protocolo SMB para enviar mensagens e estabelecer comunicação com outras cópias, se espalha para outras máquinas e se comunica com o servidor CnC de maneira especial. Ao instalar uma rede ponto a ponto no domínio, as cópias do Pegasus abrem caminho para a rede externa e se comunicam com o servidor CnC ao proxyizar o tráfego entre si. O uso de certificados para assinar arquivos executáveis ​​e o acesso aos recursos da Microsoft e Mozilla durante a verificação da conexão dificulta a detecção de sua atividade e detecção no host.

O projeto de código-fonte do Pegasus é bastante bem estruturado e descrito, portanto, em um futuro próximo, podemos esperar o empréstimo de partes de seu código por outros programas maliciosos e o aparecimento de modificações.

Muitos dos mecanismos para executar comandos remotamente e pesquisar dados da conta permaneceram não realizados, os desenvolvedores também adicionariam a capacidade de alterar o código de shell durante a implementação em tempo real. E estas não são todas as suas idéias.

Desenvolvemos várias assinaturas para PT NAD e IDS Suricata, que nos permitem identificar a atividade de rede específica do Pegasus em diferentes estágios, a partir dos primeiros segundos de sua atividade. Você pode encontrar assinaturas abertas para o Suricata IDS no github e no Twitter ; elas chegarão automaticamente ao seu Suricata se você usar o mecanismo de atualização suricata-update.

Você pode ver como as assinaturas da atividade Pegasus funcionam na captura de tela abaixo. Este é o nosso novo produto PT Network Attack Discovery que identifica incidentes e ajuda a investigá-los:



Além disso, os seguintes indicadores de comprometimento (IC) podem ser usados ​​para detecção:

  MAILSLOT \ 46CA075C165CBB2786 
 pipe \ pg0F9EC0DB75F67E1DBEFB3AFA2

 hxxp: //denwer/pegasus/index.php
 hxxp: //mp3.ucrazy.org/music/index.php
 hxxp: //support.zakon-auto.net/tuning/index.asp
 hxxp: //video.tnt-online.info/tnt-comedy-tv/stream.php 

Postado por Cyril Shipulin de @attackdetection, Twitter | Telegram

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


All Articles