Engenharia Reversa do Malware Trojan.Win32.VB.ajfm (Banker)

MD5: D75AD6143BB93DF70DDC68053A50471A

O intuito dessa investigação era encontrar informações que pudessem levar ao autor do malware ou ao criminoso que estava por trás desse golpe.

Recebi por email um SPAM phishing que tentava se passar por um recadastramento de segurança do Banco Banrisul.

Ao posicionar o mouse em cima do link do email foi revelada a verdadeira intenção do golpe, induzir o usuário a instalar um malware, destaque na imagem abaixo.



Fiz o download do arquivo "Send-Error.exe". Para tentar descobrir alguma informação relevante no executável primeiro tentei descobrir se havia sido utilizado algum packer no EXE.

Através dos programas PEiD e EXEinfo PE, descobri que o EXE havia sido compactado com o packer "tElock v0.98".



Sabendo disso fiz uma pesquisa no Google e encontrei o "unpacker". Submeti o "Send-Error.exe" ao unpacker e obtive o malware sem a proteção.



Para verificar se a proteção realmente havia sido retirada, submeti o EXE "unpacked" ao programa RDG Packer Detector e obtive resposta satisfatória: a linguagem que o EXE foi compilado, Visual Basic 6.0.



Agora o caminho estava livre para tentar descobrir a verdadeira intenção da praga e já tinha uma informação muito útil, a linguagem de programação utilizada. Era hora de buscar por strings relevantes dentro do código Assembly.

Com a ajuda do OllyDbg e através da opção "Search for - All referenced strings" obtive uma listagem de todas as strings encontradas no executável. Não eram muitas e o malware também era pequeno, deu pra perceber que se tratava apenas de um "Loader", que é um tipo de malware que tem a função de apenas entrar no computador da vítima e fazer downloads de outros malwares, geralmente os keyloggers bankers.

Como prova disso, localizei três URLs de malwares que seriam baixados pelo "Send-Error.exe".



Fiz o download dos três executáveis, "systen.exe", "systens.exe" e "dwin.exe". Utilizando o mesmo procedimento para identificar o packer do arquivo "systen.exe", descobri que se tratava do "Thinstall 2.4x - 2.5x".



Tentei através do unpacker genérico do PEiD desfazer essa proteção do Thinstall e obtive resultado positivo, através do RDG novamente descobri que se tratava do Visual Basic 6.0.



Analisando as strings do "systen.exe.unpacked" com o OllyDbg não encontrei nada relevante porém notei que muitas pareciam estar com uma espécie de criptografia, pois eram sequências de números e letras possivelmente geradas por algum algoritmo.



Sabendo que se tratava de um malware compilado com Visual Basic, resolvi descompilar o arquivo com o VB Decompiler para tentar descobrir mais informações. Foi possível assim identificar algumas funções e formulários interessantes utilizados pelo malware. De pronto deu para descobrir que se tratava de um banker criado para furtar dados de contas bancárias do Bradesco.


Em uma análise mais detalhada encontrei um padrão que se repetia no código, todas aquelas strings que pareciam estar criptografadas eram sempre passadas como parâmetro para um mesmo procedimento, que se iniciava no Offset 0x00418890. Com certeza deveria ser a função que descriptografava a string.


Ao abrir esse procedimento pelo VB Decompiler, estava clara a função do mesmo que era realizar operações com várias strings, combiná-las entre si e com a string passada por parâmetro e retornar um resultado.


Com a ajuda do nosso amigo OllyDbg daria para tirar a prova, era só colocar um breakpoint nesse offset e ir executando linha a linha o debug do malware para ver qual seria o retorno desse procedimento 0x00418890.

Fiz isso e bingo! Descobri o banco de dados para onde o malware enviava todas as informações furtadas das contas do Bradesco. Estavam disponíveis o host, base, usuário e senha do banco de dados.



Através desse procedimento e com algumas alterações no código Assembly do malware, consegui descriptografar todas as strings, muitas continham instruções SQL de inserção e consulta na base, outras havia URLs do banco para serem comparadas quando a vítima acessasse com seu browser.

Todos os resultados obtidos formam encaminhados aos setores da Justiça especializados em combate aos crimes cibernéticos.

É isso aí, até a próxima!

[POST adicionado em 28/09/2010]

Explicação de como consegui descriptografar as demais strings do malware.

Eu tive sorte em descobrir que a primeira string que o malware descriptografava era a mais importante, a que continha as informações de conexão com o banco de dados. Porém ainda queria saber o que as demais strings escondiam.

Para isso, a forma mais simples que encontrei (talvez a mais tosca e trabalhosa) foi a seguinte:

Eu já tinha localizado a primeira string que o malware descriptografava toda vez que era executado, o trecho de código que fazia isso era esse:

