Tecnologia do Blogger.

sábado, 29 de dezembro de 2012

Hacking Malware: 66 KB e muitos segredos

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.
Creditos: Ronaldo P. Lima ( http://www.crimesciberneticos.com/ )

2 comentários: