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.
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.
Leia a continuação: Hacking Malware: 66 KB e muitos segredos - Parte 2
Ronaldo P. Lima
Uau! Esses malwares estao cada vez mais sofisticados.
ResponderExcluirMeus sinceros parabens, excelente análize e ótima explicação. Até semana que vem
parabééns pelo seu grande trabalho
ResponderExcluirvc e muito bommmmmmmmmmmmmmmmmmmmmmm
até semana q vem
abraços