Hesperbot – Análise técnica parte 1 de 2

O Win32/Spy.Hesperbot é um novo troiano bancário que tem atingido utilizadores em Portugal bem como na Turquia, República Checa e Reino Unido. Para mais informação acerca das campanhas de propagação deste malware e vítimas, veja o nosso primeiro artigo no blog ESET. Neste artigo vamos abordar detalhes técnicos deste troiano, incluindo uma visão geral da sua arquitectura bem como a componente móvel.

Visão Geral

À semelhança de muitas outras famílias de malware, o Win32/Spy.Hesperbot tem uma arquitectura modular. Como primeiro passo de infecção, a vítima descarrega e executa um componente dropper (um executável que serve para descarregar o vírus completo da Internet).  Este dropper também está protegido com um empacotador (packer) e é distribuído num arquivo .ZIP.

1_Diagramy-01
Figura 1 – Visão geral dos módulos iniciais do Hesperbot

A função do dropper é de injectar o componente principal – ‘core’ – dentro do explorer.exe. O ‘core’ transfere e carrega módulos adicionais, plugins utilizados para conduzir acções maliciosas.

Screen-Shot-2013-09-06-at-16.37.33
Figura 2 – Descrição dos módulos Win32/Spy.Hesperbot

Os vários módulos estão disponíveis em variantes para x86 e x64 dependendo da plataforma do sistema da máquina atingida.

Uma selecção de funções internas de módulos individuais está disponível para outros módulos através de uma tabela de método virtual (vtable).

Aplicámos engenharia inversa aos componentes de malware e iremos destacar as funcionalidades mais interessantes nos seguintes parágrafos. A maioria dos componentes de malware foram compilados com Visual Studio 2010 e escritos em linguagem de programação C, mas sem usar a biblioteca run-time de C. Não sendo o malware mais sofisticado que analisámos, o Win32/Spy.Hesperbot não pode ser reduzido a um trabalho amador.

 

Módulos Principais

dropper

O dropper pode usar um de vários métodos para injectar o componente ‘core’ no espaço de endereçamento do explorer.exe:

  • Iniciar uma nova instância do exploerer.exe e aplicar-lhe um patch no seu entry-point usando NtGetContextThread para apontar para o seu próprio código (escrito através de WriteProcessMemory). Isto pode ser fejto tanto directamente como através de um processo attrib.exe intermediário.
  • Injectando-se no próprio explorer.exe utilizando o elaborado truque Shell_TrayWnd/SetWindowLong/SendNotifyMessage usado no malware PowerLoader e outras variantes. (Aleks Matrosov publicou vários artigos de blog acerca destes métodos recentement, pelo que não entraremos em detalhes aqui)
  • Injectando-se no explorer.exe utilizando uma abordagem comum com CreateRemoteThread

É interessante que o método de injecção seja também baseado na existência de drivers cmdguard.sys (Comodo) ou klif.sys (Kaspersky) no sistema.

core

O módulo ‘core’, agora a ser executado no contexto do explorer.exe, gere a comunicação com o servidor C&C (Comando e Controlo) e lança outros módulos plugin. Funcionalidades típicas de malware, como escrever na chave de Registry ‘Run’, é também da responsabilidade do ‘core’.

Para aceder ao servidor C&C, o Win32/SpyHesperbot.A utiliza tanto um URL hard-coded (alguns diferentes foream vistos em variantes usadas em botnets da República Checa, Turquia e Portugal) como pode gerar novos URLs C&C através de um algoritmo de geração de domínios no caso do primeiro servidor estar inacessível.

A seguinte informação é enviada ao servidor de controlo e comando (C&C):

  • Nome do bot baseado no nome do computador
  • Nome da botnet – até agora só vimos  “cz-botnet”, “tr-botnet”, “pt-botnet”, “uk-botnet” e  “super-botnet” (utilizado em versões iniciais ‘beta’)
  • Endereços IP presentes nos adaptadores de rede
  • Nomes de smart-cards activos
  • Informação acerca de plugins Hesperbot instalados
31
Figura 3 – Código de identificação de botnets Hesperbot

Por sua vez, o servidor pode enviar:

  • Um ficheiro de configuração
  • Módulos plugin
  • Um executável arbitrário para executar
  • Uma nova versão do próprio malware

Diversos detalhes técnicos acerca das funcionalidades acima descritas devem ser mencionadas. Primeiro, o malware é capaz de enumerar smart cards presentes no sistema através de funções de API SCardEstablishContext, SCardListReaders e SCardConnect. Ao contrário de ataques mais sofisticados contra smart cards (descrito por Aleks aqui e aqui), o Win32/Spy.Hesperbot apenas recolhe nomes de smart-cards e não inclui qualquer funcionalidade para interagir com eles.

Em segundo lugar, os dados descarregados (nomeadamente o ficheiro de configuração e módulos de plugin) estão encriptados com uma  cifra Twofish. A chave de 256-bit é um hash baseado em:

  • Nome do Computador
  • [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion] “InstallDate”
  • Versão do Windows
  • Arquitectura do Processador (x86, x64 ou IA64)
  • [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography] “MachineGuid”
  • [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion] “DigitalProductId”

Para guardar os dados descarregados bem como outros binários auxiliares (ie: os logs criados pelo móduo keylogger), o Hesperbot utiliza um sub-directório com nome aleatório em %APPDATA%.