0040928A: mov edx, 00403C00 ; "024860405A445E2753340D62610F7E7C757D721E0..."
0040928F: lea ecx, var_34
00409292: mov var_00000098, esi
00409298: call MSVBVM60.DLL.__vbaStrCopy
0040929E: mov edi, [esi]
004092A0: lea ecx, var_34
004092A3: push ecx
004092A4: call 00418890

* Obs.: uma parte da string cortada para facilitar a leitura.

Nesse trecho podemos ver que o malware move a string localizada no endereço 00403C00 para o registrador EDX e no final chama a função 00418890, que é justamente a que descriptografa a string conforme já foi citado no artigo. A função 00418890 então utiliza o EDX que foi passado como parâmetro para gerar a string descriptografada.

O offset exato onde a função 00418890 exibia a string descriptografada era o 00418A16:

Sabendo disso o que fiz foi localizar em todo o código-fonte do malware as strings que estavam criptografadas, copiei o endereço delas e salvei em um TXT, por exemplo encontrei essas três strings criptografadas:

004093FA: mov edx, 00405B3C ; "00301061505E522042661A1156315E5D10"
00409404: mov edx, 00403E00 ; "00246470796D76157F157F626601"
0040940E: mov edx, 00405A54 ; "004810657D776506166E105D5F20505C594351545E..."

Coloquei um breakpoint no offset 00418A16 que conforme dito era exatamente onde o função exibia a string descriptografada.

Depois no Ollydbg eu voltava ao Offset 0040928A, clicava nele, depois clicava com o botão direito em cima e escolhia a opção “Assemble...” e onde estava:

0040928A: mov edx, 00403C00

Eu substituia por exemplo por:

0040928A: mov edx, 00405B3C

Ou seja, indicava o endereço de outra string criptografada. Clicava no botão “Assemble” e “Close”. E iniciava então o Debug com a tecla F9.

O malware parava exatamente no meu breakpoint exibindo a string descriptografada. Reiniciava o Debug (Ctrl + F2) e repetia esse procedimento para cada string.

Por exemplo essas três strings citadas, descriptografadas são respectivamente:
“ Select * from “
“TBL_AVISOSVB”
“ WHERE ( localizador = '”

Qualquer dúvida sobre o artigo pode comentar que eu estarei à disposição para esclarecer.

14 comentários:

  1. Muito boa sua análise cara, é importante mostrar pra galera essas coisas de bankers e tudo mais, muitos ainda não conhecem e caem fácil. ''/

    bjxx ..

    ResponderExcluir
  2. Obrigado, realmente esses golpes são muito lucrativos para os criminosos, é o roubo a banco mudando de ambiente.

    Abraço!

    ResponderExcluir
  3. Belo trabalho, apesar de estar no inicio como parece, estarei acompanhado sempre que possivel. Parabéns

    Abraços

    ResponderExcluir
  4. Muito boa a análise, descobri seu site hoje pelo suffert e estarei sempre por aqui,parabéns.

    ResponderExcluir
  5. Ronaldo,

    Você poderia fazer uma lista das ferramentas que você utiliza em análise de malwares.

    ResponderExcluir
  6. Show de bola essa análise, gostei muito. Parabéns.

    ResponderExcluir
  7. muito bom, excelente percebe-se que você tem um conhecimento bastante avançado, onde eu consigo RDG packer detector? em um link seguro, procurei e não achei, so alguns que nao geram confiança.

    obrigado

    ResponderExcluir
  8. Felipe,

    No site oficial do projeto tem o link:

    http://www.rdgsoft.8k.com/

    Abraço!

    ResponderExcluir
  9. Oi Ronaldo fiz o download do RDG packer detector e o mesmo gera um arquivo no qual meu sistema não detecta um formato para abrir, não é um executável .exe ou .dll estou fazendo alguma coisa de errado? como proceder?

    desde já muito obrigado.

    ResponderExcluir
  10. Felipe, foi por esse link que você baixou?

    http://www.egrupos.net/grupo/rdgsoft/ficheros/11/verFichero/1/RDG%20Packer%20Detector%20v0.6.8%202012%20Vx-Edition.rar

    ResponderExcluir
  11. Correto Ronaldo, fica um arquivo sem ícone no qual não identifico extensão e o arquivo tem 1,69 MB. e não descarrega um arquivo .rar no qual o link refere. O antivírus não acusa nada, se você puder disponibilizar um link upando o RDG da sua maquina em algum host, iria ficar grato, não encontro em outro lugar ou como proceder, não acho que meu antivírus esteja conroopendo o download, pode me dizer o tamanho nativo desse software? obrigado pela atençao!

    ResponderExcluir
  12. ai como faço para saber mais sobre Malware, Assembley

    ResponderExcluir
  13. Pessoal boa noite, estou em busca de um profissional Especialista em Criptografia e com conhecimentos em engenharia reversa para atuação em uma empresa nacional de grande porte do segmento financeiro.


    Caso tenham interesse ou indicações, segue meu contato: matilde.muller@oficinatalentos.com.br

    ResponderExcluir

Related Posts Plugin for WordPress, Blogger...