Hesperbot – Análise técnica do trojan bancário
Explicação técnica do trojan que ataca o sistema bancário (Parte1/2)
Todos os dias há informações sobre vulnerabilidades informáticas que foram exploradas por hackers. Desta vez, segundo a ESET, há um novo trojan que tem como alvo principal os utilizadores que usam as plataformas online para terem acesso à sua conta bancária.
O Win32/Spy.Hesperbot é um novo trojan que ataca no segmento bancário e que tem atingido utilizadores em Portugal bem como na Turquia, República Checa e Reino Unido. Neste artigo vamos abordar detalhes técnicos deste trojan, incluindo uma visão geral da sua arquitectura bem como a componente móvel.
À 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
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.
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 doexplorer.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) ouklif.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
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 Aleksaqui 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.
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 infecção do bot no computador.
Como previsto, o código, tanto na versão Symbian como Android (e provavelmente também na versão Blackberry), regista o serviç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 vídeo 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.
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.).
Via | ESET
Este artigo tem mais de um ano
Sem dúvida que não é um vírus amador!
Por enquanto o Windows Phone está livre, ainda bem!
Mas pelo que vi, é preciso o utilizador instalar coisas tanto nos smrtphones como nos computadores para que o vírus resulte. Eu, pelo menos, sou cuidadoso e no que toca a bancos online ainda mais cuidado tenho, por isso, em princípio, desta estou livre!
Não é preciso o utilizador instalar muita coisa. Basta uma.
O vírus é bem robusto na minha opinião, amador é o usuário pra cair nessa 😛
Há tempos que a “mídia da segurança” vem alertando os usuário de infecções, vírus cada vez mais perigosos. O problema é que alguns usuários ainda tem mania de clicar no botão: “Clique aqui e seja enganado!”.
Faz bem em ser cuidadoso, acho que deveria existir um requisito mínimo para as pessoas poderem comprar um computador/smartphone. Tipo uma carteira de motorista, mas com conhecimentos de informática 😛
desse estou livre. uso linux e um dummphone…
Muito boa análise!
Parabens!
Muito bom artigo. Parabéns Pedro (mais uma vez 🙂 😉 ) pela excelência do artigo.
Pelo que percebi Linux não está abrangido por esse malfadado vírus.
está… na sua versão android…
Quando me refiro a Linux estou a me referir Linux a correr em qualquer dektop. No Linux existe a vantagem de não correr nenhum executável por isso a minha pergunta.
Obg pela partilha!
Infelizmente, faltam 2 informações que eu procurava:
– Como saber se estamos ou não infectados;
– Como remover a infecção (presumo que ainda não haja solução para isto).
também gostava de saber
“Como saber se estamos ou não infectados;”
Quando começarem a aparecer uns movimentos estranhos de saída de dinheiro da conta.
Não ligues, não tomei as gotas!
realmente esse comentário é muito útil.
Principalmente para quem acha piada a este género de situações.
Não era pra ser útil. Era para ter piada.
Naturalmente se soubesse responder à pergunta também o teria feito com muito gosto, mas não é o caso. Apesar da situação ser grave, nunca devemos perder o bom humor, o que não significa que adormeçamos em serviço.
Uma que todos devemos fazer para evitar sermos contaminados (embora não seja infalível) é ter em atenção os links em que carregamos. Outra que dá uma ajudinha na prevenção, é ter, nas opções do Windows, ativa a opção de mostrar as extensões dos ficheiros. Assim, se o ícone do ficheiro é de um .PDF, mas a extensão é um .exe (como neste caso), no mínimo há que desconfiar.
Tudo isto e muito mais faz parte da prevenção. Depois de o ter não sei como proceder para o detetar. Possivelmente nos processos, mas pode nem ser o caso.
em windows
http://blogs.technet.com/b/mmpc/archive/2013/09/10/msrt-september-2013-win32-simda.aspx
em android ??? não uso. Detesto publicidade.
archlinux #pacman -Syu
*/Faz o update de todos os pak s./*
Viva. Pode experimentar o ESET Online Scanner e/ou um USB/DVD SysRescue da ESET (é possivel criar este suporte nas soluções ESET NOD32 Antivirus ou ESET Smart Security). Quanto a outros fabricantes não me posso pronunciar.
“…aguarda as mensagens SMS recebidas e as reencaminha para o telefone do atacante. ”
Se o “vírus” reencaminha as SMS para os telefones dos atacantes porque é que a policia/interpol não vai apanhar estes tipos?
No caso português, é perfeitamente possível ter cartões não identificados. Como estes tipos não são amadores, sabem fazer as coisas de maneira a não ser fácil de os apanhar. Mas nem eles são infalíveis…
Ninguém está seguro hoje em dia!
Se o virús afecta dispositivos que usam android, não afecta qualquer PC que use um SO baseado em Linux?