Análise de Malwares com Software Livre Por Luiz Vieira [email protected] Objetivos ● Entender como funcionam malwares ● Conhecer as ferramentas utilizadas em análise de malware ● Entender como realizar a análise de um malware Introdução Malwares, palavra proveniente do termo “malicious software”, são softwares que destinam-se a se infiltrar ilicitamente no sistema de um computador e danificar ou roubar informações confidenciais ou não. Como o objetivo de uma investigação forense é, muitas vezes, descobrir como e com qual motivação um sistema foi comprometido, é mais do que normal que o sistema que estamos investigando, tenha sido comprometido por um artefato malicioso que tenha permitido o acesso de um invasor, ou objetivamente possibilitado o vazamento de informações. Esse capítulo, tem como objetivo explicar um pouco mais sobre esses artefatos e os conceitos de análise dos mesmo, para que saibamos identificálos e entender como funcionam. Tipos de Malware Quando utilizamos o termo malware, não estamos definindo exatamente a espécie de artefato malicioso ao qual estamos nos referenciando, muito menos as suas funções. Por isso, quando utilizamos esse termo, estamos apenas citando uma categoria de programas de computadores, que podem ser de vários tipos diferentes. Malware, portanto, é apenas uma categoria de programa, e justamente por isso, dentro dessa categoria de programas, temos vários tipos ou espécies diferentes desse tipo de artefato. Sendo as mais conhecidas: ● Vírus ● Trojans ● Rootkits ● Worms Vírus Um vírus de computador é um programa malicioso desenvolvido por programadores que, tal como um vírus biológico, infecta o sistema, faz cópias de si mesmo e tenta se espalhar para outros computadores, utilizando-se de diversos meios. A maioria das contaminações ocorre pela ação do usuário, executando o arquivo infectado recebido como um anexo de um e-mail. A contaminação também pode ocorrer por meio de arquivos infectados em pendrives ou CDs. A segunda causa de contaminação é por Sistema Operacional desatualizado, sem correções de segurança, que poderiam corrigir vulnerabilidades conhecidas dos sistemas operacionais ou aplicativos, que poderiam causar o recebimento e execução do vírus inadvertidamente. Ainda existem alguns tipos de vírus que permanecem ocultos em determinadas horas, entrando em execução em horas especificas. Trojan Certos vírus trazem em seu bojo um código a parte, que permite a um estranho acessar o micro infectado ou coletar dados e enviá-los pela Internet para um desconhecido, sem notificar o usuário. Estes códigos são denominados de Trojans ou cavalos de Tróia. Inicialmente, os cavalos de Tróia permitiam que o micro infectado pudesse receber comandos externos, sem o conhecimento do usuário. Desta forma o invasor poderia ler, copiar, apagar e alterar dados do sistema. Atualmente os cavalos de Tróia agora procuram roubar dados confidenciais do usuário, como senhas bancárias. Os vírus eram no passado, os maiores responsáveis pela instalação dos cavalos de Tróia, como parte de sua ação, pois eles não têm a capacidade de se replicar. Atualmente, os cavalos de Tróia não mais chegam exclusivamente transportados por vírus, agora são instalados quando o usuário baixa um arquivo da internet e o executa. Prática eficaz devido a enorme quantidade de e-mails fraudulentos que chegam nas caixas postais dos usuários. Tais e-mails contém um endereço na Web para a vítima baixar o cavalo de Tróia, ao invés do arquivo que a mensagem diz ser. Esta prática se denomina phishing, expressão derivada do verbo to fish, "pescar" em inglês. Atualmente, a maioria dos cavalos de Tróia visam a sites bancários, "pescando" a senha digitada pelos usuários dos micros infectados. Há também cavalos de Tróia que ao serem baixados da internet "guardados" em falsos programas ou em anexos de e-mail, criptografam os dados e os comprimem no formato ZIP. Um arquivo .txt dá as "regras do jogo": os dados foram "seqüestrados" e só serão "libertados" mediante pagamento em dinheiro para uma determinada conta bancária, quando será fornecido o código restaurador. Também os cavalos de tróia podem ser usados para levar o usuário para sites falsos, onde sem seu conhecimento, serão baixados trojans para fins criminosos, como aconteceu com os links do google, pois uma falha de segurança poderia levar um usuário para uma página falsa. Por este motivo o serviço esteve fora do ar por algumas horas para corrigir esse bug, pois caso contrário as pessoas que não distinguissem o site original do falsificado seriam afetadas. Outra conseqüência é o computador tornar-se um zumbi e, sem que o usuário perceba, executar ações como enviar Spam, se auto-enviar para infectar outros computadores e fazer ataques a servidores (normalmente um DDoS, um acrônimo em inglês para Distributed Denial of Service – em português, ataque distribuído de negação de serviço). Ainda que apenas um micro de uma rede esteja infectado, este pode consumir quase toda a banda de conexão com a internet realizando essas ações mesmo que o computador esteja sem utilização, apenas ligado. O objetivo, muitas vezes é criar uma grande rede de computadores zumbis que, juntos, possam realizar um grande ataque a algum servidor que o autor do vírus deseja "derrubar" ou causar grande lentidão. Rootkits Rootkits são um tipo de Malware surgido nos últimos anos. A principal intenção dele é se camuflar, impedindo que seu código seja encontrado por qualquer antivírus. Isto é possível por que estas aplicações têm a capacidade de interceptar as solicitações feitas ao sistema operacional, podendo alterar o seu resultado. Por exemplo, quando o Windows faz um pedido para a leitura ou abertura de um arquivo (seja a mando do antivírus ou pelo próprio usuário), o rootkit intercepta os dados que são requisitados (intercepção via API) e faz uma filtragem dessa informação, deixando passar apenas o código não infectado. Desta forma, o antivírus ou qualquer outra ferramenta ficam impossibilitados de encontrar o arquivo malicioso. Um rootkit é um programa com código mal intencionado que busca se esconder de softwares de segurança e do usuário utilizando diversas técnicas avançadas de programação. Rootkits escondem a sua presença no sistema, escondendo suas chaves no registro (para que o usuário não possa vê-las) e escondendo os seus processos no Gerenciador de Tarefas, além de retornar sempre erros de “arquivo inexistente” ao tentar acessar os arquivos relacionados. Rootkits também utilizam-se, muitas das vezes, de drivers, isto é, arquivos de sistema para o funcionamento de hardware, para se esconderem de antivírus, que ao lidarem com essas situações, irão "pensar" que o rootkit é um serviço legítimo do sistema operacional. Diversos tipos de código mal intencionado utilizam essas tecnologias com o objetivo de dificultar sua remoção e o fazem com sucesso: os rootkits mais avançados são bem difíceis de serem removidos. Poucos antivírus hoje conseguem identificar e eliminar essas pragas. Os rootkits para Linux/Unix geralmente substituem os programas mais comuns, como os programas que listam arquivos, de modo que o administrador do sistema, ao listar os arquivos, não veja a presença dos arquivos do trojan. No Windows, eles ‘infectam’ os processos na memória, de modo que toda vez que um processo requisite alguma informação sobre os arquivos desse código mal-intencionado, esta informação seja anulada antes de ser retornada ao programa, o que fará com que os softwares acreditem que estes arquivos não estejam lá. Worms Como o interesse de fazer um vírus é ele se espalhar da forma mais abrangente possível, os seus criadores por vezes, deixaram de lado o desejo de danificar o sistema dos usuários infectados e passaram a programar seus vírus de forma que apenas se repliquem, sem o objetivo de causar graves danos ao sistema. Desta forma, os seus autores visam a tornar suas criações mais conhecidas na Internet. Este tipo de vírus passou a ser chamada de verme ou worm. Eles estão mais aperfeiçoados, já há uma versão que ao atacar a máquina hospedeira, não só se replica, mas também se propaga pela internet, pelos e-mail que estão registrados no cliente de e-mail, infectando as máquinas que abrirem aquele e-mail, reiniciando o ciclo. Descoberta e coleta de malware Quando é descoberto o malware em um sistema, há muitas decisões e ações que devem ser tomadas, muitas vezes sob pressão. Para melhor estruturarmos um processo de investigação, incluindo a análise de malwares, podemos dividi-lo em cinco fases: ● Fase 1: Preservação e análise de dados voláteis ● Fase 2: Análise de memória ● Fase 3: Análise de discos ● Fase 4: Análise estática de malware ● Fase 5: Análise dinâmica de malware Dentro de cada uma dessas fases, as metodologias formalizadas e as metas são para ajudar os investigadores a reconstruir uma imagem vívida dos acontecimentos em torno de uma infecção por malware e obter uma compreensão detalhada do próprio malware. Os investigadores devem sempre usar o pensamento crítico em suas observações e entrevistar os proprietários dos sistemas comprometidos, pois isso muitas vezes ajuda a desenvolver um quadro mais completo do que ocorreu. Além disso, medidas adicionais podem ser exigidos em alguns casos, dependendo do contexto e das fontes de dados disponíveis. Quando o backup do sistema comprometido estiver disponível, pode ser proveitoso compará-lo com o estado atual do sistema, além de poder ajudar na recuperação do sistema. Algumas organizações recolhem informações que podem ser úteis à investigação, incluindo logs centralizados de antivírus, relatórios de verificação de integridade do sistema de ferramentas como OSSEC, e logs da rede. Coleta de malware sem alterações no sistema O ato de coletar dados em um sistema “vivo” causa mudanças que um investigador digital terá de explicar no que diz respeito ao seu impacto sobre as provas digitais. Por exemplo, executar ferramentas como o Helix a partir de uma mídia removível irá alterar dados voláteis, quando for carregado na memória principal, e normalmente irá criar ou modificar arquivos e entradas no registro do sistema probatório. Da mesma forma, usar ferramentas forenses remotas necessariamente estabelece uma conexão de rede, executa instruções na memória, e causa outras alterações no sistema probatório. Os puristas argumentam que aquisições forense não devem alterar a fonte de evidências de maneira alguma. Definindo um padrão absoluto que dita "preservar tudo, mas nada alterar" não é apenas incoerente com outras disciplinas forenses, mas perigoso em um contexto legal. Na verdade, os tribunais estão começando a forçar a preservação de dados voláteis de computadores em alguns casos, exigindo que os investigadores preservem os dados de sistemas vivos. Na Côrte americana, no caso Indus Columbia Pictures. vs. Bunnell, por exemplo, o tribunal considerou que a memória RAM em um servidor Web pode conter dados de log relevantes e, portanto, dentro do âmbito da informação detectável no caso. Uma das chaves para a solidez de uma análise forense é a documentação. Um caso sólido é construído sobre a documentação de apoio que reporta onde se encontram os elementos de prova e como foram tratados. Do ponto de vista legal, o processo de aquisição deve alterar as provas originais o mínimo possível, e quaisquer mudanças devem ser documentadas e avaliadas no contexto dos resultados finais de análise. Montagem de lab. para análise Em muitos casos, uma amostra pode ditar os parâmetros do ambiente do laboratório de malware, particularmente se o código exige diversos servidores para funcionar plenamente, ou pior, emprega código antivirtualização para bloquear os esforços do investigador em observar o código em uma máquina virtual. Usar virtualização é particularmente útil, principalmente durante a análise comportamental de uma amostra de códigos maliciosos, posto que a análise muitas vezes exige freqüentes paradas e recomeços do programa malicioso em um esforço de observar as nuances do comportamento do mesmo. Ao analisar um exemplar suspeito, podemos utilizar hosts no Virtual Box para criar a emulação de um sistema "infectado", um "servidor" e um "cliente" para fornecer todos os serviços de servidores e cliente necessários pelo malware, um sistema de "monitoramento" e de detecção de intrusão, para monitorar o tráfego da rede e do sistema vítima. Idealmente, seremos capazes de controlar o sistema infectado localmente para reduzir a nossa necessidade de controlar múltiplos sistemas durante uma sessão de análise, mas amostras de malware na maioria das vezes são "consciente de segurança" e usam técnicas anti-forense, tais como a varredura dos nomes dos processos para identificar e finalizar as ferramentas de segurança conhecidas, como sniffers de rede, firewalls, software anti-vírus e outros aplicativos. Antes de iniciarmos nossa análise da amostra de código malicioso, precisamos ter um "snapshot" do sistema que será usado como "vítima" na qual a amostra de código malicioso será executada. Da mesma forma, precisamos implementar uma ferramenta que nos permite comparar o estado do sistema após o código ser executado com o snapshot original do sistema. Análise de arquivos suspeitos Ao analisar um programa suspeito, há uma série de perguntas que o pesquisador deve considerar: ● Qual é a natureza e a finalidade do programa? ● Como funciona o programa para cumprir a sua finalidade? ● Como funciona o programa ao interagir com o sistema vítima? ● Como o programa interage com a rede? ● O que o programa sugere sobre o nível de sofisticação do atacante? ● Há um vetor de ataque identificável que o programa usa para infectar um hospedeiro? ● Qual é a extensão da infecção ou comprometimento do sistema ou rede? Em muitos casos, é difícil responder a todas estas perguntas, posto que peças-chave para o enigma, como arquivos ou recursos adicionais de rede utiliados pelo programa não estão mais disponíveis para o investigador. Entretanto, a metodologia, muitas vezes prepara o caminho para uma melhor compreensão global sobre o programa suspeito. Ao trabalhar com este material, lembre-se que a "engenharia reversa" caem dentro das prescrições de determinadas leis internacionais, federais, estaduais ou locais. Da mesma forma, lembre-se também, que alguns dos instrumentos mencionados podem ser considerados "ferramentas hacker" em algumas jurisdições e estão sujeitas a regulamentações jurídicas semelhantes ou restrição de uso. Diretrizes de exame de um programa malicioso A metodologia utilizada neste capítulo é uma diretriz geral para fornecer um sentido mais claro das ferramentas e técnicas que podem ser usadas para examinar um binário malicioso no ambiente Linux. No entanto, com o número aparentemente interminável de amostras de códigos maliciosos sendo gerados por atacantes - muitas vezes com diferentes funções e finalidades - flexibilidade e adaptação da metodologia para atender as necessidades de cada caso, certamente será necessário. Alguns dos preceitos básicos que vamos explorar incluem: ● Estabelecer a linha de base do ambiente ● Preparação pré-execução: monitoramento do sistema e da rede ● Execução do binário suspeito ● Observação do processo: monitoramento de bibliotecas e system calls ● Avaliação do processo: análise dos processos em execução ● Análise das portas abertas e conexões de rede ● Análise de arquivos abertos e sockets ● Exploração do diretório / proc ● Quebra de ofuscação: remoção da proteção do malware ● Ajustes de ambiente ● Ganhando controle do malware ● Interagindo e manipulando o malware ● Explorando e verificando as funcionalidades do malware ● Reconstrução de eventos: capturar tráfego de rede, integridade de arquivos e logs de IDS ● Varredura de portas/vulnerabilidades do host comprometido ● Verificação de rootkits Estudo de caso que será apresentado na prática: análise forense de malwares, do tipo banking A empresa X entrou em contato com você para realizar um trabalho de perícia forense em um incidente que ocorreu recentemente. Um dos empregados recebeu um e-mail de um companheiro de trabalho que possuía um link para um arquivo .pdf. Ao abrir o arquivo, o funcionário não percebeu nada de estranho. Entretanto, recentemente ele percebeu atividades não-usuais em sua conta bancária. A empresa X conseguiu obter uma imagem da memória da máquina virtual do funcionário que está com suspeita de comprometimento. E a empresa deseja que você analize a memória e reporte qualquer atividade suspeita encontrada. As questões abaixo devem seguir como base para nortear o processo de investigação: 1. Liste os processos que estavam em execução na máquina da vítima. Qual o processo mais provável de ser responsável pela exploração inicial? 2. Liste os sockets que estavam abertos na máquina da vítima durante a infecção. Existem processos suspeitos com sockets abertos? 3. Liste todas as URLs suspeitas que possam estar na memória do processo. 4. Há quaisquer outros processos que contêm URLs que podem apontar para problemas bancários? Em caso afirmativo, quais são esses processos e quais são as URLs? 5. Estavam lá todos os arquivos que puderam ser extraídas do processo inicial? Como esses arquivos foram extraídos? 6. Se houver algum arquivo extraído do processo inicial, quais as técnicas que usou para realizar a exploração? 7. Liste os arquivos suspeitos que foram carregados por todos os processos na máquina da vítima.