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!
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.