Esse caso inicia-se com a análise de um arquivo malicioso de apenas 66 KB e termina com a descoberta de um grande esquema de distribuição de malwares e envio de phishings envolvendo dezenas de servidores.
ANALISANDO UM MALWARE E SEU CÓDIGO FONTE
Utilizaram-se de criptografia para manter o esquema longe dos olhos de curiosos mas mesmo assim foi possível descobri-lo. A vantagem de analisar malwares é que geralmente em algum momento eles vão tentar “ligar pra casa” (call home), isto é, tentar se conectar com algum servidor para atualização ou envio de dados capturados, é aí que interceptamos e descobrimos as informações mais interessantes.
Então vamos começar com a análise!
Coleta e identificação do artefato
Esse veio através de um phishing prometendo fotos inéditas da revista Playboy:
Ao clicar no link do e-mail foi feito download do arquivo:
doxsc74635.zip (MD5: 462fca2472b838992de865e303255f52)
Ao ser descompactado gerou:
doxsc74635.com (MD5: e26e1b50e94ed527bc30b39c1f50b550)
Usando o PEiD para identificar o arquivo foi encontrada a presença do compactador UPX. Para removê-lo é muito fácil basta utilizar a opção “-d” do próprio UPX:
Agora sim o arquivo estava pronto para a análise, o PEiD identificou a linguagem de programação utilizada como Borland Delphi.
Descobrindo segredos
Dica: Na etapa da análise do malware estou utilizando o IDA Pro 5.0 Freeware em conjunto com o OllyDbg. O Olly acho mais prático para realizar o debug do malware e o IDA é muito melhor para visualizar as estruturas de código assembly, gerar gráficos, editar, renomear funções e inserir comentários. Desta forma uma ferramenta complementa a outra.
Ao buscar pelas strings no malware a primeira coisa que me chamou atenção foram as strings criptografadas.
Já sabendo bem como funciona esse processo de criptografia de strings resolvi descriptografá-las antes de continuar. O método que utilizei foi o de encontrar a função que realiza esse processo dentro do malware, alterar o código assembly e colocar breakpoint no retorno para pegar o resultado no debug. Para mais informações veja os slides ou o vídeo da minha palestra “Descriptografando Strings em Malwares”.
Adicionei ao código do IDA em forma de comentários as strings obtidas em texto simples no OllyDbg. Abaixo é possível ver como ficaram essas alterações em azul mais claro:
Além dessas strings teve uma outra que me chamou atenção, seguia um padrão diferente utilizando apenas números hexadecimais e possuia cerca de 16 KB de tamanho, isso dá mais de 16 mil caracteres!
Outro detalhe, no campo Address vemos que ela está na seção .rsrc (Resources) do executável, não é um lugar muito comum de se encontrar uma string de usuário, geralmente elas ficam nas seções .text e .data. A seção .rsrc costuma armazenar bitmaps, dialogs, ícones e strings do sistema.
Com um editor de executáveis (arquivo PE) podemos visualizar todas as seções de um arquivo, duas ferramentas que fazem isso são o CFF Explorer e o PEBrowse Professional. Abaixo vemos que dentro do diretório Resources há um tipo denominado “HTMLFILE” e dentro dele há o SVCHOST que é o nome da resource que armazena a string que havíamos encontrado.
Voltando ao executável, ao verificarmos a lista de imports da biblioteca KERNEL32.DLL encontramos referências a várias funções que lidam com a seção resources: FindResourceA, LoadResource, SizeofResource, LockResource e FreeResource.
Buscando as especificações da função FindResource no site da Microsoft vemos que ela recebe três parâmetros:
FindResource(hModule, lpName, lpType);
hModule: ponteiro para o arquivo PE, ou o header do arquivo;
lpName: nome da resource;
lpTYpe: tipo da resource;
Sabendo disso conseguimos encontrar dentro do malware onde esse recurso é utilizado, primeiro com a função FindResource para localizá-lo:
O retorno em EAX é um ponteiro para SVCHOST. E depois utilizando a LoadResource carrega a string para EAX:
Após a chamada dessas funções que eu nomeei de CarregaRESOURCE há a referência a um caminho de arquivo e logo depois o uso da função CreateFileA também da API KERNEL32.DLL conforme podemos ver abaixo:
Com isso presumo que essa string criptografada é salva no arquivo:
C:\WINDOWS\inf\asynceql.inf
Podemos confirmar isso com a análise dinâmica executando o malware e monitorando o processo, foi exatamente o que o Process Monitor nos mostrou:
E lá estava o arquivo salvo:
Agora falta o principal, descobrir o que esse código esconde. Ao invés de localizar a função que faz a descriptografia dentro do malware resolvi executá-lo no OllyDbg e observar os valores na pilha (que é o local da memória utilizado pelas funções), ela é visível no quadrante inferior direito da janela principal do programa.
Então quando o malware fizer o processo para reverter o código talvez salve na pilha o resultado da função. Abri o arquivo e executei (F9), verificando a pilha encontrei o que parece ser a string descriptografada:
Mandei exibir a memória referente a essa string clicando com o botão direito em cima do endereço e selecionando “Follow in Dump”. Para melhor visualizar copiei o conteúdo e colei em um editor hexadecimal (HxD) mandando exibir apenas o Texto.
Na parte superior vemos o que parece ser o código HTML de um e-mail phishing, inclusive com assunto da mensagem:
Já na parte inferior encontramos informações mais interessantes, vários endereços de servidores web, inclusive com senhas:
Formatando o conteúdo é possível visualizar a mensagem de phishing gerada onde há um link para outro malware:
O próprio malware armazena uma outra mensagem de phishing, possivelmente para atuar como spammer.
Os demais dados descriptografados após o HTML são esses:
[Servidor001]
Servidor=http://189.1.171.125/~vcom/
Interface=data.php
[Servidor002]
Servidor=http://189.1.171.125/~vcom/
Interface=data.php
[Servidor003]
Servidor=http://189.1.171.125/~vcom/
Interface=data.php
[Servidor004]
Servidor=http://189.1.171.125/~vcom/
Interface=data.php
[Servidor005]
Servidor=
Interface=
[Servidor006]
Servidor=
Interface=
[Proprietario]
Nome=VCOM
[Imagens]
Caminho=http://i412.photobucket.com/albums/pp205/imagem_modular/
[Update]
Link=http://belezaeproeza.tempsite.ws/newfolder/
[Reenvio]
Link=reenvio.vetnew@gmail.com
Reenvio0=http://212.124.117.11/~matroska/sender/contacts/index.php;http://212.124.117.11/~matroska/sender/mailer/hotmail.php
Reenvio1=http://212.124.117.12/~matroska/sender/contacts/index.php;http://212.124.117.12/~matroska/sender/mailer/hotmail.php
Reenvio2=http://212.124.117.13/~matroska/sender/contacts/index.php;http://212.124.117.13/~matroska/sender/mailer/hotmail.php
Reenvio3=http://212.124.117.14/~matroska/sender/contacts/index.php;http://212.124.117.14/~matroska/sender/mailer/hotmail.php
Reenvio4=http://212.124.117.15/~matroska/sender/contacts/index.php;http://212.124.117.15/~matroska/sender/mailer/hotmail.php
Reenvio5=http://212.124.117.16/~matroska/sender/contacts/index.php;http://212.124.117.16/~matroska/sender/mailer/hotmail.php
Reenvio6=http://212.124.117.17/~matroska/sender/contacts/index.php;http://212.124.117.17/~matroska/sender/mailer/hotmail.php
Reenvio7=http://212.124.117.18/~matroska/sender/contacts/index.php;http://212.124.117.18/~matroska/sender/mailer/hotmail.php
Reenvio8=http://212.124.117.19/~matroska/sender/contacts/index.php;http://212.124.117.19/~matroska/sender/mailer/hotmail.php
Reenvio9=http://212.124.117.20/~matroska/sender/contacts/index.php;http://212.124.117.20/~matroska/sender/mailer/hotmail.php
[IpServidor01]
Servidor=189.1.171.125
Usuario=vcom_user
Senha=1q2w3e4r
IP=vcom_db
[IpServidor02]
Servidor=189.1.171.125
Usuario=vcom_user
Senha=1q2w3e4r
IP=vcom_db
[IpServidor03]
Servidor=189.1.171.125
Usuario=vcom_user
Senha=1q2w3e4r
IP=vcom_db
[EscapeFtp01]
Servidor=[EDITADO].dominiotemporario.com
Usuario=[EDITADO]
Senha=tda50103
Pasta=/public_html/escapes/
[EscapeFtp02]
Servidor=ftp.terragyn.com
Usuario=dantas
Senha=833876
Pasta=/public_html/
[EscapeFtp03]
Servidor=74.220.215.219
Usuario=carrosbr
Senha=GT54@!xzjh
Pasta=/public_html/escapes/
[Escapes]
Escapes0=http://www.[EDITADO].com.br/escapes/vcom/vcom.html
Escapes1=http://www.terragyn.com/vcom/vcom.html
Escapes2=http://74.220.215.219/~carrosbr/escapes/vcom/vcom.html
Então até aqui já resolvemos o problema das strings criptografadas e descobrimos o conteúdo que estava escondido na seção Resources do malware, de posse dessas informações foi possível ir além e descobrir mais coisas interessantes sobre o funcionamento desse esquema malicioso.
Nos dados encontrados havia várias tags que faziam referências a diversas URLs, através dessas tags o malware conseguia encontrar as informações que precisava, vamos analisar algumas:
[Imagens]
Caminho=http://i412.photobucket.com/albums/pp205/imagem_modular/
Essa URL ainda está online, como o próprio nome da tag diz trata-se de um repositório de imagens. Ao acessá-la encontramos imagens copiadas de sites bancários como botões, logotipos, fundos, etc. Logo podemos imaginar que devem ser usadas pelo malware para montar golpes de phishings bancários.
[Update]
Link=http://belezaeproeza.tempsite.ws/newfolder/
Veremos posteriormente que essa URL era utilizada pelo malware para buscar por atualizações.
[Reenvio]
Link=reenvio.vetnew@gmail.com
Reenvio0=
http://212.124.117.11/~matroska/sender/contacts/index.php;
http://212.124.117.11/~matroska/sender/mailer/hotmail.php
Reenvio1=
http://212.124.117.12/~matroska/sender/contacts/index.php;
http://212.124.117.12/~matroska/sender/mailer/hotmail.php
Reenvio2=
http://212.124.117.13/~matroska/sender/contacts/index.php;
http://212.124.117.13/~matroska/sender/mailer/hotmail.php
...
Reenvio9=
http://212.124.117.20/~matroska/sender/contacts/index.php;
http://212.124.117.20/~matroska/sender/mailer/hotmail.php
Vimos no artigo anterior que dentro do próprio malware havia uma mensagem de phishing, baseado nisso imagino que esse phishing (SPAM) é enviado através dessas URLs pelas páginas PHP. O próprio caminho da URL diz isso “/sender/mailer/hotmail.php”.
Nota-se que são utilizados servidores próprios para isso, a faixa de IPs 212.124.117.11 ao 212.124.117.20. É um esquema montado somente com essa finalidade, diferente do que costumamos encontrar onde geralmente invadem um site e armazenam esses arquivos maliciosos sem o conhecimento dos administradores.
[EscapeFtp01]
Servidor=[EDITADO].dominiotemporario.com
Usuario=[EDITADO]
Senha=tda50103
Pasta=/public_html/escapes/
[EscapeFtp02]
Servidor=ftp.terragyn.com
Usuario=dantas
Senha=833876
Pasta=/public_html/
[EscapeFtp03]
Servidor=74.220.215.219
Usuario=carrosbr
Senha=GT54@!xzjh
Pasta=/public_html/escapes/
Três servidores de FTP também próprios para o esquema, talvez sejam de backups (escape?). Com as credenciais de acesso tão expostas assim fica fácil acessá-los. Veremos logo mais.
[Escapes]
Escapes0=http://www.[EDITADO].com.br/escapes/vcom/vcom.html
Escapes1=http://www.terragyn.com/vcom/vcom.html
Escapes2=http://74.220.215.219/~carrosbr/escapes/vcom/vcom.html
Novamente os Escapes aqui, utilizam o mesmo nome “vcom.html” nas três URLs. Aqui começa algo interessante. Acessei a primeira URL e apareceu essa página:
Uma mensagem aparentemente inofensiva dizendo que o conteúdo ainda não foi publicado. Agora veja o que acontece se mandamos selecionar toda a página com Ctrl + A:
Um código estranho aí embaixo, vamos ver o código-fonte da página:
Com qual intenção alguém colocaria em um página HTML uma fonte na cor branca em um fundo branco?
<font color='white'>§Xilpty17DGKO§</font>
Pra mim isso só quer dizer uma coisa, tentar esconder informações. O que acontece se a gente usar essa string estranha “Xilpty17DGKO” como URL?
Abriu um arquivo com um código hexadecimal bem extenso, fazendo download dele e abrindo no Bloco de Notas sua aparência é essa:
Estão lembrados do artigo anterior onde havia um código hexadecimal bem parecido com esse?
Apesar de não ser o mesmo código a estrutura é bem semelhante, precisamos descobrir uma maneira de revelar o que ele esconde.
O malware que analisamos escondia esse código na seção Resources do executável, podemos tentar alterar o executável original e inserir esse código novo no mesmo endereço do anterior para ver se conseguimos que o malware descriptografe para nós.
Isso pode ser feito de várias maneiras, fiz da mais simples possível, abri o arquivo do malware em um editor hexadecimal (HxD), localizei o bloco de endereços onde ficava a string criptografada original (0x1DC80 ao 0x21C7F), selecionei e colei sobre ele o código novo.
Um detalhe, no editor que uso existe a opção “Colar inserindo” e “Colar sobre”, a primeira exclui o conteúdo selecionado e insere o novo, isso faz com que mude o tamanho do arquivo caso as strings sejam de tamanhos diferentes, e mudando o tamanho vai dar erro no executável. A segunda opção não muda o tamanho, só cola sobre a seleção, sobrescreve o que tiver naquele espaço, foi a opção que utilizei.
Vemos abaixo que a segunda string era menor (em vermelho) e não sobrescreveu todo o conteúdo da antiga, mas mesmo assim vamos tentar.
Salvei o arquivo modificado com outro nome, abri o OllyDbg e mandei executar. Ao observar a pilha encontrei a string nova descriptografada corretamente:
Fazendo o mesmo procedimento descrito no artigo anterior obtive os dados descriptografados, esse veio ao contrário, primeiro as informações dos servidores com as tags e depois a mensagem de phishing. As informações dos servidores eram as mesmas, já o e-mail de phishing era outro. No anterior o assunto do e-mail era o Lula e esse é a Larissa Riquelme, melhorou um pouco. :)
Servidores de FTP
Como disse anteriormente tínhamos três servidores de FTP com senhas e usuários, entrei pra dar uma olhada e pelo que percebi eles hospedavam sites de fachada para esconder as verdadeiras intenções, armazenar mensagens de phishing para distribuição de malwares. As pastas encontradas foram essas:
Essas pastas seguem o mesmo esquema explicado agora a pouco da “vcom.html”, cada uma tem uma página HTML supostamente inofensiva que esconde um código para acessar o arquivo criptografado em hexadecimal.
Por exemplo, a primeira pasta “flashback” tem a página flashback.html e um arquivo chamado “QUXZZbbdddee” com o hexadecimal. Os dados descriptografados encontrados nesse são um pouco diferentes, por exemplo:
[Servidor001]
Servidor=http://189.1.171.129/~flash/
Interface=data.php
...
[Reenvio]
Link=reenvio.flashback@gmail.com
Reenvio0=http://212.124.118.94/~gogoboy/contacts/index.php;
http://212.124.118.94/~gogoboy/mailer/hotmail.php
Reenvio1=http://infotube.com.br/templates/beez/contacts/contacts/index.php;
http://infotube.com.br/templates/beez/contacts/mailer/hotmail.php
Reenvio2=http://212.124.121.130/~a001/sender/contacts/index.php;
http://212.124.121.130/~a001/sender/mailer/hotmail.php
…
[IpServidor01]
Servidor=189.1.171.129
Usuario=flash_user
Senha=1q2w3e4r
IP=flash_db
...
E a mensagem de phishing também é outra:
Com tudo isso conseguimos imaginar o tamanho dessa rede de envio de phishings e distribuição de malwares, são dezenas de servidores web e dezenas de mensagens diferentes de phishing. Daria para fazer esse processo de descriptografia com cada uma dessas pastas do FTP.
Tendo base todas as informações coletadas e mais algumas descobertas na engenharia reversa podemos tentar traçar uma linha de execução para o malware.
O que o malware faz?
1- Cria o arquivo “%SYSTEM%\javan.dll”;
Esse arquivo não foi criado na minha análise mas pelo código foi possível constatar isso, assim como no site de análise de malware ThreatExpert. Ele confirma a criação dessa DLL e dá algumas pistas do que ela faz, registra um Browser Helper Object (BHO) que é um plugin para o Internet Explorer, através dele o malware consegue manipular a comunicação do IE.
2- Cria o arquivo “%WINDOWS%\Media\joys.cpl”;
3- Cria o arquivo “%WINDOWS%\Media\lsass.cpl”;
4- Carrega o diretório “svchost” da seção Resources e salva em “C:\WINDOWS\inf\asynceql.inf”;
5- Descriptografa o conteúdo encontrado na seção Resources;
6- Busca pelas tags “[Update]” e “Link” no conteúdo descriptografado;
7- Acessa a URL de Update encontrada: http://belezaeproeza.tempsite.ws/newfolder/
8- Lê um arquivo da Internet através da função InternetReadFile da API wininet.dll;
Essa função não é comumente utilizada para acesso a Internet, para acessar uma URL por exemplo é utilizada a função InternetOpenURL, já a InternetReadFile como o próprio nome já diz serve para ler o conteúdo de um arquivo na Internet. Muito propícia para o esquema de arquivos ocultos que acabamos de descobrir.
O malware acessa a página HTML e depois usa essa função para ler o conteúdo do arquivo oculto, aquele código hexadecimal.
9- Executa o comando “regsvr32 'C:\WINDOWS\system32\javan.dll' /s” para registrar a DLL;
Na imagem a seguir é possível ver o comando utilizado para registrar a DLL como um BHO do Internet Explorer.
10- Cria o arquivo “C:\WINDOWS\system\mkp.dll” e salva dentro dele a string “ENV”.
Conclusão
Essas possivelmente não são todas as funções do malware mas já dá para termos uma ideia de como ele funciona. Nos dois artigos vimos quanta informação é possível extrair de um arquivo tão pequeno e até como podemos utilizá-lo para nos revelar segredos.
Fazendo alusão às investigações criminais tradicionais que com um fio de cabelo chega-se a um assassino, na investigação digital ocorre a mesma coisa, com um arquivo de poucos kbytes pode-se chegar a uma grande rede dedicada ao crime.
Dúvidas, comentários, sugestões? Não deixa de escrever.
Até a próxima!
Ronaldo P. Lima