O módulo ‘core’ consegue injectar-se ele próprio em todos os processos em execução. Mais, um truque não documentado de hooking UserNotifyProcessCreate é usado quando este corre dentro de csrss.exe, de forma a assegurar que o código do troiano será injectado em qualquer novo processo.

Componente Móvel

É vulgar hoje em dia que os troianos bancários utilizem também componentes móveis (como o ZitMo e o SpitMo, por exemplo) a fim de ultrapassar os sistemas de autenticação ‘out-of-band’ por mTANs (Mobile Transaction Authentication Number) / SMS.

Nos scripts de injecção web que vimos até agora, o malware injecta código num sítio web, sugerindo ao utilizador que instale uma aplicação para o seu smartphone. A vítima tem à sua escolha uma lista de modelos de telefones e depois de introduzir o seu número de telefone recebe no seu telefone um link para descarregar a componente móvel. São suportadas três plataformas: Android, Symbian e Blackberry.

Figure 4 – Supported mobile platforms in web-inject JavaScript
Figura 4 – Plataformas móveis suportadas na injecção web por JavaScript

Analisámos as versões para Symbian e Android, não tendo até agora conseguido obter o malware para Blackberry. A versão Symbian suporta uma vasta gama de dispositivos, incluindo Symbian S60 3ª edição, Symbian S60 5ª edição e o recente Symbian ^3.

Ambos os troianos móveis analisados revelam funcionalidades semelhantes. Primeiro, há um “procedimento de activação”. O web-inject por JavaScript no computador infectado com o Hesperbot gera um “número de activação” que é mostrado ao utilizador. O utilizador deverá então introduzir esta sequência numérica quando solicitado pela aplicação móvel. Esta, mostrará então um “código resposta”, que será calculado com o número de activação. É então solicitado ao utilizador para inserir este código na página web no seu computador, para verificação. (O script injectado contém o mesmo algoritmo usado para calcular o código de resposta como acontece na aplicação móvel).

Esta funcionalidade proporciona aos atacantes a confirmação que a vítima instalou a componente móvel e interliga-a com a infeção do bot no computador.

Imagem do componente para Android – Android/Spy.Hesperbot.A
Imagem do componente para Android – Android/Spy.Hesperbot.A

 

Como previsto, o código, tanto na versão Symbian como Android (e provavelmente também na versão Blackberry), regista o seviço que aguarda as mensagens SMS recebidas e as reencaminha para o telefone do atacante. Deste modo o atacante receberá o mTAN necessário para poder entrar na conta bancária roubada.

O código móvel também implementa a possibilidade ao atacante de poder controlar o serviço remotamente através de comandos SMS.

A componente para Android é detectada pela ESET como Android/Spy.Hesperbot.A e a versão para Symbian é detectada como SymbOS9/Spy.Hesperbot.A.

Outras funcionalidades

Keylogger

O módulo keylogger intercepta teclas pressionadas através do hooking de funções GetMessage e TranslateMessage no user32.dll. Esta informação é escrita num ficheiro de log, juntamente com o nome do processo do módulo origem e o título da janela. Então, o log é enviado ao servidor C&C.

Captura de ecrãs e Video

Os screenshots e captura de vídeo são feitos pelo módulo httpi, se especificado no ficheiro de configuração.

A funcionalidade de captura de video tem sido usada pela spin-off do troiano bancário Zeus, Citadel, e fornece aos atacantes uma visão ainda melhor acerca do que se passa no ecrã do computador da vítima. Está implementada através das funções de Avifil32.dll AVIFileCreateStream, AVIFileMakeCompressedStream, AVIStreamWrite, etc.

Figura 6 – Parte de código de captura de video do Hesperbot
Figura 6 – Parte de código de captura de video do Hesperbot

A mais comum funcionalidade de screenshot é implementada com funções de Gdi32.dll  BitBlt, GetDIBits, etc.

VNC escondido

A funcionalidade VNC já foi previamente utilizada pelo famoso malware Carberp. (De facto, o Caberp pode também ter sido uma inspiração aos criadores do Hesperbot após a fuga do seu código.) Permite ao troiano criar um servidor VNC escondido, ao qual o atacante se pode ligar remotamente. Como o VNC não desliga a sessão do utilizador como acontece como o RDP, o atacante pode ligar-se sem suspeitas ao computador da vítima enquanto esta trabalha. A sessão VNC é executada num ambiente de trabalho distinto  (ver CreateDesktop na MSDN), invisível ao utilizador. O módulo também fornece ao atacante a capacidade de lançar um browser instalado na máquina. Desta forma, o atacante poderá também ter acesso a dados associados ao browser (cookies, sessões, etc.).

No nosso 3º artigo deste blog acerca do Win32/Spy.Hesperbot, iremos abranger os detalhes técnicos das funcionalidades de  intercepção de rede e injecção web.

 

Agradecimentos aos autores – e nossos colegas – desta análise técnica (partes 1 e 2) publicada originalmente no blog ESET www.welivesecurity.com:

Anton Cherepanov (ESET)
Robert Lipovsky (ESET)

Adaptado por ESET Portugal para o blog http://www.eset.pt/blog/

3 COMENTÁRIOS

DEIXE UMA RESPOSTA

Please enter your comment!
Please enter your name here

fifteen − five =