1
Pró-Reitoria de Pós-Graduação e Pesquisa
Lato Sensu em Perícia Digital
Trabalho de Conclusão de Curso
ANÁLISE DE MALWARE EM AMBIENTE WINDOWS
Autor: MSc. Thiago Arreguy Silva Vitorino
Orientador: Prof. MSc. Marcelo Beltrão Caiado
Brasília - DF
2013
THIAGO ARREGUY SILVA VITORINO
ANÁLISE DE MALWARE EM AMBIENTE WINDOWS
Artigo apresentado ao Programa de PósGraduação Lato Sensu em Perícia Digital da
Universidade Católica de Brasília, como
requisito parcial para obtenção do certificado
de Especialista em Perícia Digital.
Orientador: Prof. MSc. Marcelo Beltrão
Caiado
Examinador: Prof. MSc. Paulo Roberto Corrêa
Leão
Brasília – DF
2013
Artigo de autoria de Thiago Arreguy Silva Vitorino, intitulado ANÁLISE DE
MALWARE EM AMBIENTE WINDOWS, apresentado como requisito parcial para obtenção
de certificado de especialista em Perícia Digital da Universidade Católica de Brasília, em 05
de dezembro de 2013, defendido e aprovado pela banca examinadora abaixo assinada:
Prof. MSc. Marcelo Beltrão Caiado
Orientador
Perícia Digital – UCB
Prof. MSc. Paulo Roberto Corrêa Leão
Examinador
Perícia Digital – UCB
Brasília – DF
2013
4
ANÁLISE DE MALWARE EM AMBIENTE WINDOWS
THIAGO ARREGUY SILVA VITORINO
Resumo:
Códigos maliciosos são programas especificamente desenvolvidos para executar ações
danosas e atividades maliciosas em um computador. Malware, termo proveniente do inglês
malicious software, é um software destinado a se infiltrar em um sistema de computador
alheio de forma ilícita, com o intuito de causar algum dano ou roubo de informações, sejam
confidenciais ou não. Programas antivírus e antispyware são as ferramentas mais comuns para
prevenção, porém esses utilitários usualmente se aplicam a programas maliciosos cujas
assinaturas já são conhecidas e catalogadas em uma base de dados. Para criar as assinaturas
dos malwares e catalogá-las, é necessária uma análise detalhada de seu código, conhecida
como engenharia reversa. Dentro deste contexto, a abordagem deste trabalho foi feita através
de uma pesquisa qualitativa, descritiva e subjetiva, aplicada em laboratório, num ambiente
controlado, onde foram realizados testes para verificar as técnicas e ferramentas de análise de
malware em ambiente Windows em três amostras de malwares. Os resultados obtidos por
meio da análise estática e dinâmica, ambas básicas, sugerem que seja feita uma análise
avançada.
Palavras-chave: Malware, Análise de malware, Engenharia reversa, Windows.
1.
INTRODUÇÃO
Códigos maliciosos (malware) são programas especificamente desenvolvidos para
executar ações danosas e atividades maliciosas em um computador (CERT, 2013). Malware,
termo proveniente do inglês malicious software (software malicioso), é um software destinado
a se infiltrar em um sistema de computador alheio de forma ilícita, com o intuito de causar
algum dano ou roubo de informações (confidenciais ou não). Vírus de computador, worms,
trojan horses e spywares são considerados malware. Também pode ser considerada malware,
uma aplicação legal que por uma falha de programação (intencional ou não) execute funções
que se enquadrem na definição citada.
Os programas antivírus e antispyware são as ferramentas mais comuns para
prevenção. Esses utilitários analisam um programa de computador antes de executá-lo e
encerram-no caso reconheça uma "assinatura" de um código mal-intencionado. Muitos
antivírus também avaliam os programas para determinar se eles contêm quaisquer
características relacionadas a vírus. Porém, esses utilitários usualmente se aplicam a
programas maliciosos cujas assinaturas já são conhecidas e catalogadas em uma base de
dados.
Para criar as assinaturas do malwares e catalogá-las, é necessária uma análise
detalhada de seu código, conhecida como engenharia reversa. De acordo com Eilam (2005),
engenharia reversa é um conjunto de técnicas e ferramentas para entender o funcionamento de
um software. É um processo de análise de um sistema para identificar seus componentes e
5
suas inter-relações, para criar representações do sistema em um nível mais alto de abstração.
No caso do malware, aplicada na interpretação do seu código de máquina para tentar entender
seu funcionamento.
A engenharia reversa pode ser feita de forma manual, através de uma análise feita por
um programador, ou de forma automatizada, quando um software tenta identificar alguma
estrutura do malware. Normalmente isso é feito para identificar a presença de um malware em
um programa.
Grande parte dos códigos maliciosos são desenvolvidos para ambiente Windows
(VIRUSTOTAL, 2013), conforme estatística mostrada na Figura 1. Os esforços para
desenvolver técnicas e ferramentas para facilitar a análise de malware são constantes, devido
ao aumento drástico da quantidade de códigos maliciosos nos últimos anos (Finjan Research
Center, 2009), que no cenário nacional pode ser visualizado na Figura 2.
Figura 1 – Estatística mostrando que grande parte dos malwares são desenvolvidos para o sistema operacional
Windows.
Fonte: Virustotal (2013).
Figura 2 – Incidentes Reportados ao CERT.br, Janeiro a Março de 2013.
Fonte: CERT.br (2013).
No Gráfico da Figura 2, a legenda para worm abrange todas as notificações de
atividades maliciosas relacionadas com o processo automatizado de propagação de códigos
maliciosos na rede, conforme relatado por CERT.br (2013).
Assim, dentro deste contexto, pretende-se fazer uma revisão teórica dos principais
6
conceitos, técnicas e ferramentas envolvidos na análise de malware em ambiente Windows.
Ao final será apresentado um estudo de caso de análise de códigos maliciosos em ambiente
Windows, por meio das técnicas e ferramentas de análise estática e dinâmica, apresentadas no
referencial teórico.
1.1 PROBLEMA
Quais os principais conceitos, técnicas e ferramentas envolvidos na análise de
malware em ambiente Windows?
1.2 PRESSUPOSTO
A análise de códigos maliciosos se torna extremamente difícil se não forem utilizadas
as técnicas e ferramentas adequadas.
1.3 PROPÓSITO
Levando em consideração que a maioria dos códigos maliciosos são desenvolvidos
para ambiente Windows. Somando este fato ao aumento drástico na quantidade de malware
desenvolvido nos últimos anos. Esta pesquisa, por meio de um estudo de caso, visa a difusão
de técnicas e ferramentas utilizadas na análise de malware em ambiente Windows.
1.4 OBJETIVOS GERAIS
Identificar os principais conceitos, técnicas e ferramentas envolvidos na análise de
malware em ambiente Windows.
1.4.1 Objetivos Específicos
Para alcançar o objetivo geral será necessário:
a) expor os principais conceitos teóricos e técnicas envolvidas na análise básica,
estática e dinâmica, de malware;
b) apontar as principais ferramentas utilizadas para análise básica, estática e
dinâmica de malware em ambiente Windows;
c) demonstrar através de um estudo de caso, o funcionamento das principais
técnicas e ferramentas envolvidas na análise básica, estática e dinâmica de
malware em ambiente Windows.
2
REFERENCIAL TEÓRICO
Este tópico apresenta os fundamentos relacionados a técnicas, ferramentas e conceitos
envolvidos na análise de malware em ambiente Windows. A Seção 2.1 descreve a revisão
bibliográfica. A Seção 2.2 define os conceitos, técnicas e ferramentas utilizados na análise de
malware.
2.1 REVISÃO BIBLIOGRÁFICA
A ameaça dos códigos e programas maliciosos à segurança dos sistemas
computacionais fez com que surgissem muitos sistemas cujo propósito é analisar, de maneira
7
dinâmica e controlada, tais programas. Estes sistemas empregam diversas técnicas para obter
o comportamento apresentado por amostras de malware durante sua execução. A
complexidade destas técnicas varia desde a monitoração de eventos através de interfaces no
nível de privilégio dos usuários, passando pela desofuscação de programas maliciosos em
linguagens típicas da Web, até a inserção de código em estruturas do kernel do sistema
operacional. Filho et al. (2011) apresentam as principais técnicas utilizadas para efetuar a
análise dinâmica de malware, sejam estes do nível do sistema operacional ou da Web.
Filho et al. (2010) propõe um sistema de análise de artefatos maliciosos para obter
informações sobre a execução do artefato e o tráfego de rede gerado durante a análise. O
sistema é capaz de analisar arquivos do tipo PE32 (Portable Executable) dos sistemas
Windows.
Para criar contramedidas a ataques por programas maliciosos, é necessário entender o
comportamento destes programas. Sistemas de análise dinâmica ajudam a traçar tais
comportamentos, mas geram muitos dados textuais que podem confundir o analista. Assim
técnicas de visualização podem ser empregadas, na tentativa de se identificar padrões que
sirvam no auxílio à análise, possibilitando a descoberta de informações úteis. Grégio et al.
(2011) e Baruque et al. (2011) propõem uma ferramenta interativa e visual para análise de
comportamento de código malicioso.
A propagação automática de malwares é uma séria ameaça na Internet e responde por
boa parte dos comprometimentos de sistemas computacionais. As ferramentas de segurança
como antivírus e firewalls têm evoluído consideravelmente nos últimos tempos, no entanto os
malwares não ficaram para trás. A nova geração de malwares possui a capacidade de
desabilitar softwares antivírus e ocultar-se no sistema operacional. Ceron et al. (2009) buscam
identificar as funcionalidades dos malwares mais utilizadas avaliando também a eficácia dos
sistemas de antivírus com relação às mesmas.
As botnets são consideradas uma das principais ameaças a segurança da Internet. Tais
ameaças caracterizam-se por serem muito dinâmicas, de forma a diminuir a efetividade de
sistemas antivírus e IDS. Ceron et al. (2011) apresentam uma arquitetura de ferramentas para
mitigação e detecção de botnets, baseada em assinaturas de rede de máquinas comprometidas
por bots.
Para evitar mecanismos de proteção como antivírus, os desenvolvedores de malware
usam packers, programas para ofuscar o código malicioso e dificultar sua detecção e análise.
Martins et al. (2010), apresentam uma ferramenta multiplataforma e orientada a objetos para
identificar packers em arquivos de executáveis do Microsoft Windows, permitindo a
agregação de novos módulos para auxiliar na obtenção de informações sobre malware.
A quantidade de diferentes alvos aliada às diferentes finalidades dos ataques
perpetrados por softwares maliciosos em conjunto com o vasto arsenal de ferramentas
disponíveis aos desenvolvedores gera uma quantidade de malwares que exige o máximo de
automatização nas tarefas de análise e prospecção dos mesmos. Um dos problemas a serem
tratados para a análise estática é o empacotamento. Nesse contexto Park et al. (2011)
apresentam uma metodologia de reconhecimento de empacotamento de executáveis, através
da utilização de cálculos estatísticos e de teoria da informação.
Programas maliciosos espionam o comportamento de usuários e comprometem a sua
8
privacidade. As técnicas existentes para detecção de malware e análise de amostras de códigos
desconhecidos são insuficientes e têm deficiências significativas contra este tipo de atividade
maliciosa. O acesso à informação e comportamento malicioso de processamento é o traço
fundamental que separa aplicativos maliciosos de softwares benignos. Yin et al. (2007)
propõem um sistema para detectar e analisar malwares, capturando suas características
fundamentais, de forma a permitir compreender rapidamente o comportamento de uma
amostra desconhecida.
Analisar estaticamente grandes amostras de malwares empacotados e criptografados
representa um desafio significativo para automatizar a identificação de seus atributos e
funcionalidades. Lyda et al. (2007) propõem a sua identificação de forma rápida e eficiente
através da análise estatística da entropia de seus códigos executáveis.
Apenas técnicas de análise estática podem não ser suficiente para identificar um
malware. Moser et al. (2007) apresentam um esquema de ofuscação binário para explorar os
limites da análise estática na detecção de código malicioso.
Os primeiros malwares eram muito primitivos e fáceis de detectar, porém evoluíram
para softwares sofisticados e complexos. A maioria dos métodos atuais de detecção de
malware envolvem algoritmos de busca de strings, baseados na detecção de padrões. Isto
pode incluir a utilização do método baseado em assinatura. Zabidi et al. (2011) propõem uma
categorização de malwares usando classificação e agrupamento, com o modelo de
aprendizagem adaptativa.
Software Weaponized é o mais recente desenvolvimento em uma batalha de décadas na
evolução de vírus e antivírus. Malwares adaptativos e códigos binários com transformação
automatizadas são duas tecnologias ofensivas e defensivas, respectivamente, recentemente
emergentes que podem moldar o futuro da guerra cibernética. Enquanto a primeira aprende a
se adaptar às defesas antivirais de forma totalmente automática, a segunda se utiliza da
tecnologia mutação de código para a defesa, transformando programas potencialmente
perigosos em programas de seguros. Nesse contexto Hamlen et al. (2013) discutem essas
tecnologias e suas funções dentro do cenário de ataque e defesa.
Embora a análise dinâmica seja imune às técnicas polimórficas, metamórficas e
criptográficas, é uma questão em aberto como capturar com precisão o comportamento de
malware. Jianming et al. (2011) propõem um método de captura de comportamento baseado
na pilha de execução do malware.
Os sistemas antivírus tradicionais empregam recursos estáticos para detectar
executáveis maliciosos. Infelizmente, esta abordagem baseada em conteúdo pode ser ofuscada
por técnicas tais como polimorfismo e metamorfismo. Yongtao et al. (2008) propõem um
método de detecção executável malicioso usando um vetor característico de dimensão 35,
onde cada dimensão representa uma característica de comportamento em tempo de execução,
correspondentes a chamadas de API Win32 e seus determinados parâmetros.
Capturar o comportamento de um malware é um dos pré-requisitos essenciais para
realizar sua análise dinâmica. Ying et al. (2012) estudam e projeta um sistema denominado
Osíris, que faz uso da técnica de máquina virtual para capturar o comportamento de malwares,
através do monitoramento das chamadas de API do Windows pelo processo em análise.
Os códigos dos malwares estão cada vez mais complexos e sofisticados, de forma que
9
os analistas gastam mais tempo para identificar a assinatura de um malware e desenvolver
rotinas de detecção e remoção, aumentando assim, o risco de se infectar sistemas críticos. A
fim de se evitar infecções múltiplas do mesmo sistema por uma malware, o mesmo costuma
utilizar marcadores de infecção para identificar um sistema como já infectado. Nesse
contexto, Wichmann et al. (2012) apresentam o conceito de usar esses marcadores para
vacinar sistemas contra infecções por uma família de malwares específicos, eliminando assim
a necessidade de um especialista humano para realizar a análise.
Os programas maliciosos podem causar sérios problemas de segurança para usuários
domésticos e até mesmo para sistemas corporativos altamente seguros. O principal vetor de
infecção atualmente usado por atacantes é a Internet. Neste contexto, Afonso et al. (2012)
propõem um framework híbrido para análise de malwares de ambiente Web e de Sistemas
Operacionais, que oferece melhores taxas de detecção para uma gama mais ampla de tipos de
malwares.
De Melo et al. (2011), em seu artigo divulgam o conhecimento necessário para que
profissionais interessados em análise de malware desenvolvam habilidades esperadas em um
grupo de resposta a incidentes e forense computacional, focado em malware bancário. A
abordagem utilizada é teórico-prática, expondo principais conceitos e discussões sobre as
novas tendências de desenvolvimento de códigos maliciosos bem como suas contramedidas.
São apresentados modelos de condução de incidentes e análise de malware, com ferramentas
utilizadas no processo, apontando quais informações são primordiais e as preocupações
necessárias para se conter um incidente.
2.2 CONCEITOS, TÉCNICAS E FERRAMENTAS NA ANÁLISE DE MALWARE
Tendo Sikorski et al. (2012) como principal referencial teórico, nos itens que se
seguem serão apresentados os principais conceitos, técnicas e ferramentas utilizadas na
análise de malware em ambiente Windows.
2.2.1 Objetivos da análise de malware
O objetivo da análise de malware geralmente é fornecer a informação que se precisa
para responder de forma adequada a uma invasão de rede. Seus objetivos serão tipicamente
para determinar exatamente o que aconteceu, e para garantir que se tenha localizado todas as
máquinas e arquivos infectados. Ao analisar o código malicioso suspeito, seu objetivo será
tipicamente determinar exatamente o que um determinado código binário suspeito pode fazer,
como detectá-lo em sua rede, e como medir e conter seu dano.
Depois de identificar os arquivos que exigem uma análise completa, o passo seguinte é
desenvolver assinaturas para detectar infecções de malware na rede, que podem ser
assinaturas baseadas em host e assinaturas de rede.
Assinaturas baseadas em host, ou indicadores, são usadas para detectar o código
malicioso em computadores das vítimas. Estes indicadores, muitas vezes identificam os
arquivos criados ou modificados pelas mudanças que um malware específico faz no registro
do Windows. Ao contrário de assinaturas de antivírus, os indicadores se concentram no que o
malware faz para o sistema, não nas características do próprio software malicioso. Isso os
10
torna mais eficazes na detecção de malwares que mudam de forma ou que tenham sido
excluídos do disco rígido.
Assinaturas de rede são usadas para detectar códigos maliciosos através do
monitoramento do tráfego da rede. Assinaturas de rede podem ser criadas sem a análise do
malware, porém as assinaturas criadas com a ajuda da análise do malware são geralmente
muito mais eficazes, oferecendo uma alta taxa de detecção e poucos falsos positivos.
Após a obtenção das assinaturas, o objetivo final é descobrir exatamente como o
malware funciona. Essa é muitas vezes a pergunta mais feita pela alta administração, que quer
uma explicação completa, no caso de uma grande intrusão. As técnicas aqui apresentadas
permitirão determinar a finalidade e capacidades de programas maliciosos.
2.2.2 Técnicas de análise de malware
Existem duas abordagens fundamentais para se fazer a análise de um malware: estática
e dinâmica. Análise estática envolve examinar o malware sem executá-lo, já a análise
dinâmica implica na execução do malware. Ambas as técnicas podem ser classificadas em
básica e avançada.
A análise estática básica consiste em examinar o arquivo executável sem visualizar as
instruções do código. Este tipo de análise fornece informação sobre a funcionalidade do
malware, algo que o identifique, como se fosse uma assinatura. É uma análise direta e rápida,
mas ineficaz contra malwares sofisticados e pode deixar passar comportamentos importantes.
A análise dinâmica básica implica em executar o malware e observar o seu
comportamento no sistema de modo a remover a infecção, produzir assinaturas, ou ambos.
Entretanto, antes de executar o malware, deve-se estabelecer um ambiente que permitirá
estudar o comportamento do malware sem colocar em risco o sistema operacional ou a rede.
A análise estática avançada consiste em fazer uma engenharia reversa no código do
malware, carregando este em um disassembler, e analisar as instruções do programa de modo
a tentar descobrir o que o programa faz. Esta técnica requer conhecimentos especializado em
engenharia reversa de códigos, construção de códigos e conceitos do sistema operacional em
questão.
A análise dinâmica avançada emprega um debugger para examinar o estado interno de
um executável malicioso em tempo de execução.
Este artigo aborda apenas na análise estática e dinâmica, ambas básica.
2.2.3 Tipos de malware
Segundo SIKORSKI et al. (2012), os malwares podem ser classificados de acordo
com o seu comportamento nos seguintes tipos:
a) Backdoor Malicious: código que permite um atacante, acesso a um computador.
b) Botnet: similar ao backdoor, no sentido que permite um atacante acesso a um
computador, mas todos os computadores infectados com o mesmo botnet receberão a
mesma instrução de um único servidor de comando e controle.
c) Downloader: código malicioso que existe apenas para fazer download de outro código
malicioso.
11
d) Information-stealing malware: malware que coleta informações do computador de
uma vítima e envia-as ao atacante.
e) Launcher: programa malicioso usado para dar inicio a execução de outros softwares
maliciosos.
f) Rootkit: código malicioso projetado para ocultar a existência de outro código.
g) Scareware: malware projetado para intimidar um usuário infectado a comprar algo,
normalmente se passando por um antivírus ou outro programa de segurança.
h) Spam-sending malware: malware que infecta a máquina do usuário e então usa esta
máquina para enviar spam.
i) Worm ou vírus: código malicioso que copia a si próprio e infecta outras máquinas.
Porém os malwares podem ser classificados em múltiplas categorias, assim é
importante não ficar muito preso ao seu comportamento para classificá-los.
Malwares também podem ser classificados, de acordo com o seu objetivo de ataque,
como direcionados ou em massa. Malware de ataque em massa, como o Scareware, é
projetado para afetar tantas máquinas quanto possível. Malwares direcionados, como por
exemplo um tipo de backdoor projetado para uma organização especifica, são mais perigosos
que os malwares em massa, pois seu ataque não é generalizado e os produtos de segurança
existentes provavelmente não lhe protegerão. Malwares direcionados são quase sempre
sofisticados e sua análise requer conhecimentos avançados.
2.2.4 Análise estática básica
A análise estática, que normalmente é o primeiro passo para se estudar um malware,
descreve o processo de análise do código ou a estrutura de um programa para determinar a sua
função. Porém o programa em si não é executado.
Segundo SIKORSKI et al. (2012), as seguintes técnicas e ferramentas, envolvendo
análise estática, são úteis para se extrair informação dos executáveis e serão discutidas nesta
seção:
a) Ferramentas de antivírus para confirmar se é um código malicioso ou não.
b) Hashing para identificar o malware.
c) Informações das strings de arquivos, funções e cabeçalhos.
d) Empacotamento e Ofuscação.
e) Formato de arquivo PE (Portable Executable).
f) Bibliotecas de Ligação e Funções.
g) Cabeçalho e seções de um arquivo PE.
Cada técnica provê diferentes informações que podem ser úteis, dependendo do
objetivo. Normalmente usam-se várias técnicas para coletar tantas informações quanto
possível.
2.2.4.1 Scanning com antivírus
Ao analisar o malware em potencial, um bom primeiro passo é testar sua
12
maliciosidade através de vários programas antivírus, que já podem tê-lo identificado. Mas as
ferramentas antivírus não são perfeitas, pois se baseiam em um banco de dados que contém
partes identificáveis de códigos suspeitos conhecidos (assinaturas de arquivo), bem como
análise de comportamento e correspondência de padrões (heurística), para identificar arquivos
suspeitos. Um problema é que os desenvolvedores de malware podem facilmente modificar
seu código, mudando assim a assinatura de seu programa e fugir da busca dos programas de
antivírus.
Além disso, malwares novos frequentemente passam despercebidos por um software
antivírus, pois simplesmente sua assinatura não está na base de dados. Finalmente, a
heurística, enquanto muitas vezes bem-sucedida na identificação de código malicioso
desconhecido, pode ser contornada por malwares novos e únicos.
Como vários programas antivírus usam assinaturas diferentes e técnicas baseadas em
heurística, é útil testar vários programas antivírus diferentes contra o mesmo trecho de código
malicioso suspeito. Sites como o VirusTotal1 permitem que se carregue um arquivo para que
seja feito o scanning por vários programas antivírus, gerando assim um relatório com o
número total de programas antivírus que identificaram o arquivo como malicioso, o nome do
malware em questão, e, se disponível, informações adicionais sobre o mesmo.
2.2.4.2 Hashing
Hashing, no contexto de análise de malware, é um método comum usado para
identificar de forma única um malware. O arquivo malicioso é submetido a um programa
gerador de hash, que produz uma sequencia única de caracteres que o identifica, uma espécie
de impressão digital do malware. O Message-Digest Algorithm 5 (MD5), função hash, é o
mais comumente utilizado para análise de malware, embora o Secure Hash Algorithm 1
(SHA-1) também seja muito popular.
Como um padrão da Internet (RFC 1321), o MD5 é utilizado numa ampla variedade
de aplicações de segurança, e também para verificar a integridade de arquivos. Para ambiente
Windows, pode-se usar o software WinMD5, que é um pequeno e rápido utilitário para
calcular o valor de hash MD5 para arquivos. Ele funciona com Microsoft Windows 98, Me,
2000, XP, 2003, Vista e Windows 7. Disponível para download gratuitamente2.
O National Software Reference Library (NSRL) disponibiliza uma biblioteca de dados
contendo um conjunto de hash para serem empregadas em trabalhos de forense digital, (NIST,
2013). Esta base de dados contém assinaturas de software maliciosos e as concentram em um
conjunto de dados de referência (Reference Data Set – RDS), disponível para download3.
Com esta base de dados é possível analisar e identificar os arquivos por meio de suas
assinaturas digitais.
2.2.4.3 Strings
String em um programa é uma sequência de caracteres, como “UCB”. Se um
1 http://www.virustotal.com
2 http://www.winmd5.com/
3 http://www.nsrl.nist.gov/Downloads.htm
13
programa imprime uma mensagem, se conecta a uma URL, ou copia um arquivo para um
local específico, logo ele contém sequências de strings.
Procurando em strings, pode ser uma maneira simples de obter dicas sobre a
funcionalidade de um programa. Por exemplo, se o programa acessa a uma URL então
provavelmente vai-se ver o endereço da URL acessada, armazenado como uma string.
Normalmente as strings são armazenadas no formato ASCII ou Unicode. Ambos os
formatos são armazenados em sequências de caracteres que terminam com NULL para indicar
que a sequência está completa. Sequências ASCII usam um byte por caractere, e sequências
Unicode usam dois bytes por caractere.
Para ambiente Windows um programa para obter as strings de um arquivo pode ser
feito o download neste site4.
Por exemplo, se a string “UCB” fosse armazenada no formato ASCII, a sequência de
caracteres armazenada equivalente em hexadecimal seria 0x55, 0x43, 0x42 e 0x00, onde 0x55
é a representação ASCII da letra maiúscula U, 0x43 representa a letra C e 0x42 representa a
letra B. O 0x00 no fim é o terminador NULL. O formato Unicode equivalente a esta mesma
sequencia de caracteres seria 0x5500, 0x4300, 0x4200 e 0x0000.
Quando se busca por strings ASCII e Unicode em um arquivo executável, o contexto e
formatação do arquivo são ignorados. Isso permite que se possa analisar qualquer tipo de
arquivo e detectar strings através de um arquivo inteiro, embora isso implique que se possa
identificar um conjunto de bytes como strings, enquanto os mesmos não o são. O programa
Strings procura por uma sequencia de três ou mais sequências de caracteres ASCII e Unicode,
seguido por uma sequência de caractere de terminação.
Assim, às vezes as strings detectadas não são strings de verdade. Por exemplo, caso a
sequência de bytes 0x56, 0x50, 0x33, 0x00, fosse encontrada, ela seria interpretada como
“VP3”, mas esses bytes podem não realmente representar essa sequência, pois eles podem ser
um endereço de memória, instruções da CPU, ou dados utilizados pelo programa. Assim, o
programa Strings deixa por conta do usuário, a tarefa de filtrar strings inválidas. Felizmente, a
maioria das strings inválidas são óbvias, porque eles não representam um texto com sentido.
2.2.4.4 Malwares empacotados e ofuscados
Os criadores de malware utilizam frequentemente empacotamento ou ofuscação para
tornarem seus arquivos mais difícil de se detectar ou analisar. Programas ofuscados são
aqueles que o autor do malware tentou esconder a execução. Programas empacotados são um
subconjunto de programas ofuscados, em que o programa malicioso é comprimido e não pode
ser analisado. Ambas as técnicas limitam as tentativas de analisar estaticamente o malware.
Programas legítimos incluem quase sempre muitas strings, porém um malware que é
empacotado ou ofuscado contém muito poucas strings. Ao varrer um arquivo executável por
strings, e o mesmo retornar poucas strings, provavelmente ou o arquivo está ofuscado ou
empacotado, sugerindo que pode ser nocivo. Assim é provável que se precise utilizar outras
técnicas além da análise estática.
Uma maneira de detectar arquivos compactados é com o programa PeiD, versão 0.95,
que apesar de não está mais sendo atualizado desde abril de 2011, ainda é uma excelente
4 http://technet.microsoft.com/en-us/sysinternals/bb897439
14
ferramenta para detectar o tipo de empacotador ou compilador empregado na construção de
uma aplicação, o que torna muito mais fácil a análise do arquivo compactado. É possível fazer
o download5, já que a página oficial do programa6 está descontinuada.
2.2.4.5 Formato de arquivo PE (Portable Executable)
Até agora, discutiram-se ferramentas que fazem a varredura em executáveis sem levar
em conta o seu formato. No entanto, o formato de um arquivo pode revelar muito sobre a
funcionalidade do programa. O formato de arquivo executável portátil (PE) é usado por
executáveis do Windows, código objeto e DLLs. O formato do arquivo PE é uma estrutura de
dados que contém as informações necessárias para carregador do sistema operacional
Windows gerenciar o código executável que está embrulhado. Quase todos os arquivos com
código executável que são carregados pelo Windows estão no formato de arquivo PE, apesar
de alguns arquivos em formatos legados aparecerem em raras ocasiões. Arquivos PE
começam com um cabeçalho que inclui informações sobre o código, o tipo de aplicação,
funções de biblioteca necessárias e requisitos de espaço. As informações no cabeçalho do PE
são de grande valor para o analista de malware.
2.2.4.6 Bibliotecas de Ligação e Funções
Uma das peças mais úteis de informações que se pode reunir sobre um executável é a
lista de funções que o mesmo importa. As importações são funções usadas por um programa
que estão armazenados em um outro programa diferente, como o código de bibliotecas que
contêm funcionalidades comum a muitos programas. Bibliotecas de código podem ser ligadas
ao executável principal pela ligação.
Programadores importam bibliotecas para não precisar reimplementar determinada
funcionalidade em vários programas. Bibliotecas de código podem ser ligadas estaticamente
(static linking), em tempo de execução (run-time linking), ou dinamicamente (dynamic
linking). Saber como o código da biblioteca está ligado ao programa principal é fundamental
para a análise de malware, porque a informação que se pode encontrar no cabeçalho do
arquivo PE depende de como o código da biblioteca foi ligado.
Ligação estática é o método menos utilizado para ligação de bibliotecas, embora seja
comum em programas de UNIX e Linux. Quando uma biblioteca é estaticamente ligada a um
executável, todo o código a partir dessa biblioteca é copiado para o arquivo executável, que
faz o executável aumentar em tamanho. Ao analisar código, é difícil diferenciar entre o código
estaticamente ligado e próprio código do executável, pois nada no cabeçalho do arquivo PE
indica que o arquivo contém o código ligado.
Embora não seja popular em programas amigáveis, ligação em tempo de execução é
comumente usado em malware, especialmente quando o mesmo é embalado ou ofuscado.
Executáveis que usam este tipo de ligação, conectam-se a bibliotecas apenas quando alguma
funcionalidade contida nela é necessário, não no início do programa, mas em tempo de
execução do programa.
5 http://www.softpedia.com/get/Programming/Packers-Crypters-Protectors/PEiD-updated.shtml
6 http://www.peid.info/
15
Várias funções do Microsoft Windows permitem aos programadores importar funções
de ligação, que não listadas no cabeçalho do arquivo de um programa, sendo as duas mais
comumente utilizadas LoadLibrary e GetProcAddress, variantes como LdrGetProcAddress e
LdrLoadDll também são utilizadas. Estas funções permitem o programa principal acessar
qualquer função contida em uma biblioteca do sistema, o que significa que, quando são
usadas, não se pode dizer estaticamente quais as funções estão sendo ligadas ao programa
suspeito.
De todos os métodos de ligação, ligação dinâmica é o mais comum e o mais
interessante para os analistas de malware. Quando as bibliotecas são ligadas dinamicamente, o
sistema operacional procura pelas bibliotecas necessárias quando o programa é carregado.
Quando o programa chama a função da biblioteca ligada, esta função é executada de dentro da
biblioteca.
O cabeçalho do arquivo PE armazena informações sobre cada biblioteca, que será
carregada, e cada função que será utilizada pelo programa. As bibliotecas utilizadas e as
funções chamadas são muitas vezes as partes mais importantes de um programa, e identificálos é particularmente importante, pois permite-nos dizer o que um programa faz. Por exemplo,
se um programa importa a função URLDownloadToFile, pode-se imaginar que ele se conecta
à Internet para baixar alguns conteúdos e que, em seguida, armazena em um arquivo local.
O programa DependencyWalker7, distribuído em algumas versões do Microsoft Visual
Studio e outros pactes de desenvolvimento da Microsoft, lista apenas funções ligadas
dinamicamente em um arquivo executável.
O cabeçalho do arquivo PE também inclui informações sobre as funções específicas
utilizadas por um executável (funções importadas). Os nomes dessas funções do Windows
podem dar uma boa ideia sobre o que o executável faz. A Microsoft fez um excelente trabalho
de documentação da API do Windows através da biblioteca do Microsoft Developer Network
(MSDN8).
Como as importações, DLLs e EXEs exportam funções para interagir com outros
programas e códigos. Tipicamente, uma DLL implementa uma ou mais funções e as exporta
para que um executável possa importá-las e usá-las. O arquivo PE contém informações sobre
que funções um arquivo exporta. Funções exportadas são mais comumente encontradas em
DLLs, pois elas são especificamente implementadas para fornecer funcionalidades utilizada
por EXEs. E EXEs não são projetados para fornecer a funcionalidade para outros EXEs,
assim funções exportadas são raramente encontradas. Assim, caso se venha a descobrir
funções exportadas em um executável, com certeza elas fornecerão informações úteis.
Em muitos casos, os autores de software nomeiam suas funções exportadas de uma
maneira que fornecem informações úteis. Uma convenção comum é utilizar o nome usado na
documentação da Microsoft. Por exemplo, para executar um programa como um serviço,
deve-se primeiro definir uma função ServiceMain. A presença de uma função exportada
chamada ServiceMain diz que o malware executado como parte de um serviço. Infelizmente,
enquanto a documentação Microsoft chama esta função ServiceMain, e é comum para os
programadores a fazer o mesmo, a função pode ter qualquer nome. Portanto, os nomes das
7 http://www.dependencywalker.com
8 http://msdn.microsoft.com/pt-br
16
funções exportadas são realmente de uso limitado contra malwares sofisticados. Se o malware
utiliza as exportações, o programador irá muitas vezes ou omitir totalmente os nomes ou usar
nomes obscuros ou enganosos. As informações de exportação podem ser visualizadas
utilizando o programa Dependency Walker.
2.2.4.7 O cabeçalho e as seções de um arquivo PE
Cabeçalhos de arquivo PE podem fornecer muito mais informações do que as
importações apenas. O formato do arquivo PE contém um cabeçalho seguido por uma série de
secções. O cabeçalho contém metadados sobre o arquivo em si. Depois do cabeçalho vem as
secções do arquivo, cada uma contendo informações úteis. A seguir, tem-se as seções mais
comuns e interessantes em um arquivo PE:
a) .text: contém as instruções que a CPU executa. Todas as outras secções armazenam
dados e informações de apoio. Geralmente, esta é a única parte que pode ser
executada, e deve ser a única secção que inclui código.
b) .rdata: normalmente contém as informações de importação e exportação, que é a
mesma informação disponibilizada tanto pelo Dependency Walker quanto pelo
PEview. Esta seção também pode armazenar outros dados somente de leitura
utilizados pelo programa. Às vezes, o arquivo conterá seções “.idata” e “.edata”, que
armazenam as informações de importação e exportação, respectivamente.
c) .data: contém dados globais do programa, que são acessíveis a partir de qualquer lugar
no programa. Dados locais não são armazenados nesta seção, ou em qualquer outro
lugar no arquivo PE.
d) .rsrc: inclui os recursos utilizados pelo executável que não são considerados parte do
executável, tal como ícones de imagens, menus e strings. Strings podem ser
armazenadas na seção ou no programa principal, mas elas são frequentemente
armazenados nesta seção, para suporte a múltiplos idiomas.
Nomes de seção são muitas vezes consistentes em um compilador, mas podem variar
entre compiladores diferentes. Por exemplo, o Microsoft Visual Studio usa a seção “.text” para
código executável, mas o Borland Delphi usa CODE. O Windows não se preocupa com o
nome real, uma vez que utiliza outras informações no cabeçalho do PE para determinar como
uma seção é usada. Além disso, os nomes das secções são frequentemente ofuscados para
tornar a análise mais difícil. Felizmente, nomes padrão são usados na maioria das vezes.
Pode-se usar a ferramenta PEview para visualizar as informações contidas no
cabeçalhos dor arquivos PE. Pode-se também usar a ferramenta livre ResourceHacker9 para
navegar na secção .rsrc. Ao se clicar nos itens do Resource Hacker, pode-se visualizar as
strings, ícones e menus, que são apresentados de forma idêntica as utilizadas no programa.
Muitas outras ferramentas estão disponíveis para consultar um cabeçalho PE. Duas
ferramentas úteis são PEBrowse Profissional e PE Explorer. PEBrowseProfessional10 é
semelhante ao PEview. Ele permite olhar para os bytes de cada seção e mostra os dados
analisados. O PEBrowse Professional faz o melhor trabalho de apresentar a informação dos
9 http://www.angusj.com
10 http://www.smidgeonsoft.prohosting.com/pebrowsepro-file-viewer.html
17
recursos (seção “.rsrc”).
O PE Explorer11 tem uma rica interface gráfica que permite navegar através das várias
partes do arquivo PE e editar algumas partes do arquivo. Ele possui um editor de recurso que
é ótimo para navegação e edição dos recursos do programa analisado. A principal
desvantagem desta ferramenta é que ela não é livre.
2.2.5 Análise de malware em máquinas virtuais
Antes de executar um malware para fazer a análise dinâmica, deve-se criar um
ambiente seguro. Um malware novo pode ser cheio de surpresas, e se executá-lo em uma
máquina de produção, ele pode espalhar-se rapidamente para outras máquinas na rede e
removê-lo pode ser muito difícil. Um ambiente seguro lhe permitirá investigar o malware,
sem expor sua máquina ou outras máquinas na mesma rede a um risco inesperado e
desnecessário.
Pode-se usar as máquinas físicas dedicadas ou máquinas virtuais para estudar um
malware de forma segura. Malwares podem ser analisados usando máquinas físicas
individuais em redes isoladas, com máquinas que estão desconectados da Internet ou de
quaisquer outras redes para evitar que o malware se espalhe, permitindo assim que se execute
o malware em um ambiente real, sem colocar outros computadores em risco. Uma
desvantagem desse cenário de teste, no entanto, é a falta de uma conexão à internet, pois
muitos malwares dependem de uma conexão à internet para atualizações, comandos e outras
características.
Outra desvantagem para análise de malware em uma máquina física, comparado ao
uso de uma máquina virtual, é a dificuldade de remoção do mesmo. Para evitar problemas,
normalmente utiliza-se uma ferramenta para gerenciar imagens de backup do sistema
operacional, como por exemplo o Norton Ghost, que podem ser restauradas após a análise ter
sido completada.
A principal vantagem de usar máquinas físicas para a análise de malware, é que o
malware pode ser executado de forma diferente em máquinas virtuais, pois o malware pode
ter a capacidade de detectar que está sendo executado em uma máquina virtual e se comportar
de forma diferente, frustrando assim a análise.
Por causa dos riscos e desvantagens que vêm com o uso de máquinas físicas para
analisar malware, as máquinas virtuais são mais comumente empregadas para fazer a análise
dinâmica.
2.2.5.1 Conectando o malware à internet
Para fornecer um ambiente de análise mais realista, às vezes é necessário conectar à
internet a máquina em que está sendo feita a análise, apesar dos riscos. O maior risco, é claro,
é que o computador poderá executar atividades maliciosas, como espalhar o malware para
outras máquinas da rede, se tornar um nó de um ataque distribuído de negação de serviço, ou
simplesmente enviar spam. Assim nunca se deve conectar o malware à Internet sem antes
realizar algumas análises para determinar o que o malware pode fazer quando está conectado.
11 http://www.heaventools.com
18
A maneira mais comum de conectar uma máquina virtual à Internet é com uma placa
de rede em modo bridge, o qual permite que a máquina virtual possa se conectar à mesma
interface de rede que o equipamento físico. Outra maneira é usar Network Address
Translation (NAT).
2.2.5.2 Snapshot
Snapshot é um conceito único para máquinas virtuais, que permitem salvar o estado
atual do computador e voltar para esse ponto mais tarde, semelhante a um ponto de
restauração do Windows.
Depois de instalar o sistema operacional e as ferramentas de análise de malware, e
configurar a rede, tire um snapshot da máquina para utiliza como snapshot base. Após
executar o malware, completar a análise e salvar os dados, reverta para o snapshot base, de
modo que se possa fazer tudo mais uma vez. Mesmo estando no meio de análise, a maioria
das máquinas virtuais permitem retornar a um snapshot feito a qualquer momento, não
importando quantos snapshots foram feitos posteriormente.
2.2.6 Análise dinâmica básica
A análise dinâmica é qualquer análise realizada após a execução de um malware.
Técnicas de análise dinâmica são o segundo passo no processo de análise de software
malicioso. A análise dinâmica é normalmente realizado após a análise estática básica, quanto
esta chegou a um beco sem saída, seja devido à ofuscação, empacotamento, ou o analista
esgotou as técnicas de análise estática disponíveis. Pode envolver monitoramento de malware
durante a sua execução ou simplesmente um exame do sistema após a execução do malware.
Ao contrário de uma análise estática, a análise dinâmica permite observar verdadeira
funcionalidade do malware, pois a existência de uma sequência de códigos binários não
significa que as ações oriundas dali, realmente serão executadas. A análise dinâmica também é
uma maneira eficiente para identificar a funcionalidade do malware. Por exemplo, se o
malware em análise é um key-logger, a análise dinâmica pode permitir localizar no sistema o
arquivo de log do key-logger, descobrir os tipos de registros que ele mantém, decifrar para
onde ele envia as informações coletadas, e assim por diante. Esse tipo de visão seria mais
difícil de obter utilizando apenas técnicas de análise estática básica.
Embora as técnicas de análise dinâmica sejam extremamente poderosas, elas devem
ser utilizadas somente após a conclusão da análise estática básica, porque a análise dinâmica
pode colocar a sua rede e sistema em risco. Técnicas de análise dinâmica também têm suas
limitações, porque nem todos os caminhos de código podem ser executados quando um trecho
do malware é executado. Por exemplo, no caso da um malware de linha de comando, que
necessita de argumentos, cada argumento, pode executar uma funcionalidade diferente do
programa, e sem saber as opções, não é possível analisar de forma dinâmica todas as
funcionalidades do programa. A melhor aposta neste caso, será a utilização de técnicas
avançadas estáticas ou dinâmicas, para descobrir como forçar o malware a executar toda a sua
funcionalidade.
19
As seguintes técnicas e ferramentas, envolvendo análise dinâmica, são úteis para se
extrair informação dos executáveis e serão discutidas nesta seção:
a) Sandbox;
b) Process Monitor;
c) Process Explorer;
d) Regshot;
e) Wireshark.
2.2.6.1 Sandbox
Vários produtos de software tudo em um podem ser usados para se fazer a análise
dinâmica básica, e os mais populares utilizam a tecnologia conhecida como sandbox. Uma
sandbox (caixa de areia), é uma mecanismo de segurança para a execução de programas nãoconfiáveis em um ambiente seguro, sem medo de prejudicar os sistemas "reais". Caixas de
areia compõem ambientes virtualizados que geralmente simulam os serviços de rede de certa
forma a assegurar que o software ou malware sendo testado funcionará normalmente.
Muitas sandbox para análise de malware como Norman SandBox, GFI Sandbox,
Anubis, Joe Sandbox, ThreatExpert, BitBlaze e Comodo Intsant Malware Analysis, analisarão
gratuitamente o malware. Atualmente, Norman SandBox e GFI Sandbox (anteriormente
CWSandbox) são os mais populares entre os profissionais da área de segurança da
informação, conforme SIKORSKI et al. (2012).
Estas sandboxes fornecem saída de fácil entendimento e são ótimas para se fazer uma
triagem inicial, desde que se esteja disposto a enviar o malware em análise aos websites das
sandboxes. Mesmo nas sandboxes automatizadas, pode-se escolher não submeter o malware
em análise para um site público, já que o malware pode conter informações sobre a empresa.
Uma sandbox não pode dizer exatamente o que o malware faz, mas ela pode lhe
informar sua funcionalidade básica. Por exemplo, ela não pode lhe dizer que um determinado
malware é um Gerente de Contas de Segurança (Security Accounts Manager – SAM)
personalizado que faz um dump do hash, ou que tem um backdoor para um key-logger
criptografado. Estas são conclusões que o analista deve chegar por conta própria, a partir das
informações fornecidas pela sandbox.
2.2.6.2 Process Monitor
Process Monitor, ou procmon, é uma ferramenta de monitoramento avançado para
Windows, que fornece uma maneira de monitorar determinado registro, sistema de arquivos
de rede, processo, e atividade de thread. Combina e aumenta a funcionalidade dos duas
ferramentas legadas: Filemon e RegMon. Embora procmon capture uma grande quantidade de
dados, ele não captura tudo. Por exemplo, ele pode perder a atividade de um controlador de
dispositivo componente do modo usuário conversando com um rootkit via um dispositivo de
controle de entrada/saída, bem como certas chamadas de interfaces (GUI), tais como
SetWindowsHookEx. Embora o procmon possa ser uma ferramenta útil, normalmente não
deve ser utilizado para registrar a atividade de rede, porque não trabalhar de forma consistente
em todas as versões do Microsoft Windows.
20
Procmon monitora todos as chamadas de sistema que pode reunir assim que ele é
executado. Em uma máquina executando o sistema operacional Windows ocorrem muitas
chamadas de sistema (às vezes mais de 50.000 eventos por minuto), sendo impossível
monitorar todas elas. Como o procmon usa a memória RAM para registrar eventos até que
seja dito para parar a captura, ele pode travar uma máquina virtual consumindo toda a
memória disponível. Para evitar isso, execute o procmon por períodos limitados de tempo.
Esta ferramenta pode ser baixada como parte da Suíte de ferramentas Sysinternals12.
2.2.6.3 Process Explorer
O Process Explorer, uma ferramenta gratuita da Microsoft extremamente poderosa que
para se fazer uma análise dinâmica. Ela pode fornecer informações valiosas sobre os
processos em execução de um sistema. Pode-se usar o Process Explorer para listar os
processos ativos, DLLs carregadas por um processo, várias propriedades do processo, e as
informações do sistema. Pode-se também usá-lo para matar um processo, fazer log-off
usuários, e lançar e validar processos.
Esta ferramenta pode ser baixada como parte da Suíte de ferramentas Sysinternals13.
2.2.6.4 Regshot
Regshot é uma ferramenta de código aberto para se fazer análise dinâmica, que
permite comparar dois snapshots da registry do Windows. Para usar o Regshot na análise do
malware, basta tirar o primeiro snapshot, em seguida, executar o malware e esperar que ele
termine de fazer qualquer alterações no sistema. Em seguida, tire o segundo snapshot, para
finalmente comparar os dois snapshots tirados. Esta ferramenta pode ser baixada
gratuitamente14.
2.2.6.5 Wireshark
Wireshark é um sniffer de código aberto, uma ferramenta de captura de pacotes muito
útil na análise dinâmica. Pode-se usá-la para capturar o tráfego de rede gerado pelo malware e
analisar diferentes protocolos.
O Wireshark intercepta e registra o tráfego de rede, fornecendo visualização, análise
de fluxo de pacotes, e análise em profundidade de pacotes individuais. É uma ferramenta que
pode ser usada tanto para o bem quanto para o mal. Pode ser utilizada para analisar as redes
internas e a utilização da rede, depurar problemas de aplicações e protocolos de estudo em
ação. Mas também pode ser usada para capturar senhas, protocolos de rede via engenharia
reversa, roubar informações sensíveis, e até espionar conversas on-line em uma lanhouse.
Wireshark pode ajudar você a entender como o malware está realizando comunicação
de rede, através dos pacotes que o malware utiliza para se comunicar. Para usar o Wireshark
com este propósito, conecte-se à Internet ou simule uma conexão à Internet (utilizando
12 http://technet.microsoft.com/en-us/sysinternals/bb896645
13 http://technet.microsoft.com/en-us/sysinternals/bb896653
14 http://sourceforge.net/projects/regshot
21
INetSim por exemplo) e em seguida inicie a captura de pacotes com o Wireshark e execute o
malware. Esta ferramenta pode ser baixada gratuitamente15.
2.3 METODOLOGIA
Este trabalho tem como natureza a pesquisa aplicada. A abordagem do problema foi
através da pesquisa qualitativa, descritiva e subjetiva, aplicada em laboratório, num ambiente
controlado, onde foram realizados testes para verificar as técnicas e ferramentas de análise de
malware em ambiente Windows.
Quanto aos objetivos, a pesquisa será exploratória. Segundo Gil (2010), as pesquisas
exploratórias envolvem levantamento bibliográfico e documental.
Quanto aos procedimentos Técnicos, será uma pesquisa Bibliográfica e Documental,
que tem como finalidade colocar o investigador em contato com o que já se produziu a
respeito do tema (Gonsalves, 2005). Para isto, foram utilizados livros, artigos, publicações,
revistas e sites sobre assuntos relevantes para conseguir alcançar os objetivos do trabalho.
2.3.1 Procedimentos técnicos
Para verificar as técnicas e ferramentas de análise de malware em ambiente Windows,
utilizou-se malwares que foram recebidos por e-mail, conforme pode ser visualizado nas
Figuras 3, 4 e 5.
O malware#1, se passa por um boleto bancário para quitação de débitos, e ao se clicar
no link disponibilizado, é feito o download do arquivo “Anexo_Cliente039921.zip”.
O malware#2 se passa por fotos relativas um serviço e ao se clicar nos links
disponibilizados, é feito o download dois arquivos, “FotosFinais1605.zip” e
“Anexo_Cliente28-05-2013.zip”.
O malware#3, se passa por um boleto relativo a uma kit, e ao se clicar no link
disponibilizado, é feito o download do arquivo “Anexo_Boleto.Cliente.zip”.
Figura 3 – Malware#1, boleto bancário.
15 http://www.wireshark.org
Figura 4 – Malware#2, fotos.
22
Figura 5 – Malware#3, boleto.
Uma vez feito o download dos arquivos, para se comprovar que os mesmos eram
realmente arquivos “.zip”, verificou-se num editor hexadecimal se o cabeçalho dos arquivos
começavam com os bytes “504B0304”, conforme Garry Kessler (2013). Comprovados que
eram arquivos compactados, extraiu-se o seu conteúdo para dar inicio a análise.
Antes de se dar inicio a análise, estabeleceu-se um ambiente de laboratório controlado,
optando-se pelo uso de uma máquina virtual, no caso a Oracle Virtual Box (VirtualBox,
2013), escolhida por ser uma máquina virtual de fácil utilização e gratuita, instalando-se o
sistema operacional Windows XP SP3. Na Figura 6 pode ser visualizado, a esquerda, a tela
inicial do VirtualBox, e a direita, a tela do sistema operacional.
Figura 6 – Ambiente controlado do laboratório: VirtualBox com Windows XP SP3.
2.3.2 Análise estática
Ao se extrair o conteúdo do malware#1, arquivo “Anexo_Cliente039921.zip”, obtevese o arquivo “Boleto Devio.exe”. Este arquivo foi submetido ao site VirusTotal para averiguar
a maliciosidade do arquivo. A análise feita pelo site, pode ser visualizada na Figura 7.
23
Ao se extrair o conteúdo do malware#2, arquivos “FotosFinais1605.zip” e
“Anexo_Cliente28-05-2013.zip”, obtiveram-se os arquivos “Fotos Finais 17-05-2013.exe” e
“Fotos Finais 28-05-2013.cpl”, respectivamente. Estes arquivos foram submetidos ao site
VirusTotal para averiguar a maliciosidade dos mesmos. A análise feita pelo site, pode ser
visualizada nas Figura 8 e 9.
Ao se extrair o conteúdo do malware#3, arquivo “Anexo_Boleto.Cliente.zip”, obtevese o arquivo “Documento Boleto 09433.cpl”. Este arquivo foi submetido ao site VirusTotal
para averiguar a maliciosidade do arquivo. A análise feita pelo site, pode ser visualizada na
Figura 10.
Todas as amostras de malwares, submetidas ao VirusTotal em 23/11/2013, foram
reconhecidas como códigos maliciosos. O malware#1 já havia sido submetido para análise
pelo VirusTotal em 29/05/2013 13:13:08, com uma taxa de detecção de 66% (31 de 47
antivírus). O malware#2 já havia sido submetido para análise pelo VirusTotal em 17/05/2013
12:38:40, com uma taxa de detecção de 23% (11 de 47 antivírus). O malware#3 já havia sido
submetido para análise pelo VirusTotal em 27/09/2013 11:56:19, com uma taxa de detecção
de 75% (36 de 48 antivírus).
Além da taxa de detecção, a análise feita pelo VirusTotal, fornece também informações
detalhadas, como:
a) Hashing dos arquivos, identificando o malware;
b) Informações das strings de arquivos, funções e cabeçalhos;
c) Cabeçalho e as seções do arquivo PE;
d) Se o malware é empacotado ou não, através da entropia das seções;
e) Bibliotecas de ligação e funções.
Figura 7 – Análise do Malware#1, “Boleto Devio.exe” submetido ao site VirusTotal.
24
Figura 8 – Análise do Malware#2, “Fotos Finais 17-05-2013.exe” submetido ao site VirusTotal.
Figura 9 – Análise do Malware#2, “Fotos Finais 28-05-2013.cpl” submetido ao site VirusTotal.
25
Figura 10 – Análise do Malware#3, “Documento Boleto 09433.cpl” submetido ao site VirusTotal.
Mas mesmo com as informações da análise feita pelo VirusTotal, para fim de verificálas, submeteu-se os malwares em análise aos programas PEiD e DependencyWalker.
As análises feita pelo PEiD podem ser visualizadas nas Figuras 11, 12 e 13, para os
malwares #1, #2 e #3, respectivamente.
Figura 11 – Malware#1, “Boleto Devio.exe” submetido ao PEiD.
Figura 12 – Malware#2, “Fotos Finais 17-05-2013.exe” submetido ao PEiD.
26
Figura 13 – Malware#3, “Documento Boleto 09433.cpl” submetido ao PEiD.
Pela análise do PEiD, identificou-se que o malware#1 e o malware#2, provavelmente
foram desenvolvidos no Microsoft Visual Basic 5/6. Para o malware#3 não foi possível
identificar o compilador utilizado.
Pela análise de entropia do PEiD, o malware#1 provavelmente está empacotado, o
malware#2 não está empacotado e o malware#3 talvez esteja empacotado. A informação de
entropia fornecida corrobora com a informação de entropia fornecida pelo VirusTotal.
As análises feita pelo DependencyWalker podem ser visualizadas nas Figuras 14, 15 e
16, para os malwares #1, #2 e #3, respectivamente.
Figura 14 – Malware#1, “Boleto Devio.exe” submetido ao DependencyWalker.
Figura 15 – Malware#2, “Fotos Finais 17-05-2013.exe” submetido ao DependencyWalker.
27
Figura 16 – Malware#3, “Documento Boleto 09433.cpl” submetido ao DependencyWalker.
Pela análise do DependencyWalker, verificou-se que o malware#1 e o malware#2
dependem da biblioteca “MSVBVM60.dll”, corroborando que com a informação do PEiD de
que o compilador utilizado foi o Microsoft Visual Basic 5/6. O malware#3 possui
dependência de várias DLL's do Windows.
2.3.3 Análise dinâmica
Ao se executar o malware#1, arquivo “Boleto Devio.exe”, uma tela informando um
erro foi mostrada, conforme pode ser visualizada na Figura 17.
Figura 17 – Malware#1, “Boleto Devio.exe”, tela de execução.
Provavelmente essa mensagem de erro foi proposital para iludir o usuário de que nada
foi feito, porém, várias modificações feitas na registry do Windows foram detectadas pela
ferramenta RegShot, conforme Figura 18 e um tráfego de rede foi capturado pelo Wireshark,
conforme pode ser visualizado na Figura 19.
Figura 18 – Malware#1, “Boleto Devio.exe”, relatório do RegShot.
Created with Regshot 1.9.0 x86 ANSI
Comments:
Datetime: 2013/11/23 12:57:25 , 2013/11/23 12:58:46
Computer: TASVORG-3A47763 , TASVORG-3A47763
Username: Administrador , Administrador
Keys added: 18
Values added: 55
Values modified: 26
Total changes: 99
28
Figura 19 – Malware#1, “Boleto Devio.exe”, captura do tráfego de rede com o Wireshark.
Ao se executar o malware#2, arquivo “Fotos Finais 17-05-2013.exe”, foi mostrada a
mesma tela de erro obtida na execução do malware#1, conforme a Figura 17. Da mesma
forma que na execução do malware#1, várias modificações feitas na registry do Windows
foram detectadas pela ferramenta RegShot, conforme a Figura 20. Um tráfego de rede foi
capturado pelo Wireshark, conforme pode ser visualizado na Figura 21.
Figura 20 – Malware#2, “Fotos Finais 17-05-2013.exe”, relatório do RegShot.
Created with Regshot 1.9.0 x86 ANSI
Comments:
Datetime: 2013/11/23 19:07:06 , 2013/11/23 19:09:31
Computer: TASVORG-3A47763 , TASVORG-3A47763
Username: Administrador , Administrador
Keys added: 11
Values deleted: 62
Values added: 10
Values modified: 12
Total changes: 95
29
Figura 21 – Malware#2, “Fotos Finais 17-05-2013.exe”, captura do tráfego de rede com o Wireshark.
Ao se executar o malware#3, arquivo “Documento Boleto 09433.cpl”, não foi exibida
tela alguma e o arquivo sumiu da pasta em que estava. Várias modificações feitas na registry
do Windows foram detectadas pela ferramenta RegShot, conforme a Figura 22, e um tráfego
de rede foi capturado pelo Wireshark, conforme pode ser visualizado na Figura 23.
Figura 22 – Malware#3, “Documento Boleto 09433.cpl”, relatório do RegShot.
Created with Regshot 1.9.0 x86 ANSI
Comments:
Datetime: 2013/11/23 20:19:22 , 2013/11/23 20:20:57
Computer: TASVORG-3A47763 , TASVORG-3A47763
Username: Administrador , Administrador
Values deleted: 11
Values added: 17
Values modified: 10
Total changes: 38
Figura 23 – Malware#3, “Documento Boleto 09433.cpl”, captura do tráfego de rede com o Wireshark.
Da análise dinâmica realizada, constatou-se com o RegShot verificou-se que os
malwares em análise efetuaram alterações na registry do Windows. Com o Wireshark pode-se
constatar a tentativas de comunicação dos malwares com sites externos.
30
2.4 RESULTADOS E CONSIDERAÇÕES FINAIS
Na Figura 19, o pacote número 22 pode-se ver que o malware#1 tenta fazer uma
conexão com o endereço IP 187.73.33.46, enviando dados de um formulário em PHP
(/mirela/recept.php) via método POST. Rasteando-se o IP em questão pelo whois.registro.br
verificou-se que o mesmo está em nome da empresa “Digirati Informática, serviços e
telecomunicações” com o contato Andre Nathan, e-mail [email protected].
Provavelmente uma empresa que oferece serviços de hospedagem de sites, que foi usada por
quem realmente queria se beneficiar com o uso malware.
Na Figura 21, pode-se ver que o malware#2 tenta fazer uma conexão com o endereço
IP 187.73.33.46, no mesmo endereço que o malware#1 tentou se conectar. Corroborando para
o fato de que ambos vieram do mesmo e-mail remetente, conforme pode ser visualizado na
Figura 3, 4 e 5.
Na Figura 23, pela captura do tráfego de rede, do malware#3, não foi constatado nada
significativo.
Da analise básica feita, estática e dinâmica, não se pode concluir nada significativo
sobre as atividades dos malwares em análise, exceto pelo servidor onde os malwares #1 e #2
tentaram se conectar.
Para fim de ser verificar se a tela da Figura 17, foi proposital, ou foi um erro mesmo
causado, por exemplo, por alguma incompatibilidade com a versão do sistema operacional em
que foi executado, sugere-se fazer uma análise dinâmica avançada, utilizando um depurador.
Mas por falta de tempo esta atividade ficará como sugestão nos trabalhos futuros.
3
CONCLUSÃO
Quando realizar a análise de malware, é importante ter em mente os três os seguintes
passos:
a) Não se prenda a detalhes. A maioria dos programas de malware são grandes e
complexos, e não se pode entender cada detalhe, assim foque nas principais
características. Quando se deparar com seções difíceis e complexas, tente obter uma
visão geral antes de ficar preso nos detalhes.
b) Lembre-se que diferentes ferramentas e abordagens estão disponíveis para trabalhos
distintos. Não há uma abordagem pré-determinada, pois cada situação é diferente, e
várias ferramentas e técnicas possuem funcionalidades semelhantes. Caso não tenha
sorte com uma ferramenta, tente outra. Se sua análise não progredir, não gaste muito
tempo em uma seção, avance para outra. Tente analisar o malware a partir de um
ângulo diferente, ou apenas tente uma abordagem diferente.
c) Tenha em mente que a análise de malware é como um jogo de gato e rato. Como
novas técnicas de análise de malware são desenvolvidas, os autores de malware
respondem com novas técnicas para frustrar tais análises. Para ter sucesso como
analista de malware, deve-se ser capaz de reconhecer, entender e derrotar essas
técnicas, e responder a mudanças na arte de análise de malware.
31
3.1 TRABALHOS FUTUROS
Como possíveis trabalhos para dar continuidade a esta pesquisa, apontar-se: dar
continuidade na análise feita, utilizando técnicas avançadas de análise estática e dinâmica.
Abaixo segue uma breve descrição de assuntos que poderiam ser abordados.
Como discutido anteriormente, métodos básicos de análise estática e dinâmica são
bons para uma triagem inicial, mas podem não fornecer informações suficientes para analisar
completamente o malware.
Fazendo uma analogia, técnicas de análise básica estática, seriam como olhar para o
lado de fora de um corpo durante uma autópsia. Pode-se usar esta análise para tirar algumas
conclusões preliminares, porém é necessária uma análise mais aprofundada para obter todas
as informações da funcionalidade do malware em análise. Por exemplo, pode-se achar que
uma determinada função é importada, mas não se sabe como ou se ela é usada.
Técnicas de análise dinâmica também têm suas desvantagens. Por exemplo, este tipo
de técnica pode informar como o malware responde ao receber um pacote especialmente
projetado, mas para aprender o formato do pacote, só em uma análise mais aprofundada. É aí
que entra a desmontagem (disassembly), que é uma técnica avançada de análise estática que
exige habilidades altamente especializadas, que podem ser assustadoras para aqueles que são
novos em programação.
O Interactive Disassembler Professional (IDA Pro) é um desmontador extremamente
poderoso distribuído pela Hex-Rays (Hex-Rays 2013). Embora o IDA Pro não seja o único
desmontador, disponível no mercado, é o desmontador de escolha para muitos analistas de
malware, engenharia reversa e analistas de vulnerabilidade. Duas versões do IDA Pro estão
disponíveis no mercado. Embora ambas as versões suportem executáveis x86, a versão
avançada suporta muitos mais processadores do que a versão padrão, principalmente x64. O
IDA Pro também suporta vários formatos de arquivos, como Portable Executable (PE),
Common Object File Format (COFF), Executable and Linking Format (ELF), e “a.out”.
Um depurador (debugger) é um pedaço de software ou hardware utilizado para testar
ou examinar a execução de um outro programa. Depuradores podem ajudar no processo de
desenvolvimento de software, uma vez que os programas costumam ter erros quando
executados na primeira tentativa. À medida em que se desenvolve, pode-se fornecer a entrada
ao programa e ver o resultado, mas sem um depurador, não se pode visualizar como o
programa produz a saída.
Depuradores podem dar uma visão do que um programa está fazendo, em tempo de
execução. São projetados para permitir que os desenvolvedores possam medir e controlar o
estado interno da execução de um programa. Podem fornecer informações sobre um
programa, que seria difícil, se não impossível, de se obter com um desmontador.
Os desmontadores podem oferecer um instantâneo do programa imediatamente antes
da execução do primeiro ciclo de instruções, porém os depuradores podem fornecer uma visão
dinâmica de um programa como ele é executado. Por exemplo, depuradores podem mostrar os
valores de endereços de memória, como eles mudam durante a execução de um programa.
A capacidade de medir e controlar a execução de um programa pode fornecer uma
visão crítica durante a análise de malware. Depuradores podem permitir que se veja o valor de
cada local de memória, registradores e argumentos passados para cada função. Permitem
32
também alterar qualquer desses valores em tempo de execução do programa. Por exemplo,
pode-se alterar o valor de uma única variável em qualquer ponto e tempo, sendo necessário
apenas saber a localização dessa variável. Dois exemplos de depuradores são o OllyDbg e
WinDbg.
O OllyDbg (OllyDbg 2013), um depurador x86 desenvolvido pela Oleh Yuschuk,
fornece a capacidade para analisar malwares em tempo de execução. É frequentemente
utilizado por analistas de malware e engenharia reversa, pois é uma ferramenta livre e de fácil
manuseio, possuindo muitos plug-ins que estendem as suas funcionalidades. O WinDbg
(WinDbg 2013) é uma ferramenta livre da Microsoft. Embora não seja tão popular como
OllyDbg para análise de malware, tem muitas vantagens, a mais significativa é o kernel
debugging.
Assim uma análise avançada estática e dinâmica, utilizando desmontadores e
depuradores é uma interessante proposta de continuidade do trabalho realizado neste artigo.
33
MALWARE ANALYSIS IN WINDOWS ENVIRONMENT
THIAGO ARREGUY SILVA VITORINO
Abstract:
Malicious programs are specifically designed to perform harmful actions and malicious
activities on a computer. The term malware, acronym to malicious software, is a software
designed to infiltrate a computer system alien unlawfully with intent to cause damage to or
theft of information, confidential or not. Anti-virus and antispyware programs are the most
common tools for prevention, but these utilities apply to malicious programs whose signatures
are already known and cataloged in a database. To create the malware signatures and catalog
them requires a detailed analysis of your code, known as reverse engineering. Within this
context, the approach of this work was done through a qualitative, descriptive and subjective
research, applied research laboratory in a controlled environment where tests were performed
to verify the technical and malware analysis tools in Windows environment in three samples
of malware. The results obtained by means of static and dynamic analysis, both basic, suggest
that advanced analysis is made.
Keywords: Malware, Malware analysis, Reverse engineering, Windows.
34
REFERÊNCIAS
AFONSO, V.M.; FILHO, D.S.F.; GREGIO, A.R.A.; DE GEUS, P.L.; JINO, M. A hybrid
framework to analyze web and OS malware. Communications (ICC), IEEE International
Conference, 2012, p. 966-970.
BARUQUE, A. O. C.; GRÉGIO, A. R. A.; DE GEUS, P. L.; Análise Visual de
Comportamento de Código Malicioso. XI Simpósio Brasileiro em Segurança da Informação e
de Sistemas Computacionais (SBSeg), 2011, p. 300-309.
CERON, J. M.; GRANVILLE, L.; TAROUCO, L. M. R.; Taxonomia de Malwares: Uma
Avaliação dos Malwares Automaticamente Propagados na Rede. IX Simpósio Brasileiro em
Segurança da Informação e de Sistemas Computacionais (SBSeg), 2009. p. 43-56
_________________________________________________ Uma arquitetura baseada em
assinaturas para mitigação de botnets. XI Simpósio Brasileiro em Segurança da Informação e
de Sistemas Computacionais (SBSeg), 2011. p. 105-118.
CERT.br. Centro de Estudos, Resposta e Tratamento de Incidentes de Segurança no Brasil.
Cartilha de Segurança para Internet. Disponível em: <http://cartilha.cert.br/malware/>.
Acessado em: 29 out. 2013.
________ Centro de Estudos, Resposta e Tratamento de Incidentes de Segurança no Brasil.
Estatísticas.
Disponível
em:
<http://www.cert.br/stats/incidentes/2013-jan-mar/tiposataque.html>. Acessado em: 05 nov. 2013.
DE MELO, L. P. et al. Análise de Malware: Investigação de Códigos Maliciosos Através de
uma Abordagem Prática. XI Simpósio Brasileiro em Segurança da Informação e de Sistemas
Computacionais (SBSeg), 2011, p. 9-52.
EILAM, E. Reversing – Secrets of Reversing Engineering. Wiley Publishing, Inc.,
Indianapolis, Indiana, 2005.
FINJAN RESEARCH CENTER. Cybercrime Intelligence: Cybercriminals use Trojans &
Money Nules to Rob Online Banking Accounts. 2009. Number 3 in 1, pages 1–9.
FERNANDES FILHO, D. S. et al. Técnicas para Análise Dinâmica de Malware. XI Simpósio
Brasileiro em Segurança da Informação e de Sistemas Computacionais (SBSeg), 2011.
____________________________ Análise Comportamental de Código Malicioso Através da
Monitoração de Chamadas de Sistema e Tráfego de Rede. Instituto De Computação. 2010, p.
33.
GARY
KESSLER.
File
Signatures
Table.
Disponível
<http://www.garykessler.net/library/file_sigs.html>. Acessado em: 14 maio 2013.
em:
35
GIL, A. C.; Como Elaborar Projetos de Pesquisa. 5. ed. São Paulo: Atlas, 2010.
GONSALVES, Elisa Pereira. Iniciação à Pesquisa Científica. 4. ed. Campinas, Sp: Alínea,
2005.
GRÉGIO, A. R. A.; SANTOS, R. D. C.; Visualization techniques for malware behavior
analysis. In: SPIE Defense, Security, and Sensing. International Society for Optics and
Photonics, 2011, p. 801905-801909.
HAMLEN, K.W.; Stealthy software: Next-generation cyber-attacks and defenses. Intelligence
and Security Informatics (ISI), IEEE International Conference, 2013, p. 109-112.
HEX-RAYa. IDA: About. Disponível em: <https://hex-rays.com/products/ida/index.shtml>.
Acessado em: 20 nov 2013.
JIANMING, F.; XINWEN, L.; BINLING, C.; Malware Behavior Capturing Based on Taint
Propagation and Stack Backtracing. Trust, Security and Privacy in Computing and
Communications (TrustCom), IEEE 10th International Conference, 2011, p. 328-335.
LYDA, R.; HAMROCK, J.; Using entropy analysis to find encrypted and packed malware.
Security & Privacy, IEEE, 2007, p. 40-45.
MARTINS, Victor F. et al. xFile: Uma Ferramenta Modular para Identificação de Packers em
Executáveis do Microsoft Windows. X Simpósio Brasileiro em Segurança da Informação e de
Sistemas Computacionais, 2010. p. 31-40.
MOSER, A.; KRUEGEL, C.; KIRDA, E.; Limits of static analysis for malware detection.
Computer Security Applications Conference, IEEE, 2007. p. 421-430.
NIST. National Institute of Standards and Technology – Downloads. Disponível em:
<http://www.nsrl.nist.gov/Downloads.htm>. Acessado em: 14 nov 2013.
OLLYDBG. OllyDbg Downloads. Disponível em: <http://www.ollydbg.de/download.htm>.
Acessado em: 20 nov 2013.
PARK, D.; RUIZ, R.; MONTES, A.; Ferramenta para Reconhecimento de Executáveis
Empacotados. International Conference On Forensic Computer Science (ICoFOCS), 2011, p.
173-181.
SIKORSKI, Michael; HONIG, Andrew; LAWLER, Stephen. Practical Malware Analysis: The
Hands-On Guide to Dissecting Malicious Software, 2012.
VIRTUALBOX. Oracle Virtual Box. Disponível em: <https://www.virtualbox.org/>.
Acessado em: 05 mar. 2013.
VIRUSTOTAL. Estatísticas dos arquivos submetidos durante os últimos 7 dias. Disponível
em: <https://www.virustotal.com/pt-br/statistics/>. Acessado em: 29 out. 2013.
WICHMANN, A.; GERHARDS-PADILLA, E.; Using Infection Markers as a Vaccine against
Malware Attacks. Green Computing and Communications (GreenCom), IEEE International
Conference, 2012, p. 737-742.
WINDBG. Using Microsoft Windows Debugger (WinDbg). Disponível
<http://kipirvine.com/asm/4th/debug/windbg/>. Acessado em: 20 nov. 2013.
em:
YIN, H. et al. Panorama: capturing system-wide information flow for malware detection and
analysis. Proceedings of the 14th ACM conference on Computer and communications
security, 2007, p. 116-127.
YING, C; JIACHE, L.; QIGUAN, M.; WEISHENG, L.; Osiris: A Malware Behavior
Capturing System Implemented at Virtual Machine Monitor Layer. Computational
Intelligence and Security (CIS), Eighth International Conference, 2012, p. 534-538.
YONGTAO, H.; LIANG, C.; MING, X.; NING, Z.; YANHUA, G.; Unknown Malicious
Executables Detection Based on Run-Time Behavior. Fuzzy Systems and Knowledge
Discovery, Fifth International Conference, 2008, p. 391-395.
ZABIDI, M.N.A.; MAAROF, M.A.; ZAINAL, A.; Ensemble based categorization and
adaptive model for malware detection. Information Assurance and Security (IAS), 7th
International Conference, 2011, p. 80 – 85.
Download

Thiago Arreguy Silva Vitorino - Universidade Católica de Brasília