UNIVERSIDADE DE BRASÍLIA FACULDADE DE TECNOLOGIA DEPARTAMENTO DE ENGENHARIA ELÉTRICA FORENSE DE MEMÓRIA: EXTRAÇÃO E ANÁLISE DE DADOS ARMAZENADOS EM MEMÓRIA VOLÁTIL ANA PAULA TEIXEIRA ROSA ORIENTADOR: LAERTE PEOTTA DE MELO MONOGRAFIA DE ESPECIALIZAÇÃO EM ENGENHARIA ELÉTRICA BRASÍLIA / DF: JUNHO/2011 ii UNIVERSIDADE DE BRASÍLIA FACULDADE DE TECNOLOGIA DEPARTAMENTO DE ENGENHARIA ELÉTRICA FORENSE DE MEMÓRIA: EXTRAÇÃO E ANÁLISE DE DADOS ARMAZENADOS EM MEMÓRIA VOLÁTIL ANA PAULA TEIXEIRA ROSA MONOGRAFIA DE ESPECIALIZAÇÃO SUBMETIDA AO DEPARTAMENTO DE ENGENHARIA ELÉTRICA DA FACULDADE DE TECNOLOGIA DA UNIVERSIDADE DE BRASÍLIA, COMO PARTE DOS REQUISITOS NECESSÁRIOS PARA A OBTENÇÃO DO GRAU DE ESPECIALISTA. APROVADA POR: LAERTE PEOTTA DE MELO, MSc, UnB (ORIENTADOR) EDNA DIAS CANEDO, MSc, UnB (EXAMINADOR INTERNO) DINO MACEDO AMARAL, MSc, UnB (EXAMINADOR EXTERNO) DATA: BRASÍLIA/DF, 07 DE JUNHO DE 2011. iii iv FICHA CATALOGRÁFICA ROSA, ANA PAULA TEIXEIRA Forense de Memória: Extração e Análise de Dados Armazenados em Memória Volátil [Distrito Federal] 2011. 99p., 297 mm (ENE/FT/UnB, Especialista, Engenharia Elétrica, 2011). Monografia de Especialização – Universidade de Brasília, Faculdade de Tecnologia. Departamento de Engenharia Elétrica. 1. Segurança da Informação 2. Forense Computacional 3. Forense de Memória I. ENE/FT/UnB. II. Forense de Memória: Extração e Análise de Dados Armazenados em Memória Volátil REFERÊNCIA BIBLIOGRÁFICA ROSA, ANA PAULA TEIXEIRA (2011). Forense de Memória: Extração e Análise de Dados Armazenados em Memória Volátil. Monografia de Especialização, Publicação Junho/2011, Departamento de Engenharia Elétrica, Universidade de Brasília, Brasília, DF, 99p. CESSÃO DE DIREITOS NOME DO AUTOR: Ana Paula Teixeira Rosa TÍTULO DA MONOGRAFIA: Forense de Memória: Extração e Análise de Dados Armazenados em Memória Volátil. GRAU/ANO: Especialista/2011. É concedida à Universidade de Brasília permissão para reproduzir cópias desta Monografia de Especialização e para emprestar ou vender tais cópias somente para propósitos acadêmicos e científicos. Do mesmo modo, a Universidade de Brasília tem permissão para divulgar este documento em biblioteca virtual, em formato que permita o acesso via redes de comunicação e a reprodução de cópias, desde que protegida a integridade do conteúdo dessas cópias e proibido o acesso a partes isoladas desse conteúdo. O autor reserva outros direitos de publicação e nenhuma parte deste documento pode ser reproduzida sem a autorização por escrito do autor. Ana Paula Teixeira Rosa QSA 18 Casa 05 CEP 72015180 – Brasília – DF - Brasil v vi Dedico a realização desse trabalho aos meus pais, que sempre incentivaram meu desenvolvimento e a busca pelo conhecimento, dedicando esforços para me oferecer uma boa educação e possibilitar a realização dos meus sonhos. vii viii AGRADECIMENTOS Primeiramente a Deus, pela oportunidade da vida, com suas inúmeras alegrias e possibilidades de aprendizado. Aos meus pais, Paulo e Sandra, e ao meu irmão, Matheus, pelo apoio e amor incondicional. Ao meu orientador Prof. Msc. Laerte Peotta de Melo, pela colaboração, apoio e incentivo no desenvolvimento deste trabalho. A todos os colegas e amigos, meus sinceros agradecimentos. ix x RESUMO Tradicionalmente, a perícia forense computacional trabalha com a coleta e análise de dados estáticos, armazenados em discos rígidos, buscando adquirir evidências relacionadas à ocorrência de atividades maliciosas em sistemas computacionais após a sua ocorrência. Com a evolução dos recursos tecnológicos e a popularização do uso da Internet, tem se tornado inviável manter apenas a abordagem tradicional, devido ao grande volume de informações a serem analisadas e ao crescimento do número de casos de crimes cibernéticos. Nesse contexto, a análise de dados armazenados em memória volátil surge como nova abordagem, ao permitir a recuperação de dados importantes à perícia forense computacional. Este estudo visa apresentar tal abordagem, incluindo o tipo de informações que podem ser recuperadas, assim como técnicas e procedimentos para extração e análise desses dados em sistemas operacionais Windows, fazendo considerações sobre as vantagens e desvantagens verificadas. Palavras-chave: segurança da informação, forense computacional, forense de memória xi xii ABSTRACT Computer forensics traditionally works with the collection and analysis of static data stored on hard drives, seeking to acquire evidence related to the occurrence of malicious activity on the computer systems after their occurrence. With the evolution of technological resources and the popularization of Internet use it has become impracticable to keep only the traditional approach due to the large volume of information to be analyzed and the growing number of cases of cybercrimes. In this context, analysis of data stored in volatile memory comes as a new approach, to allow recovery of important data for forensic computing. This study aims to present such an approach, including the type of information that can be recovered as well as techniques and procedures for extraction and analysis of these data in Windows operating systems, with a consideration of the advantages and disadvantages identified. Keywords: information security, computer forensics, memory forensics xiii xiv SUMÁRIO 1. INTRODUÇÃO .................................................................................................................... 1 1.1. OBJETIVOS ................................................................................................................. 3 1.2. ORGANIZAÇÃO........................................................................................................... 4 2. REVISÃO BIBLIOGRÁFICA ............................................................................................ 5 2.1. EVIDÊNCIAS DIGITAIS ............................................................................................... 9 2.2. DESAFIOS DA FORENSE COMPUTACIONAL ............................................................. 11 2.3. PROCEDIMENTOS ..................................................................................................... 13 2.3.1. Identificando as Evidências............................................................................. 15 2.3.2. Preservando as Evidências .............................................................................. 17 2.3.3. Analisando as Evidências ................................................................................ 18 2.3.4. Apresentação dos Resultados.......................................................................... 20 3. PERÍCIA FORENSE COMPUTACIONAL: ANALISANDO A MEMÓRIA VOLÁTIL ............................................................................................................................... 21 3.1. A MEMÓRIA VOLÁTIL ............................................................................................. 22 3.2. DADOS ENCONTRADOS NA MEMÓRIA VOLÁTIL ..................................................... 24 3.2.1. Processos ........................................................................................................... 24 3.2.2. Arquivos abertos e Conteúdo do Registro do Windows (Registry) ............. 24 3.2.3. Informações de rede......................................................................................... 25 3.2.4. Senhas e Chaves Criptográficas ..................................................................... 25 xv 3.2.5. Conteúdo decifrado ......................................................................................... 26 3.2.6. Dados Ocultos................................................................................................... 26 3.2.7. Códigos Maliciosos........................................................................................... 26 3.3. TÉCNICAS PARA ANÁLISE FORENSE DA MEMÓRIA ................................................ 27 3.3.1. Recuperação de Arquivos Mapeados em Memória ...................................... 27 3.3.2. Recuperação de Arquivos Através de Assinatura ........................................ 29 3.3.3. Detecção e Recuperação de Dados Escondidos ............................................. 30 3.4. EXTRAÇÃO DE DADOS DA MEMÓRIA VOLÁTIL ...................................................... 31 3.4.1. Hardware .......................................................................................................... 31 3.4.2. Crash Dumps .................................................................................................... 32 3.4.3. Dumps ............................................................................................................... 33 3.4.4. Virtualização .................................................................................................... 34 3.4.5. Hibernação ....................................................................................................... 34 3.5. FERRAMENTAS PARA AQUISIÇÃO DE CONTEÚDO DA MEMÓRIA RAM ................. 35 3.5.1. DD...................................................................................................................... 35 3.5.2. Mandiant Memoryze ....................................................................................... 35 3.5.3. ManTech Memory DD..................................................................................... 36 3.5.4. FastDump ......................................................................................................... 36 3.5.5. KntDD ............................................................................................................... 36 3.5.6. MoonSols Windows Memory Toolkit ............................................................ 37 xvi 3.5.7. Nigilant32.......................................................................................................... 37 3.5.8. FTK Imager ...................................................................................................... 37 3.5.9. Winen.exe.......................................................................................................... 38 3.6. FERRAMENTAS PARA ANÁLISE FORENSE DA MEMÓRIA ........................................ 38 3.6.1. Ferramentas básicas ........................................................................................ 40 3.6.2. Volatility Framework ...................................................................................... 40 3.6.3. Mandiant Memoryze ....................................................................................... 45 3.6.4. Windows Memory Forensic Toolkit............................................................... 48 4. ESTUDO DE CASO ........................................................................................................... 51 4.1. CENÁRIO .................................................................................................................. 51 4.2. REALIZAÇÃO DOS TESTES ....................................................................................... 52 5. CONCLUSÕES .................................................................................................................. 59 6. BIBLIOGRAFIA ................................................................................................................ 63 7. ANEXO I ............................................................................................................................. 67 8. ANEXO II ........................................................................................................................... 72 xvii xviii ÍNDICE DE TABELAS TABELA 3.1 – O CICLO DE VIDA ESPERADO DOS DADOS. ............................................................ 10 xix xx ÍNDICE DE FIGURAS FIGURA 2.1 – DINÂMICA DE UM INCIDENTE DE SEGURANÇA DIGITAL .......................................... 7 FIGURA 2.2 – PROCEDIMENTOS DA PERÍCIA FORENSE COMPUTACIONAL.................................... 14 FIGURA 2.3 – FLUXOGRAMA DA FASE DE ANÁLISE DAS EVIDÊNCIAS ......................................... 19 FIGURA 3.1 - REPRESENTAÇÃO VISUAL DA ÁRVORE DE DESCRITORES: VAD TREE. .................... 29 FIGURA 3.2 – TELA DO VISUALIZADOR AUDIT VIEWER – ABA FILES: ANÁLISE FORENSE DA MEMÓRIA EFETUADA COM O SOFTWARE MEMORYZE. ......................................................... 47 FIGURA 3.3– TELA DO VISUALIZADOR AUDIT VIEWER – ABA REGISTRY KEYS: ANÁLISE FORENSE DA MEMÓRIA EFETUADA COM O SOFTWARE MEMORYZE. .................................................... 48 FIGURA 4.1 – DOWNLOAD DO BANKER ....................................................................................... 52 FIGURA 4.2 – MENSAGEM DE ERRO AO EXECUTAR O BANKER .................................................... 53 xxi xxii ÍNDICE DE QUADROS QUADRO 3.1 - USO DO COMANDO VOLATILITY ............................................................................ 42 QUADRO 3.2 – USO DO COMANDO IDENT DA FERRAMENTA VOLATILITY ..................................... 42 QUADRO 3.3 - UTILIZANDO A OPÇÃO HELP DA FERRAMENTA VOLATILITY .................................. 42 QUADRO 3.4– USO DO COMANDO PSLIST DA FERRAMENTA VOLATILITY ..................................... 43 QUADRO 3.5 – USO DO COMANDO FILES DA FERRAMENTA VOLATILITY ...................................... 43 QUADRO 3.6 – USO DO COMANDO DLLLIST DA FERRAMENTA VOLATILITY .................................. 44 QUADRO 3.7 – USO DO COMANDO REGOBJKEYS DA FERRAMENTA VOLATILITY .......................... 44 QUADRO 3.8 – USO DO COMANDO PROCDUMP DA FERRAMENTA VOLATILITY ............................. 44 QUADRO 4.1 – AQUISIÇÃO DO DUMP DE MEMÓRIA UTILIZANDO A FERRAMENTA WIN32DD....... 54 QUADRO 4.2 – PROCESSOS CRIADOS PELO BANKER .................................................................... 54 QUADRO 4.3 – ARQUIVOS CRIADOS/ACESSADOS PELO PROCESSO “AVGUIX.EXE” ....................... 55 QUADRO 4.4 – BIBLIOTECAS UTILIZADAS/CARREGADAS PELO PROCESSO “AVGUIX.EXE” ........... 56 QUADRO 4.5 – CHAVES DE REGISTRO EM USO PELO PROCESSO “AVGUIX.EXE” ........................... 56 QUADRO 4.6 – EXTRAÇÃO DO CÓDIGO EXECUTÁVEL DO PROCESSO “AVGUIX.EXE” .................... 56 xxiii xxiv TABELA DE SIGLAS AES – Advanced Encryption Standard API – Application programming interface ASCII – American Standard Code for Information Interchange BIOS – Basic Input-Output System CPU – Central Processing Unit DKOM – Direct Kernel Object Manipulation DLL – Dynamic-link Library DMA – Direct Memory Access GPL – General Public License IBGE – Instituto Brasileiro de Geografia e Estatística IDS – Intrusion Detection System IP – Internet Protocol MD5 – Message-Digest Algorithm 5 PC – Personal Computer PCI – Peripheral Component Interconnect PDA – Personal Digital Assistant PEB – Process Environment Block RAM – Random-Access Memory RFC – Request for Comments URL – Uniform Resource Locator XML – Extensible Markup Language xxv xxvi 1. INTRODUÇÃO Com a popularização da Internet e crescente uso de dispositivos eletrônicos pessoais, tem se tornado cada dia mais comum o consumo de produtos e serviços através do meio virtual. Atividades que antes só poderiam ser realizadas presencialmente, agora são freqüentemente concretizadas através da Internet, por meio digital, como o comércio eletrônico, o ensino a distância e até mesmo a realização de operações financeiras e bancárias por meio do Internet Banking. No entanto, ao mesmo tempo em que oferece facilidades e conveniências, a crescente utilização destas tecnologias também trouxe um novo palco para a ocorrência de atividades ilícitas, praticadas através de meios digitais. De acordo com os dados divulgados pelo IBGE em setembro de 2010, por meio da PNAD 2009 - Pesquisa Nacional por Amostra de Domicílios, do ano de 2005 ao ano de 2009, o número de domicílios com acesso à Internet aumentou em 71%, comprovando que o número de brasileiros com acesso à Internet cresceu significativamente no país. Paralelamente, cresceu também no Brasil a quantidade de crimes praticados através de meios digitais. Conforme divulgado no relatório Global Fraud Report (KROLL, 2010) pela Kroll, empresa de consultoria norte americana especializada em gestão de riscos, o roubo de informações eletrônicas e fraudes no país possui números alarmantes, mais expressivos que a média da pesquisa para todas as outras regiões do globo. Ainda de acordo com a pesquisa, pela primeira vez, o roubo de informações e dados eletrônicos teve incidência maior que o roubo físico nas empresas brasileiras. E segundo relatório publicado pela Symantec, fabricante de softwares de segurança, 76% dos brasileiros usuários de Internet já foram vítimas do cibercrime, um número acima da média global, que é de 65%. Desse modo, além dos benefícios e comodidade oferecidos à sociedade com a Internet, vieram também os inconvenientes, resultantes de atividades ilícitas cometidas através dos meios eletrônicos por pessoas mal intencionadas, ou seja, os crimes cibernéticos. Contando com a impunidade, com a ilusão do anonimato, e aproveitando-se das brechas abertas pelos usuários leigos e descuidados, que não se preocupam com a segurança de seus dispositivos eletrônicos, muitos infratores praticam condutas criminosas contra pessoas ou sistemas computacionais utilizando a rede. Como exemplo, o roubo de dados e informações privadas, 1 estelionato ou o comprometimento de um sistema de comércio online de uma empresa, afetando sua disponibilidade. No entanto, pressupor que na Internet vigora o anonimato é um engano, já que a rastreabilidade das ações efetuadas neste meio é possível. Então, havendo a possibilidade de se responsabilizar os usuários, estes podem vir a responder civil e administrativamente, desde que se comprovem os danos causados e a autoria. Diariamente são descobertas novas vulnerabilidades e novos métodos de ataque a sistemas computacionais são desenvolvidos, bastando que se tenha um mínimo conhecimento de informática e redes de computadores para que uma pessoa interessada obtenha facilmente ferramentas de invasão na Internet, possibilitando-lhe causar danos a pessoas e organizações. Nesse contexto, a Forense Computacional busca a aquisição e compreensão de evidências sobre a ocorrência dos referidos crimes em ambientes computacionais, a fim de provar sua existência. Com os resultados de uma análise forense, é possível fornecer informações a processos criminais, para aplicação das medidas legais cabíveis, ou mesmo determinar a causa de incidentes de segurança em empresas, subsidiando a adoção de medidas corretivas e/ou preventivas nos sistemas e processos utilizados. No entanto, com o constante aumento da capacidade de dispositivos de armazenamento, tem se tornado muitas vezes inviável analisar todo o conteúdo disponível para a perícia. Atualmente é comum lidar com discos rígidos cuja capacidade de armazenamento pode ser medida em terabytes, o que influencia consideravelmente no tempo, dificuldade e custo requeridos para a coleta e análise de todas as evidências presentes no disco. Além disso, muitos sistemas, como os de comércio eletrônico, não admitem períodos de indisponibilidade enquanto os dados do disco estão sendo copiados. Por fim, muitos dados valiosos sobre o que estava acontecendo no sistema, que poderiam fornecer informações importantes e contextualizar as evidências encontradas em disco, podem ser perdidas quando a máquina é desligada. Nesse sentido, a Live Forensics, ou “Forense ao Vivo”, busca trabalhar com um snapshot, ou seja, uma imagem do estado do sistema, tentando obter uma imagem do ambiente no momento em que ocorreu o incidente. E a memória volátil, que constitui-se como um dos alvos de análise da Live Forensics, pode prover informações importantes, que em conjunto com a abordagem tradicional da forense resulta em uma análise mais completa do cenário em que ocorreu o incidente. 2 Diante desse cenário, em que ações fraudulentas ou criminosas em sistemas computacionais se tornam cada vez mais freqüentes, a importância da perícia forense computacional se torna cada vez maior para elucidar a ocorrência de tais ações ilícitas. 1.1. OBJETIVOS O escopo desse trabalho concentra-se na apresentação dos conceitos, procedimentos e técnicas empregadas na perícia forense computacional, destacando a importância da análise de dados voláteis, obtidos a partir da memória RAM, para uma investigação forense. Para isso, serão descritos quais os tipos de dados que podem ser recuperados da memória volátil em sistemas que foram invadidos, a volatilidade das evidências disponíveis, assim como as técnicas e ferramentas que podem ser utilizadas para realizar a captura e análise de dados da memória RAM. Serão apresentadas ferramentas e frameworks existentes para análise forense da memória principal de um sistema, que podem ser utilizadas visando à recuperação de dados e evidências relevantes à análise e compreensão do evento. Por fim, pretende-se demonstrar, através de um estudo de caso, a eficácia de ferramentas de forense de memória para a elucidação de incidentes digitais de segurança. Os objetivos específicos desse trabalho são: • Dissertar sobre a fundamentação teórica da Perícia Forense Computacional; • Descrever quais dados pode ser recuperados através da captura e análise da memória volátil; • Descrever técnicas e procedimentos para recuperação de dados através da forense de memória; • Analisar ferramentas e frameworks disponíveis para a perícia da memória volátil. • Apresentar um estudo de caso demonstrando a importância da análise de dados voláteis para a perícia forense computacional. 3 1.2. ORGANIZAÇÃO Esse trabalho foi dividido em cinco capítulos. O presente capítulo faz uma pequena introdução ao tema proposto, apresenta os objetivos do trabalho, a motivação para seu desenvolvimento e expõe como ele será estruturado. No capítulo 2 – “Revisão Bibliográfica”, é realizada uma revisão teórica, introduzindo conceitos relacionados a crimes cibernéticos, sua definição e cenário encontrado no Brasil atualmente. Também são abordados procedimentos e metodologias aplicáveis à perícia forense computacional e discutida a confiabilidade das informações encontradas em um sistema sob investigação. O capítulo 3 – “Perícia Forense Computacional: Analisando a Memória Volátil”, aborda a aplicação da perícia forense computacional para análise de conteúdo obtido a partir da memória volátil, enumerando que tipo de informação pode ser encontrada na memória RAM e o quão persistente esses dados podem ser. Discorre sobre o gerenciamento de memória, técnicas, procedimentos e ferramentas para realização de análise forense da memória. O capítulo 4 – “Estudo de Caso” exemplifica a utilização de ferramentas apropriadas para forense de memória através de um estudo de caso, a fim de demonstrar a importância da investigação do conteúdo da memória para a perícia forense computacional. Por fim, o capítulo 5 – “Conclusão”, realiza considerações sobre o estudo realizado e propõe a realização de novos trabalhos na área. 4 2. REVISÃO BIBLIOGRÁFICA No Brasil ainda não há legislação específica para combater os crimes cibernéticos, também denominados de crimes digitais, crimes tecnológicos, crimes na Internet, cibercrimes, dentre outras nomenclaturas. O artigo 5º da Constituição Federal de 1988, inciso XXXIX, estipula que “não há crime sem lei anterior que o defina, nem pena sem prévia cominação legal” (BRASIL, 1988). Então, como ainda não existe tipificação para os crimes cibernéticos, a punição se torna difícil. Existe, em andamento, um projeto de lei sobre crimes cibernéticos amplamente conhecido e discutido, proposto pelo Senador Eduardo Azeredo em substituição ao Projeto de Lei da Câmara nº 89, de 2003, e Projetos de Lei do Senado nº 137 e nº 76, de 2000, todos referentes a crimes na área de informática. Porém, enquanto ainda não existe definição e tipificação para delitos informáticos, cometidos com a utilização de meios de tecnologia e telecomunicações, a impunidade prevalece. Em decorrência de suas particularidades e natureza jurídica, a definição para crimes cibernéticos é complexa. Castro (CASTRO, 2003) prefere chamá-los de crimes de informática, a fim de englobar todos os crimes que possuem relação com os sistemas de informática e não apenas os que tenham relação com a Internet. Crime de Informática é aquele praticado contra o sistema de informática ou através deste, compreendendo os crimes praticados contra o computador e seus acessórios e os perpetrados através do computador. Inclui-se neste conceito os delitos praticados através da Internet, pois pressuposto para acessar a rede é a utilização de um computador. (CASTRO, 2003). Admite-se essa definição com a ressalva de que para acessar a rede não é necessária a utilização de um computador, já que atualmente inúmeros dispositivos permitem o acesso à Internet, como celulares, smartphones, vídeo games, tablets, etc. Assim, outra definição citada por Castro, mas proposta por João Marcello de Araujo Junior e que é mais abrangente “[...] conceitua como sendo uma conduta lesiva, dolosa, a qual não precisa, necessariamente, corresponder à obtenção de uma vantagem ilícita, porém praticada, sempre, com a utilização de dispositivos habitualmente empregados nas atividades de informática.” (CASTRO, 2003). Quanto à classificação, a mesma autora destaca que podem ser classificados como próprios e impróprios. Os crimes próprios só podem ser consumados com a utilização da 5 informática, enquanto os impróprios podem ser práticos com ou sem o auxílio da informática, por se tratarem de condutas já tipificadas e protegidas pela legislação brasileira. Existem outras classificações bem aceitas para auxiliar o entendimento de crimes que envolvem computadores. (HUEBNER, BEM, BEM, 2007) propõem a seguinte classificação em três categorias: • Crimes centrados em computadores: atividade criminosa que tem como alvo sistemas computacionais, redes, mídias de armazenamento ou outros dispositivos computacionais. Por exemplo, invadir um site comercial e alterar seu conteúdo. Podem ser vistos como novos métodos, promovendo uma nova classe de crimes. • Crimes assistidos por computadores: utilização de sistemas computacionais como ferramentas, para auxiliar em uma atividade criminosa em que o uso de computadores não é estritamente necessário, por exemplo, a pornografia infantil. Podem ser vistos como novas formas de se cometer crimes convencionais. • Crimes computacionais incidentais: atividade criminosa em que o uso do sistema computacional é incidental, não estando relacionado diretamente à atividade criminosa propriamente dita. Por exemplo, uso do computador para contabilizar e manter registros de tráfico de drogas. Podem ser vistos como a utilização de novas ferramentas em substituição às convencionais. No exemplo anterior, um livro de registros de contabilidade estaria sendo substituído por um software, como um editor de planilhas. Nesse trabalho também será utilizado o termo “incidente de segurança”, que segundo (MANDIA, PROSISE, 2003) pode ser definido como “qualquer ação fora da lei, desautorizada ou inaceitável que envolva um sistema computacional ou uma rede de computadores”. Ainda, de acordo com o autor, essa ação pode incluir qualquer dos eventos a seguir: roubo de segredos comerciais, correio eletrônico contendo spam ou assédio, intrusões ilegais ou não autorizadas em sistemas computacionais, desfalque, posse ou divulgação de pornografia infantil, ataques de negação de serviço (DoS), extorsão, dentre outras ações cuja evidência esteja armazenada em mídias digitais, como fraudes, roubos e outros crimes tradicionais. Em outras palavras, a RFC 4949, define um incidente de segurança como “[...] um evento de sistema de segurança em que a política de segurança do sistema é desobedecida ou violada.” (SHIREY, 2007), exaltando a importância da implantação de políticas para gerir a segurança de informação. 6 A Figura 2.1 ilustra a dinâmica de um incidente digital, apresentando o relacionamento entre os eventos para casos de ataques e incidentes. Para prevenir ataques deve-se impedir que o invasor consiga realizar completamente a conexão através das sete etapas descritas. Figura 2.1 – Dinâmica de um incidente de segurança digital (HOWARD, 1998). Grande parte destes eventos, que causam impactos significantes às pessoas e organizações, viola de alguma forma as leis e podem ser investigados como crime nas esferas 7 civil e criminal. O combate ao crime cibernético é um problema global, pois não existem fronteiras no espaço cibernético; os criminosos estão distribuídos por todos os lugares e a cooperação internacional é imprescindível para combatê-lo. Muitos esforços nesse sentido já podem ser vislumbrados, no entanto ainda há um longo caminho a percorrer. Assim, a perícia forense computacional, também conhecida como computação forense, informática forense ou forense digital, dentre outros termos, tem ganhado importância cada vez maior para as autoridades policiais e judiciárias, assim como para empresas e organizações, à medida que utiliza conhecimentos em informática aliados a técnicas de investigação a fim de obter evidências sobre a ocorrência de incidentes de segurança em sistemas computacionais. A forense computacional propõe métodos científicos para identificar, coletar, preservar, analisar e documentar evidências digitais em dispositivos eletrônicos (FREITAS, 2006). Tem como objetivo primário determinar a dinâmica, materialidade e autoria de ilícitos ligados à área de informática, tendo como questão principal a identificação e o processamento de evidências digitais em provas materiais de crime, por meio de métodos técnico-científicos, conferindo-lhe validade probatória em juízo (ELEUTÉRIO, MACHADO, 2011). Outra definição, mais completa, e proposta por (PALMER, 2001) conceitua a Ciência Forense Computacional como “a utilização de métodos derivados e comprovados cientificamente para a preservação, coleta, validação, identificação, análise, interpretação, documentação e apresentação de evidências digitais provenientes de fontes digitais a fim de facilitar ou promover a reconstrução de eventos considerados criminosos, ou auxiliar a previsão de ações não autorizadas que demonstrarem ser prejudiciais às operações planejadas”. Através do processo de análise forense, um analista tem a intenção de reconstituir os eventos passados para descobrir quem invadiu o sistema, quando o incidente ocorreu, como o invasor obteve o acesso e conseguiu concretizar a invasão, a quais sistemas teve acesso e o que fez enquanto teve domínio do ambiente. Vale ressaltar, porém, que tão importante quanto se encontrar os responsáveis e buscar uma punição ou compensação litigiosa, é o aprendizado resultante da análise do problema, que deve ser considerado como meta dos trabalhos forenses aplicados à área de Segurança da Informação (ROSA, 2004). Ainda, (FARMER, VENEMA, 2007) definem a forense computacional como o processo de “coleta e análise de dados de maneira tão livre de distorção ou viés que seja possível reconstruir os dados ou o que aconteceu no passado no sistema”. Sugerem que, para 8 cumprir os métodos investigativos tradicionais, o investigador deve seguir uma série de estágios quando está diante da cena de um incidente (FARMER, VENEMA, 1999): • Proteger e isolar. • Registrar o incidente. • Conduzir uma busca sistemática por evidências. • Coletar e manter as evidências. • Manter cadeia de custódia. 2.1. EVIDÊNCIAS DIGITAIS Edmond Locard foi um pioneiro na área de ciência Forense e formulou um princípio que é bastante difundido e amplamente adotado pela ciência forense, conhecido como Princípio da Troca de Locard. Este princípio afirma que sempre que dois itens entrarem em contato haverá uma troca de material, o que pode ser traduzido pela conhecida expressão “todo contato deixa um rastro”. Fazendo uma analogia ao ambiente envolvido em um incidente de segurança, sempre haverá evidências na cena do crime; inclusive as deixadas pelos investigadores durante a realização de seus trabalhos. Por isso mesmo, é importante que os investigadores documentem rigorosamente todos os procedimentos adotados, assim como seus resultados previstos, para que os efeitos indesejáveis sejam reduzidos ao mínimo possível e sempre com resultados previsíveis (RODRIGUES, 2007). Entende-se como evidência digital “qualquer informação de valor probatório que é armazenada ou transmitida em formato digital” (HUEBNER, BEM, BEM, 2007). Exemplos de evidências digitais que podem ser encontradas no local em que ocorreu o incidente ou crime cibernético são: vestígios de arquivos apagados, fragmentos de arquivos, arquivos ocultos ou criptografados, registros de impressão e conexão à Internet, etc. A análise forense de um sistema computacional envolve um ciclo de coleta de dados e processamento das informações coletadas. O ideal para o trabalho do perito em forense computacional seria obter uma cópia exata do sistema, pois quanto mais precisos e completos os dados forem, mais abrangente poderá ser a avaliação. A dificuldade está na obtenção de uma cópia fiel do sistema em questão, pois enquanto a coleta de dados é realizada em um sistema, novas atividades podem estar coexistindo, como programas ou processos de sistema 9 que estejam rodando e causando alterações no mesmo, destruindo vestígios valiosos. O simples fato de se executar uma ferramenta para captura dos dados no sistema afetará o seu estado, tornando-o diferente do momento em que o incidente de segurança ocorreu. Além disso, os invasores podem deixar armadilhas para destruir os dados (FARMER, VENEMA, 2007). Para evitar essas alterações, a forense computacional tradicional se concentra em analisar os dados nos sistemas fora de execução; quando um incidente de segurança é detectado, o sistema é desligado e os dados que podem fornecer informações úteis são copiados (logs de aplicativos, MAC Times, assim como o conteúdo de arquivos e o que mais for considerado importante pelo investigador). Em seguida, a análise é feita com base na cópia dos dados, garantindo que o cenário original sofra o mínimo de alterações possível. No entanto, ao se desligar ou interromper a energia de um sistema, muitas informações úteis que poderiam auxiliar na investigação podem ser perdidas, como o que fica armazenado na memória RAM ou em periféricos, cuja natureza é efêmera. Um ramo da área de Forense Computacional, a Live Forensics propõe a coleta de evidências no sistema “em funcionamento”. Desse modo, é possível ter à disposição mais fontes para coletar as evidências; quando correlacionadas, estas fontes podem auxiliar na resolução do problema, principalmente se os dados puderem ser obtidos durante a ocorrência do incidente. As informações devem ser preferencialmente coletadas de acordo com sua ordem de volatilidade no sistema; alguns dados possuem maior chance de se perderem, devido à natureza dos dispositivos que os armazenam e à sua sensibilidade a corrupção durante uma coleta de dados. Assim, deve ser considerado o ciclo de vida dos dados ao se realizar uma coleta, para evitar grandes perdas. A tabela 3.1 ilustra o ciclo de vida esperado dos dados, segundo (FARMER, VENEMA, 2007) e pode ser utilizada como um guia para a ordem de volatilidade dos diferentes dispositivos de armazenamento. Tabela 2.1 – O ciclo de vida esperado dos dados. Tipos de Dados Registradores, memória periférica, caches, etc. Memória principal Estado da rede Processos em execução Disco Disquetes, mídias de backup, etc. CD-ROMs, impressões, etc. Tempo de Vida Nanossegundos Dez nanossegundos Milissegundos Segundos Minutos Anos Dezenas de anos 10 Uma vez que o sistema foi comprometido, pode haver dúvidas quanto à confiabilidade das informações obtidas. Como ter a certeza de que o investigador está diante de vestígios autênticos ou invés de resultados manipulados e forçados pelo invasor? Ao ter acesso ao sistema, o invasor pode, por exemplo, ter modificado a saída de comandos do sistema operacional, de modo que sejam exibidas apenas as informações que ele deseja. Alvos de modificação comuns são o Shell, bibliotecas dinâmicas, drivers de dispositivos e até mesmo o kernel. Assim, cada fragmento de informação deve ser cuidadosamente examinado, a fim de se encontrar possíveis inconsistências. Quanto maior o número de fontes de informação, e a independência dessas fontes entre si, maior será a confiabilidade das informações (FARMER, VENEMA, 2007). Para garantir a confiabilidade das informações encontradas, deve ser tomada uma série de cuidados: • Montar kits de ferramentas confiáveis que estejam disponíveis para uso quando um incidente ocorrer. Como o ambiente foi invadido, até mesmo os comandos básicos de sistema operacional não podem mais ser considerados confiáveis, pois podem ter sido manipulados. • Montar um ambiente de laboratório, com maior semelhança possível ao ambiente original, para auxiliar o procedimento de análise. • Efetuar a análise sobre a cópia das mídias originais, a fim de mantê-las protegidas. • Utilizar assinaturas criptográficas para autenticar as cópias. • Manter cadeia de custódia. • Não armazenar os dados coletados na máquina sob análise, pois o sistema não está confiável. Enviar os dados coletados via rede para outros hospedeiros, utilizando ferramentas como netcat ou cryptcat. 2.2. DESAFIOS DA FORENSE COMPUTACIONAL A Ciência Forense Computacional ainda conta com muitos desafios, de ordem técnica, social e legal, alguns deles explicitados a seguir, baseado na leitura de (PALMER, 2001) e (HUBNER, BEM, BEM, 2007): 11 De ordem prática e técnica: • Carência de profissionais treinados, capacitados e com experiência na área. • Avanços tecnológicos ocorrendo constante e ininterruptamente. Unidades de disco rígido simples já alcançaram a capacidade de 1TB (terabytes) em um PC padrão. Esses dispositivos com grande capacidade de armazenamento criam problemas de ordem prática, à medida que analisá-los com as ferramentas disponíveis em tempo hábil, é uma tarefa difícil, pois a cópia de dados é lenta e a realização de pesquisas é ainda mais demorada. • Dispositivos de armazenamento com tamanho reduzido podem ser ocultados facilmente. • Algoritmos de criptografia de dados se tornaram eficientes de tal modo que quebrar uma senha utilizando o método de força bruta para ter acesso aos dados cifrados é impraticável. Para fins de ilustração, caso uma mensagem tenha sido cifrada utilizando o padrão AES (Advanced Encryption Standard), que possui chave de 128 bits, e o atacante possua um sistema que tenta um bilhão de chaves por segundo, seriam necessários anos para verificar todas as combinações possíveis para a chave. Ferramentas de criptografia são facilmente obtidas na Internet e distribuídas gratuitamente. • Muitas propriedades e mecanismos de sistemas operacionais ou softwares não são bem documentadas pelos seus desenvolvedores, gerando dificuldades na análise do ambiente. • Muitas vezes os dados de interesse do investigador podem não residir no dispositivo ao qual ele possui acesso físico. O armazenamento online se tornou popular e acessível, e alguns provedores de serviços na Internet já oferecem serviço de armazenamento virtual com criptografia. • A incerteza sobre a acurácia e eficácia das técnicas utilizadas atualmente gera a necessidade de manter os dados armazenados por longos períodos, desperdiçando recursos que poderiam ser aplicados na resolução de outros problemas ao invés de apenas armazenamento. 12 De ordem legal: • Pouco adianta desenvolver tecnologias extremamente avançadas de análise forense se os resultados produzidos não estiverem em conformidade com a lei e, portanto, não tiverem validade jurídica. • Falta de padronização de procedimentos, protocolos e terminologia, a fim de unificar a prática e fornecer validade legal ao processo. • Muitas vezes os dados de interesse do investigador podem estar armazenados em outros países, sob outra jurisdição, e podem ser acessados como se fossem locais. A cooperação com o sistema jurídico de outros países pode ser lenta e difícil, mesmo naqueles que já possuem leis de crimes eletrônicos bem desenvolvidas; geralmente criam-se regras complexas impedindo a liberação das informações. • A utilização da computação em nuvem (cloud computing), que vem se mostrando uma tendência de mercado, introduz vários questionamentos de segurança: Como haverá garantia de privacidade? Onde estão as evidências? As provas são admissíveis nesse contexto? Qual é a jurisdição aplicável? Nesse cenário, é possível que o perito não tenha mais acesso ao ambiente que será investigado, dificultando a realização da perícia. • Organizações criminosas agindo inadvertidamente na Internet. • A coleta e acesso aos dados do sistema para realização da análise muitas vezes vai contra os direitos de privacidade dos usuários. • Estabelecimento e reconhecimento da Forense Computacional como disciplina científica. 2.3. PROCEDIMENTOS Para assegurar a autenticidade e integridade dos dados obtidos em um processo de análise forense, devem existir procedimentos bem definidos, claros e documentados, garantindo que as provas não foram comprometidas ou alteradas durante o processo de coleta e enquanto estiveram sob custódia dos peritos envolvidos na investigação. Caso contrário, as informações obtidas no processo forense perdem a validade e podem ser consideradas ilegítimas. Como todo processo de forense nas outras áreas de conhecimento, deve-se garantir 13 que, de posse dos dados, a análise poderá ser refeita por outros peritos e os mesmos resultados serão obtidos. Assim, é importante destacar que durante todo o processo de análise forense é necessário documentar rigorosamente todos os passos seguidos, assim como manter registro de todas as pessoas envolvidas no processo investigativo que tiveram acesso às informações sigilosas, ou seja, deve-se manter cadeia de custódia. A adoção de métodos e procedimentos também simplifica o processo de coleta, armazenamento e análise de evidências, contribui para dar valor probatório às evidências coletadas e minimiza o impacto e reações negativas nos casos em que os envolvidos na perícia estão sob forte pressão e elevado nível de estresse, evitando ações errôneas que possam comprometer as evidências. Os procedimentos para a Forense Computacional devem ser amplos e generalizados de modo a abranger toda a heterogeneidade de softwares, hardwares e padrões diversos de tecnologia. A perícia forense computacional possui quatro procedimentos básicos, que contemplam a identificação, preservação, análise e apresentação das evidências (FREITAS, 2006). As tarefas envolvidas no processo de investigação estarão enquadradas nessas fases, que são detalhadas a seguir e sintetizam as idéias expostas até aqui. Figura 2.2 – Procedimentos da perícia forense computacional A figura 2.2 resume os quatro procedimentos da perícia forense. O processo transforma os dados coletados do sistema em evidências, compondo provas que podem ser utilizadas para aplicação da lei ou para uso interno em uma organização. O primeiro contato 14 ocorre quando os dados são coletados. Em seguida, após serem preservados, as cópias geradas podem ser utilizadas para análise, onde os dados são transformados em informação. Por fim, ocorre a transformação de informação em evidência, de forma análoga à transformação de conhecimento em ação, podendo ser utilizada com provas judiciais ou recomendações de segurança em uma organização. Os resultados também podem servir como conhecimento para geração de novas pistas para um caso. 2.3.1. Identificando as Evidências Nessa fase o perito deve buscar todas as evidências possíveis, considerando o cenário e o tipo de incidente, já que diferentes tipos de crimes geram diferentes tipos de evidências. A capacidade de identificação vai depender da habilidade e experiência do perito e do uso de ferramentas adequadas. Para encontrar evidências, o investigador deve identificar quais sistemas foram afetados, procurar por dispositivos de armazenamento de evidências, procurar informações acerca do acontecimento, como nomes de pessoas, números telefônicos, datas e horários, além de informações sobre o sistema, como: rever a topologia de rede, identificar conexões de rede estabelecidas, portas abertas, processos em execução e etc. Após a identificação das fontes de evidências, é preciso realizar a coleta dos dados, levando-se em conta a prioridade na ordem da coleta, ou seja, deve ser estabelecida uma ordem na qual os dados devem ser adquiridos, considerando a volatilidade da informação, o esforço de adquirí-la e o seu valor estimado. A RFC 3227 possui orientações sobre as melhores práticas de coleta e armazenamento de evidências que são úteis e aplicáveis ao contexto da forense computacional. O perito deve prezar pela otimização da coleta de dados, já que não é necessário coletar tudo que estiver disponível em um sistema, mas apenas as informações essenciais e aplicáveis à análise do incidente. Também deve minimizar os riscos de corrupção ou destruição dos dados durante a coleta. Possíveis fontes de evidências, a serem consideradas pelo perito, são listadas a seguir: • Dispositivos de Armazenamento na CPU - Registradores e cache Fornecem pouca informação relevante e segundo (WARREN, 2002) a captura dos dados pode ser considerada impraticável. 15 • Memória Principal Pode fornecer informações sobre o sistema operacional e os processos que estão em execução, além de senhas, dados em manipulação que ainda não foram gravados no disco, vestígios de códigos maliciosos, textos em claro que estão cifrados no disco, dados ocultos, etc. Os dados armazenados podem ser capturados através de procedimentos específicos, que serão abordados no próximo capítulo. • Memória de Periféricos Pode fornecer informações úteis que não estão disponíveis na memória principal, como documentos impressos ou enviados por fax, imagens exibidas no monitor, etc. • Discos rígidos e mídias secundárias Podem fornecer dados sobre os arquivos, assim como prover informações sobre sua manipulação (MAC Times) e permitir a recuperação de arquivos apagados. Além de informações sobre os arquivos, pode conter informações ocultas nas áreas que não são acessíveis pelo sistema de arquivos. Normalmente, contém grande parte das informações utilizadas pelo perito para a extração de evidências. • Módulos de Kernel A identificação de módulos de kernel maliciosos pode sugerir que o invasor carregou módulos com alguma finalidade maliciosa, como fornecer recurso indevidamente a um dispositivo, incorporar nova linguagem de programação, ou alterar as chamadas de sistema (system calls). Os módulos maliciosos podem comprometer por completo o funcionamento normal do sistema operacional, alterando comandos de sistema para produzir resultados manipulados e esconder as ações do invasor. • Estado do Sistema Operacional Dados sobre o estado do sistema operacional fornecem vestígios importantes, como informação sobre processos em execução e seus privilégios, usuários conectados, data 16 e hora do sistema, aplicativos que estão em funcionamento, em listening, conexões de rede estabelecidas, status das interfaces de rede, tabelas de rotas, arquivos de configuração e de logs. • Tráfego de Rede Com a utilização de analisadores de tráfego (sniffers), é possível capturar datagramas que trafegam na rede e obter informações sobre as conexões estabelecidas com a máquina alvo, de modo a estabelecer uma seqüência de eventos e correlacionar com outras evidências. Além disso, logs de IDS, firewall, proxy, roteadores e servidores de autenticação podem fornecer informações importantes. 2.3.2. Preservando as Evidências As evidências devem ser preservadas de modo que não haja dúvidas sobre sua veracidade. Para evitar que sejam comprometidas ou perdidas durante o processo de investigação, devem ser tomados alguns cuidados: • Duplicação pericial: criar imagens do sistema a ser investigado para que a análise seja realizada trabalhando-se apenas com as cópias e mantendo o original como o mínimo de alterações. • Todas as evidências devem ser lacradas e etiquetadas, registrando a data e horário em que a evidência foi coletada, assim como os dados de quem a possui sob custódia. • Gravar as evidências em mídias que não permitam regravação. • Identificar e anotar todos os componentes do sistema computacional envolvido, para que o cenário possa ser recriado em laboratório. • Manter as evidências guardadas em cofre, para evitar adulteração. • Manter cadeia de custódia. Deve-se registrar onde, quando e por quem as evidências foram coletadas; quem teve acesso às informações após a coleta, quanto tempo durou, quando foi concedido esse acesso e a justificativa para a concessão; quem teve custódia da evidência, por qual período e como as evidências foram armazenadas 17 durante o intervalo; como e quando ocorreu a transferência de custódia, nos casos em que esta ocorrer. 2.3.3. Analisando as Evidências A análise dos dados depende de trabalho especializado para a coleta e interpretação das informações e normalmente é a fase mais demorada do processo investigativo. Nessa fase, o perito vai realizar a reconstrução da cena (quando possível), fazer a correlação entre eventos e análise de todas as evidências coletadas, a fim de responder as questões que norteiam a perícia forense: identificar quem fez, o que fez, quando fez e como fez. Depois de analisar e interpretar as evidências, o perito deverá ser capaz de responder a questionamentos que podem levar ao entendimento do incidente. Todas as atividades executadas nessa fase devem ser minuciosamente documentadas. A condução do processo de análise está relacionada ao tipo de incidente que o perito está investigando, pois dependendo do caso, as pistas que ele busca serão diferentes. Por exemplo, nos casos de pedofilia, os dados de interesse ao perito normalmente são: as conexões com outros hosts utilizando protocolos de transferência de arquivos, arquivos de vídeo e imagem suspeitos, histórico de navegação na Internet exibindo endereços de sites de pedofilia, serviços de correio eletrônico enviando ou recebendo mensagens com anexos suspeitos, dentre outros vestígios. Já no caso de sites de hospedagem de conteúdo pirata, os dados de interesse poderiam ser: servidores web ativos com páginas carregadas, conexões web com requisição para as páginas hospedadas com conteúdo suspeito. Assim, a experiência do perito, adquirida em analises anteriores, colabora para agilizar e melhor conduzir o processo de análise das evidências. A Figura 2.3 apresenta um fluxograma para condução do processo de análise das evidências. O modelo apresentado serve como referência e pode ser adaptado de acordo com as necessidades de cada organização, mantendo-se os princípios e metodologia geral apresentados. 18 Início Figura 2.3 – Fluxograma da fase de análise das evidências Figura adaptada de (DIGITAL, 2007) 19 2.3.4. Apresentação dos Resultados Por fim, deve ser redigido um laudo pericial apresentando os resultados obtidos pela investigação de forma clara, organizada, concisa, imparcial e conclusiva. O laudo pericial é o relato do perito após análise e correlação das evidências, resultado de um processo de avaliação. Consiste na tradução das informações captadas pelo perito por meio de conhecimentos especializados e deve estar pautado em aspectos éticos e legais. No laudo, devem ser anexadas todas as evidências e demais documentos que fizeram parte do processo investigativo, buscando comprovar a integridade das informações através do detalhamento de todos os procedimentos e técnicas empregados. Devem constar também os materiais que foram analisados pelos peritos, o objetivo do trabalho de investigação, métodos e ferramentas que foram utilizados, dentre outras considerações específicas. Devem ser fornecidas mídias contendo o conteúdo que foi analisado e que contém as evidências, juntamente com suas assinaturas criptográficas, a fim de evitar alterações. Em conjunto com o laudo, os peritos devem devolver as mídias e dispositivos originais que foram confiscados no momento do incidente, no mesmo estado em que foram recebidos. Embora se deva conservar a terminologia tecnológica e científica em seus relatos, o laudo deve ser elaborado utilizando linguagem acessível a quem ele se destina, utilizando recursos gráficos e visuais, se for possível, para facilitar a compreensão. Embora conclusivo, o laudo pericial pode ser questionado ou contestado, por isso é de extrema importância que seja formulado com argumentações bem embasadas e que a integridade dos dados seja comprovada. Nele só devem constar afirmações que podem ser provadas e demonstradas técnica e cientificamente. Quando realizado para fins corporativos, o laudo também pode fazer recomendações sobre o que deve ser feito para prevenir ou corrigir o problema: alterações nas políticas de segurança da empresa, nos procedimentos, processos, ferramentas adotadas, dentre outros. O Anexo I apresenta um modelo de laudo pericial utilizado pelo Departamento de Polícia Federal para apresentação dos resultados de seus exames periciais. 20 3. PERÍCIA FORENSE COMPUTACIONAL: ANALISANDO A MEMÓRIA VOLÁTIL Conforme mencionado no capítulo anterior, a memória principal, ou memória volátil, pode conter informações relevantes para um processo de investigação forense, como senhas, chaves criptográficas, vestígios de códigos maliciosos, informações de rede e processos, dentre outros dados. E à medida que surgem novos desafios à forense computacional, como a utilização de criptografia em discos rígidos e a disseminação de malwares que residem exclusivamente na memória, tornou-se mais importante ir além da forense tradicional e desenvolver habilidades para examinar também os vestígios obtidos através da captura e análise da memória principal. Para realizar esse tipo de análise, o perito deve atualizar constantemente os seus conhecimentos, uma vez que a área de informática é bastante dinâmica e os avanços são rápidos. A memória principal de um computador, a memória RAM, é por natureza considerada um dispositivo de armazenamento de dados volátil, pois é bastante provável que estes sejam perdidos quando a máquina for reiniciada ou que sejam sobrescritos enquanto a máquina estiver em funcionamento com suas atividades padrão. Porém, muitas informações advindas desses dados voláteis, que só podem ser recuperadas através da memória, são de grande importância para a condução de um processo investigativo. Segundo (AMARI, 2009), a análise de qualquer memória volátil é menos precisa do que a do disco rígido, já que estes possuem uma estrutura pré-definida e conhecida pelos peritos, que baseados nisso sabem onde devem buscar determinados tipos de informações em um sistema de arquivos. Ao contrário, a memória, pode ser alocada e desalocada de acordo com a necessidade de sua utilização, sendo “impossível prever o que irá encontrar na memória volátil ou onde estará armazenado”. Embora a coleta de informações específicas da memória volátil, sobre conexões de rede ou processos em execução, por exemplo, seja conhecida há algum tempo e extensivamente discutida, a questão da coleta, manipulação e análise de todo o conteúdo da memória física é um esforço relativamente novo, pelo menos do ponto de vista público (CARVEY, 2007). Nesse capítulo serão expostas técnicas, procedimentos e ferramentas para a coleta e análise de dados da memória principal, assim como os dados que podem ser obtidos através do dump (cópia dos dados) da memória. Não se pretende aqui abordar todas as técnicas e 21 ferramentas existentes e possíveis, mas destacar a importância delas, apresentando as mais utilizadas atualmente e incentivar a sua aplicação, assim como o aprimoramento e desenvolvimento de novas ferramentas específicas que facilitem, complementem e estendam esse tipo de análise. 3.1. A MEMÓRIA VOLÁTIL Considerando a arquitetura de um computador de uso geral, todo programa e dado precisa ser armazenado temporariamente na memória principal (RAM) para que seja executado ou processado pela CPU, devendo permanecer na memória principal apenas enquanto o processamento dos dados for necessário. Assim, quando um programa gravado em mídias de armazenamento, como o disco rígido, precisa ser executado, ele é carregado em uma área da memória RAM e fica disponível para processamento; quando finalizado, a área alocada para esse programa na memória pode ser liberada, fornecendo espaço para a execução de outros programas e processos. Diferentemente disso, as arquiteturas de propósito especial, como de PDAs e celulares, normalmente armazenam os programas e dados em posições de memória diretamente endereçáveis, então não há necessidade de serem copiados para a memória principal a fim de serem processados (FARMER,VENEMA, 2007). Porém, as idéias propostas neste trabalho se baseiam na arquitetura de máquinas de uso geral, na qual os dados são armazenados na memória principal para que haja acesso rápido pelo processador. Esse tipo de memória (RAM) possui natureza volátil, devido à rapidez com que os dados se perdem quando ocorre a realocação das áreas da memória. Segundo a literatura, quando o computador é desligado, seu conteúdo é perdido; no entanto, essa informação já foi questionada em estudos de caso. De acordo com o trabalho realizado por (LISITA, MOURA, PINTO, 2009), em que foi questionada a persistência dos dados na memória volátil, mesmo após a interrupção de energia, mostrou-se que ainda é possível encontrar resquícios de dados na memória volátil. Segundo os autores, após a realização de testes no sistema operacional Linux (Slackware kernel 2.6.24.5-smp), foi possível identificar resquícios de dados antigos na memória após o reboot da máquina. Nesse mesmo teste, não foi possível identificar vestígios no sistema operacional Windows XP SP2, pois a memória provavelmente foi limpa no boot posterior ao desligamento do sistema. 22 O gerenciamento de memória, função desempenhada pelo sistema operacional, é responsável pela organização da memória e pelas estratégias de gerenciamento, alocação de espaço e interação da memória com dispositivos. É o gerenciador de memória que determina como as áreas da memória devem ser alocadas para os processos sob condições de restrição de espaço, estabelecendo as prioridades de acordo com a necessidade, e também gerencia como a memória pode ser utilizada pelos processos de sistema. Segundo (FARMER, VENEMA, 2007) podem residir nas páginas de memória dois tipos de dados básicos fora os do kernel: dados lidos de arquivos e dados de páginas anônimas, sendo que as páginas anônimas contêm informações sobre o estado dos processos: o heap, a pilha, se estão ou não em execução, etc. Cabe ao gerenciador de memória virtual decidir se determinada página de memória será armazenada em um arquivo (memória virtual ou secundária), na memória principal ou no espaço de troca (swapping). Depois que um arquivo é lido na memória principal, seus dados permanecem ali por um tempo, dependendo do grau de atividade do computador, sendo que as páginas de memória anônimas tendem a ser mais voláteis que os dados de arquivos. Assim, dependendo do tipo de dado armazenado, alguns são mais propensos a serem paginados ou sobrescritos, caso o sistema operacional precise alocar espaço na memória para armazenar outros processos ou dados. No Windows, os dados e métodos de manipulação utilizados pelo kernel, denominados de objetos, possuem um OBJECT_HEADER, que consiste em uma estrutura com informações sobre o objeto armazenado. O kernel trabalha com dois conjuntos de memória, e escolhe entre duas formas para armazenar um objeto na memória: utilizando o espaço de paginação (paged pool) ou o espaço não paginável (non-paged pool). A maioria dos dados será armazenada na área paginável, enquanto os objetos mais importantes, que precisam ser acessados pelo kernel com maior freqüência, serão armazenados no espaço não paginável. Os dados paginados são passíveis de serem armazenados em arquivos no disco rígido, caso a memória principal esteja com pouco espaço disponível. No entanto, processos e threads, que são acessados com freqüência e possuem considerável importância para o sistema operacional, são armazenados fora do espaço de paginação, garantindo que estarão armazenados na memória principal. Por isso, é possível obter informações sobre todos os processos que estavam em execução no momento em que a imagem da memória é capturada para a análise forense (AMARI, 2009). Ainda no Windows, existe uma estrutura que armazena informações sobre os processos, o Virtual Address Descriptor (VAD), descrevendo qual é a área de memória 23 utilizada pelos processos que estão em execução, além de outras informações relacionadas a cada um. Dessa forma é possível reconstruir o espaço de endereçamento virtual de um processo e recuperar arquivos relacionados a ele que estejam mapeados na memória (van Baar, Alink, van Ballegooij, 2008). 3.2. DADOS ENCONTRADOS NA MEMÓRIA VOLÁTIL Existe uma grande diversidade de dados disponíveis na memória principal, ou memória volátil, de um sistema. Informações de rede, informações sobre processos, arquivos abertos e chaves de registro (registry), dados ocultos, bibliotecas e módulos carregados pelo sistema operacional, dentre outros. Nessa seção serão apresentados os principais tipos de dados que podem ser capturados da memória principal e que podem ser úteis para o processo de perícia forense baseado em conteúdo obtido na memória. 3.2.1. Processos Podem ser encontradas na memória informações sobre os processos que estavam em execução no momento da captura, assim como sobre os processos ocultos e processos já finalizados, caso a área de memória que estes últimos ocupavam não tenha sido realocada após sua finalização. Por exemplo, podem ser encontradas bibliotecas carregadas por determinado processo e/ou sua memória endereçável. 3.2.2. Arquivos abertos e Conteúdo do Registro do Windows (Registry) Verificar quais arquivos foram abertos por determinado processo pode ser muito útil em uma investigação, pois é possível estabelecer quais as atividades associadas a este processo. No caso de um malware instalado na máquina, por exemplo, encontrar os arquivos associados ao processo em execução pode levar à descoberta do código malicioso armazenado no disco, que tipo de saída está sendo produzida e onde os dados estão sendo gravados, ou quais arquivos pré-existentes foram removidos e modificados. Também é possível determinar 24 quais as chaves de registro (registry keys) que determinado processo estava acessando através da análise forense da memória. Em sistemas UNIX, a estrutura de inodes provê informações sobre os arquivos mapeados na memória, como permissões de acesso, identificação dos donos do arquivo, data e horário do último acesso e da última alteração, tamanho e ponteiros para o arquivo. 3.2.3. Informações de rede As informações sobre as conexões de rede geralmente representam um dos dados mais críticos e importantes para a condução da investigação. Podem ser encontradas informações sobre as conexões estabelecidas, principalmente IPs e portas em listening. A obtenção desses dados a partir do dump da memória é importante porque como o sistema está sob suspeita após a invasão, ferramentas básicas que forneceriam esses dados, como o netstat, não são mais confiáveis, podem ter sido manipuladas pelo invasor para exibirem resultados diferentes. Assim, utilizando as informações coletadas diretamente da memória é menos provável que o invasor oculte os dados de interesse do investigador. 3.2.4. Senhas e Chaves Criptográficas Uma das grandes vantagens da forense em memória é a possibilidade de encontrar senhas e chaves criptográficas para decifrar conteúdos que estão criptografados no disco ou ter acesso a arquivos protegidos por senha e contas de correio eletrônico ou de mensagens instantâneas, por exemplo. Dificilmente senhas e chaves criptográficas poderiam ser obtidas através de análise do disco rígido, pois em geral são armazenadas com algum tipo de proteção. Através da coleta dos dados em memória, no entanto, é possível obtê-lo, pois ao utilizar a senha o usuário precisa digitá-la e inevitavelmente ela será armazenada na memória, permanecendo ali até que essa área de dados seja reutilizada e seus dados sobrescritos. 25 3.2.5. Conteúdo decifrado Caso não seja possível recuperar as senhas e chaves criptográficas na memória, esta é outra forma de se obter acesso aos dados cifrados no disco. Quando um arquivo criptografado é acessado, seu conteúdo é então decifrado e carregado na memória, podendo permanecer nela armazenado mesmo depois que tiver sido fechado, desde que a área de memória não seja realocada e os dados sobrescritos. Assim, é possível recuperar todo o conteúdo dos arquivos ou ainda alguns fragmentos úteis. 3.2.6. Dados Ocultos É possível que o invasor armazene dados que deseja esconder na memória ao invés do disco rígido, pois a chance de serem descobertos é menor, já que a análise da memória é menos freqüente que o exame do disco rígido. Para o invasor, é mais seguro ocultar esses dados na memória, porque sua eliminação também é mais simples, bastando, por exemplo, reiniciar a máquina da qual já possui controle. 3.2.7. Códigos Maliciosos Além de poder ocultar na memória arquivos e informações sensíveis que deseja proteger, o invasor pode executar códigos maliciosos, como rootkits, que residem exclusivamente na memória. Assim, o código contendo as instruções e atividades maliciosas não fica disponível com facilidade para o investigador, dificultando seu trabalho e uma possível engenharia reversa. Essa técnica, de utilizar a memória ao invés do disco para armazenar malwares tem crescido significativamente, pois os antivírus e ferramentas de detecção de malwares não são tão eficazes na detecção de códigos maliciosos na memória volátil quanto o são no disco; alguns nem possuem essa funcionalidade. Enquanto um programa está em execução, sabe-se que pelo menos parte dele estará residindo na memória. Porém, quando sua execução é finalizada e a área de memória que este ocupava é desalocada, não se sabe por quanto tempo os dados persistem ali, devido a uma 26 série de fatores que tornam o ciclo de vida desses dados não previsível, como o tipo de sistema operacional, nível de atividade do sistema e quantidade de memória disponível. Mesmo tendo conhecimento de quais dados é possível extrair da memória, não é possível medir ao certo a sua persistência na memória, nem mesmo ter a certeza de quanto tempo os dados que foram encontrados já estavam ali. Como cada kernel e seu gerenciador de memória possui implementação própria, obter metadados associados a tempo sobre a memória não é uma tarefa simples, ao contrário de uma análise utilizando MAC Times, por exemplo, que pode prover informações temporais sobre os dados no sistema de arquivos. Alguns sistemas computacionais, independentemente do sistema operacional, quando são reinicializados apagam os dados anteriores da memória principal. Pode ser importante levar em consideração esta particularidade ao capturar os dados, para se vislumbrar a potencial longevidade dos dados que estão na memória. Conforme citado anteriormente, estudos já questionaram a volatilidade da memória principal e mostraram que é possível recuperar dados nela presentes durante o funcionamento do sistema, dependendo da intensidade de utilização da memória e realocação de suas páginas, ou até mesmo após a sua reinicialização. 3.3. TÉCNICAS PARA ANÁLISE FORENSE DA MEMÓRIA Para viabilizar a análise forense baseada na memória RAM, é necessário que o perito conheça bem procedimentos distintos para coleta de dados, assim como técnicas para análise do conteúdo obtido. Nesse capítulo serão discutidos procedimentos e técnicas para a forense de memória, assim como serão apresentadas ferramentas para a aquisição e análise dos dados existentes da memória volátil. 3.3.1. Recuperação de Arquivos Mapeados em Memória No sistema operacional Windows, a estrutura EPROCESS concentra dados sobre todos os processos, incluindo informações sobre seus atributos e ponteiros para outros objetos e estruturas de dados que são relacionados a ele. A estrutura EPROCESS contém o bloco process environment (PEB), que contém dados carregados pelo processo, como módulos e 27 arquivos, o que pode ser muito útil na análise de malwares e rootkits. O PEB também exibe onde reside a imagem dos executáveis, caminhos das DLLs e as linhas de comando utilizadas para execução do processo. O PEB possui ponteiros para a raiz da árvore de descritores VAD (Virtual Address Descriptor), uma estrutura que armazena informações sobre os processos, descrevendo qual é a área de memória utilizada pelos processos que estão em execução, além de outras informações relacionadas a cada um. Com base nessa estrutura é possível reconstruir o espaço de endereçamento virtual de um processo e recuperar arquivos relacionados a ele que estejam mapeados na memória. A Figura 3.1 mostra a representação visual da estrutura VAD tree. Como pode ser visto, o mapeamento de arquivos utiliza diferentes estruturas de dados. A figura apresenta as ligações estabelecidas entre essas estruturas de memória e exibe informações sobre os arquivos mapeados em memória. As linhas pontilhadas indicam ponteiros que são apagados quando um processo é finalizado. Uma das estruturas da árvore VAD, denominada Object Table lista os objetos privados que estão em uso por um processo: arquivos, chaves de registro (registry keys) ou eventos. Os arquivos mapeados em memória associados com cada processo podem ser recuperados percorrendo a estrutura da árvore VAD e encontrando os objetos de interesse. Tal como acontece com os processos que foram finalizados, arquivos que foram fechados permanecem na memória, apesar não serem elencados nas listas mantidas pelo sistema operacional, e assim devem ser recuperados através de métodos alternativos. O processo de reconstrução de tais arquivos é similar ao de reconstruir arquivos que foram removidos de um disco rígido, embora o processo seja mais complexo com a memória, pelo fato desta ser mais fragmentada. Geralmente, observando a estrutura Page Table é possível recuperar estes arquivos mesmo que não estejam ativos na memória. A área da memória denominada Control Area mantém os vínculos entre nomes de arquivos e seus dados que foram armazenados nas páginas de memória. Caso esta área ainda esteja presente, é possível recuperar também o nome do arquivo (AMARI, 2009). 28 Figura 3.1 - Representação visual da árvore de descritores: VAD tree. (van Baar, Alink, van Ballegooij, 2008). 3.3.2. Recuperação de Arquivos Através de Assinatura Outra técnica, mais antiga e menos confiável, mas bastante utilizada para se recuperar arquivos na memória é conhecida como Data Carving ou File Carving. Essa técnica se baseia no fato de que cada tipo de arquivo tem uma assinatura diferente, que se refere a determinados padrões de valores que são únicos para aquele tipo de arquivo. Assim, arquivos do tipo zip, ou com extensões doc e jpeg, por exemplo, terão assinaturas próprias, constituindo padrões únicos. O processo de “escavação de dados”, buscando pela assinatura, pode ser realizado linearmente na imagem da memória; se realizado desta forma, arquivos contíguos podem ser recuperados, mas fragmentos de arquivos não. Porém, existem algoritmos de data carving complexos que são capazes de recuperar arquivos fragmentados utilizando as estruturas que os descrevem internamente com maior profundidade. 29 Essa técnica também pode ser utilizada para recuperação em discos rígidos, inclusive com maior êxito que em dumps de memória, pois normalmente os sistemas operacionais buscam não fragmentar os arquivos no disco. Assim, como é comum que apenas partes de um arquivo sejam carregadas na memória, ao invés dele inteiro, mesmo que seja utilizado um algoritmo eficiente, é possível que as partes que o compõem e que são de interesse do investigador não sejam encontradas, impedindo sua recuperação. Embora seja uma técnica que nem sempre garante resultados satisfatórios, é importante que seja considerada e faça parte do kit de ferramentas de um perito forense. 3.3.3. Detecção e Recuperação de Dados Escondidos É importante levar em consideração que as técnicas apresentadas anteriormente, apesar de serem úteis e auxiliar no processo de recuperação, não se aplicam a todos os processos e threads. Quando um processo é finalizado ou ocultado pelo sistema operacional, a estrutura de dados que definia aquele processo não fará mais parte da árvore VAD e demais listagens que o sistema operacional mantém para controlar o que está em execução. No entanto, processos e threads encerrados, ou arquivos fechados, podem ser de grande importância ao investigador, já que podem estar relacionados ao incidente, mas terem sido finalizados antes que o material para análise fosse coletado. Um invasor pode utilizar manipulação direta de objetos do kernel (DKOM) para remoção de processos suspeitos ou outros tipos de objetos das listas e tabelas que o kernel utiliza para controlá-los, ocultando esses objetos da API do Windows e tornando as técnicas apresentadas nas seções anteriores ineficientes. Dessa forma, é importante desenvolver métodos que não dependam das estruturas de dados utilizadas pelo sistema operacional. Conforme (AMARI, 2009), todos os tipos de objetos possuem padrões relacionados a eles, como exemplo, o cabeçalho de cada processo vai possuir constantes que serão as mesmas para cada processo encontrado na memória. Assim, para encontrar processos não referenciados nas estruturas de dados do sistema operacional, é necessário buscar por toda a imagem da memória pelos valores dessas constantes, utilizando-os como guia no processo de busca. Existem atualmente ferramentas que efetuam essa busca de forma automatizada para alguns objetos comuns como processos e arquivos. Algumas características exploradas por essas ferramentas para encontrar processos escondidos são explicadas por (AMARI, 2009): na estrutura EPROCESS, o ponteiro DirectoryTableBase aponta para o início de estruturas, 30 então pode ser utilizado para percorrer a informação a fim de encontrar partes importantes e checar com a “assinatura” previamente mapeada de um processo. Outra checagem é o valor da PageDirectorytable, que deve ser diferente de zero. Cada processo requer, no mínimo, uma thread; as threads são armazenadas em uma estrutura que é basicamente outra lista de vínculos, semelhante ao que ocorre com os processos, e fica armazenada no espaço de kernel da memória. Dois ponteiros, ThreadListHead.Flink e ThreadListHead.Blink, são verificados para se confirmar que apontam para um endereço maior que 0x7fffffff, o que significa que devem apontar para o espaço do kernel na memória. Há também outras verificações importantes que podem ser realizadas, para se verificar a probabilidade de que os objetos em memória sejam processos ocultos. 3.4. EXTRAÇÃO DE DADOS DA MEMÓRIA VOLÁTIL Existe uma diversidade de métodos que podem ser utilizados para fazer a aquisição dos dados presentes na memória, alguns deles baseados em hardware e outros em software. A seguir serão apresentados os principais métodos utilizados para extração dos dados e alguns aspectos técnicos associados. Tendo conhecimento das opções, o perito pode eleger a que mais se adequa ao sistema alvo e ao caso que está investigando e assim agir com maior prudência. 3.4.1. Hardware Existem dispositivos que possibilitam a captura do conteúdo da memória RAM. Eles são normalmente utilizados para depurar problemas de hardware, mas também podem ser utilizados para análise forense. O dispositivo Tribble, um cartão PCI, foi desenvolvido especialmente para a prática forense no ano 2004. Outra solução baseada em hardware, que pode ser viável em sistemas que disponham de portas do tipo firewire, baseia-se no acesso direto à memória (DMA), sem utilização do processador. Nesse caso, o mapeamento da memória é executado diretamente em hardware, de forma independente do sistema operacional. Dispositivos firewire podem ler a memória 31 com velocidades superiores aos sistemas que não utilizam DMA (Direct Memory Access) e, além disso, não enfrentam o problema de algumas versões do Windows que não permitem que a memória seja acessada em modo usuário. No entanto, não há garantia de que a coleta via dispositivos firewire será bem sucedida, pois a memória pode não ser completamente copiada ou o sistema pode travar durante o processo de aquisição. A vantagem em se realizar a coleta utilizando soluções baseadas em hardware é que esse procedimento é menos intrusivo para o sistema. Em uma abordagem com software é preciso rodar um programa que carrega dados na memória, o que pode sobrescrever dados de interesse que nela estão armazenados. Dependendo da forma em que o software foi concebido, ele pode precisar utilizar bibliotecas disponíveis no sistema operacional, que podem ter sido manipuladas pelo invasor e não fornecer resultados confiáveis. Já em uma coleta efetuada com hardware não são carregados programas no sistema, tornando o conteúdo obtido mais confiável e fiel ao original. As soluções baseadas em hardware são opções interessantes principalmente quando o sistema está bloqueado ou quando a possibilidade de alteração e contaminação do sistema é inaceitável. A desvantagem é que o hardware precisa ser instalado previamente ao incidente, devido à necessidade de reinicialização do sistema, e esse tipo de solução possui custos mais elevados. 3.4.2. Crash Dumps A análise de crash dumps é outra forma de se obter informações sobre o conteúdo da memória RAM. Diferentemente de outros métodos de coleta baseados em software, a imagem obtida a partir de um crash dump é uma cópia inalterada do conteúdo da memória de um sistema no momento em que ocorreu o crash. Isso ocorre porque quando o crash dump ocorre, o estado do sistema é congelado e o conteúdo da RAM é gravado em um arquivo de paginação, para posteriormente ser escrito no disco, em um arquivo com tamanho igual ao da memória física. Assim, o arquivo de paginação deve ser configurado para ser igual ao tamanho da memória mais 1MB (megabyte) para o cabeçalho e deve haver espaço em disco suficiente para gravar um arquivo do tamanho da memória. Não é necessário instalar nenhum software no sistema para realizar a coleta, e conseqüentemente não há alteração do conteúdo da memória, mas como há gravação de arquivo no disco, outros vestígios podem acabar sendo destruídos. A desvantagem desse 32 método é que os crash dumps ocorrem apenas quando há falhas no sistema. É possível induzir um crash dump; no entanto, no Windows, isso requer alteração em uma chave do registro (registry key) e reinicialização do sistema, ou seja, o ambiente já deve estar preparado para essa possibilidade antes do incidente, caso contrário, não será válido para a realização da coleta do conteúdo da memória. A Microsoft fornece ferramentas para análise de crash dumps. Mesmo com as particularidades acima descritas, é interessante que o perito tenha familiaridade com a análise de crash dumps, pois estes podem fornecer informações relevantes. Os sistemas operacionais da família Windows permitem gerar três tipos de crash dumps: pequeno, kernel e completo. O crash dump completo é o que contém todo o conteúdo da RAM, mas nem todas as versões de Windows permitem gerar um crash dump completo. O Windows 2003 permite, mas o Windows Vista e Windows 2008 Server não permitem crash dumps completos em sistemas com mais de 4GB (gigabytes) de memória. 3.4.3. Dumps Existem diversos programas utilitários que possibilitam a aquisição da imagem da memória de um sistema, alguns serão descritos no capítulo 3.5 deste trabalho. Essas ferramentas fazem a leitura da memória bit-a-bit e copiam seu conteúdo para um arquivo, o dump da memória. Esse arquivo terá o mesmo tamanho da memória física do sistema. O que deve ser levado em conta, independente da ferramenta que está sendo utilizada, é que, como atesta o Princípio da Troca de Locard, quando um programa de aquisição de dump é executado, ele deve ser carregado na memória, significando ele deixará vestígios, e que algum espaço da memória que poderia conter informações valiosas será utilizado, podendo acarretar inclusive a movimentação da área ocupada por processos para arquivos de paginação. Além disso, enquanto a ferramenta está lendo o conteúdo da memória, o estado do sistema não fica congelado, significando que enquanto algumas páginas estão sendo copiadas, outras podem estar sendo alteradas, caso o processo que a utilize ainda esteja rodando, por exemplo. O que vai definir o tempo gasto para coletar a imagem são fatores como a velocidade do processador, taxas de barramento e operações de entrada e saída do disco. Apesar de não garantirem uma cópia fiel da memória, pois o sistema permanece em alteração, a grande vantagem de utilizar ferramentas de dump é que o sistema não precisa ser desligado ou reiniciado, não há restrição sobre onde a imagem gerada deve ser armazenada 33 (localmente ou em outro host da rede, utilizando netcat) e existem ferramentas disponíveis gratuitamente para realizar análise dos dumps gerados. Este é o método mais utilizado atualmente pelos peritos em forense computacional para aquisição do conteúdo da RAM. 3.4.4. Virtualização Adicionalmente, nos casos em que é utilizada a virtualização, com softwares como VMWare, um produto bastante popular, é possível suspender a sessão do sistema operacional que está em execução, mantendo-a congelada temporariamente. E quando a sessão é congelada, o conteúdo da memória é gravado em um arquivo cujo formato é semelhante a um dump de memória, e que pode posteriormente ser analisado. 3.4.5. Hibernação Quando um sistema Windows entra em modo de “Hibernação”, o conteúdo da memória é comprimido e salvo em um arquivo chamado “Hiberfil.sys”. A compressão do conteúdo se dá para minimizar operações de entrada e saída do disco, e a análise deste arquivo pode fornecer informações sobre o que estava acontecendo no sistema no momento em que ele entrou em hibernação. Durante as fases da investigação, é possível que o perito se depare com uma situação em que não seja necessário coletar todo o conteúdo da RAM, bastando-lhe ter acesso ao conteúdo da memória utilizado por determinado processo. Existem ferramentas disponíveis para coletar apenas o conteúdo da memória relacionado a um processo, assim como informações adicionais a seu respeito (módulos carregados, arquivos abertos, etc). Essas ferramentas não se restringem a coletar apenas a memória física utilizada pelo processo, mas também a memória virtual, nos arquivos de paginação. Porém, são aplicáveis apenas aos processos que são visíveis e considerados como ativos pelo sistema operacional; processos ocultados por rootkits, por exemplo, não podem ser analisados com essas ferramentas específicas. 34 3.5. FERRAMENTAS PARA AQUISIÇÃO DE CONTEÚDO DA MEMÓRIA RAM Neste tópico serão apresentadas ferramentas comerciais e gratuitas que podem ser utilizadas para se realizar a aquisição de memória em sistemas operacionais Windows. A intenção não é cobrir todas as possibilidades existentes, mas apresentar as ferramentas mais utilizadas pelos profissionais da área de forense computacional. 3.5.1. DD Uma ferramenta bastante popular e considerada por muito tempo padrão na área de forense computacional, o DD (data dumper), foi desenvolvida inicialmente para sistemas Unix, não exclusivamente para possibilitar o dump da memória, mas também para realizar cópias de discos rígidos, dentre outras funções como a geração de hashes criptográficos. Posteriormente, o DD foi adaptado para rodar sob sistemas operacionais Windows, permitindo coletar o conteúdo da memória RAM através do acesso ao dispositivo \Device\PhysicalMemory em modo usuário. No entanto, nas versões mais recentes do Windows, que vieram após o Windows 2003 SP1, o acesso a determinadas áreas da memória foi limitado e então somente os kernel drivers conseguem realizar o dump, tornando a ferramenta inadequada para essa finalidade em sistemas Windows. Nas versões mais recentes do DD, o device \\.\PhysicalMemory já não vem mais habilitado. 3.5.2. Mandiant Memoryze Mandiant Memoryze é um software gratuito de forense de memória que pode ser utilizado tanto para a aquisição quanto para a análise de imagens de memória. É capaz de realizar o dump de todo o espaço físico de memória, independente de APIs do Windows, ou apenas do espaço endereçável por um processo no disco. Também permite obter a imagem de um driver específico ou mesmo todos os drivers carregados na memória. A ferramenta permite enumerar todos os processos em execução e identificar módulos do kernel presentes na memória. 35 3.5.3. ManTech Memory DD ManTech Memory DD é um software open source, disponibilizado sob licença GPL para uso governamental ou particular. É capaz de adquirir imagens de memória e armazenar em arquivos binários em formato raw, que então devem ser analisados por outras ferramentas. Para auxiliar na verificação da integridade dos dados e preservação das evidências, é utilizado o algoritmo de hash MD5. A ferramenta permite copiar até 4GB de memória em um arquivo de dump para análise posterior e não precisa ser instalada no sistema, podendo ser executado a partir de mídias removíveis. 3.5.4. FastDump FastDump é uma ferramenta gratuita especialmente voltada para o estudo de malwares que auxilia o investigador a entender o funcionamento de executáveis. A ferramenta gera um arquivo binário contendo a imagem da memória RAM, que vai depender do tamanho da memória presente no sistema. Suporta apenas aquisição em sistemas 32 bits de até 4GB de memória RAM, não suportando o Windows Vista, Windows 2003 e Windows 2008. Possui uma versão comercial, o FDPro, que suporta todas as versões de Windows, 32 e 64 bits, em sistemas com até 64BG de RAM. 3.5.5. KntDD KntDD é uma ferramenta de aquisição de memória que faz parte da suíte KntTools. Foi desenvolvido visando driblar a restrição de acesso à memória física (\\.\PhysicalMemory) em modo usuário existente nas versões mais recentes do sistema operacional Windows. Através dessa ferramenta é possível adquirir imagens em um disco removível local ou através da rede, nos sistemas com Windows 2000 ou versões posteriores. Ela também permite converter imagens em formato “raw” para o formato de crash dumps Microsoft, de forma que os dados possam ser analisados utilizando o “Microsoft Debugging Tools”. Essa ferramenta é disponibilizada apenas para autoridades da lei ou profissionais de segurança. 36 3.5.6. MoonSols Windows Memory Toolkit MoonSols Windows Memory Toolkit é um conjunto de ferramentas voltadas para forense de memória em Windows. Os utilitários Win32dd e Win64dd, considerados como um dos melhores utilitários para dump de memória pelos profissionais da área, fazem parte do grupo de ferramentas disponibilizados por esta suíte, possibilitando a aquisição de memória em formato raw, crash dumps Microsoft, arquivos de hibernação do Windows, e imagens de VMWare. Além dos utilitários para realização de dump da memória, também são disponibilizados outros utilitários para conversão da imagem adquirida para diversos formatos distintos de dump. Uma funcionalidade muito importante é que a ferramenta torna possível a conversão de todos os dumps de memória física no Windows para o mesmo formato dos crash dumps Microsoft, que podem então ser analisados com a ferramenta Microsoft Windows Debugger (WinDbg), uma ferramenta importante para a análise de memória RAM. Possui duas versões: Community Version e Professional Version, sendo a primeira gratuita e a segunda comercial, contemplando algumas funcionalidades adicionais como o uso dos utilitários Win32dd e Win64dd em scripts/batchs. 3.5.7. Nigilant32 Nigilant32 é uma ferramenta desenvolvida pela Agile Risk Management que permite ao investigador visualizar a imagem de um disco rígido ou da memória e obter informações sobre os processos que estão em execução e das portas que estão abertas no sistema. Essa ferramenta causa alterações relativamente pequenas no sistema, pois utiliza menos de 1MB (megabyte) da memória quando é carregado, minimizando assim o impacto causado pelo processo de aquisição. A versão disponibilizada atualmente é beta, e o software pode ser baixado e utilizado gratuitamente. 3.5.8. FTK Imager FTK Imager é uma ferramenta gratuita disponibilizada pela Access Data para aquisição de imagens forenses. A ferramenta permite criar, principalmente, imagens de discos 37 rígidos em vários formatos, assim como a captura de arquivos bloqueados pelo sistema. Mas também possibilita a aquisição de dumps da memória RAM e análise de imagens forenses. 3.5.9. Winen.exe Winen.exe é uma ferramenta de aquisição de memória RAM que faz parte do software de análise forense comercial Encase Forensic, considerado padrão e amplamente adotado no mercado. O executável pode ser rodado através de linha de comando ou arquivo de configuração. É possível executá-lo através de um dispositivo USB conectado ao sistema alvo e o conteúdo coletado da RAM é salvo em um arquivo com extensão .E01. Existem as versões 32-bits e 64-bits. 3.6. FERRAMENTAS PARA ANÁLISE FORENSE DA MEMÓRIA Após a obtenção da imagem da memória RAM, o investigador deve providenciar sua replicação, gerando cópias e, em seguida, proceder com a análise de seu conteúdo, com a finalidade de obter evidências sobre o incidente de segurança que ocorreu no sistema. Segundo (CARVEY, 2007), até 2005, o procedimento padrão para a análise envolvia a execução de ferramentas simples, como “strings” e “grep”, para realizar buscas por endereços de correio eletrônico, endereços IP, URLs, dentre outras informações. Apesar de ser uma abordagem que fornece resultados importantes, não provê informações sobre o contexto em que determinada informação foi encontrada. Assim, não permite estabelecer, por exemplo, a que processo está relacionado determinado IP ou string que foi encontrada na memória. Desde então, esforços foram feitos para tentar adicionar contexto às informações encontradas na RAM, localizando processos específicos e as páginas da memória que estes utilizam. Foram desenvolvidas ferramentas que podem ser utilizadas para analisar os dumps e, como resultado, devolver informações detalhadas sobre processos e outras estruturas. Uma das primeiras coisas que um perito faz durante a atividade de análise é procurar pelos processos que estavam em execução quando a imagem foi capturada. Em sistemas operacionais Windows existe uma estrutura básica que contém todas as informações a respeito de um processo específico; uma lista contendo os vínculos estabelecidos entre essas 38 estruturas é utilizada para manter controle de todos os processos em execução (AMARI, 2009). Conforme já mencionado anteriormente, a estrutura EPROCESS é que representa um processo no sistema operacional Windows. Essa estrutura varia entre as diferentes versões do Windows, inclusive entre service packs da mesma versão. Assim, é importante conhecer a versão do sistema operacional em que foi obtida a imagem da memória, para que se escolha adequadamente as ferramentas que serão utilizadas na análise. A ferramenta “osid.pl”, um script em Perl escrito por Harlan Carvey, autor do livro Windows Forensics Analysis, faz o reconhecimento de qual é a versão e service pack do Windows que estão em execução no sistema em que o dump foi obtido. Existem atualmente diversas ferramentas para realizar perícia forense de memória volátil em sistemas operacionais Windows. Nessa seção, algumas ferramentas disponibilizadas gratuitamente serão descritas e analisadas. Existem também ferramentas comerciais que são padrão no mercado, como os softwares Encase Enterprise, F-Response e HBGary Responder; no entanto o foco desta seção estará voltado para ferramentas gratuitas. Não se pretende aqui manter uma lista de todas as ferramentas, mas apenas descrever algumas das mais utilizadas pelos profissionais da área. É importante que o perito conheça bem o comportamento das ferramentas utilizadas, testando-as em imagens de memória conhecidas antes de adotá-las em um processo de investigação formal, pois assim, é possível conhecer bem suas saídas, o formato em que as informações serão apresentadas e evitar a ocorrência de falsos positivos ou falsos negativos por uso indevido ou desconhecimento acerca do comportamento do software. Ao testar as ferramentas, também é interessante realizar comparativos entre ferramentas similares, para que o perito verifique se informações importantes estão faltando ou se existe o retorno de falsos positivos. Caso alguma ferramenta apresente inconsistências ou demonstre não funcionar adequadamente em alguma situação, é possível que não seja aceita como válida para gerar provas em processos judiciais, tornando todo o processo investigativo inválido. Não foi possível encontrar muitas informações e documentação disponível sobre as ferramentas que serão apresentadas. Os dados são baseados, principalmente, no artigo publicado por (AMARI, 2009), nos sites oficiais destas ferramentas e na instalação das mesmas para testes em laboratório. Deve-se tomar o cuidado de não utilizá-las diretamente no sistema sob análise, pois caso ele tenha sido comprometido, pode retornar falsos resultados, escondendo informações sobre as ações do invasor. O ideal é executar as ferramentas através de um CD, DVD ou dispositivo USB para mitigar esse risco. 39 3.6.1. Ferramentas básicas Algumas ferramentas que não foram criadas com a finalidade específica de se realizar análise forense também podem ser utilizadas para realização da perícia, de forma a contribuir com informações significativas, sendo geralmente utilizadas para verificar o estado do sistema. Dentre elas podemos citar o WinDbg, que faz parte do Debugging Tools for Windows, uma ferramenta para depuração de erros em dispositivos, aplicativos e serviços nos sistemas operacionais Windows e que pode ser utilizada inclusive para analisar crash dumps. Possui interface gráfica e não precisa ser instalado na máquina sob análise. Outras ferramentas úteis são os comandos tasklist - para exibir os processos em execução e suas informações, strings – para buscar strings em dumps de memória, ipconfig – para fornecer informações sobre as interfaces de rede e sua configuração e netstat – para fornecer informações sobre conexões de rede ativas. 3.6.2. Volatility Framework O framework Volatility é uma coleção de ferramentas implementadas em Python sob licença GNU GPL para extração de artefatos digitais de amostras de memória volátil (RAM). As técnicas de extração são executadas de forma independente do sistema que está sendo investigado, oferecendo visibilidade para o estado de execução do sistema. Atualmente o framework oferece as seguintes funcionalidades para extração de dados na memória: • Exibe a data e hora da imagem • Processos em execução, sockets abertos e conexões de rede ativas • Apresenta as DLLs carregadas para cada processo • Exibe os arquivos abertos para cada processo • Identificadores de registro abertos para cada processo • Espaço de memória endereçável de um processo • Módulos do kernel do sistema operacional • Informações sobre o Virtual Address Descriptor • Extração de executáveis a partir de uma imagem da memória 40 A ferramenta suporta uma variedade de formatos de dump, efetua a conversão automática entre alguns formatos e pode ser utilizada em qualquer plataforma que suporte Python. Sua instalação e utilização são simples, bastando descompactar o pacote fornecido pela Volatility Systems em um sistema em que o Python já tenha sido instalado. Seguem abaixo exemplos da utilização de alguns comandos importantes do Volatility em uma imagem de memória capturada utilizando a ferramenta Win32DD. Primeiramente, o quadro 3.1 mostra a execução do comando “python volatility”. Essa opção exibe todos os comandos disponíveis para execução. C:\Volatility>python volatility Volatile Systems Volatility Framework v1.3 Copyright (C) 2007,2008 Volatile Systems Copyright (C) 2007 Komoku, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. usage: volatility cmd [cmd_opts] Run command cmd with options cmd_opts For help on a specific command, run 'volatility cmd --help' Supported Internel Commands: connections Print list of open connections connscan Scan for connection objects connscan2 Scan for connection objects (New) datetime Get date/time information for image dlllist Print list of loaded dlls for each process dmp2raw Convert a crash dump to a raw dump dmpchk Dump crash dump information files Print list of open files for each process hibinfo Convert hibernation file to linear raw image ident Identify image properties memdmp Dump the addressable memory for a process memmap Print the memory map modscan Scan for modules modscan2 Scan for module objects (New) modules Print list of loaded modules procdump Dump a process to an executable sample pslist Print list of running processes psscan Scan for EPROCESS objects psscan2 Scan for process objects (New) raw2dmp Convert a raw dump to a crash dump regobjkeys Print list of open regkeys for each process sockets Print list of open sockets sockscan Scan for socket objects sockscan2 Scan for socket objects (New) strings Match physical offsets to virtual addresses (may take a while, VERY verbose) thrdscan Scan for ETHREAD objects thrdscan2 Scan for thread objects (New) vaddump Dump the Vad sections to files vadinfo Dump the VAD info vadwalk Walk the vad tree Supported Plugin Commands: memmap_ex_2 Print the memory map 41 pslist_ex_1 pslist_ex_3 usrdmp_ex_2 Print list running processes Print list running processes Dump the address space for a process Example: volatility pslist -f /path/to/my/file Quadro 3.1 - Uso do comando volatility O quadro 3.2 mostra o uso do comando ident, que pode ser utilizado para identificar a data e hora em que a imagem foi coletada, assim como prover informações sobre o sistema operacional no qual foi gerado o dump: C:\Volatility>python volatility ident –f C:\dump_tcc_anapaula.dmp Image Name: C:\dump_tcc_anapaula.dmp Image Type: Service Pack 1 VM Type: nopae DTB: 0x39000 Datetime: Fri May 13 14:24:36 2011 Quadro 3.2 – Uso do comando ident da ferramenta Volatility Pode-se utilizar a opção --help com qualquer comando para obter ajuda, conforme mostra o quadro 3.3. C:\Volatility>python volatility ident –-help Usage: ident [options] (see --help) Options: -h, --help show this help message and exit -f FILENAME, --file=FILENAME (required) XP SP2 Image file -b BASE, --base=BASE (optional, otherwise best guess is made) Physical offset (in hex) of directory table base -t TYPE, --type=TYPE (optional, default="auto") Identify the image type (pae, nopae, auto) Quadro 3.3 - Utilizando a opção help da ferramenta Volatility Para listar os processos que estavam em execução no momento em que foi gerado o dump, pode-se utilizar o comando pslist. Como pode ser visto no quadro 3.4, a saída vai conter o nome do processo, seu identificador (Pid) e identificador do processo-pai (PPid), além do horário em que ele foi iniciado e outras informações úteis. 42 C:\Volatility>python volatility pslist –f C:\dump_tcc_anapaula.dmp Name System smss.exe csrss.exe winlogon.exe services.exe lsass.exe svchost.exe svchost.exe svchost.exe svchost.exe spoolsv.exe explorer.exe NeroCheck_.exe jusched.exe ctfmon.exe msmsgs.exe jqs.exe wmiapsrv.exe swriter.exe soffice.exe soffice.bin wuauclt.exe cmd.exe IEXPLORE.EXE javaws.exe javaw.exe win32dd.exe Pid 4 356 540 600 648 660 844 944 1200 1232 1348 1600 1740 1788 1796 1808 1932 404 1572 1580 1588 2016 416 1048 512 784 1440 PPid 0 4 356 356 600 600 648 648 648 648 648 1500 1600 1600 1600 1600 648 648 1600 1572 1580 944 944 1600 1788 512 416 Thds 46 3 11 21 23 25 10 69 7 15 12 14 7 1 1 13 5 4 1 1 5 6 1 25 1 14 1 Hnds 256 21 417 445 289 308 229 1013 67 136 113 394 31 95 53 269 195 125 19 19 154 94 20 626 0 0 23 Time Thu Jan Sun May Sun May Sun May Sun May Sun May Sun May Sun May Sun May Sun May Sun May Sun May Sun May Sun May Sun May Sun May Sun May Sun May Sun May Sun May Sun May Sun May Sun May Sun May Sun May Sun May Sun May 01 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 00:00:00 16:53:25 16:53:26 16:53:27 16:53:29 16:53:29 16:53:30 16:53:30 16:53:33 16:53:33 16:53:34 16:53:35 16:53:36 16:53:36 16:53:36 16:53:36 16:53:41 16:53:48 16:54:04 16:54:06 16:54:06 16:54:57 16:55:14 16:57:09 16:58:46 16:58:51 16:58:54 1970 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 Quadro 3.4– Uso do comando pslist da ferramenta Volatility A opção connscan fornece informações sobre as conexões de rede que estavam ativas no momento em que os dados foram coletados da memória. Já a opção sockets exibe os sockets abertos no momento em que foi gerado o dump. O comando files exibe os arquivos abertos para cada processo. É possível especificar o número do processo na linha de comando, para exibir apenas os arquivos abertos por um processo específico, conforme exemplifica o quadro 3.5. C:\Volatility>python volatility files –p 1740 –f C:\dump_tcc_anapaula.dmp Pid: 1740 File \Documents and Settings\anapaula File \WINDOWS\WinSxS\x86_Microsoft.Windows.CommonControls_6595b64144ccf1df_6.0.10.0_x-ww_f7fb5805 File \WINDOWS\SYSTEM16 Quadro 3.5 – Uso do comando files da ferramenta Volatility O comando dlllist exibe uma lista contendo as DLLs carregadas para cada processo, e o comando regobjkeys exibe uma lista contendo as chaves de registro abertas por cada processo, o que pode ser visualizado nos quadros 3.6 e 3.7 respectivamente. 43 C:\Volatility>python volatility dlllist –p 1740 –f C:\dump_tcc_anapaula.dmp NeroCheck_.exe pid: 1740 Command line : "C:\WINDOWS\System32\NeroCheck_.exe" Service Pack 1 Base Size Path 0x400000 0x33000 C:\WINDOWS\System32\NeroCheck_.exe 0x77f50000 0xab000 C:\WINDOWS\System32\ntdll.dll 0x77e50000 0xf0000 C:\WINDOWS\system32\kernel32.dll 0x77db0000 0x9d000 C:\WINDOWS\system32\ADVAPI32.dll 0x78000000 0x86000 C:\WINDOWS\system32\RPCRT4.dll 0x77c50000 0x40000 C:\WINDOWS\system32\GDI32.dll 0x77d20000 0x8c000 C:\WINDOWS\system32\USER32.dll 0x761d0000 0x99000 C:\WINDOWS\system32\WININET.dll 0x77bf0000 0x53000 C:\WINDOWS\system32\msvcrt.dll 0x772b0000 0x64000 C:\WINDOWS\system32\SHLWAPI.dll 0x76290000 0x8c000 C:\WINDOWS\system32\CRYPT32.dll 0x76270000 0xf000 C:\WINDOWS\system32\MSASN1.dll 0x77100000 0x8b000 C:\WINDOWS\system32\OLEAUT32.dll 0x440000 0x121000 C:\WINDOWS\system32\OLE32.DLL 0x78090000 0xe4000 C:\WINDOWS\WinSxS\x86_Microsoft.Windows.CommonControls_6595b64144ccf1df_6.0.10.0_x-ww_f7fb5805\comctl32.dll Quadro 3.6 – Uso do comando dlllist da ferramenta Volatility C:\Volatility>python volatility regobjkeys –p 1740 –f C:\dump_tcc_anapaula.dmp Pid: 1740 \REGISTRY\MACHINE \REGISTRY\USER\S-1-5-21-1482476501-1606980848-13430240911003\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\INTERNET SETTINGS \REGISTRY\USER\S-1-5-21-1482476501-1606980848-1343024091-1003 Quadro 3.7 – Uso do comando regobjkeys da ferramenta Volatility Também é possível, através do comando procdump, extrair executáveis a partir do dump de memória, possibilitando ter acesso ao código que estava sendo executado na máquina e, assim conhecer melhor seu comportamento. C:\Volatility>python volatility procdump –p 1740 –f C:\dump_tcc_anapaula.dmp ************************************************************************ Dumping NeroCheck_.exe, pid: 1740 output: executable.1740.exe Memory Not Accessible: Virtual Address: 0x405000 File Offset: 0x5000 Size: 0x1000 Memory Not Accessible: Virtual Address: 0x409000 File Offset: 0x9000 Size: 0x1000 Memory Not Accessible: Virtual Address: 0x40a000 File Offset: 0xa000 Size: 0x1000 Memory Not Accessible: Virtual Address: 0x40b000 File Offset: 0xb000 Size: 0x1000 Memory Not Accessible: Virtual Address: 0x40c000 File Offset: 0xc000 Size: 0x1000 Memory Not Accessible: Virtual Address: 0x40d000 File Offset: 0xd000 Size: 0x1000 Memory Not Accessible: Virtual Address: 0x40e000 File Offset: 0xe000 Size: 0x1000 Memory Not Accessible: Virtual Address: 0x40f000 File Offset: 0xf000 Size: 0x1000 Memory Not Accessible: Virtual Address: 0x410000 File Offset: 0x10000 Size: 0x1000 Memory Not Accessible: Virtual Address: 0x411000 File Offset: 0x11000 Size: 0x1000 Memory Not Accessible: Virtual Address: 0x412000 File Offset: 0x12000 Size: 0x1000 Memory Not Accessible: Virtual Address: 0x413000 File Offset: 0x13000 Size: 0x1000 Memory Not Accessible: Virtual Address: 0x41f000 File Offset: 0x1f000 Size: 0x1000 Quadro 3.8 – Uso do comando procdump da ferramenta Volatility 44 No quadro 3.8, foi possível observar a geração do executável “executable.1740.exe” e a ocorrência de mensagens informativas do tipo “Memory Not Accesible”, após utilização do comando procdump. Isso ocorre porque nem todos os endereços virtuais da memória estão acessíveis na imagem, pois podem ter sidos, por exemplo, paginados para o disco. Assim, essas mensagens fornecem um log de auditoria para que se possa determinar quais partes do executável gerado foram recuperadas com êxito. Para executar o Volatility é necessário obter previamente o dump da memória, utilizando qualquer ferramenta de dump, como as que foram citadas na seção 3.5 deste capítulo. 3.6.3. Mandiant Memoryze Memoryze é um software gratuito, disponibilizado pela empresa Mandiant especialmente para a realização de forense de memória. Pode ser utilizado para coletar dumps, assim como para analisar o conteúdo da memória, tanto em sistemas que estão em execução quanto em imagens de memória. Caso a análise seja realizada em sistemas que estão em execução, o software é capaz de realizar a análise do arquivo de paginação também. A ferramenta pode ser executada a partir de uma estação forense, na máquina que está sob análise ou através de dispositivos USB. Possui as seguintes funcionalidades: • Captura a imagem de toda a memória do sistema, de forma independente de chamadas de API. • Captura o espaço endereçável de um processo no disco, incluindo DLLs, executáveis e pilhas. • Captura a imagem de um driver específico (ou de todos) carregado na memória e o identifica. • Enumera os processos em execução, incluindo aqueles que possam estar escondidos por rootkits. • Identifica os módulos do kernel carregados na memória através do rastreamento das estruturas e listas de vínculos mantidas pelo sistema operacional 45 • Identifica manipulações envolvendo as chamadas de sistema e tabelas de descritores, muitas vezes utilizados por rootkits. O Memoryze trabalha com dois componentes: o próprio Memoryze e o Audit Viewer. O primeiro é responsável por fazer a extração e análise do conteúdo da memória, enquanto o segundo, opcional, é responsável por apresentar o resultado XML gerado pelo Memoryze em um formato mais amigável. Para utilizar o AuditViewer, é preciso instalar o Python no sistema. Após a instalação do Memoryze é possível verificar a existência de vários scripts XML, cada um com função distinta: • AcquireDriver.Batch.xml • AcquireMemory.Batch.xml • AcquireProcessMemory.Batch.xml • DriverAuditModuleList.Batch.xml • DriverAuditSignature.Batch.xml • HookAudit.Batch.xml • ProcessAuditMemory.Batch.xml Além dos scripts XML, também são encontrados os seguintes arquivos batch: • MemoryDD.bat - obtém a imagem da memória física • ProcessDD.bat - obtém a imagem do espaço de endereço do processo • DriverDD.bat - obtém a imagem de um driver específico • Process.bat - enumera todas as informações sobre um processo específico, como memória virtual, portas de rede, handle e strings • HookDetection.bat - procura por hooks (ganchos) dentro do sistema operacional • DriverSearch.bat - encontra drivers na imagem de memória analisada • DriverWalkList.bat – enumera todos os módulos e drivers em uma lista de vínculos (linked list). 46 Existem três formas de se utilizar o Memoryze: a primeira consiste em utilizar os arquivos XML nativos à ferramenta, o que requer a edição dos arquivos com extensão “*.Batch.xml” citados acima, a fim de configurá-los para realizar as atividades desejadas. A segunda forma é utilizar os scripts batch (extensão “.bat”) fornecidos. Esses scripts geram o XML adequado para executar a tarefa desejada, de acordo com as opções fornecidas na linha de comando ao executá-los. A terceira forma é utilizar Audit Viewer, que possui uma interface amigável tornando a análise mais rápida e intuitiva. Após sua configuração, devem ser escolhidas as tarefas a serem desempenhadas pelo software. A seguir, as figuras 3.2 e 3.3 exemplificam o uso do Audit Viewer. Do lado esquerdo, aparecem os processos encontrados na memória e algumas informações extras sobre cada um, como Pid, PPid, data em que foi iniciado e o caminho do executável. Do lado direito da tela existem diversas abas que podem exibir informações específicas para determinado processo que tenha sido selecionado: arquivos abertos, DLLs carregadas, chaves de registro, dentre outros. Figura 3.2 – Tela do visualizador Audit Viewer – Aba Files: análise forense da memória efetuada com o software Memoryze. 47 Figura 3.3– Tela do visualizador Audit Viewer – Aba Registry Keys: análise forense da memória efetuada com o software Memoryze. 3.6.4. Windows Memory Forensic Toolkit O Windows Memory Forensic Toolkit (WMFT) é uma coleção de utilitários destinada para uso forense. Pode ser utilizado para realizar análise forense em imagens de memória capturadas a partir de sistemas operacionais Windows 2000, Windows 2003 e Windows XP. Existem duas versões da ferramenta, uma para Linux e outra para Windows. A versão desenvolvida para Windows foi escrita em C # para a plataforma .NET e possui funcionalidades adicionais com relação à versão criada para Linux, como a possibilidade de detectar objetos escondidos. Para configurar e utilizar o WMFT é necessário que o investigador realize um trabalho manual previamente, a fim de localizar os símbolos que apontam para importantes objetos e estruturas do kernel na memória. As instruções para realização desta atividade prévia foram publicadas no documento “An introduction to Windows memory forensics”, por Mariusz Burdach, desenvolvedor da ferramenta. Após localizar o endereço destes objetos na memória, é possível alimentar o WMFT com esses valores e proceder com a análise através das 48 estruturas de dados, a fim de recuperar processos e demais objetos armazenados na memória RAM. Como o WMFT utiliza as próprias estruturas de dados para percorrer a memória e extrair as informações relevantes, é uma ferramenta vulnerável a ataques mais avançados, nos quais o atacante esconde os processos e outros objetos deixando-os fora das estruturas de dados mantidas pelo sistema operacional, que são utilizadas para acompanhamento desses dados. Além das ferramentas gratuitas aqui expostas, podemos citar outras, que também são importantes e comumente utilizadas por profissionais da área: Memparser, FATKit, PTFinder e VADTools, dentre outras. 49 50 4. ESTUDO DE CASO Nesse capítulo será realizado um estudo de caso para análise forense de malware em sistema operacional Windows. Pretende-se mostrar que a análise do conteúdo da memória volátil (RAM) pode ser muito importante para um processo de investigação forense. Objetivase, também, mostrar como podem ser utilizadas ferramentas de dump e análise de imagens de memória apresentadas nesse trabalho, com o intuito de obter evidências importantes para um processo de análise forense. 4.1. CENÁRIO Para possibilitar a realização deste estudo de caso, foi montado um ambiente de laboratório, no qual se instalou o sistema operacional Windows XP SP3 em uma máquina virtual contendo 1GB (gigabytes) de memória, criada com o software de virtualização VMWare Player. • Configurações do equipamento Processador: Intel® Core™ 2 Duo CPU T5670 @ 1.80 GHz Memória: 3,00 GB Tipo de sistema: Sistema operacional de 32 bits • Configurações da máquina virtual Software de virtualização: VMWare Player 3.1.4 Sistema operacional: Windows XP Service Pack 3 Memória: 1,00 GB Nesse ambiente foi instalado um banker, código malicioso criado para roubo de credenciais de acesso a serviços de Internet Banking. Foi utilizado um banker já conhecido pelas instituições bancárias e pelas principais ferramentas de antivírus, apenas para fins didáticos. Adicionalmente, com a finalidade de comprovar que se trata de código malicioso, o arquivo “convite.com”, que é baixado e executado pelo banker, foi submetido para análise no site Virus Total (http://virustotal.com.br), que provê o serviço de análise automatizada de 51 arquivos e URLs suspeitas, facilitando a detecção de diversos tipos de malwares. O resultado, corroborando que se trata de código malicioso, pode ser consultado no Anexo II deste trabalho. As ferramentas de análise forense utilizadas para este estudo de caso também foram instaladas e configuradas no ambiente de laboratório, visando simplificar a extração e análise das informações obtidas da memória. 4.2. REALIZAÇÃO DOS TESTES Primeiramente, foram instaladas as ferramentas Moonsols Windows Memory Toolkit 1.0 Community Edition e Volatility Framework 1.3 no ambiente de laboratório, para realização do dump e análise da memória, respectivamente. Também foi necessário instalar o Python v2.7.1 no sistema para utilização do software Volatility. Em seguida, foi acessada a URL que faz o download do código malicioso e solicita ao usuário a sua execução (http://www.djwirya.com/news/css/gif.php?=werhj34r839349rhj). Normalmente é utilizado ataque de engenharia social, com apelos para convencer o usuário a executar o arquivo em seu computador, como uma mensagem de email com fotos de artistas ou até mesmo solicitando a instalação de plugins de segurança para acesso ao Internet Banking. Ao acessar o link, o usuário é direcionado a realizar o download do arquivo “convite.com”, como pode ser visto na figura 4.1. Figura 4.1 – Download do banker 52 Quando o usuário executa o arquivo, é exibida uma mensagem de erro, conforme mostra a figura 4.2, no entanto o banker já executou suas atividades no computador. Figura 4.2 – Mensagem de erro ao executar o banker Para iniciar a análise, foi realizado um dump de memória utilizando a ferramenta win32dd.exe, já apresentada neste trabalho. O quadro 4.1 mostra os procedimentos e comando utilizados para coleta da imagem. Como pode ser observado, foi criada a imagem “dump_monografia_case.dmp” com tamanho de 1GB (gigabytes), ou seja, com o mesmo tamanho da memória física do sistema. C:\Moonsols>win32dd.exe /f dump_forense_malware.dmp C:\Moonsols>win32dd.exe /f dump_forense_malware.dmp win32dd - 1.3.1.20100417 - (Community Edition) Kernel land physical memory acquisition Copyright (C) 2007 - 2010, Matthieu Suiche <http://www.msuiche.net> Copyright (C) 2009 - 2010, MoonSols <http://www.moonsols.com> Name ---File type: Acquisition method: Content: Value ----Raw memory dump file PFN Mapping Memory manager physical memory block Destination path: dump_forense_malware.dmp O.S. Version: (build 2600) Computer name: Microsoft Windows XP Professional Service Pack 3 ANAPAULA-XP Physical memory in use: Physical memory size: Physical memory available: 38% 1048048 Kb ( 643664 Kb ( 1023 Mb) 628 Mb) Paging file size: Paging file available: 2519744 Kb ( 2034396 Kb ( 2460 Mb) 1986 Mb) Virtual memory size: Virtual memory available: 2097024 Kb ( 2083280 Kb ( 2047 Mb) 2034 Mb) Extented memory available: 0 Kb ( 0 Mb) Physical page size: Minimum physical address: Maximum physical address: 4096 bytes 0x0000000000001000 0x000000003FFFF000 53 Address space size: 1073741824 bytes (1048576 Kb) --> Are you sure you want to continue? [y/n] y Acquisition started at: [31/5/2011 (DD/MM/YYYY) 16:0:58 (UTC)] Processing....Done. Acquisition finished at: Time elapsed: [2011-05-31 (YYYY-MM-DD) 16:02:02 (UTC)] 1:04 minutes:seconds (64 secs) Created file size: NtStatus Total of Total of Total of 1073741824 bytes ( (troubleshooting): written pages: inacessible pages: accessible pages: 1024 Mb) 0x00000000 262029 0 262029 Physical memory in use: Physical memory size: Physical memory available: 38% 1048048 Kb ( 646392 Kb ( 1023 Mb) 631 Mb) Paging file size: Paging file available: 2519744 Kb ( 2034420 Kb ( 2460 Mb) 1986 Mb) Virtual memory size: Virtual memory available: 2097024 Kb ( 2083280 Kb ( 2047 Mb) 2034 Mb) Extented memory available: 0 Kb ( 0 Mb) Physical page size: Minimum physical address: Maximum physical address: 4096 bytes 0x0000000000001000 0x000000003FFFF000 Address space size: 1073741824 bytes (1048576 Kb) Quadro 4.1 – Aquisição do dump de memória utilizando a ferramenta Win32dd Após a obtenção da imagem da memória, foi utilizada a ferramenta Volatility para analisar o conteúdo do dump. Utilizando a opção pslist, foi gerada uma relação dos processos que puderam ser identificados através da memória. O quadro 4.2 exibe apenas os processos suspeitos e que são de interesse para realização desta análise. Como o comportamento do banker que está sendo analisado já é conhecido, foi possível reconhecer de imediato os processos a ele relacionados. Normalmente não se conhece o comportamento do malware previamente, assim é importante que o perito conheça bem os processos do sistema que está analisando. Name convite.com avguix.exe Builder.exe Pid 3084 3408 3508 PPid 4072 3376 3408 Thds 1 2 1 Hnds 107 85 89 Time Tue May 31 03:10:53 2011 Tue May 31 03:12:41 2011 Tue May 31 03:12:45 2011 Quadro 4.2 – Processos criados pelo banker 54 As opções connscan e sockets do Volatility também poderiam ser bastante úteis para identificação de endereços IP, portas e protocolos em uso pelos programas, mas nesse estudo de caso não foi possível obter essas informações através do dump de memória. É especialmente importante mapear quais arquivos, chaves de registro e DLLs estão sendo utilizados ou foram criados e alterados pelo banker. Isso é possível através das opções files, dlllist e regobjkeys do volatility, como mostram os quadros 4.3, 4.4 e 4.5 para o processo “avguix.exe”, cujo PID é 3408 e foi executado pelo banker. Pid: 3408 File \DOCUME~1\anapaula\CONFIG~1\Temp\IXP000.TMP File \WINDOWS\WinSxS\x86_Microsoft.Windows.CommonControls_6595b64144ccf1df_6.0.2600.6028_x-ww_61e65202 File \WINDOWS\WinSxS\x86_Microsoft.Windows.CommonControls_6595b64144ccf1df_6.0.2600.6028_x-ww_61e65202 File \WINDOWS\WinSxS\x86_Microsoft.Windows.CommonControls_6595b64144ccf1df_6.0.2600.6028_x-ww_61e65202 Quadro 4.3 – Arquivos criados/acessados pelo processo “avguix.exe” avguix.exe pid: 3408 Command line : C:\DOCUME~1\anapaula\CONFIG~1\Temp\IXP000.TMP\avguix.exe Service Pack 3 Base Size Path 0x400000 0x819000 C:\DOCUME~1\anapaula\CONFIG~1\Temp\IXP000.TMP\avguix.exe 0x7c900000 0xb6000 C:\WINDOWS\system32\ntdll.dll 0x7c800000 0x100000 C:\WINDOWS\system32\kernel32.dll 0x7e360000 0x91000 C:\WINDOWS\system32\user32.dll 0x77e50000 0x49000 C:\WINDOWS\system32\GDI32.dll 0x77f50000 0xab000 C:\WINDOWS\system32\advapi32.dll 0x77db0000 0x93000 C:\WINDOWS\system32\RPCRT4.dll 0x77f20000 0x11000 C:\WINDOWS\system32\Secur32.dll 0x77100000 0x8b000 C:\WINDOWS\system32\oleaut32.dll 0x77bf0000 0x58000 C:\WINDOWS\system32\msvcrt.dll 0x774c0000 0x13e000 C:\WINDOWS\system32\ole32.dll 0x77be0000 0x8000 C:\WINDOWS\system32\version.dll 0x5d510000 0x9a000 C:\WINDOWS\system32\comctl32.dll 0x3fa50000 0xe6000 C:\WINDOWS\system32\wininet.dll 0x77ea0000 0x76000 C:\WINDOWS\system32\SHLWAPI.dll 0x340000 0x9000 C:\WINDOWS\system32\Normaliz.dll 0x43f90000 0x133000 C:\WINDOWS\system32\urlmon.dll 0x400f0000 0x1e9000 C:\WINDOWS\system32\iertutil.dll 0x76380000 0x48000 C:\WINDOWS\system32\comdlg32.dll 0x7c9c0000 0x81e000 C:\WINDOWS\system32\SHELL32.dll 0x76760000 0x9000 C:\WINDOWS\system32\SHFolder.dll 0x76360000 0x1d000 C:\WINDOWS\system32\IMM32.DLL 0x773b0000 0x103000 C:\WINDOWS\WinSxS\x86_Microsoft.Windows.CommonControls_6595b64144ccf1df_6.0.2600.6028_x-ww_61e65202\comctl32.dll 0x5b1c0000 0x38000 C:\WINDOWS\system32\uxtheme.dll 0x746e0000 0x4c000 C:\WINDOWS\system32\MSCTF.dll 0x75290000 0x2e000 C:\WINDOWS\system32\msctfime.ime 0x5f250000 0x17000 C:\WINDOWS\system32\olepro32.dll 0x71a70000 0x17000 C:\WINDOWS\system32\WS2_32.DLL 0x71a60000 0x8000 C:\WINDOWS\system32\WS2HELP.dll 0x71a10000 0x40000 C:\WINDOWS\system32\mswsock.dll 0x60b30000 0x58000 C:\WINDOWS\system32\hnetcfg.dll 0x71a50000 0x8000 C:\WINDOWS\System32\wshtcpip.dll 55 0x76f00000 0x76d40000 0x76f90000 0x76f40000 0x76fa0000 0x77b20000 0x27000 0x19000 0x8000 0x2d000 0x6000 0x22000 C:\WINDOWS\system32\DNSAPI.dll C:\WINDOWS\system32\iphlpapi.dll C:\WINDOWS\System32\winrnr.dll C:\WINDOWS\system32\WLDAP32.dll C:\WINDOWS\system32\rasadhlp.dll C:\WINDOWS\system32\Apphelp.dll Quadro 4.4 – Bibliotecas utilizadas/carregadas pelo processo “avguix.exe” Pid: 3408 \REGISTRY\MACHINE \REGISTRY\USER\S-1-5-21-1644491937-1592454029-839522115-1005 \REGISTRY\USER\S-1-5-21-1644491937-1592454029-839522115-1005_CLASSES \REGISTRY\MACHINE\SOFTWARE\MICROSOFT\INTERNET EXPLORER\MAIN\FEATURECONTROL\FEATURE_PROTOCOL_LOCKDOWN \REGISTRY\USER\S-1-5-21-1644491937-1592454029-8395221151005\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\INTERNET SETTINGS \REGISTRY\MACHINE\SYSTEM\CONTROLSET001\SERVICES\WINSOCK2\PARAMETERS\PROTOCOL_CATALOG9 \REGISTRY\MACHINE\SYSTEM\CONTROLSET001\SERVICES\WINSOCK2\PARAMETERS\NAMESPACE_CATALOG5 \REGISTRY\MACHINE\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\EXPLORER\ADVANCED \REGISTRY\MACHINE\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\POLICIES\SYSTEM \REGISTRY\MACHINE\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\RUN \REGISTRY\MACHINE\SYSTEM\CONTROLSET001\SERVICES\TCPIP\LINKAGE \REGISTRY\MACHINE\SYSTEM\CONTROLSET001\SERVICES\TCPIP\PARAMETERS \REGISTRY\MACHINE\SYSTEM\CONTROLSET001\SERVICES\NETBT\PARAMETERS\INTERFACES \REGISTRY\MACHINE\SYSTEM\CONTROLSET001\SERVICES\NETBT\PARAMETERS Quadro 4.5 – Chaves de registro em uso pelo processo “avguix.exe” No quadro 4.5, é possível perceber que a chave "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" foi alterada, possivelmente para incluir os processos criados pelo banker na inicialização do sistema. Para melhor avaliação dos processos sob suspeita, a fim de identificar se realmente trata-se de código malicioso, é possível extrair o executável a partir da memória, utilizando a opção procdump, exibido no quadro 4.6. Assim, o perito pode investigar com mais detalhes o comportamento do malware em um ambiente controlado. ************************************************************************ Dumping avguix.exe, pid: 3408 output: executable.3408.exe Quadro 4.6 – Extração do código executável do processo “avguix.exe” De forma complementar, pode-se utilizar a ferramenta strings, que permite a identificação de seqüências de dados imprimíveis em arquivos binários como o dump da memória. Assim, direcionando a saída do comando strings para um arquivo no disco é 56 possível converter em ASCII todos os caracteres identificados no arquivo de dump da memória, facilitando a identificação dos dados. Dentre outras informações significantes encontradas na imagem da memória utilizando o comando strings, podemos citar as URLs que o banker utiliza para fazer requisições (GET) e submissões (POST), assim como o endereço de email utilizado. • POST: http://www.ptm-deutschland.de//includes/info.php • GET: http://www.le-galetas.com/temp/ss.com • E-mail: [email protected] É possível estender a análise aqui realizada utilizando o próprio Volatility, outras ferramentas de análise de memória ou ferramentas complementares de suporte à análise forense, como sniffers. No entanto, o que foi apresentado nesse estudo de caso pode ser considerado como relevante, do ponto de vista de obtenção de provas para uma investigação forense, pois pode gerar evidências consistentes e que, em eventual necessidade de atuação da Justiça, poderiam ter valor probatório, principalmente se as informações forem complementadas com outras obtidas em uma análise post mortem. Foi possível demonstrar e comprovar que a análise forense baseada em conteúdo obtido a partir de dados voláteis, capturados da memória, pode oferecer evidências essenciais à elucidação de incidentes de segurança. O próprio usuário baixou e instalou o código malicioso em sua máquina, o que acontece na grande maioria das vezes, sem ter conhecimento das conseqüências de sua ação. Assim, o banker iniciou processos mal intencionados no sistema sem que o usuário sequer percebesse. No entanto, a aquisição dos dados da memória volátil e posterior análise mostraram que é possível encontrar vestígios importantes, que confirmam a presença do banker no sistema investigado, utilizando tanto ferramentas específicas para a forense de memória, quanto ferramentas complementares, de uso geral. 57 58 5. CONCLUSÕES Muitos pesquisadores acreditam que a memória volátil está se tornando o alvo preferido de exploração pelos usuários maliciosos, a fim de armazenarem dados que desejam ocultar, ou mesmo para executar códigos maliciosos de forma a impedir engenharia reversa. E um dos motivos para esse interesse é que poucas organizações adotam a coleta de dados da memória volátil como procedimento para tratamento de incidentes de segurança. Atualmente vários códigos maliciosos foram desenvolvidos para residir exclusivamente na memória, sem necessidade de utilizar o disco rígido; assim, a perícia forense que contemple apenas o disco rígido pode ser incompleta e ineficaz nesses casos Diante do estudo apresentado, podem ser obtidas algumas conclusões para aplicação no processo de perícia forense computacional, em especial à forense de memória. Através do referencial teórico e do estudo de caso apresentado foi possível ressaltar a importância da análise forense “in vivo” a fim de obter maior número e diversidade de evidências e foi destacada a relevância da análise forense da memória, abordando os dados que nela podem ser encontrados e sua importância para a perícia forense computacional, podendo ser utilizada isoladamente ou de forma complementar à tradicional forense “post mortem”, que é conduzida após desligamento do sistema e não contempla a aquisição de dados voláteis. Pesquisadores e analistas já desenvolveram diversos trabalhos e técnicas para recuperação de dados da memória, mas muito trabalho ainda pode ser desenvolvido nesta área, pois usuários maliciosos estão sempre desenvolvendo novas técnicas de ataque e formas de se explorar vulnerabilidades existentes nos sistemas de tecnologia. Foram apresentadas técnicas, procedimentos e ferramentas essenciais à prática forense computacional, assim como as fases que compõem um processo investigativo, ressaltando-se como é importante documentar bem todos os passos envolvidos no processo e adotar metodologias que privilegiem a integridade, autenticidade e confidencialidade dos dados. Foi abordado que tipo de informação pode ser recuperada da memória e o quanto a extração de dados presentes na memória pode afetar seu conteúdo e vestígios nela presentes. Conforme apresentado, mesmo sendo uma abordagem relativamente nova, existem diversas ferramentas disponíveis para a captura, geração de imagens e análise dos dados contidos na memória RAM. Embora essas ferramentas estejam em constante desenvolvimento e refinamento, é possível obter resultados valiosos com sua utilização. Porém, mesmo tendo 59 recursos para realização da análise, é necessário que o perito esteja intimamente familiarizado com o sistema operacional com o qual está trabalhando e como é realizado o seu gerenciamento de memória, para obter maiores ganhos. Em sistemas operacionais Windows, em especial, até mesmo as versões de service packs distintas possuem grandes diferenças. À medida que as ferramentas são desenvolvidas e ganham novas funcionalidades, novas técnicas são oferecidas aos investigadores, o que juntamente com o amadurecimento dos processos e procedimentos adotados, contribuem para investigações do tipo “Live Forensics”. No âmbito corporativo, em especial, é importante destacar a importância da existência de políticas de segurança da informação como medida preventiva. A política de segurança deve ser elaborada e divulgada de forma objetiva, clara e concisa e possuir controles eficientes, permitindo que sua utilização viabilize a padronização dos procedimentos relacionados aos incidentes de segurança. A norma ISO/IEC 27001 fornece diretrizes para a elaboração de um sistema de gestão de segurança da informação. É muito importante que os sistemas de uma organização sejam bem conhecidos e atualizados através da aplicação de correções, principalmente as que envolvem patches de segurança, a fim de evitar a presença de vulnerabilidades. Os analistas responsáveis pela resposta a incidentes e investigação forense da organização devem se manter atualizados e estar familiarizados com os sistemas em utilização, a fim de fornecer resposta rápida quando necessário. E, além disso, precisam estar conhecer bem as ferramentas de coleta de dados que serão utilizadas, evitando ao máximo a contaminação do ambiente sob investigação. Deve ser montado um kit de ferramentas e um ambiente de laboratório que estejam prontos para utilização a qualquer momento, pois os incidentes e situações de emergência podem acontecer a qualquer momento. Também é preciso investir nas pessoas, na educação dos usuários, que normalmente são o elo mais fraco e vulnerável do sistema como um todo. A área de segurança da informação apoia-se em três pilares básicos: processos, pessoas e tecnologia. Assim, para garantir a segurança de um sistema, não basta apenas manter processos com fluxos e procedimentos bem elaborados e revisados com freqüência, nem mesmo se basear exclusivamente na utilização de recursos e ferramentas de proteção; é preciso pensar nos riscos advindos do envolvimento entre sistemas e pessoas. Outro ponto importante e que deve ser de conhecimento dos peritos forenses são as questões legais envolvidas no processo de investigação e inspeção dos sistemas. Normalmente, lidam com dados sensíveis, então devem ser conscientizados sobre as 60 implicações de suas ações e sobre o respeito à privacidade das informações. É fundamental que todo o processo seja transparente e pautado pela ética. Propõe-se, para trabalhos futuros, a realização de estudos de caso utilizando as ferramentas de análise forense da memória tanto em sistemas operacionais Linux quanto Windows, a fim de criar comparativos sobre o comportamento das ferramentas em cada ambiente. Além disso, a criação de frameworks agregando ferramentas voltadas especificamente à forense de memória volátil, desenvolvimento de ferramentas mais interativas e documentação acerca de sua utilização. 61 62 6. BIBLIOGRAFIA [1] IBGE; Pesquisa Nacional por Amostra de Domicílios – PNAD 2009; Instituto Brasileiro de Geografia e Estatística. [2] KROLL; Global Fraud Report - Anual Edition 2010/11. Acessado em 10/01/2011 em http://www.kroll.com/library/fraud/FraudReport_English-US_Oct10.pdf [3] MANDIA, KEVIN; PROSISE, CHRIS; Incident Response & Computer Forensics; Second Edition; McGraw-Hill, 2003. [4] CASTRO, CARLA RODRIGUES ARAÚJO DE; Crimes de Informática e seus Aspectos Processuais; 2a. Edição, Ed. Lumen Juris, Rio de Janeiro, 2003. [5] FREITAS, ANDREY RODRIGUES DE; Perícia Forense Aplicada à Informática: Ambiente Microsoft; Rio de Janeiro, Brasport, 2006. [6] ELEUTÉRIO, PEDRO MONTEIRO DA SILVA; MACHADO, MÁRCIO PEREIRA; Desvendando a computação forense; São Paulo, Novatec Editora, 2011. [7] FARMER, DAN; VENEMA, WIETSE; Perícia Forense Computacional: Teoria e Prática Aplicada; São Paulo, Pearson Prentice Hall, 2007. [8] FARMER, DAN; VENEMA, WIETSE; Murder on the Internet Express ; 1999. Acessado em 24/02/2011 em http://www.neoprag.com/dcm/Murder_on_the_Internet_Express.pdf. [9] HUEBNER, EWA; BEM, DEREK; BEM, OSCAR; Computer Forensics – Past, Present And Future, 2007. [10] BRASIL; Constituição da República Federativa do Brasil de 1988. Acessado em 24/02/2011 em http://www.planalto.gov.br/ccivil_03/constituicao/constituiçao.htm. [11] RODRIGUES, TONY; Blog Resposta a Incidentes e Forense Computacional; Um pouco sobre leis; 2007. Acessado em 17/02/2011 em http://forcomp.blogspot.com/2007/11/um-pouco-sobre-leis.html. [12] ROSA, DANIEL ACCIOLY; Contextualização da Prática Forense; Revista Evidência Digital – Edição 01, Ano I, Número 01, p. 5, Jan.,Fev.,Mar. 2004. Acessado em 15/02/2011 em http://www.guiatecnico.com.br/evidenciadigital. [13] WARREN, G., JAY, G. Computer Forensics: Addison-Wesley, Massachusetts, 2002. Incident Response Essentials. 63 [14] PALMER, GARY; A Road Map for Digital Forensic Research; Technical Report DTR – T001-01, DFRWS. Report From the First Digital Forensic Research Workshop (DFRWS), New York, 2001. [15] AMARI, KRISTINE; Techniques and Tools for Recovering and Analyzing Data from Volatile Memory, SANS Institute, 2009. [16] CARVEY, HARLAN; Windows Forensics Analysis DVD Toolkit; Syngress Publishing, Inc. ; 2007. [17] van Baar, R.B.; Alink, W.; van Ballegooij, A.R. ; Forensic memory analysis: Files mapped in memory; Journal of Digital Investigation; Volume 5; September, 2008. [18] SHIREY, R.; RFC 4949: Internet Security Glossary, Version 2; 2007. Acessado em 30/04/2011 em http://www.rfc-editor.org/rfc/rfc4949.txt. [19] DAVIS, NAJA; Live Memory Acquisition for Windows Operating Systems: Tools and Techniques for Analysis; Eastern Michigan University. Acessado 23/04/2011 em http://www.emich.edu/ia/pdf/research/Live%20Memory%20Acquisition%20for%20Windows %20Operating%20Systems,%20Naja%20Davis.pdf [20] BOILEAU, ADAM; Hit by a Bus: Physical Access Attacks with Firewire; Ruxcon, 2006. Acessado em 14/04/2011 em http://www.securityassessment.com/files/presentations/ab_firewire_rux2k6-final.pdf [21] LISITA, BRUNO LOPES; MOURA, THIAGO SILVA MACHADO DE; PINTO, TIAGO JORGE; Forense Computacional em Memória Principal; Serviço Nacional de Aprendizagem Industrial – SENAI; Goiânia, 2009. [22] BURDACH, MARIUSZ; An Introduction to Windows memory forensics; 2005. Acessado em 22/05/2011 em http://forensic.seccure.net/pdf/introduction_to_windows_memory_forensic.pdf [23] KENT, KAREN; CHEVALIER, SUZANNE; GRANCE, TIM; DANG HUNG; Guide to Integrating Forensic Techniques into Incident Response – Recommendations of the National Institute of Standards and Technology; NIST Special Publication 800-86; August, 2006 [24] HOWARD, JOHN D.; LONGSTAFF, THOMAS A.; A Common Language for Computer Security Incidents; Sandia National Laboratories; United States Department of Energy; SAND98-8667; October, 1998. [25] MEMORYZE. Mandiant Memoryze 1.4.4200. Acessado em 04/05/2011 em http://www.mandiant.com/products/free_software/memoryze 64 [26] MDD. Mantech Memory DD. Acessado http://www.mantech.com/capabilities/mdd.asp em 04/05/2011 em [27] VOLATILITY. Volatile Systems Volatility Framework v1.3. Acessado em 09/05/2011 em https://www.volatilesystems.com/default/volatility [28] WMFT. Windows Memory Forensic Toolkit. Acessado em 23/05/2011 em http://forensic.seccure.net/ [29] WIN32DD. Moonsols Windows Memory Toolkit Community Edition. Acessado em 29/05/2011 em http://www.moonsols.com/windows-memory-toolkit/ [30] FASTDUMP. HBGary FastDump Community Edition. Acessado em 29/05/2011 em http://www.hbgary.com/fastdump [32] KNTDD. GMG Systems, Inc. KnTTools with KnTList. Acessado em 29/05/2011 em http://gmgsystemsinc.com/knttools/ [33] FTKIMAGER. Access Data Forensic ToolKit 3. Acessado em 29/05/2011 em http://accessdata.com/products/computer-forensics/ftk [34] ENCASE FORENSIC. Guidance Software Encase Forensic. Acessado em 29/05/2011 em http://www.guidancesoftware.com/forensic.htm [35] NIGILANT32. Agile Risk Management Nigilant32. Acessado em 29/05/2011 em http://www.agileriskmanagement.com [36] DIGITAL Forensic Analysis Methodology: Process Overview; United States Department of Justice; Computer Crime and Intellectual Property Section; August, 2007. Acessado em 30/05/2011 em http://www.justice.gov/criminal/cybercrime/forensics_chart.pdf [37] SILVA, GILSON MARQUES DA; LORENS, EVANDRO MÁRIO; Extração e Análise de Dados em Memória na Perícia Forense Computacional; VI Conferência Internacional de Perícias em Crimes Cibernéticos; Natal, 2009. Acessado em 20/04/2011 em http://www.gilsonmarques.com.br/artigos/extracao_e_analise_de_dados_em_memoria _na_pericia_forense_computacional_iccyber_ijofcs.pdf 65 66 7. ANEXO I LAUDO Nº xxx/AAAA – SETEC/SR/DPF/DF LAUDO DE EXAME DE DISPOSITIVO DE ARMAZENAMENTO COMPUTACIONAL (Disco Rígido) Em XX de <mês> de <ano>, no SETOR TÉCNICO-CIENTÍFICO da Superintendência Regional do Departamento de Polícia Federal no XXX, designados pelo Chefe do Setor, Perito Criminal Federal XXXXXXX XXXX XXX, os Peritos Criminais Federais KKKKK KKKK KKKKKK e YYYY YYYYY YYYYY elaboraram o presente Laudo Pericial, no interesse do IPL nº XXX/AAAA-SR/DPF/EE, a fim de atender a solicitação do Delegado de Polícia Federal XXXX XXXXXXX XXXX, contida no Memorando nº XXXX/AAAA-SR/DPF/DF de DD/MM/AAAA, registrado no Sistema de Criminalística sob o nº XXXX/AAAA-SETEC/SR/DPF/EE, em DD/MM/AAAA, descrevendo com verdade e com todas as circunstâncias tudo quanto possa interessar à Justiça e atendendo ao solicitado <OU AOS QUESITOS>, abaixo transcrito<S>: <SOLICITAÇÃO> OU <QUESITOS> I – MATERIAL O presente Laudo refere-se ao exame do seguinte material: a) Um disco rígido da marca MAXTOR, modelo MMMMM, número de série XXAXAXAAAXX, com capacidade nominal de XXGB, referencia interna XXX/AAAA-SETEC/SR/DPF/EE. II – OBJETIVO Os exames têm por objetivo extrair e analisar o conteúdo do material descrito na seção anterior, atendendo à solicitação contida no expediente supracitado. 67 III – EXAMES Inicialmente, foi realizado o levantamento e a identificação do material enviado para exame, cujos resultados encontram-se na seção I. Em seguida, por meio de técnicas forenses apropriadas, o material original foi duplicado. Esse processo de duplicação consiste na realização de cópia integral do material original para outra mídia de armazenamento. Como medida de segurança, os exames foram realizados sobre a cópia, preservando-se o original. O material original foi submetido a um processo de garantia de integridade, cujo resultado e parâmetros utilizados foram exportados – na forma de arquivo de texto com extensão “.log” – para o diretório principal da mídia ótica incluída anexa a este Laudo. Os exames objetivaram a análise e extração de conteúdo do material examinado. Este processo atingiu não apenas os arquivos diretamente acessíveis, mas também aqueles previamente apagados. Os arquivos de interesse ao apuratório foram extraídos e gravados na mídia ótica anexa, agrupados por categorias. IV – CONCLUSÃO Os arquivos de interesse ao apuratório foram selecionados, agrupados e gravados na mídia ótica anexa sob as seguintes categorias: a) Documentos: arquivos contendo documentos no formato MS Word. b) Planilhas: arquivos contendo planilhas no formato MS Excel. c) Planilhas com senha: a senha é <LALALALAL> Os arquivos gravados na mídia ótica anexa passaram por um processo de garantia de integridade baseado no algoritmo Secure Hash Algorithm (SHA) de 256 bits, cujo resultado encontra-se em um arquivo denominado “hashes.txt” localizado no diretório principal da mídia ótica. Por sua vez, o arquivo “hashes.txt” passa pelo mesmo processo, cujo resultado encontra-se na Tabela 1. Tabela 1 – Resultado do cálculo de integridade do arquivo “hashes.txt” CÓDIGO HASH Dessa forma, qualquer alteração do conteúdo anexo (remoção, acréscimo, alteração de arquivos ou parte de arquivos), bem como sua substituição por outro com teor diferente, pode ser detectada – o APÊNDICE A contém informações adicionais sobre a garantia de integridade. 68 Para visualizar o conteúdo da mídia, basta colocá-la em uma unidade de leitura apropriada e abrir o arquivo "index.htm" utilizando um navegador de Internet, como o Microsoft Internet Explorer ou o Mozilla Firefox. A partir desse arquivo pode-se visualizar o conteúdo gravado na mídia, navegando com o auxílio do menu localizado à esquerda. Com o Laudo, os Peritos devolvem o material descrito na seção I no mesmo estado em que foram recebidos. Nada mais havendo a lavrar, os Peritos encerram o presente laudo que, elaborado em XX páginas, incluindo um apêndice e uma mídia ótica em anexo, lidos e achados conformes, assinam acordes. XXXXXXXX XXXXXX XXXXX PERITO CRIMINAL FEDERAL Matrícula: XXXXX YYYYYYY YYYYYYYY YYYYYYY PERITO CRIMINAL FEDERAL Matrícula: XXXXX 69 APÊNDICE A – Considerações sobre mídias óticas anexas A.1 – O Algoritmo SHA-256 (Secure Hash Algorithm - 256 bits) O SHA-256 é um algoritmo que, a partir de uma mensagem de entrada de qualquer tamanho, gera uma saída de tamanho fixo de 256 bits (conhecido como resumo, hash ou código de integridade), calculada a partir do conteúdo dessa mensagem. A segurança do procedimento consiste no fato de ser computacionalmente inviável produzir duas mensagens distintas com o mesmo código de integridade ou, a partir do código de integridade, obter a mensagem de entrada. Cada arquivo contido na mídia ótica é tratado como se fosse uma mensagem que passa individualmente pelo processamento do algoritmo. Ao final, obtém-se a relação dos nomes dos arquivos e seus respectivos códigos de integridade em formato hexadecimal. Cada mídia ótica anexa contém um arquivo denominado “hashes.txt” que contém a relação supracitada (listagem dos nomes dos arquivos precedidos do respectivo código de integridade). Por sua vez, o código de integridade do arquivo “hashes.txt” encontra-se na seção IV deste Laudo. Dessa forma, o acréscimo, alteração ou remoção de um único caractere em um arquivo é condição suficiente para que o código de integridade gerado seja diferente, tornando detectável a alteração do conteúdo da mídia ótica. A.2 – Verificação de integridade Para verificar a integridade das mídias óticas anexas, qualquer programa que suporte o algoritmo SHA-256 pode ser utilizado. O processo de verificação envolve duas etapas que devem ser executadas para cada mídia: (1) cálculo da integridade do arquivo “hashes.txt” e comparação com o resultado presente neste Laudo e (2) cálculo da integridade dos arquivos contidos na mídia e comparação com os registrados no arquivo “hashes.txt”. Um dos programas que pode ser utilizado para realizar essa verificação é o FSUM, disponível gratuitamente na Internet no endereço http://www.slavasoft.com. Utilizando esse programa, as seguintes etapas devem ser executadas (assumindo que a mídia ótica a ser verificada esteja na unidade "d:"): a) etapa 1: na linha de comando, a partir do diretório do programa, digitar: fsum -dd: –sha256 hashes.txt b) etapa 2: em seguida, digitar: fsum -jf -dd: -c hashes.txt O resultado da etapa (1) deve ser idêntico ao presente na seção IV deste Laudo. O resultado da etapa (2) deve ser a correta verificação de todos os arquivos presentes na mídia, sem nenhuma falha. Com isso, garante-se a autenticidade da mídia e a integridade do seu conteúdo. 70 71 8. ANEXO II Virustotal is a service that analyzes suspicious files and URLs and facilitates the quick detection of viruses, worms, trojans, and all kinds of malware detected by antivirus engines. More information... 0 VT Community user(s) with a total of 0 reputation credit(s) say(s) this sample is goodware. 0 VT Community user(s) with a total of 0 reputation credit(s) say(s) this sample is malware. File name: convite.com Submission date: 2011-06-22 01:42:28 (UTC) Current status: finished Result: 29/ 42 (69.0%) Antivirus AhnLab-V3 AntiVir Antiy-AVL Avast Avast5 AVG BitDefender CAT-QuickHeal ClamAV Commtouch Comodo DrWeb eSafe eTrust-Vet F-Prot F-Secure Fortinet GData Ikarus Jiangmin K7AntiVirus Kaspersky McAfee McAfee-GW-Edition Version 2011.06.22.01 7.11.10.61 2.0.3.7 4.8.1351.0 5.0.677.0 10.0.0.1190 7.2 11.00 0.97.0.0 5.3.2.6 9148 5.0.2.03300 7.0.17.0 36.1.8399 4.6.2.117 9.0.16440.0 4.2.257.0 22 T3.1.1.104.0 13.0.900 9.106.4831 9.0.0.837 5.400.0.1158 2010.1D Last Update 2011.06.22 2011.06.21 2011.06.22 2011.06.21 2011.06.21 2011.06.21 2011.06.22 2011.06.21 2011.06.22 2011.06.22 2011.06.22 2011.06.22 2011.06.21 2011.06.21 2011.06.21 2011.06.22 2011.06.22 2011.06.22 2011.06.22 2011.06.20 2011.06.21 2011.06.21 2011.06.22 2011.06.21 VT Community not reviewed Safety score: - Result Downloader/Win32.Dloadr TR/Dldr.Agent.gljj Win32:Delf-PHN Win32:Delf-PHN Downloader.Delf.12.BC Gen:Trojan.Heur.GG0@YsZg1RpG Win32.GenHeur.GG@YsZ Gen:Trojan.Heur.GG0@YsZg1RpG W32/DLOADR.AY!tr Gen:Trojan.Heur.GG0@YsZg1RpG Trojan-Downloader Trojan/Chifrax.cvp UDS:DangerousObject.Multi.Generic Generic Downloader.x!fpl Generic Downloader.x!fpl 72 Microsoft NOD32 Norman nProtect Panda PCTools Prevx Rising Sophos SUPERAntiSpyware Symantec TheHacker TrendMicro TrendMicro-HouseCall VBA32 VIPRE ViRobot VirusBuster 1.7000 6227 6.07.10 2011-06-21.01 10.0.3.5 7.0.3.5 3.0 23.63.01.03 4.66.0 4.40.0.1006 20111.1.0.186 6.7.0.1.237 9.200.0.1012 9.200.0.1012 3.12.16.2 9653 2011.6.21.4525 14.0.90.0 2011.06.21 2011.06.22 2011.06.21 2011.06.21 2011.06.21 2011.06.21 2011.06.22 2011.06.21 2011.06.22 2011.06.22 2011.06.22 2011.06.22 2011.06.21 2011.06.22 2011.06.21 2011.06.22 2011.06.21 2011.06.21 Trojan:Win32/Dynamer!dtc a variant of Win32/TrojanDownloader.Delf.QEV W32/Suspicious_Gen.PKAT Trojan-PWS/W32.QQPass.529408 Generic Trojan Downloader.Generic Mal/Generic-L Downloader TROJ_DLOADR.AY TROJ_DLOADR.AY TrojanDownloader.Agent.gboy Trojan.Win32.Generic!BT Backdoor.Win32.Hupigon.528384.F Trojan.DL.Agent!vH/IwjyPGlQ MD5 : 6af757c466f2b4513aded2dae23a2125 SHA1 : 7cb156e9cd8236b0c5b9244d806f8c72548322ef SHA256: 7e09730269744cd60c8a3c740773cfe05451b6c6d7baa269db833b7f854cfdd2 VT Community This file has never been reviewed by any VT Community member. Be the first one to comment on it! ATTENTION: VirusTotal is a free service offered by Hispasec Sistemas. There are no guarantees about the availability and continuity of this service. Although the detection rate afforded by the use of multiple antivirus engines is far superior to that offered by just one product, these results DO NOT guarantee the harmlessness of a file. Currently, there is not any solution that offers a 100% effectiveness rate for detecting viruses and malware. 73