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.