UNIVERSIDADE FEDERAL DE GOIÁS � UFG
CAMPUS CATALÃO � CaC
DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO � DCC
Bacharelado em Ciência da Computação
Projeto Final de Curso
Uso da Computação Forense no Estudo deVulnerabilidades de Segurança dos Sistemas
Operacionais Windows e Linux
Autor: Karla Gonçalves
Orientador: Márcio de Souza Dias
Catalão - 2011
Karla Gonçalves
Uso da Computação Forense no Estudo de Vulnerabilidades de Segurança
dos Sistemas Operacionais Windows e Linux
Monogra�a apresentada ao Curso de
Bacharelado em Ciência da Computação da
Universidade Federal de Goiás Campus Catalão
como requisito parcial para obtenção do título de
Bacharel em Ciência da Computação
Área de Concentração: Segurança de Sistemas
Orientador: Márcio de Souza Dias
Catalão - 2011
Gonçalves, Karla
Uso da Computação Forense no Estudo de Vulnerabilidades de Segurança
dos Sistemas Operacionais Windows e Linux
Márcio de Souza Dias - Catalão - 2011
Número de paginas: 104
Projeto Final de Curso (Bacharelado) Universidade Federal de Goiás, Campus
Catalão, Curso de Bacharelado em Ciência da Computação, 2011.
Palavras-Chave: 1. Perícia Forense Computacional. 2. Evidências Criminais Ele-
trônicas. 3. Vulnerabilidades
Karla Gonçalves
Uso da Computação Forense no Estudo de Vulnerabilidades de Segurança
dos Sistemas Operacionais Windows e Linux
Monogra�a apresentada e aprovada em de
Pela Banca Examinadora constituída pelos professores.
Márcio de Souza Dias � Presidente da Banca
Veríssimo Guimarães Júnior
Nádia Félix Felipe da Silva
Dedico este trabalho a minha família, principal-
mente ao meu �lho e ao meu namorado ,e aos
amigos que sempre me apoiaram nos estudos e me
ajudaram a superar as di�culdades para que pu-
desse alcançar os meus objetivos.
AGRADECIMENTOS
Em primeiro lugar agradeço a Deus, pelos dons dados a mim, os quais foram essenciais
para que eu chegasse aonde cheguei.
Aos meus pais, Sebastião Cristóvão e Divina Aparecida, pela base, pela educaçao, pelo
companheirismo, pela força, pela credibilidade e pelo apoio.
Aos meus irmãos Kássia e Danilo, meu muito obrigada.
Ao meu �lho João Víctor, que mesmo sem saber, é a minha força para todas as horas.
Ao meu namorado Lucas que não esteve presente na criação desse projeto, mas que
acompanhou os últimos ajustes...rsrs, meu muito obrigada!
Aos amigos que já formaram, Andréa Alves, Míriam Alves, Fábio Assunção e Dyêgo
Figueiredo meu muito obrigada pela amizade e pelo apoio durante o curso.
Aos demais amigos do curso, que sempre estavam presentes, seja para estudos, para
festas ou para uma conversa, Marcinha Santos, Carla Fernandes, Laísa Bárbara, Nataly
Chiminelli, Rayner Pires, Danilo Reis, Gustavo Almeida, Nélio Carneiro, Rafael Ulhôa,
Rudson Franco entre tantos outros. Muito Obrigado!
A minha grande amiga Flávia Freitas, pela amizade, apoio e carinho despendido em
todas as horas.
Aos professores Acrísio Júnior, Márcio Duarte, Liliane Nascimento, Luanna Lopes, Ro-
berto Finzi e Veríssimo Guimarães Júnior. E aos demais professores pelos conhecimentos
passados durante o curso.
Ao meu professor e orientador Márcio de Souza Dias, pela sua dedicação e disposição
para comigo neste trabalho.
A todos os meus familiares e amigos que direta ou indiretamente sempre me deram
força para vencer mais essa batalha, guiando-me sempre que preciso e sempre me aconse-
lhando com as palavras certas nos momentos em que mais precisava.
A todos vocês meus sinceros agradecimentos, muito obrigada...
�Tendo amor e saúde, da vida eu não reclamo, amo
a vida que levo, levo a vida que amo. E mesmo
que meus passos sejam falsos, mesmo que os meus
caminhos sejam errados, mesmo que meu jeito de
levar a vida incomode, eu sei quem sou, e sei pelo
que devo lutar. Se você acha que meu orgulho é
grande, é porque nunca viu o tamanho da minha
fé!”
Tião Carreiro
RESUMO
Gonçalves, K. Uso da Computação Forense no Estudo de Vulnerabilidades
de Segurança dos Sistemas Operacionais Windows e Linux. Curso de Ciência da
Computação, Campus Catalão, UFG, Catalão, Brasil, 2011, 104p.
Os computadores estão cada vez mais presentes no modo de vida das pessoas que
os utilizam para todo tipo de atividade, armazenando e transmitindo suas informações
pessoais na forma digital. Seguindo essa tendência, as atividades criminosas evoluíram
da mesma forma. Surge assim, a necessidade de desenvolver técnicas para obter e utilizar
evidências criminais eletrônicas, utilizando para isso conceitos e metodologias de perícia
forense computacional. Os crimes em redes de computadores tendem a aumentar, pois,
com o passar dos anos e com a disseminação de informações (notadamente através da
Internet), houve um signi�cativo avanço no entendimento de como os sistemas operam.
Isso fez com que intrusos se tornassem verdadeiros especialistas em determinar e explorar
vulnerabilidades a �m de obterem acessos privilegiados. Neste trabalho, é feito um es-
tudo das principais vulnerabilidades de segurança encontradas em sistemas operacionais
Windows e Linux, incluindo ao �nal o desenvolvimento de um protótipo de recuperação
de dados na área de swap.
Palavras-Chaves: Perícia Forense Computacional, Evidências Criminais Eletrônicas,
Vulnerabilidades
i
Sumário
1 Forense Computacional 1
1.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Origem Histórica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.3 O que é Forense Computacional? . . . . . . . . . . . . . . . . . . . . . . . 5
1.4 Perícia Computacional Forense . . . . . . . . . . . . . . . . . . . . . . . . 7
1.5 Processo Investigativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.5.1 Identi�cação das evidências . . . . . . . . . . . . . . . . . . . . . . 10
1.5.2 Preservação das evidências . . . . . . . . . . . . . . . . . . . . . . . 11
1.5.3 Análise das evidências . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.5.4 Apresentação das evidências . . . . . . . . . . . . . . . . . . . . . . 12
2 Investigação em Sistemas Operacionais e suas Vulnerabilidades 14
2.1 A investigação em si . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.1.1 Sistema de arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1.2 Arquivos de log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.1.3 Espaços não utilizados no dispositivo de armazenamento . . . . . . 17
2.1.4 Arquivos temporários (temp) . . . . . . . . . . . . . . . . . . . . . 17
2.1.5 Área de swap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.1.6 Setor de boot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.1.7 Memória . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.1.8 Periféricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.1.9 Processos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.2 Segurança em Sistemas Operacionais . . . . . . . . . . . . . . . . . . . . . 19
2.3 Vulnerabilidades de segurança que afetam todos os Sistemas . . . . . . . . 20
2.3.1 Instalações default de sistemas operacionais e aplicativos . . . . . . 21
2.3.2 Contas sem senhas ou com senhas fracas . . . . . . . . . . . . . . . 22
2.3.3 Backups incompletos ou inexistentes . . . . . . . . . . . . . . . . . 23
2.3.4 Grande número de portas abertas . . . . . . . . . . . . . . . . . . . 23
2.3.5 Ausência de �ltro de pacotes de entrada e saída que garantam o uso
de endereços válidos . . . . . . . . . . . . . . . . . . . . . . . . . . 24
ii
2.3.6 Sistema de logs inexistente ou incompleto . . . . . . . . . . . . . . 25
2.3.7 Programas CGI vulneráveis . . . . . . . . . . . . . . . . . . . . . . 26
2.4 Vulnerabilidades no Windows . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.4.1 Falha no Unicode conhecida como “Web Server Folder traversal” . . 26
2.4.2 Bu�er Over�ow nas Extensões ISAPI (Internet Services Applica-
tion Programming Interface) . . . . . . . . . . . . . . . . . . . . . . 27
2.4.3 Brecha nos Serviços de Dados Remotos (RDS) do IIS . . . . . . . . 27
2.4.4 NetBIOS: Falta de proteção nos compartilhamentos em redes Win-
dows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.4.5 Vazamento de informações através de sessão anônima (null session) 28
2.4.6 Codi�cação fraca de senhas no SAM (LAN Manager hash) . . . . . 29
2.5 Vulnerabilidades no Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.5.1 Bu�er Over�ow nos serviços de Remote Procedure Call (RPC) . . 29
2.5.2 Vulnerabilidades no Sendmail . . . . . . . . . . . . . . . . . . . . . 30
2.5.3 BIND Weaknesses . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.5.4 Comandos remotos (r) . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.5.5 LPD (daemon do serviço de impressão remota) . . . . . . . . . . . 31
2.5.6 Serviços Sadmind e Mountd . . . . . . . . . . . . . . . . . . . . . . 31
2.5.7 Mensagens-padrão do SNMP (Simple Network Management Protocol) 32
3 Ferramentas de Investigação Computacional 33
3.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.2 Easy Recovery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.3 EnCase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.4 eMailTrackerPro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.5 Forensic ToolKit (FTK) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.6 Caller IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.7 RecoverMyFiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.8 SmartWhois . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.9 IP-Adress.com . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4 Desenvolvimento e Análise do Protótipo 41
4.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.2 Investigando a Memória Principal . . . . . . . . . . . . . . . . . . . . . . . 41
4.2.1 Memória Virtual . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.3 Ánalise do espaço de Swap . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.3.1 Arquivo de Swap do Windows e Linux (page�le.sys) . . . . . . . . . 44
4.4 A linguagem de programação utilizada . . . . . . . . . . . . . . . . . . . . 45
iii
4.5 Protótipo desenvolvido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.5.1 Interface Grá�ca . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.5.2 Extração de Diretórios . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.5.3 Extração de URLs . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.5.4 Extração de imagens JPEG . . . . . . . . . . . . . . . . . . . . . . 54
4.5.5 Extração de imagens GIF . . . . . . . . . . . . . . . . . . . . . . . 55
4.5.6 Extração de imagens PNG . . . . . . . . . . . . . . . . . . . . . . . 55
4.5.7 Extração de imagens TIFF . . . . . . . . . . . . . . . . . . . . . . . 55
4.5.8 Extração de arquivos PDF . . . . . . . . . . . . . . . . . . . . . . . 55
4.5.9 Extração de arquivos UTF8 . . . . . . . . . . . . . . . . . . . . . . 55
4.5.10 Extração de arquivos DOC . . . . . . . . . . . . . . . . . . . . . . . 56
4.6 Experimentos Realizados . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
4.6.1 Execução e Saída do Programa . . . . . . . . . . . . . . . . . . . . 56
5 Considerações Finais 70
5.1 Trabalhos Futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Referências 73
Apêndices 74
A Código fonte 75
A.1 Classe Janela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
A.2 Classe ArquivoSwap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
A.3 Classe ArquivoSaida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
A.4 Classe BuscadorNumeroMagico . . . . . . . . . . . . . . . . . . . . . . . . 85
A.5 Classe BuscarArquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
A.6 Classe Progress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
A.7 Classe ExtratorDiretorios . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
A.8 Classe ExtratorURL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
A.9 Classe JanelaFotos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
A.10 Classe JPEG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
A.11 Classe GIF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
A.12 Classe PNG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
A.13 Classe TIFF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
A.14 Classe PDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
A.15 Classe UTF8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
A.16 Classe DOC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
iv
Lista de Figuras
1.1 Exemplo de Formulário de Cadeia de Custódia [Tavares, 2007] . . . . . . . 6
1.2 Exemplos de possíveis fontes de dados [Tavares, 2007] . . . . . . . . . . . . 10
2.1 MAC times [Tavares, 2007] . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.1 Tela do EasyRecovery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.2 Interface do EnCase E-mail e Internet (Tutorial) [Vargas, 2007] . . . . . . 35
3.3 Tela Principal da ferramenta E-mailTracker com rota de IPs . . . . . . . . 36
3.4 Tela Principal da Ferramenta CallerIp . . . . . . . . . . . . . . . . . . . . 37
3.5 Visualização de Pastas Deletadas na Ferramenta RecoverMyFiles . . . . . . 38
3.6 Tela Principal da Ferramenta SmartWhois . . . . . . . . . . . . . . . . . . 39
4.1 Troca de processos entre a memória principal e o espaço de swap, segundo
[Silberschatz et al., 2001] . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.2 Tela inicial da ferramenta Extrator de Arquivos . . . . . . . . . . . . . . . 46
4.3 Opções do menu Arquivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.4 Janela de seleção da área de swap . . . . . . . . . . . . . . . . . . . . . . . 47
4.5 Opções do menu Extração . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.6 Busca e Extração de Diretórios . . . . . . . . . . . . . . . . . . . . . . . . 48
4.7 Diretórios recuperados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.8 Opções do menu Imagens . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.9 Busca e Extração de imagens JPG . . . . . . . . . . . . . . . . . . . . . . 50
4.10 Imagens JPEG recuperadas . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.11 Miniaturas das Imagens JPEG recuperadas . . . . . . . . . . . . . . . . . . 51
4.12 Opções do menu Arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.13 Busca e Extração de arquivos PDF . . . . . . . . . . . . . . . . . . . . . . 52
4.14 Arquivos PDF recuperados . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
4.15 Janela de encerramento do programa . . . . . . . . . . . . . . . . . . . . . 52
4.16 Pastas com arquivos extraídos . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.17 Exemplar de �gura extraída pelo protótipo do Bueno . . . . . . . . . . . . 58
4.18 Exemplar de �gura extraída pelo protótipo do Bueno . . . . . . . . . . . . 58
v
4.19 Diretórios recuperados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.20 Arquivo de texto usado para armazenar os diretórios extraídos . . . . . . . 60
4.21 URLs extraídas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.22 Arquivo de texto usado para armazenar as URLS extraídas . . . . . . . . . 61
4.23 Imagens JPEG recuperadas . . . . . . . . . . . . . . . . . . . . . . . . . . 61
4.24 Pasta criada para armazenar imagens JPEG recuperadas . . . . . . . . . . 61
4.25 Miniaturas das Imagens JPEG recuperadas . . . . . . . . . . . . . . . . . . 62
4.26 Imagens GIF recuperadas . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.27 Pasta criada para armazenar imagens GIF recuperadas . . . . . . . . . . . 63
4.28 Miniaturas das Imagens GIF recuperadas . . . . . . . . . . . . . . . . . . . 63
4.29 Imagens PNG recuperadas . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.30 Pasta criada para armazenar imagens PNG recuperadas . . . . . . . . . . . 64
4.31 Miniaturas das Imagens PNG recuperadas . . . . . . . . . . . . . . . . . . 64
4.32 Imagens TIFF recuperadas . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
4.33 Pasta criada para armazenar imagens TIFF recuperadas . . . . . . . . . . 65
4.34 Miniaturas das Imagens TIFF recuperadas . . . . . . . . . . . . . . . . . . 65
4.35 Arquivos PDF recuperados . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
4.36 Pasta criada para armazenar arquivos PDF recuperados . . . . . . . . . . . 66
4.37 Arquivos UTF8 recuperados . . . . . . . . . . . . . . . . . . . . . . . . . . 67
4.38 Pasta criada para armazenar arquivos UTF8 recuperados . . . . . . . . . . 67
4.39 Arquivos DOC recuperados . . . . . . . . . . . . . . . . . . . . . . . . . . 68
4.40 Pasta criada para armazenar arquivos DOC recuperados . . . . . . . . . . 68
vi
Lista de Siglas
BBC British Broadcasting Corporation
BIND Berkeley Internet Name Domain
CERT Centro de Estudos, Resposta e Tratamento de Incidentes
CGI Common Gateway Interface
CIFS Common Internet File System
DDoS Distributed Denial of Service
DHCP Dynamic Host Con�guration Protocol
DLL Dynamic-link library
DNS Domain Name Service
DoD United States Department of Defense
DOS Disk Operating System
FBI Federal Bureau of Investigation
IIS Internet Information Services
IRC Internet Relay Chat
ISAPI Internet Services Application Programming Interface
LPD Line Printer Daemon
NFS Network File System
NIPC National Infrastructure Protection Center
NIS Network Information Service
RAM Random Access Memory
vii
RAS Remote Access Services
RDS Remote Data Services
RPC Remote Procedure Call
SANS System Administration, Networking and Security
SMB Server Message Block
SNMP Simple Network Management Protocol
SO Sistema Operacional
TCP Transmission Control Protocol
URL Uniform Resource Locator
viii
Capítulo 1
Forense Computacional
1.1 Introdução
Nas últimas décadas, a utilização de computadores tornou-se parte integrante da vida
das pessoas. Transações bancárias e compras passaram a ser feitas pela Internet, informa-
ções diversas (desde simples correspondências pessoais até dados con�denciais) passaram
a ser armazenadas e transmitidas de forma eletrônica. Além disso, é crescente o número
de indivíduos que utilizam computadores pessoais por conveniência, educação e entrete-
nimento.
A conectividade oferecida pela Internet introduziu uma série de novas facilidades no
dia-a-dia das pessoas, como o correio eletrônico e a World Wide Web, permitindo o acesso
anônimo a quase todo tipo de informação ou sistema.
Não é de se espantar que toda essa revolução computacional tenha atingido também o
mundo do crime. A tecnologia dos computadores está envolvida em um número crescente
de atividades ilícitas. Além de serem utilizados como ferramentas para a consumação
de alguns tipos de delitos (como, por exemplo, invasão de sistemas, disseminação de
pornogra�a infantil e fraude), os computadores podem conter evidências relacionadas
com qualquer tipo de atividade ilícita, incluindo homicídio e estupro [Reis e Geus, 2001].
O aumento crescente de crimes relacionados com computadores requer um maior en-
tendimento de como se obter e utilizar essas evidências armazenadas em sistemas compu-
tacionais, e tal entendimento só pode ser alcançado através dos conceitos e metodologias
da forense computacional.
1.2 Origem Histórica
Nos primórdios da civilização humana, quando o homem vivia em aglomerações tri-
bais, a violência praticada por um indivíduo contra outro, do mesmo grupo social era
1
encarada como um ato proscrito pelo senso comum da tribo. O indivíduo era então iden-
ti�cado e isolado. A tribo, ou um conjunto de seus membros, questionariam o criminoso
exigindo uma justi�cativa, e julgariam se o seu ato seria tolerado pelo grupo ou não
[Calazans e Calazans, 2001].
A detenção do criminoso, por essa sociedade primitiva, dependia de provas de que o
mesmo cometeu o crime. Essas provas eram baseadas em relatos de outros membros da
tribo. Mas, relatos de um único indivíduo e interesses escusos envolvidos, por exemplo,
suscitavam dúvidas quanto a veracidade do relato.
Percebeu-se então que havia a necessidade de comprovar esses relatos com evidências
físicas, que pudessem representar o ato criminoso. A incipiente estrutura �judiciária” da
tribo despertou então para a importância da prova material, da noção de corpo de delito,
e da necessidade de exame. Foi o surgimento das grandes perguntas forenses: Se alguém
foi assassinado, onde estaria seu corpo? Se o agressor in�igiu ferimentos à vítima, quais
seriam esses? Se um objeto foi furtado, por que teria sido acusado este indivíduo?
Sumérios, egípcios e chineses, grandes civilizações da Idade Antiga, evoluíram os con-
ceitos tribais que norteavam a forense primitiva. Tendo em vista os diferentes modos
de pensar e agir, cada uma dessas civilizações gerou diferentes códigos de leis escri-
tas para reger seus cidadãos. Vem da China o primeiro registro da Ciência Forense
[Calazans e Calazans, 2001].
No período compreendido entre os séculos XVI ao XVIII, surgiu a maior parte dos
métodos e instrumentos forenses. Diversos progressos cientí�cos surgiram e foram incor-
porados ao arsenal utilizado para esclarecer crimes [Calazans e Calazans, 2001].
No �nal do século XVIII, as armas mais curtas denominadas �carabinas” começaram
a ser produzidas. No século XIX, devido a esta característica, Henry Godard conseguiu
relacionar uma bala com a arma utilizada [Calazans e Calazans, 2001].
Outra grande invenção foi a fotogra�a, criada em 1826 pelo francês Joseph-Nicéphore
Niépce e desde sua invenção, vem sendo utilizada para gravar os vestígios do fato ocorrido
no próprio local, e veri�car possíveis suspeitos [Calazans e Calazans, 2001].
A Ciência Forense proporciona os princípios e técnicas que facilitam a investigação do
delito, em outras palavras, qualquer princípio ou técnica que pode ser aplicada para iden-
ti�car, recuperar, reconstruir ou analisar a evidência durante uma investigação criminal, é
parte da Ciência Forense. Ela proporciona métodos cientí�cos que possibilitarão a análise
das evidências disponíveis e cria hipóteses sobre o ocorrido para criar a evidência, além de
realizar provas para con�rmar ou contradizer essas hipóteses [Calazans e Calazans, 2001].
A Ciência Forense é de�nida como uma ciência multidisciplinar, porque utiliza-se
muitas vezes de subsídios de outras ciências para a devida análise de um possível vestígio,
pois assim como o Juiz recorre a vários elementos para formar sua convicção e aplicar
a lei da melhor forma possível, o pro�ssional forense se vale do conhecimento nos mais
2
diversos ramos da ciência para melhor análise dos indícios encontrados na cena de um
crime [Reis e Geus, 2001].
No início de sua estruturação, a Ciência Forense utilizava-se de pro�ssionais de for-
mação genérica. Contudo face ao progresso, alguns crimes passaram a ser executados
com maior complexidade, pois aliados a utilização do conhecimento tecnológico, vieram
a ser executados com maior grau de so�sticação. Por consequência, passou-se a exigir a
colaboração de outras áreas da ciência, com a participação de pro�ssionais com a especi-
alização correspondente para fazer frente às necessidades de conhecimento que devem ser
aplicados em cada caso, visando realizar com mais e�cácia uma investigação policial.
Devido a esses fatores, a Informática chegou de maneira decisiva no auxílio à Ciência
Forense. O desenvolvimento tecnológico vem atuando de maneira determinante na inves-
tigação criminal. Softwares e computadores potentes podem ajudar na identi�cação de
criminosos de maneira rápida, rastrear evidências como conversas telefônicas, tornar níti-
das imagens da cena de um crime com os respectivos envolvidos. Ajudar na reconstrução
facial de vítimas desconhecidas, a �m de possibilitar o esclarecimento de crimes outrora
insolúveis, en�m, trata-se de um caminho de in�nitas possibilidades que certamente só
ajudarão ainda mais no trabalho criminalístico.
Em consequência de todo esse desenvolvimento tecnológico, acabou-se por criar uma
nova vertente, sobretudo com o advento da Internet. A rede mundial de computadores,
propiciou um ambiente que fornece uma série de facilidades aos cidadãos, tais como compra
de mercadorias sem sair de casa, transações bancárias, envio e recebimento de mensagens e
tantas outras. Esse ambiente, onde a segurança é algo frágil e onde o indivíduo é anônimo,
acabou por tornar-se alvo de mentes criminosas que logo vislumbraram o potencial para
prática de crimes e sua impunidade. Contudo, esse cenário de impunidade vem, apesar
da lentidão, sendo modi�cado pelas autoridades.
O termo Ciência Forense está relacionado ao meio policial, e até pouco tempo atrás,
não tinha nenhuma relação com o meio computacional. No entanto, o aumento do uso
do computador e da Internet, fez com que surgisse uma nova classe de crimes, cometidos
por pessoas que aprenderam a utilizar a nova ferramenta. Em sua maioria, essas pessoas
possuem conduta íntegra no mundo real, mas se bene�ciam do �anonimato” conferido pela
Internet para praticar atos ilícitos. Devido a necessidade das Agências Legais, que lidam
com esse novo tipo de crime e ajudam a justiça a condenar esse tipo de criminoso, surgiu
a Ciência Forense Computacional.
A Forense Computacional possui algumas características próprias. Sendo um campo
de pesquisa aparentemente novo, possui um grande número de possibilidades de pesquisa.
Essa pesquisa está se desenvolvendo principalmente pela necessidade das instituições legais
de atuarem no combate ao crime eletrônico. A queda de barreira oferecida pela Internet
gerou um novo tipo de crime, onde a vítima e o criminoso encontram-se em países distintos,
3
o que gera a necessidade de haver troca de informações entre as polícias do mundo inteiro,
com o intuito de agilizar a solução desse tipo de crime, muito embora ainda não haja uma
metodologia devidamente estabelecida para tal [Reis e Geus, 2001].
Contudo, cabe dizer que na forense computacional, os vestígios encontrados constituem-
se de maneira direta, o que implica dizer que, no caso de um computador estar sob suspeita
de ter sido usado para a prática de delito, qualquer programa ou arquivo encontrado na
máquina, se foi utilizado com �m criminoso, irá atestar tal fato de maneira direta. Tal fato
não se veri�ca em um crime fora do ambiente computacional, onde às vezes um vestígio
pode apenas ser interpretado, como por exemplo, um resto de pele encontrado embaixo da
unha da vítima, leva a uma suposição de que antes da consumação do crime teria havido
uma luta entre criminoso e vítima.
Em consequência de tal situação, os pro�ssionais que trabalham na área computacio-
nal, como por exemplo, os analistas de sistemas, possuem além do conhecimento técnico,
também um raciocínio lógico que é necessário em uma investigação forense, pois aná-
lise pericial em um computador é algo muitas vezes de difícil execução, face ao grau de
complexidade do sistema operacional a ser examinado.
Então além, dos conhecimentos técnicos, o pro�ssional deve utilizar ferramentas ade-
quadas à análise em questão, evitando assim qualquer procedimento inadequado que in-
viabilize o vestígio a ser examinado.
A implementação de políticas de segurança oferece grande ajuda na prevenção contra
atos que possam se con�gurar como ilegais, pois a certeza de que o delito e seu autor
possam ser descobertos, sem dúvida inibem a prática de atos antes acobertados pelo
anonimato.
Na análise de uma máquina, a Forense Computacional utiliza ferramentas especí�cas,
visando, sobretudo não modi�car o sistema objeto de investigação. Por exemplo, se a
análise for em um servidor, todo cuidado é indispensável para que a busca não vá além
do que seria necessário. Assim, é imprescindível que se de�na antecipadamente uma área
de atuação, com o foco de, por exemplo, se evitar a violação da privacidade de algum
usuário.
Também é importante de�nir a metodologia a ser utilizada na análise. Por exemplo,
o uso de ferramentas que não alterem os tempos de acesso aos arquivos, para assim serem
veri�cados os eventos acontecidos na máquina, pois as evidências resultantes da análise
forense computacional podem afetar inúmeras investigações.
Concluindo, ao estudar a metodologia empregada nos primórdios da forense, pode-se
veri�car que pouca coisa mudou, desde então. Métodos foram simplesmente adaptados
aos tempos atuais. As ferramentas passaram constantemente por processos de atualização
tecnológica - mas, por exemplo, um microscópio de 1590 possui o mesmo princípio do mais
moderno microscópio.
4
Os métodos a serem adotados em forense computacional devem ter a mesma compe-
tência, clareza e e�ciência dos métodos consagrados de outros ramos da Forense.
1.3 O que é Forense Computacional?
A Computação Forense foi criada com o objetivo de suprir as necessidades das ins-
tituições legais no que se refere à manipulação das novas formas de evidências eletrôni-
cas. Ela é a ciência que estuda a aquisição, preservação, recuperação e análise de dados
que estão em formato eletrônico e armazenados em algum tipo de mídia computacional
[Noblett et al., 2000].
Assim, como a perícia forense tradicional tem como material de trabalho as evidências
físicas (arcada dentária, �os de cabelo etc.), a perícia forense computacional trabalha
com evidências também, porém denominadas no seu contexto de evidências digitais ou
eletrônicas. Entretanto, essas evidências requerem um tratamento especial, uma vez que
apresentam maiores di�culdades de manipulação. Pela sua própria natureza, dados são
em termos gerais, muito voláteis, fáceis de serem modi�cados e apagados, o que requer
maior cuidado na preservação de evidências [Bueno, 2007].
Para uma melhor compreensão da forense computacional é necessário o entendimento
de alguns conceitos. São considerados voláteis todos os dados não gravados em algum
tipo de mídia permanente, ou seja, os dados que são gerados em tempo de execução, que
serão perdidos se houver um desligamento da máquina envolvida. Alguns tipos de dados
voláteis: conexões de rede, estado das portas do sistema, programas em execução, dados
na memória do computador, etc [Cagnani e Santos, 2008].
São considerados não voláteis todos os dados gravados de forma permanente ou não em
algum tipo de mídia, isto é, os dados que mesmo que sejam considerados temporários pelo
sistema, estejam gravados em disco, podendo ser recuperados depois de um desligamento
da máquina onde estão armazenados. Alguns tipos de dados não voláteis são: arquivos
de log, swap, arquivo de hibernação, arquivos temporários, entre outros. Uma importante
informação que pode ser obtida analisando-se os dados não voláteis é o traçado da linha de
tempo dos arquivos presentes no sistema, ou seja, caso seja encontrada alguma evidência
importante podendo a�rmar a data e hora em que foi produzida ou alterada, tal evidência
pode ser usada na investigação em andamento [Cagnani e Santos, 2008].
Tem-se também o conceito de Cadeia de Custódia. A Cadeia de Custódia é um pro-
cesso usado para manter e documentar a história cronológica da evidência, para garantir
a idoneidade e o rastreamento das evidências utilizadas em processos judiciais. Na prática
é representada por um formulário onde são registrados todos os dados de especi�cação
de uma evidência e todas as movimentações que possam ocorrer com ela, registrando os
nomes e motivos que �zeram qualquer pessoa envolvida no processo a tomar contato com
5
a prova. A Figura 1.1 abaixo mostra um exemplo de formulário de Cadeia de Custódia
[Tavares, 2007].
Figura 1.1: Exemplo de Formulário de Cadeia de Custódia [Tavares, 2007]
Além de ser capaz de extrair e manusear evidências digitais, a forense emprega mé-
todos de análise, lógica e o que for necessário à interpretação dos vestígios coletados. É
empregada uma variedade de ferramentas para auxiliar o trabalho de perícia.
O objetivo principal da Forense Computacional é aplicar métodos cientí�cos e siste-
máticos, buscando extrair e analisar tipos de dados dos diferentes dispositivos, para que
essas informações passem a ser caracterizadas como evidências e, posteriormente, como
provas legais de fato [Pereira et al., 2007].
Para serem consideradas provas válidas é muito importante que o perito realize o
processo de investigação de maneira cuidadosa e sistemática, preservando a integridade
das evidências e gerando documentação detalhada.
Um diferencial da forense computacional em relação às outras disciplinas forenses é a
necessidade, por parte do corpo investigativo, de ter conhecimentos profundos de hardware
e software de computador. Isso evita invalidar acidentalmente, ou até mesmo destruir
evidências digitais, buscando protegê-las para análises futuras. Desse modo, a forense
computacional deve procurar aplicar técnicas de praticamente qualquer ramo da Ciência
da Computação (Redes de Computadores, Sistemas Operacionais, Segurança e Auditoria
de Sistemas etc.), para toda diversidade de investigação cientí�ca computacional. Isso
6
inclui o desenvolvimento de novos conhecimentos e tecnologias quando necessário, o que
pode ocorrer em casos complexos e desa�adores [Bueno, 2007].
O pro�ssional da Computação Forense executa os serviços de investigação, rastre-
amento, recuperação de dados, laudos periciais e consultoria, através do conhecimento
especializado e a utilização de técnicas e métodos que levem ao diagnóstico e o resultado,
sempre submetido ao princípio da con�dencialidade. Utiliza de métodos cientí�cos para
preservar, coletar, restaurar, identi�car, documentar e apresentar as evidências digitais -
capazes de determinar, por exemplo, se um sistema computacional sofreu uma violação.
1.4 Perícia Computacional Forense
Uma perícia em um computador suspeito de invasão ou mesmo um computador apre-
endido em alguma �batida policial” envolve uma série de conhecimentos técnicos e a
utilização de ferramentas adequadas para análise. Existe a necessidade de se conhecer
minúcias do sistema operacional para que se tenha uma noção global de todos os efeitos
das ações do perito. Quanto à necessidade de se utilizar ferramentas especí�cas para
análise, esta decorre da obrigatoriedade de não se perturbar o sistema que está sendo
analisado, perturbações essas que podem ser traduzidas como mudanças nos tempos de
acesso aos arquivos (MACtimes), por exemplo, anulando assim uma das mais poderosas
formas de se reconstituir o que aconteceu na máquina em um passado próximo. Ferramen-
tas convencionais não têm a preocupação de manter a integridade dos tempos de acesso
[Oliveira, 2002].
Os MACtimes são partes dos metadados do sistema de arquivos onde são registrados
certos eventos, ocorridos mais recentemente, relacionados a um arquivo. Os eventos são
geralmente descritos como �modi�cation” (a data em que o arquivo foi modi�cado), �ac-
cess”(a data em que o arquivo foi lido) e �metadata change” (a data em que as permissões
do arquivo foram alteradas). São estes termos �mtime”, �atime” e �ctime” que derivam
para o acrônimo MAC [Tanenbaum, 2003].
Para os �ns de perícia forense computacional, ou seja, para o planejamento da estraté-
gia que será utilizada na investigação das evidências, os dados serão coletados em função
da sua volatilidade. O tipo de dado, envolvido no incidente que está sendo investigado,
também é importante na determinação do tipo de análise que será utilizada na perícia,
que pode ser do tipo Live Analysis ou Dead Analysis [Cagnani e Santos, 2008].
A Análise de Sistemas em Operação (Live Analysis) é a análise executada quando o
sistema não pode ser desligado, ou seja, é feita em tempo real, na maioria das vezes no
próprio local onde se encontra a máquina suspeita, normalmente um servidor com algum
tipo de suspeita de invasão, que por ser responsável pelo fornecimento de serviços a um
elevado número de usuários, não pode ser parado, nem mesmo para a perícia. Embora
7
sejam mais raros os casos desse tipo, são também os que exigem um maior preparo e
cuidado por parte da equipe responsável pela perícia, uma vez que os dados precisam ser
analisados em tempo real, sendo muito importante um elevado conhecimento dos sistemas
em operação e suas características, bem como a disponibilidade de um kit de ferramentas
computacionais adequadas e especí�cas para esse tipo de serviço, já que qualquer equívoco
poderá ocasionar a perda da prova que está sendo procurada [Cagnani e Santos, 2008].
Essa modalidade de análise apresenta inerentes di�culdades, como a di�culdade em
não alterar o estado do sistema durante a coleta de informações e a alteração das próprias
evidências, mas apesar das di�culdades a Live Analysis é o método requerido em algumas
situações de perícia digital. Isto porque o desligamento do sistema nativo eliminaria
grande parte das evidências voláteis [Bueno, 2007].
Há muitas informações voláteis que podem ser capturadas em uma Live Analysis :
tráfego de rede, arquivos de log, estado de processos, entre outros [Bueno, 2007].
Análise de Sistemas fora de Operação (Dead Analysis), ocorre quando o processo de
análise pode ser executado no melhor ambiente possível, ou seja, a máquina suspeita pode
ser desligada e levada a um laboratório forense, e submetida às ferramentas adequadas
para uma completa e detalhada análise [Cagnani e Santos, 2008].
Uma Dead Analysis geralmente é referida por alguns autores na literatura forense por
análise forense tradicional, visto que era o processo mais empregado para realizar uma
investigação computacional em uma época onde a Internet não era popular como hoje
em dia. No entanto, atualmente a coleta de evidências com o sistema vítima ligado (Live
Analysis) passou a ser bastante empregada, levando esse termo ao desuso [Bueno, 2007].
O simples ato de ligar ou desligar o computador pode alterar ou destruir evidências.
Por esse motivo, é importante que a investigação seja conduzida de maneira metódica,
bem organizada e em sintonia com a tecnologia envolvida [Cagnani e Santos, 2008].
Para uma perícia ser bem sucedida é preciso adotar boas práticas forenses antes da
coleta dos dados, como as que se seguem [Pereira et al., 2007]:
• Certi�car-se de que todas as mídias que serão utilizadas estão em perfeitas condições
de uso ou usar mídias novas a cada investigação;
• Certi�car-se de que todas as ferramentas (softwares) que serão utilizadas estão de-
vidamente licenciadas e prontas para utilização;
• Veri�car se todos os equipamentos e materiais necessários (por exemplo, a estação
forense, as mídias para coleta dos dados, etc.) estão à disposição;
• Quando chegar ao local da investigação, o perito deve providenciar para que nada
seja tocado sem o seu consentimento, com o objetivo de proteger e coletar todos os
tipos de evidências;
8
• Os investigadores devem �lmar ou fotografar o ambiente e registrar detalhes sobre
os equipamentos como: marca, modelo, números de série, componentes internos,
periféricos, etc;
• Manter a cadeia de custódia.
O objetivo da perícia computacional forense ou análise forense é conduzir uma investi-
gação estruturada com uma metodologia que permita determinar o que aconteceu, quem
foi responsável e, a investigação deve ser executada de uma forma que os resultados sejam
úteis em um processo criminal.
Segundo [Cansian, 2001] a análise e a perícia de computadores que tenham passado
por algum tipo de violação ou ataque, torna-se uma matéria importante no conjunto
de ações de um processo de segurança. A perícia tem diversos aspectos relevantes, dois
deles se destacam: primeiramente, ela é importante porque permite que se entenda o
que aconteceu, de forma a corrigir falhas que tenham sido cometidas no processo. Em
segundo lugar, ao olharmos para o passado, interpretando o que aconteceu, pode ser
possível coletar evidências necessárias a identi�car o atacante, de tal forma que possam
ser adotadas medidas legais ou jurídicas pertinentes.
1.5 Processo Investigativo
O processo investigativo é a busca por informações relevantes a uma investigação
de crime eletrônico. Nenhum crime é cometido sem deixar vestígios, ou seja, quando um
criminoso estabelece contato com o sistema invadido, seja copiando ou adulterando dados,
as ações executadas por ele deixam rastros no sistema da vítima. Esses rastros são as
denominadas evidências digitais ou eletrônicas.
As evidências digitais tem um papel central na forense computacional, pois a elas
são referidos processos, padrões e ferramentas em uma perícia. Há diversos processos
que constituem o universo de tarefas que podem ser executados em relação às evidências
digitais, como: preservação, identi�cação, aquisição, documentação, análise, correlação,
apresentação etc [Bueno, 2007].
As evidências digitais, após serem adequadamente coletadas e analisadas, podem ser
apresentadas em favor do esclarecimento da investigação em curso de um crime. Elas
também são a peça chave na criação de possíveis cenários viáveis que expliquem logica-
mente como a seqüência de fatos do crime teria ocorrido. Em forense computacional é
considerado como evidência eletrônica, e-mail, históricos de internet, planilhas eletrônicas,
textos eletrônicos, imagens entre outros [Pimenta, 2007].
Assim, uma perícia computacional forense é sempre executada em quatro fases bem
9
distintas, onde diferentes tipos de informações devem ser obtidos em cada etapa, e diferen-
tes ações devem ser executadas pelos peritos em cada uma. São elas [Cagnani e Santos, 2008]:
• Identi�cação das evidências;
• Preservação das evidências;
• Análise das evidências;
• Apresentação das evidências.
1.5.1 Identi�cação das evidências
Nessa primeira etapa dos trabalhos periciais se faz necessário o levantamento de todos
os dados relativos à investigação da qual as evidências fazem parte, bem como do máximo
detalhamento possível das características de cada evidência apresentada para a perícia.
Alguns dados úteis nessa etapa são: nomes de pessoas e empresas envolvidas, datas, locais
e circunstâncias gerais dos fatos que originaram a investigação, bem como o detalhamento
das características de cada item colhido como possível prova, computadores, hard disks,
CDs e DVDs, Portas de comunicação como: USB, Firewire, Flash card e PCMCIA,
máquina fotográ�ca, relógio com comunicação via USB, etc. A Figura 1.2 mostra alguns
exemplos [Cagnani e Santos, 2008]:
Figura 1.2: Exemplos de possíveis fontes de dados [Tavares, 2007]
É necessário que o perito visualize como pretende iniciar os trabalhos e que tipo de
dados podem ser relevantes para essa investigação. Outra informação importante a ser
conhecida pela equipe é se os dados levantados na perícia servirão para a acusação ou
defesa do suspeito ou vítima [Cagnani e Santos, 2008].
Segundo [Freitas, 2006], discos rígidos em computadores podem trazer imensas quan-
tidades de informações após os processos de recuperação de dados.
As evidências de um crime digital estão diretamente relacionadas com o tipo de crime.
No caso de acesso não autorizado a arquivos, o �log de eventos” e �pastas compartilhadas”
devem ser analisados. No caso de pornogra�a, o perito deverá procurar por imagens
10
no computador, históricos de sites visitados, arquivos temporários, arquivos excluídos e
e-mails enviados e recebidos etc [Pimenta, 2007].
As evidências devem ser procuradas em todos os dispositivos de armazenamento en-
contrados e dentro do que foi encontrado deve-se separar para análise o que é relevante
ao caso.
1.5.2 Preservação das evidências
Essa etapa inicia com a coleta dos dados necessários à investigação, obedecendo alguns
critérios necessários para evitar a perda de dados importantes e para não alterar as provas.
O cuidado com a preservação da evidência é essencial para que não haja dúvida sobre
a sua veracidade. Em primeiro lugar o perito executa a coleta dos dados voláteis; a
seguir dá prioridade àqueles que exigirem um maior esforço por parte da equipe, ou seja,
coleta os dados que exigirão maior tempo, maior dedicação e o uso de ferramentas mais
especí�cas; depois é feita uma avaliação do tipo de dados que pode ser mais relevante
para a investigação e feita a sua coleta [Cagnani e Santos, 2008].
Todas as evidências encontradas precisam obrigatoriamente ser legítimas, para terem
sua posterior validade jurídica. Sendo assim, todo o processo relativo à obtenção e co-
leta das mesmas, deve seguir normas internacionais. Parte-se sempre do princípio de que
a outra parte envolvida, no caso, poderá e deverá pedir a contra-prova sobre os mes-
mos elementos físicos, então o pro�ssionalismo destas tarefas será crítico na seqüência do
processo, lembrando sempre que, caso o juiz não valide a evidência, ela não poderá ser
re-apresentada [Freitas, 2006].
Alguns passos devem ser seguidos para que não ocorra um comprometimento da evi-
dência, evitando a sua perda ou destruição durante o transporte ou o manuseio [Freitas, 2006]:
• Trabalhar sempre que possível em imagens do sistema, este procedimento evita dani-
�car ou perder a evidência, além de possibilitar a reprodução da análise novamente;
• Caso seja analisado um computador ainda ligado a evidência deve ser gravada em
algum tipo de mídia e posteriormente protegida contra gravação;
• Todos os dispositivos do computador devem ser identi�cados e armazenados em
sacos com etiquetas para sua montagem em laboratório;
• As mídias deverão ser armazenadas em sacos antiestática para evitar perda dos
dados;
• Tudo deve ser lacrado e identi�cado;
• No transporte das evidências deve se tomar o cuidado com líquidos, impactos, su-
jeira, calor, eletricidade e estática; e
11
• Para evitar a adulteração às evidências deverão ser trancadas para serem analisadas
no momento certo. As alterações realizadas na evidência deverão ser documentadas
e justi�cadas.
1.5.3 Análise das evidências
Nessa fase são utilizados todos os meios necessários ao levantamento dos dados re-
levantes à investigação. É preciso saber exatamente o que se deve buscar nos dados
coletados na fase anterior, a �m de poder criar a �prova” que está sendo procurada, ou
seja, criar a relação que possa existir entre os dados encontrados e a vítima, ou suspeito
[Cagnani e Santos, 2008].
O pro�ssional nesta fase deve ser cuidadoso ao encontrar a evidência. A chamada
prova deve ser inquestionável. Todas as evidências digitais encontradas precisam ser
obrigatoriamente legítimas para ter validade jurídica e precisam estar em conformidade
com a lei, além de serem autênticas, exatas e completas [Freitas, 2006].
É importante manter o foco ao solicitado, pois muitas vezes, durante a análise, depara-
se com novas fontes de dados que podem levar a outras vertentes, fazendo com que esta
mudança de foco, prejudique a perícia podendo até anular todo o trabalho pericial, devido
ao abuso na coleta de provas. O pro�ssionalismo é essencial quando se trata da obtenção
da chamada �prova legítima”, a qual consiste numa demonstração efetiva e inquestionável
dos rastros e elementos da comunicação entre as partes envolvidas e seu teor, além das
datas, trilhas, e histórico dos segmentos de disco utilizados [Rodrigues, 2004].
1.5.4 Apresentação das evidências
A partir das evidências encontradas o perito produz um relatório denominado Laudo
Pericial. É um relatório técnico sobre a investigação, onde são apresentados fatos, proce-
dimentos, análises e resultados. Para não deixar dúvidas sobre a veracidade o laudo deve
ser claro, conciso e sem ambigüidade. O laudo precisa estar descrito com a�rmações e
conclusões que possam ser provadas tecnicamente [Freitas, 2006].
É nessa fase que as informações e evidências coletadas são apresentadas para a auto-
ridade que determinou a sua execução, podendo assumir o formato jurídico ou não, uma
vez que nem toda perícia forense tem objetivo criminal [Cagnani e Santos, 2008].
A característica mais marcante dessa etapa deve ser a imparcialidade do laudo pericial,
o que na justiça se traduz em con�abilidade, habilidade e isenção do perito, elevando o
peso do laudo gerado pela perícia na determinação da culpa ou inocência do envolvido no
processo, conforme seja o caso [Cagnani e Santos, 2008].
Dessa forma, quando se tem a certeza material das evidências, os advogados de cada
uma das partes ou mesmo o juiz do caso atuam em conjunto para a apresentação das
12
mesmas [Freitas, 2006].
Informações importantes nessa etapa são:
• Os métodos utilizados;
• Os procedimentos de identi�cação;
• A preservação;
• A análise;
• Os softwares utilizados; e
• Os hardwares utilizados.
Sendo assim todo o processo relativo à obtenção, coleta e análise das evidências devem
ser documentadas para ter validade jurídica e estar conforme a lei [Freitas, 2006].
Comparando a Ciência Forense dos séculos XVI ao XVIII com os dias de hoje, percebe-
se que muita coisa mudou. Os métodos e instrumentos forenses estão mais e�cientes e
adequados a nova realidade de crimes computacionais.
No capitulo 2 será exposto todo esse processo de investigação e busca por evidências
em sistemas operacionais, incluindo também um estudo das principais vulnerabilidades
de segurança encontradas nos sistemas Windows e Linux.
13
Capítulo 2
Investigação em Sistemas Operacionais
e suas Vulnerabilidades
2.1 A investigação em si
A busca por indícios em um sistema operacional constitui-se de uma varredura minuci-
osa nas informações que nele residam, sejam dados em arquivos ou em memória, apagados
ou não, cifrados ou possivelmente dani�cados. Tais indícios variam de acordo com o tipo
de infração a que estão relacionados, determinando diferentes abordagens, no que diz
respeito ao objetivo da busca, para o processo de análise forense [Reis e Geus, 2001].
Muitas vezes, o objetivo do exame forense é a busca de indícios que por si só caracteri-
zam a infração, ou relacionam um suspeito ao ato ilícito (como por exemplo, arquivos de
imagens de pornogra�a infantil, mensagens eletrônicas com ameaças ou chantagens, ar-
quivos com informações incriminatórias ou dados roubados). Outras vezes, os indícios são
como �peças de um quebra-cabeça” (registros em arquivos de log e atributos de arquivos,
por exemplo), precisando ser correlacionados para se ter uma conclusão acerca da infra-
ção. Em alguns casos, ainda, a perícia objetiva responder alguns quesitos preestabelecidos,
como, por exemplo, �descrever o conteúdo das mídias enviadas a exame”, �determinar se
o conteúdo de um determinado arquivo sofreu alterações”, ou ainda, um estudo das vul-
nerabilidades de segurança de determinados sistemas operacionais. [Reis e Geus, 2001].
Quando se conduz uma investigação do comportamento de um programa, o investiga-
dor precisa coletar informação acerca do estado corrente do sistema onde o mesmo está
sendo executado. Alguns métodos devem ser usados para coletar este tipo de informação
e então salvá-la em uma outra máquina forense para posterior análise, ou até mesmo
direcionar a saída das ferramentas de coleta de informações para a máquina forense a�m
de não escrever ou alterar o estado da máquina utilizada [Atilio et al., 2003].
Essas informações coletadas, que são denominadas de evidências digitais, são capazes
14
de determinar que um incidente ocorreu ou prover alguma ligação entre o incidente e as
vítimas.
Em uma análise forense, usa-se o conceito de ordem de volatilidade, como foi descrito
no capítulo anterior, o qual determina que o tempo de vida de uma evidência digital
varia de acordo com o local onde ela está armazenada. Quanto maior a volatilidade de
uma informação, mais difícil se torna sua extração e menos tempo há para capturá-la. O
simples ato de observar informações altamente voláteis pode alterá-las [Atilio et al., 2003].
Muitas são as fontes de informação para uma análise forense em um sistema opera-
cional e elas são coletadas de acordo com sua ordem de volatilidade, primeiramente as
informações voláteis e em seguida as não voláteis. São elas [Freitas, 2006]:
• Sistema de arquivos;
• Arquivos de log ;
• Espaços não utilizados no dispositivo de armazenamento;
• Arquivos temporários (temp);
• Área de swap;
• Setor de boot ;
• Memória;
• Periféricos;
• Processos.
A seguir será tratado sobre cada uma das fontes de informação citadas anteriormente.
2.1.1 Sistema de arquivos
O sistema de arquivos representa a maior fonte de informação para o exame forense, e
apresenta informações voláteis e não voláteis. Um sistema de arquivos é um conjunto de
estruturas lógicas e de rotinas, que permitem ao sistema operacional controlar o acesso
ao disco rígido [Freitas, 2006].
Num sistema de arquivos, os arquivos de dados e executáveis são analisados para
determinar seu conteúdo e funcionalidade no sistema operacional. Os indícios podem
ser encontrados através da busca por palavras-chave (como por exemplo, datas, nomes,
números de telefone e vocábulos especí�cos da linguagem criminal), imagens, dados espe-
cí�cos (registros em arquivos de log e informações roubadas, por exemplo) ou programas
utilizados para práticas ilícitas (como cavalos de tróia) [Reis e Geus, 2001].
15
Além disso, mudanças inesperadas em diretórios e arquivos, especialmente aqueles
cujo acesso é normalmente restrito, podem caracterizar-se como indícios de uma infração.
Tais mudanças podem incluir modi�cação, criação ou �deleção” de diretórios e arquivos
(identi�cadas por alterações nos MACtimes dos arquivos ou por meio de assinaturas
digitais). O que torna tais mudanças inesperadas pode depender de quem as concebeu,
onde, quando, e como foram feitas [Reis e Geus, 2001].
A Figura 2.1 abaixo representa um arquivo com seus respectivos MAC times.
Figura 2.1: MAC times [Tavares, 2007]
2.1.2 Arquivos de log
Os arquivos de log representam um papel importante na análise do sistema de ar-
quivos, pois permitem a reconstituição de fatos que ocorreram no sistema operacional.
São registros de atividades no computador, sendo geralmente gravados em arquivos no
formato texto, de forma abreviada e algumas são até codi�cadas. Os registros de ocorrên-
cia podem facilmente ser interpretados por quem conhece e lida com o sistema, podendo
ser acessados diretamente, convertidos para outros formatos, ou utilizar de ferramentas
amigáveis e técnicas que variam de acordo com o conhecimento do perito. [ZAGO, 2007].
Estes arquivos contém a data, hora e a mensagem emitida pelo programa (violações
do sistema, mensagens de erro, alerta e outros eventos) entre outros campos. En�m,
muitos detalhes úteis ao administrador tanto para acompanhar o funcionamento do sis-
16
tema, comportamento dos programas ou ajudar na solução e prevenção de problemas
[ZAGO, 2007].
Os arquivos de log variam de acordo com o sistema operacional, os aplicativos e ser-
viços executando no sistema, e as con�gurações determinadas pelo administrador. Os
arquivos de log contém dados voláteis e não voláteis. Eles podem registrar, entre outras
informações, as atividades dos usuários, dos processos e do sistema, as conexões de rede,
as atividades da rede, e informações especí�cas dos aplicativos e serviços. Processos e
conexões de rede são consideradas informações voláteis. Desse modo, os arquivos de log
podem conter registros de atividades usuais e não usuais que ocorreram no sistema ou
rede, caracterizando uma possível infração [Reis e Geus, 2001].
Um arquivo de log serve para a indicação de ações em um determinado sistema ope-
racional ou de alguma aplicação. Um exemplo de arquivo de log é o arquivo que con-
tém o histórico dos registros das páginas visitadas por um usuário no acesso a web.
[Reis e Geus, 2001].
2.1.3 Espaços não utilizados no dispositivo de armazenamento
Os espaços podem ser caracterizados por espaços não alocados dentro do sistema de
arquivos, espaços alocados a arquivos mas não totalmente utilizados, áreas do dispositivo
de armazenamento que não constituem uma partição de disco ou que não contém um sis-
tema de arquivos, e podem ser caracterizados também por arquivos e diretórios excluídos
[Freitas, 2006].
Esses espaços no dispositivo de armazenamento não utilizados pelo sistema de arquivos
podem conter indícios de algum ato ilícito que o usuário tentou apagar e devem ser
investigados. A �deleção” de arquivos e diretórios não apaga os dados do dispositivo de
armazenamento, apenas disponibiliza o espaço ocupado para ser sobrescrito por novos
arquivos [Freitas, 2006].
2.1.4 Arquivos temporários (temp)
Arquivos temporários são dados não voláteis. Alguns programas de processamento
de texto e de banco de dados criam arquivos temporários durante sua execução, que são
normalmente apagados automaticamente ao �nal da sessão de trabalho. Tais arquivos
podem conter indícios de atos ilícitos e deverão ser investigados [Reis e Geus, 2001].
2.1.5 Área de swap
A área de swap é utilizada pelo gerenciador de memória do sistema operacional como
uma grande área de armazenamento temporário de arquivos, permitindo que arquivos se-
17
jam momentaneamente descarregados da memória principal, liberando espaço para a exe-
cução de outros. Os arquivos de swap são considerados dados não voláteis [Freitas, 2006].
A área de swap pode conter tanto um arquivo quanto uma partição inteira do disco,
podendo conter fragmentos de dados ou até mesmo um arquivo texto completo. Logo,
esta área poderá conter alguma prova de algum ato ilícito e deve ser também investigada
[Reis e Geus, 2001].
2.1.6 Setor de boot
O setor de boot de um computador contém informações relativas aos programas que são
carregados quando o computador é inicializado. Se tais informações forem modi�cadas, é
possível carregar qualquer programa durante a inicialização do computador [Freitas, 2006].
Exemplo: inserção de uma instrução no boot que irá inicializar algum tipo de ocorrência
maliciosa no sistema operacional. Logo é importante também para o investigador a análise
do setor de boot do computador periciado.
2.1.7 Memória
A memória principal contém todo tipo de informação volátil, como, por exemplo,
informações dos processos que estão em execução, dados que estão sendo manipulados e
muitas vezes ainda não foram salvos no disco e informações do sistema operacional. Tais
informações podem ser acessadas por meio de dumps da memória ou pela geração de core
�les (arquivos com dados e informações da memória utilizada pelos processos). Exemplo:
bu�er de impressora, área de transferência de arquivos [Freitas, 2006].
2.1.8 Periféricos
Na concepção de [Freitas, 2006], os Periféricos são quase todos os dispositivos, implan-
tados ou não, em um computador, que obtém memória, sendo esta temporária ou não.
Exemplo: impressoras, pendrives, scanners, etc.
Muitos dispositivos como modems, pagers, aparelhos de fax e impressoras, contém
memórias que podem ser acessadas e salvas. Além disso, dispositivos não autorizados
podem ter sido implantados no computador, possibilitando a execução da infração.
2.1.9 Processos
Cada processo executa em um ambiente com privilégios especí�cos que determinam
quais recursos do sistema, programas e arquivos de dados podem ser acessados, e de que
modo. O comportamento de um processo é representado pelas operações que ele executa,
18
pela maneira como tais operações são realizadas, e pelos recursos do sistema que o processo
utiliza. Os processos são considerados dados voláteis.
Um invasor pode alterar a execução de um programa ou serviço, causando sua falên-
cia, ou fazendo com que ele opere de maneira inesperada ao administrador ou usuário,
acessando informações não autorizadas ou consumindo recursos excessivos, por exemplo
[Reis e Geus, 2001].
2.2 Segurança em Sistemas Operacionais
A segurança tem se tornado uma preocupação constante para todos os usuários de
computador, ainda mais com o crescente número de computadores ligados à internet.
Quanto mais usuários despreparados na rede mais fácil é o trabalho de vírus, spywares,
adwares e hackers em geral.
Por conta disso é muito importante, para não dizer essencial, manter-se atualizado
e protegido contra todo o tipo de invasão e ataque provenientes da rede mundial de
computadores.
Estatisticamente, ao conectar um computador na internet sem nenhum tipo de prote-
ção, levam menos de oito segundos para que este seja invadido. A informação é de uma
pesquisa feita pela BBC (British Broadcasting Corporation) [CERT, 2006].
Além disso todos os hackers estão em constante aprimoramento, assim como suas
ferramentas de invasão, portanto, além de se proteger de todas as frentes de possíveis
ataques , ainda é necessário manter-se muito atualizado para não ser surpreendido por um
programa malicioso espionando suas ações no computador e roubando dados importantes.
Dizemos que um sistema é seguro se seus recursos forem usados e acessados conforme
o pretendido, sob todas as circunstâncias [Silberschatz et al., 2001].
As informações armazenadas no sistema operacional ( dados e código), precisam ser
protegidas contra acesso não-autorizado, destruição ou alteração maliciosa, e introdução
acidental de inconsistências.
Segurança em Sistemas Operacionais exige não apenas um sistema de proteção interno
adequado, mas também uma consideração do ambiente externo dentro do qual o sistema
opera. A proteção interna não é útil se a máquina for exposta a um pessoal não-autorizado
ou se os arquivos puderem ser removidos do computador em �tas e discos e levados para
um sistema desprotegido [Silberschatz et al., 2001].
Assim, um sistema computacional é dito seguro se este atende a três requisitos básicos
relacionados aos recursos que o compõem: con�dencialidade, integridade e disponibilidade
[CERT, 2006].
• Con�dencialidade: a informação só está disponível para aqueles devidamente auto-
19
rizados.
• Integridade: a informação não é destruída ou corrompida e o sistema tem um de-
sempenho correto.
• Disponibilidade: os serviços/recursos do sistema estão disponíveis sempre que forem
necessários.
Computadores domésticos são utilizados para realizar inúmeras tarefas, tais como:
transações �nanceiras, sejam elas bancárias ou mesmo compra de produtos e serviços; co-
municação, por exemplo, através de e-mails; armazenamento de dados, sejam eles pessoais
ou comerciais, etc.
É importante se preocupar com a segurança do computador, pois, provavelmente,
ninguém gostaria que:
• Suas senhas e números de cartões de crédito fossem furtados e utilizados por tercei-
ros;
• Sua conta de acesso à Internet fosse utilizada por alguém não autorizado;
• Seus dados pessoais, ou até mesmo comerciais, fossem alterados, destruídos ou vi-
sualizados por terceiros;
• Seu computador deixasse de funcionar, por ter sido comprometido e arquivos essen-
ciais do sistema terem sido apagados, etc.
Existem medidas de segurança, mas nem sempre elas são adotadas. Assim, o atacante
aproveita desse descuido dos administradores de sistemas para explorar falhas conhecidas
em um Sistema Operacional.
2.3 Vulnerabilidades de segurança que afetam todos os
Sistemas
Vulnerabilidade é de�nida como uma falha no projeto, implementação ou con�guração
de um software ou sistema operacional que, quando explorada por um atacante, resulta
na violação da segurança de um computador [CERT, 2006].
Existem casos onde um software ou sistema operacional instalado em um computador
pode conter uma vulnerabilidade que permite sua exploração remota, ou seja, através da
rede. Portanto, um atacante vindo da Internet pode explorar tal vulnerabilidade, obtendo
acesso não autorizado ao computador vulnerável.
20
A melhor forma de evitar que o sistema operacional e os softwares instalados em um
computador possuam vulnerabilidades é mantê-los sempre atualizados. Fabricantes em
muitos casos não disponibilizam novas versões de seus softwares quando é descoberta
alguma vulnerabilidade, mas sim correções especí�cas patches. Estes patches, em alguns
casos também chamados de hot �xes ou service packs, têm por �nalidade corrigir os
problemas de segurança referentes às vulnerabilidades descobertas [CERT, 2006].
Portanto, é extremamente importante além de manter o sistema operacional e os
softwares sempre atualizados, instalar os patches sempre que forem disponibilizados.
A maioria dos atacantes são oportunistas, eles exploram falhas conhecidas utilizando
ferramentas bem difundidas e partem do princípio que as empresas não corrigem seus
sistemas e passam a buscar sistemas vulneráveis na internet. Os administradores normal-
mente não corrigem falhas, pois não sabem que determinadas falhas são perigosas e não
têm tempo para corrigir todas as falhas divulgadas [SANS, 2002].
As vulnerabilidades mais críticas dos Sistemas Operacionais segundo o SANS (Sys-
tem Administration, Networking and Security) e o NIPC/FBI (National Infrastructure
Protection Center, FBI) são as seguintes [SANS, 2002]:
• Instalações default de sistemas operacionais e aplicativos;
• Contas sem senhas ou com senhas fracas;
• Backups incompletos ou inexistentes;
• Grande número de portas abertas;
• Ausência de �ltro de pacotes de entrada e saída que garantam o uso de endereços
válidos;
• Sistema de logs inexistente ou incompleto;
• Programas CGI vulneráveis.
2.3.1 Instalações default de sistemas operacionais e aplicativos
A maioria dos softwares, incluindo sistemas operacionais e aplicativos, vem com scripts
ou programas que têm por objetivo instalar os sistemas tão rapidamente quanto possível,
com a máxima funcionalidade e com o mínimo de esforço por parte do administrador.
Para atingir este objetivo, os programas normalmente instalam mais componentes do que
a maioria dos usuários necessita. Esta ação, embora seja conveniente para o usuário,
origina a existência de muitas das mais críticas vulnerabilidades de segurança, pois os
usuários não mantêm, nem corrigem componentes de software não usados. Além disso,
muitos usuários desconhecem o que realmente é instalado, deixando programas perigosos
21
no sistema, simplesmente porque eles não sabem que estão lá. Estes serviços vulneráveis
fornecem meios para os atacantes invadirem seus sistemas [SANS, 2002].
No que diz respeito aos sistemas operacionais, as instalações default comumente in-
cluem serviços adicionais, abrindo conseqüentemente as portas associadas a eles. É justa-
mente por estas portas que os atacantes costumam invadir. Quanto menos portas abertas,
menor a probabilidade de o sistema ser invadido.
2.3.2 Contas sem senhas ou com senhas fracas
A maioria dos sistemas é con�gurada para usar senhas como a primeira, e única, linha
de defesa. A identidade do usuário (User ID) é razoavelmente fácil de obter, e a maioria das
companhias oferece acesso dial-up que comumente dribla o �rewall. Consequentemente,
se um atacante puder determinar um nome e uma senha de cliente, poderá também ter
acesso à rede. Senhas fáceis de adivinhar e senhas default constituem um problema grave,
pior ainda são as contas sem senha. Na prática, todas essas contas (com senhas fracas,
senhas default, ou sem senhas) devem ser removidas do sistema [SANS, 2002].
Adicionalmente, muitos sistemas têm contas de usuário que fazem parte da instalação
padrão, as quais geralmente mantêm a mesma senha em todas as instalações do software.
Os atacantes procuram geralmente por estes tipos de contas, amplamente conhecidas pela
comunidade `blackhat '. Conseqüentemente, é preciso que estas contas sejam identi�cadas
e removidas do sistema.
Muitas organizações adicionam programas de controle de senha, mecanismos que ga-
rantem que as senhas sejam mudadas regularmente, e que senhas antigas não sejam reu-
tilizadas. Se a expiração de senhas for implementada, tais programas certi�cam que os
usuários sejam alertados a trocar a sua senha antes dela expirar. Diante de uma mensagem
do tipo: �sua senha expirou”, ela deve ser mudada.
A maioria dos usuários tende a escolher uma senha fraca, então é muito importante
a conscientização dos usuários para entender como e por que escolher senhas fortes. A
recomendação mais comum dada durante o processo de escolha de senhas é escolher uma
frase ou parte de uma canção que inclua um número, e construir a senha da primeira ou
segunda letra de cada palavra que compõe a frase, além de dígitos de quaisquer números.
Adicionando pontuação torna a senha ainda mais difícil de ser quebrada [SANS, 2002].
Uma outra maneira de se proteger contra senhas fracas ou mesmo contas sem senhas, é
utilizar uma forma alternativa de autenticação de usuários, tal como sistemas de geração
de senhas ou biometria. Estes programas garantem que as senhas sejam de comprimento
e composição, tal que sejam difíceis de serem quebradas ou descobertas.
22
2.3.3 Backups incompletos ou inexistentes
Quando um incidente ocorrer (e ocorrerá em quase todas organizações), a recuperação
do incidente requer backups atualizados e métodos de recuperação dos dados previamente
testados. Algumas organizações fazem backups diários, mas nunca veri�cam se eles estão
realmente funcionando. Outras criam políticas e procedimentos de backup, mas não de
restauração. Freqüentemente, tais erros são descobertos somente depois que um hacker
invade os sistemas e os dados são destruídos, ou arruinados de alguma outra maneira.
Um segundo problema que envolve backups é a falta de proteção física das mídias. Os
backups contêm a mesma informação sensível que reside no servidor, portanto devem ser
protegidos da mesma maneira.
No mínimo, os backups devem ser feitos diariamente. Na maioria das organizações, o
requisito mínimo é que sejam executados backups completos semanalmente e backups
incrementais diariamente. Ao menos uma vez por mês, a mídia deve ser veri�cada
restaurando-se os dados em um servidor de teste para comprovar se os mesmos estão
sendo corretamente restaurados. Algumas companhias executam backups completos uma
ou várias vezes por dia.
No que diz respeito a backups, a mais recente solução consiste em ter uma rede in-
teiramente redundante que implemente tolerância a falhas- solução usada em sistemas
de tempo real críticos (�nanceiros e de comércio eletrônico), sistemas que controlam in-
fraestruturas críticas, e alguns sistemas do Departamento de Defesa dos EUA (DoD)
[SANS, 2002].
2.3.4 Grande número de portas abertas
Ambos, tanto os usuários legítimos quanto os atacantes, se conectam aos sistemas
através de portas abertas. Quanto maior o número de portas abertas, maior a possibilidade
de alguém se conectar ao sistema. Consequentemente, é importante manter o menor
número de portas abertas necessárias para o correto funcionamento do sistema, o restante
deve ser fechado.
Em sistemas Linux/Unix, muitos dos serviços são controlados pelo super daemon inetd
e seu correspondente arquivo de con�guração, inetd.conf. O arquivo inetd.conf lista os
serviços associados a uma determinada porta, e freqüentemente é usado para fechar portas.
Ao remover um determinado serviço do arquivo inetd.conf, reinicializando-o em seguida, se
faz com que a porta associada a tal serviço seja fechada. Outros serviços são inicializados
através de scripts, os quais são executados durante o processo de inicialização do sistema
(tais como: /etc/rc, /etc/rc.local, ou scripts encontrados nos diretórios /etc/rc*). Além
disso, existe um programa chamado lsof que pode ser usado para auditar portas abertas.
Este programa pode ser obtido em: ftp://vic.cc.purdue.edu/pub/tools/UNIX/lsof/
23
lsof.tar.gz.
Em sistemasWindows NT e 2000, para determinar que serviço/programa está �escutando”
em uma determinada porta, pode ser usada a ferramenta fport, encontrada em http:
//www.foundstone.com/. No Windows XP, pode ser utilizado o comando netstat com a
opção `-o'. Esta informação permitirá desabilitar o serviço e fechar a porta associada a
ele.
2.3.5 Ausência de �ltro de pacotes de entrada e saída que garan-
tam o uso de endereços válidos
O Spoo�ng de endereços IP é um método comumente usado por atacantes para escon-
der evidências. Por exemplo, o tão popular ataque �smurf ” faz uso de uma funcionalidade
dos roteadores para enviar pacotes a milhares de máquinas. Cada pacote contém o en-
dereço forjado de uma vítima. Os computadores que recebem este tipo de pacote, em
resposta, inundam à vítima com outros pacotes, chegando a retirá-la da rede em alguns
casos. Filtrar o tráfego que entra na sua rede (ingress �ltering) e que sai (egress �ltering)
pode ajudar a elevar o nível de proteção. As regras básicas de �ltragem são como segue
[SANS, 2002]:
1. Nenhum pacote que entra em sua rede pode ter como endereço de origem qualquer
IP da sua rede interna.
2. Todo pacote que entra em sua rede deve ter como endereço de destino algum ende-
reço pertencente à sua rede interna.
3. Qualquer pacote que sai da sua rede deve ter como endereço de origem algum IP
que pertença à sua rede interna.
4. Nenhum pacote que sai da sua rede deve ter como endereço de destino algum IP de
sua rede interna.
5. Nenhum pacote que entra ou sai de sua rede deve conter como endereço de origem
ou destino qualquer endereço privado ou endereço reservado segundo descrito na
RFC 1918. Estão incluídos neste espaço de endereçamento as redes 10.x.x.x/8,
172.16.x.x/12 ou 192.168.x.x/16, e a rede 127.0.0.0/8, correspondente a loopback.
Um loopback é um canal de comunicação com apenas um ponto �nal. Qualquer
mensagem transmitida por meio de tal canal é imediatamente recebida pelo mesmo
canal.
6. Bloquear qualquer pacote que tenha a opção �source routing” ativada ou o campo
`IP Options' ativado.
24
7. Endereços reservados de auto-con�guração DHCP e Multicast também devem ser
bloqueados:
• 0.0.0.0/8
• 169.254.0.0/16
• 192.0.2.0/24
• 224.0.0.0/4
• 240.0.0.0/4
Para defender-se deste tipo de ataque, é necessário implementar regras de �ltragem
no �rewall e no roteador de borda.
2.3.6 Sistema de logs inexistente ou incompleto
Uma das premissas de segurança é: �A prevenção é ideal, mas a detecção é imprescindível”.
Enquanto houver tráfego entre a rede interna e a Internet, existe a oportunidade de um
atacante invadir a rede [SANS, 2002].
Novas vulnerabilidades surgem a cada semana, e poucas são as maneiras de defender-
se de um atacante que use uma vulnerabilidade nova. Uma vez que o sistema tenha sido
atacado, sem registros (logs), a possibilidade de se descobrir o que eles �zeram no sistema
é mínima. Sem esta informação, a organização deve escolher entre fazer uma restauração
completa do sistema operacional a partir da mídia original, torcendo para que os dados
armazenados estejam corretos; ou correr o risco de possuir um sistema ainda controlado
pelo hacker.
Não há como detectar um ataque se não se sabe o que está ocorrendo na rede. Os logs
provêem detalhes sobre o que está acontecendo, os sistemas que estão sendo atacados e
os que foram efetivamente invadidos.
O registro de eventos deve ser feito de maneira regular em todos os sistemas críticos, e
os logs devem ser devidamente armazenados e arquivados, pois nunca se sabe quando eles
serão necessários. A maioria dos especialistas recomenda o envio de todos os logs a um
servidor central que grave os dados em uma mídia que não possa ser apagada, de forma
que o atacante não possa adulterar os logs e evitar assim a sua deleção.
Para a proteção do sistema, é importante con�gurar todos os sistemas de logs para
registrar as informações localmente e para enviar os logs a um sistema remoto. Isto provê
redundância e adiciona uma camada extra de segurança. Além disso, ambos sistemas de
registro podem ser comparados, onde qualquer discrepância pode indicar atividade sus-
peita. Adicionalmente, este esquema permite o cruzamento de informações: uma entrada
isolada no arquivo de logs de um único servidor pode não ser suspeita, mas a mesma
25
entrada em 50 servidores de uma organização diferindo em apenas um minuto entre uma
e outra, pode ser sinal de um problema maior [SANS, 2002].
Quando possível, é importante enviar os logs a um dispositivo que use mídia que não
possa ser apagada.
2.3.7 Programas CGI vulneráveis
A maioria dos servidores, incluindo IIS (Internet Information Services) da Microsoft
e Apache, suportam programas CGI (Common Gateway Interface) para proporcionar
interatividade em páginas web, permitindo algumas funções como o levantamento e a
veri�cação de dados. De fato, a maioria dos servidores web são distribuídos com programas
CGI de exemplo. Infelizmente, muitos programadores de CGI não consideram que seus
programas oferecem, para qualquer usuário de qualquer lugar na Internet, uma ligação
direta com o sistema operacional da máquina que abriga o servidor web. Os programas
CGI vulneráveis representam para os atacantes um alvo particularmente atraente porque
são relativamente fáceis de serem localizados e operam com os privilégios do próprio
servidor web [SANS, 2002].
Os atacantes costumam utilizar os programas CGI vulneráveis para des�gurar websites,
roubar números de cartão de crédito, ou instalar backdoors para permitir futuras invasões.
Quando o website do Departamento de Justiça foi des�gurado, uma investigação concluiu
que muito provavelmente uma brecha de segurança em um programa CGI tinha sido o
caminho usado pelos atacantes.
Da mesma forma, os aplicativos do servidor web são igualmente vulneráveis às ameaças
criadas por programadores descuidados. Como regra geral, os programas de exemplos que
acompanham as distribuições dos servidores web sempre devem ser retirados dos sistemas
de produção.
2.4 Vulnerabilidades no Windows
2.4.1 Falha no Unicode conhecida como “Web Server Folder traversal”
O Unicode é um padrão para representar caracteres, onde cada símbolo utiliza dois
bytes, o que permite um total de 65.536 combinações, com as quais é possível representar
o alfabeto da maioria das línguas do mundo [SANS, 2002].
O padrão Unicode foi adotado pela maioria dos fabricantes de software, incluindo a
Microsoft. O envio de uma URL que contém uma seqüência inválida de Unicode UTF-8 a
um servidor IIS por um atacante, pode forçar o servidor a executar comandos arbitrários.
Este tipo de ataque é conhecido também como o ataque �directory transversal”.
26
Os caracteres equivalentes em Unicode de / e \ são %2f e %5c,respectivamente. En-
tretanto, pode-se também representar estes caracteres usando seqüências denominadas
�overlong”. As seqüências �overlong” são as representações inválidas de Unicode que são
mais longas do que o requerido realmente para representar o caracter. Tanto / como \
podem ser representados com um único byte. Uma representação �overlong”, tal como
%c0%af representa o caracter / usando dois bytes. O IIS não foi escrito para veri�car a
segurança em seqüências do tipo �overlong” [SANS, 2002].
Assim, ao enviar uma seqüência de Unicode overlong em uma URL, as veri�cações de
segurança da Microsoft serão contornadas. Se o pedido for feito a um diretório marcado
como �executável”, o atacante poderá fazer com que os arquivos sejam executados no
servidor.
2.4.2 Bu�er Over�ow nas Extensões ISAPI (Internet Services
Application Programming Interface)
O servidor IIS, da Microsoft, é o software de servidor Web encontrado na maioria
dos web sites operando nas plataformas Windows NT e Windows 2000. Quando o IIS
é instalado, diversas extensões de ISAPI são instaladas automaticamente. O ISAPI,
permite aos programadores estender as potencialidades de um servidor IIS utilizando
bibliotecas DLLs. Várias DLLs, como idq.dll, contém erros de programação que resultam
na realização imprópria da checagem de erros. Em particular, não bloqueiam strings de
entrada longos (long input strings).Os atacantes podem enviar dados a estas DLLs, no
que é conhecido como bu�er over�ow, resultando no controle completo do servidor IIS
por parte do atacante.
2.4.3 Brecha nos Serviços de Dados Remotos (RDS) do IIS
O servidor IIS da Microsoft é o software de servidor Web encontrado na maioria dos web
sites operando na plataforma Microsoft Windows NT e Windows 2000. Para executar
comandos remotos com privilégios de administrador, os usuários maliciosos exploram
falhas de programação nos serviços RDS (Remote Data Services), Serviços de Dados
Remotos do IIS.
2.4.4 NetBIOS: Falta de proteção nos compartilhamentos em re-
des Windows
NetBIOS é uma interface de programa que foi desenvolvida para permitir a comunica-
ção entre máquinas. O protocolo Server Message Block (SMB), conhecido também como
Common Internet File System (CIFS), permite compartilhar arquivos através de redes.
27
A con�guração incorreta do SMB pode expor arquivos críticos do sistema ou permitir
acesso completo do sistema a qualquer usuário hostil conectado à Internet.
Muitos usuários de forma ingênua, abrem seus sistemas aos hackers quando tentam
facilitar a conveniência para colegas de trabalho, e alguns usuários externos quando abrem
o acesso de leitura e escrita nos compartilhamentos realizados pela rede. Administradores
de um site do governo utilizado para o desenvolvimento de software voltado para o plane-
jamento de missão, permitiram acesso irrestrito aos seus arquivos, de modo que pessoas
em um outro departamento do governo pudessem ter fácil acesso aos arquivos. No período
de dois dias, os atacantes descobriram os compartilhamentos de rede abertos e roubaram
o software de planejamento de missão.
Abrir o acesso para o compartilhamento de arquivos em máquinas Windows os faz
vulneráveis ao roubo de informação e determinados tipos de vírus. Os sistemas operaci-
onais Macintosh e Unix também são vulneráveis, se habilitarem o compartilhamento de
arquivos.
Os mecanismos de SMB que permitem compartilhar arquivos também podem ser utili-
zados por atacantes para obter informações sensíveis dos sistemas Windows. A informação
do usuário e do grupo (usernames, últimas datas de login, política de senha, informação
de RAS), informações do sistema, e determinadas chaves do registro podem ser obtidas
através de uma conexão �null session” ao serviço de sessão do NetBIOS. Esta informação
é útil aos hackers porque lhes ajuda a adivinhar uma senha ou descobrir uma senha por
via de um ataque de força bruta.
2.4.5 Vazamento de informações através de sessão anônima (null
session)
Uma conexão de sessão nula, também conhecida como o início de uma sessão anô-
nima, é um mecanismo que permite que um usuário anônimo recupere informação (tal
como nomes de usuários e arquivos compartilhados) sobre a rede, ou para conectar sem
autenticação. É usada por aplicativos como explorer.exe para listar arquivos comparti-
lhados em servidores remotos. Em sistemas Windows NT e Windows 2000, muitos dos
serviços funcionam sob a conta SYSTEM, conhecido como LocalSystem no Windows 2000.
A conta SYSTEM é usada para várias operações críticas do sistema. Quando uma má-
quina precisa recuperar dados de outro sistema, a conta SYSTEM abre uma sessão nula
com a outra máquina.
A conta SYSTEM tem privilégios virtualmente ilimitados e não possui senha, o que
impede que seja realizado o login com a conta SYSTEM. SYSTEM às vezes precisa acessar
informações em outras máquinas como compartilhamentos, nomes de usuários, etc. -
funcionalidade do tipo Network Neighborhood. Como não é possível logar nos outros
28
sistemas utilizando um identi�cador de usuário (UserID) e senha, é utilizada a sessão
nula para se conseguir o acesso. Infelizmente, hackers também podem realizar o login
utilizando-se do mesmo mecanismo.
2.4.6 Codi�cação fraca de senhas no SAM (LAN Manager hash)
Embora a maioria dos usuários de Windows não necessite do suporte do gerente de
LAN (Lan Manager), a Microsoft armazena hashes de senhas do Lan Manager na con�-
guração padrão de sistemas Windows NT e em Windows 2000. Um hash de senha, é uma
espécie de ”assinatura” ou ”impressão digital” que representa o conteúdo de um �uxo de
dados.
O Lan Manager usa um esquema muito fraco de criptogra�a para as senhas, mais
antigo do que o utilizado em aplicativos mais recentes da Microsoft, com isso as senhas
do Lan Manager podem ser quebradas em um curto período de tempo. Mesmo os hashes
de senha fortes podem ser quebrados em menos de um mês. As principais fragilidades dos
hash de senha Lan Manager são [SANS, 2002]:
• Senha de tamanho �xo de, no máximo, 14 caracteres;
• Senhas curtas são preenchidas com ”espaços” para conter 14 caracteres;
• Senha convertida para letras maiúsculas;
• Senha é dividida em dois blocos de sete letras.
Isto quer dizer que um programa para quebrar senhas somente precisa quebrar duas
senhas de sete letras, sem mesmo necessitar testar as letras minúsculas. Além disso, o
LAN Manager é vulnerável à interceptação da senha. A interceptação dos hashes da senha
pode fornecer aos atacantes as senhas do usuário.
2.5 Vulnerabilidades no Linux
2.5.1 Bu�er Over�ow nos serviços de Remote Procedure Call
(RPC)
As chamadas RPC (Remote Procedure Call) permitem que programas de um compu-
tador executem programas num outro computador. Este recurso é extensamente usado
no acesso a alguns serviços de rede, tais como arquivos compartilhados via NFS (Network
File System), ou ainda no NIS (Network Information Service). Muitas vulnerabilidades
têm sido causadas por falhas no RPC e estão sendo ativamente exploradas. Há evidências
29
de que a maioria dos sistemas que participaram dos ataques DDoS (Distributed Denial of
Service) ocorridos durante 1999 e 2000, foi comprometida através de vulnerabilidades no
serviço de RPC [SANS, 2002].
O ataque muito bem sucedido contra sistemas militares dos E.U.A. durante o incidente
conhecido como �Solar Sunrise”, também explorou uma falha do RPC encontrada em
centenas de sistemas no Departamento de Defesa dos EUA [SANS, 2002].
2.5.2 Vulnerabilidades no Sendmail
O Sendmail é o programa que envia, recebe e encaminha a maioria do correio eletrônico
processado em computadores UNIX e Linux. O fato de ser amplamente usado na Internet
faz com que o Sendmail seja um alvo em potencial para os atacantes. Foram encontradas
diversas falhas ao longo dos anos, sendo que o primeiro alerta emitido pelo CERT/CC,
em 1988, fez referência justamente a uma falha de segurança no Sendmail.
Um dos ataques mais comuns acontece quando o atacante cria e envia uma mensagem
de correio eletrônico, especialmente formatada, para a máquina que está usando Sendmail
e este a interpreta como instrução para enviar o arquivo de senhas para a máquina do
atacante (ou ainda para outra vítima), onde então as senhas podem ser quebradas.
2.5.3 BIND Weaknesses
O pacote BIND, Berkeley Internet Name Domain, é a implementação mais usada do
Domain Name Service (DNS) - é a maneira que permite localizar sistemas na Internet
através do nome (por exemplo,www.cert.org) sem ter que saber endereços IP especí�cos
- e isto faz com que ele seja um alvo favorito para ataques.
Infelizmente, de acordo com um estudo realizado em meados de 1999, cerca de 50% do
total de servidores de DNS conectados à Internet estão executando versões vulneráveis do
BIND. O típico exemplo de ataque ao BIND é o caso em que os atacantes apagam os logs
do sistema e instalam ferramentas para obter acesso com privilégios de administrador.
Feito isto, eles então compilam e instalam programas de IRC e ferramentas para varrer a
Internet em busca de redes vulneráveis (network scanners), que foram usadas para varrer
mais de uma dúzia de redes classe-B, a procura de outros sistemas com versões vulneráveis
do BIND [SANS, 2002].
Em questão de minutos, estavam usando o sistema comprometido para atacar centenas
de sistemas remotos, resultando em várias outras invasões bem sucedidas. Este exemplo
ilustra o caos que pode ser gerado por uma única vulnerabilidade de um software como o
DNS.
Versões velhas do BIND incluem também vulnerabilidades do tipo bu�er over�ow, que
os atacantes podem explorar para obter acesso não autorizado.
30
2.5.4 Comandos remotos (r)
As relações de con�ança são muito usadas em ambientes UNIX, principalmente na
administração de sistemas. Muitas companhias nomeiam um único administrador como
responsável por dezenas ou até centenas de sistemas. Os administradores usam frequen-
temente as relações de con�ança e os comandos UNIX r para trabalhar, acessando vários
sistemas, mais confortavelmente. Os comandos r permitem ao usuário acessar um sistema
remoto sem a exigência da senha.
Em vez de exigir uma combinação de nome de usuário/senha, a máquina remota
autentica qualquer usuário que tente acessá-la através de endereços IP con�áveis. Se
um atacante conseguir controlar qualquer máquina de uma rede con�ável, poderá assim
ter acesso as demais máquinas que con�am na máquina comprometida. Os seguintes
comandos r são usados com freqüência [SANS, 2002]:
1. rlogin - remote login
2. rsh - remote shell
3. rcp - remote copy
2.5.5 LPD (daemon do serviço de impressão remota)
Em ambientes Unix, o in.lpd permite aos usuários interagir com a impressora local. O
LPD aguarda requisições através da porta 515 TCP. Os programadores que desenvolveram
o código responsável por transferir trabalhos para impressão de uma máquina para outra,
cometeram um erro que originou uma vulnerabilidade de bu�er over�ow. Se o daemon
receber muitos trabalhos para impressão dentro de um curto intervalo de tempo, ele
deixará de funcionar ou processará código arbitrário com privilégios elevados.
2.5.6 Serviços Sadmind e Mountd
O Sadmind permite a administração remota de sistemas Solaris, através de uma in-
terface grá�ca que disponibiliza funções de administração do sistema. O Mountd controla
o acesso aos arquivos mapeados pelo NFS em hosts UNIX. As falhas de bu�er over�ow
existentes nestes aplicativos, originados por erros de programação, podem ser explorados,
permitindo aos atacantes obterem o controle do sistema com privilégios de �root”.
Esta vulnerabilidade é um caso especial de bu�er over�ow, tratado no item Bu�er
Over�ow em serviços RPC. Os colaboradores desta lista detectaram a ocorrência tão
freqüente deste caso especial, que decidiram criar um segundo item dedicado exclusiva-
mente a ele [SANS, 2002].
31
2.5.7 Mensagens-padrão do SNMP (Simple Network Manage-
ment Protocol)
O protocolo SNMP é muito usado pelos administradores de rede para monitorar e
administrar todos os tipos de equipamentos conectados à rede, desde roteadores e impres-
soras, até servidores e estações de trabalho. O SNMP usa uma �community string” sem
criptogra�a, como seu único mecanismo de autenticação.
A falta de criptogra�a por si só já é um fato ruim, além disso, a community string
de�nida como padrão e usada por grande parte dos equipamentos SNMP é �publica”, sendo
que somente alguns dos fabricantes de equipamentos de rede �mais espertos” alteram a
community para �privada”, quando se trata de informações mais sensíveis. Os atacantes
podem usar esta vulnerabilidade no SNMP para recon�gurar ou desligar remotamente os
equipamentos.
O tráfego SNMP, quando interceptado, pode revelar muitas informações sobre a es-
trutura da rede, bem como dos sistemas e os equipamentos conectados a ela. Os invasores
usam tais informações para escolher alvos e planejar os ataques.
O SNMP não é parte integrante apenas dos sistemas Linux. No entanto, ele está
listado junto com as vulnerabilidades Linux, pois os colaboradores desta lista notaram
um grande número de ataques a sistemas Linux, explorando a con�guração imprópria do
SNMP, enquanto que este não parece ser um problema muito explorado em ambientes
Windows.
Estas principais vulnerabilidades de software contabilizam a maioria dos ataques bem
sucedidos, simplesmente pelo fato dos atacantes serem oportunistas, isto é, escolherem
o caminho mais fácil e conveniente. Eles exploram as falhas mais comuns usando as
mais efetivas e difundidas ferramentas de ataque. Os atacantes partem do princípio que
as organizações não corrigem seus sistemas e saem vasculhando sistemas vulneráveis na
Internet.
Essas vulnerabilidades podem ser encontradas através de ferramentas disponíveis pu-
blicamente na Internet ou desenvolvida pelo próprio atacante.
No capítulo 3 será exposto as principais ferramentas de investigação usadas na Forense
Computacional.
32
Capítulo 3
Ferramentas de Investigação
Computacional
3.1 Introdução
Embora existam ferramentas comerciais completas com a �nalidade de execução de
análises detalhada de dados, a maiorias dos pro�ssionais da área computacional forense
recomendam a criação de um Kit de ferramentas personalizado, onde estejam presentes
as ferramentas que o perito tenha mais familiaridade em utilizar. A única exigência é
de que sejam adequadas ao cumprimento do objetivo �nal, e a obtenção dos resultados
esperados.
Para que o trabalho com a forense computacional seja respeitado, é necessário ter
conhecimento das ferramentas reais e que o perito seja capaz de levantar hipóteses que
possibilitarão supor e a�rmar o que aconteceu, ou está acontecendo ou poderá acontecer
[Farmer e Venema, 2007].
Algumas das principais ferramentas utilizadas pelos peritos e analisadas nesse traba-
lho são Easy Recovery, EnCase, eMailTrakerPro, Forensic Toolkit (FTK), caller IP, reco-
verMyFiles, smartWhois e também uma nova vertente on-line ainda não muito explorada
conhecida como portal IP-Adress.com. Todas elas são ferramentas do tipo Shareware.
3.2 Easy Recovery
A ferramenta Easy Recovery (http://www.ontrack.com), representada pela Figura
3.1, possui uma coleção de ferramentas com o objetivo básico de recuperação de dados
perdidos. Recupera desde dados apagados, até partições corrompidas [Andrade, 2005].
Todas suas ferramentas são não destrutivas e somente leitura. Dos seus recursos podem
ser citados:
33
• Capacidade de gerar um disco de inicialização para recuperação de dados sem a
necessidade de inicialização do Sistema Operacional;
• Capacidade de recuperação de dados em discos ou partições que sofreram processo
de formatação;
• Capacidade de recuperação de dados de discos do qual não se possuem dados a
respeito do sistema de arquivos utilizado;
• Capacidade de destinar os dados recuperados para disquetes, zip-drives ou outros
discos removíveis, outro disco rígido ou uma unidade mapeada na rede;
Figura 3.1: Tela do EasyRecovery
3.3 EnCase
A ferramenta EnCase desenvolvida pela Guidance Software é uma das ferramentas
mais completas no que se refere a perícia forense, pois além de auxiliar na recuperação
de arquivos deletados, padroniza laudos periciais, organiza um Banco de Dados com as
evidências, faz o encryption (fornece senhas) e o decryption (quebra de senhas) dos
arquivos, analisa hardwares, analisa logs, analisa formatos e tipos de e-mails e fornece
uma opção de se manusear a evidência sem alterá-la, além de outras características mais
avançadas [Andrade, 2005].
O Encase cria também um arquivo de provas (evidence �le) de forma não invasiva,
garantido assim a integridade e �delidade para com a fonte original dos dados. Possui um
34
recurso de grande utilidade, a procura de texto especí�co, pesquisando por uma string
dentro do arquivo de evidência criado, além de pesquisa por setor de disco em modo
hexadecimal ou em texto [Andrade, 2005].
A versatilidade e objetividade desta ferramenta fazem com que seja utilizada prefe-
rencialmente em casos de análise de conteúdos de mensagens eletrônicas e suas particu-
laridades tais como, cabeçalhos, anexos e seu conteúdo em si. Sendo possível também
analisar históricos de páginas acessadas na internet, suportando vários navegadores.
Na Figura 3.2, foi feita uma veri�cação na caixa de entrada de e-mail de um suposto
infrator, utilizando métodos de busca e investigação da ferramenta EnCase em e-mails e
Internet [Vargas, 2007].
Figura 3.2: Interface do EnCase E-mail e Internet (Tutorial) [Vargas, 2007]
3.4 eMailTrackerPro
A ferramenta eMailTrackerPro possibilita a análise do cabeçalho ou headers de e-
mails, fornecendo dados como IP da máquina que fez o envio da mensagem e localização
geográ�ca através de uma visão do mapa mundi. E permite a identi�cação da técnica mis-
direction ou Direcionamento Falso. Esta técnica é utilizada por spammers para esconder
rastros [Vargas, 2007].
A ferramenta fornece através de uma entrada de e-mail ou uma lista de e-mails o
local de origem, onde fora criado, a rota entre empresas �liadas, ou não, a organização
em questão e a mesma responsável pelo e-mail, sendo identi�cada com a apresentação de
seu endereço, telefone, dentre outros dados.
35
A Figura 3.3 apresenta à esquerda a rota de um e-mail por IPs e a rota do mesmo
no mapa mundi, enquanto que à direita está sendo indicado a empresa responsável pelos
serviços de e-mail.
Figura 3.3: Tela Principal da ferramenta E-mailTracker com rota de IPs
3.5 Forensic ToolKit (FTK)
A ferramenta Forensic ToolKit (FTK) é uma das ferramentas mais completas tam-
bém, pois oferece perícias completas, além de rápidas e customizáveis avaliações sobre os
milhares de arquivos do sistema. É também a principal ferramenta forense para análise
de e-mail [Freitas, 2006].
Outras características citadas pelo autor [Freitas, 2006] são: Recuperação de e-mails
deletados e ou excluídos; Componente para visualização de registros; Auditoria de logs e
relatórios de casos especí�cos; Recuperação automática de dados deletados e partições do
disco rígido; Ampla compatibilidade para visualizar mais de 270 formatos diferentes de
arquivos; FTK Explorer que auxilia a visualização e navegação ágil pelas imagens obtidas;
Suporte aos sistemas de arquivos: NTFS, FAT 12/16/32, Linux ext2 e ext3; Formatos
de imagens produzidos por outros softwares como EnCase, Smart, Snapback, Safeback
e Linux DD; Softwares que atuam como gerenciadores de mensagens eletrônicas como
Outlook, Outlook Express, AOL, Netscape, Yahoo, Eudora, Hotmail e MSN e-mail são
compatíveis com a ferramenta; Funcionalidades como a visualização, pesquisa, impressão
e exportação de mensagens de e-mails e anexos, são oferecidas também; e a extração de
informações de arquivos comprimidos com os softwares PKZIP, Winzip, WinRAR, GZIP
e TAR.
36
Através da exposição do autor, pode-se compreender a viabilidade do uso deste soft-
ware como ferramenta pericial. Apresenta os mais variados tipos de arquivos, adaptabili-
dade na recuperação de e-mails deletados e visualização de imagens de diversos formatos.
Estas potenciais características fazem com que a ferramenta seja bem vista no meio forense
computacional.
3.6 Caller IP
A ferramenta CallerIp auxilia na indicação de entradas, saídas e invasões de IP na
máquina em questão, informando qual o IP que está conectado ou tentando se conectar,
apresentando no mapa mundi a sua localização com endereço, telefone e responsável por
aquele IP.
Na Figura 3.4, a ferramenta CallerIp foi utilizada para veri�car quais IPs estavam
tentando acessar o sistema operacional e por quais programas estavam tentando fazer
as conexões, sendo apresentado do lado direito da �gura, os IPs que estavam em maior
evidência e acima quando clicados são apresentados ao lado do mapa mundi as principais
informações do mesmo [Vargas, 2007].
Figura 3.4: Tela Principal da Ferramenta CallerIp
37
3.7 RecoverMyFiles
A ferramenta RecoverMyFiles é um programa que permite recuperar facilmente arqui-
vos apagados acidentalmente, ou não, do Windows. Para evitar que o arquivo apagado
seja sobrescrito, essa ferramenta não requer a instalação, funcionando diretamente de um
disco �exível.
A Figura 3.5 está apresentando a tela da aplicação RecoverMyFiles recuperando os
dados apagados de uma determinada partição de um HD, que foram deletados acidental-
mente ou não de suas supostas pastas, sendo acionado anteriormente a opção de demons-
trar somente as pastas deletadas à esquerda e à direita os arquivos destas pastas.
Além de disponibilizar uma seleção de quais extensões serão buscadas, pois o mesmo
disponibiliza uma busca �ltrando os arquivos por tipos de extensão e em qual partição
será feito este tipo de busca, como qualquer outra ferramenta de recuperação, então com a
informação de todos estes requisitos a ferramenta recupera todos os dados anteriormente
perdidos [Vargas, 2007].
Figura 3.5: Visualização de Pastas Deletadas na Ferramenta RecoverMyFiles
3.8 SmartWhois
A ferramenta SmartWhois auxilia na veri�cação de IPs e de domínios na Internet,
sendo apenas necessário a indicação do IP ou domínio, apresentando na tela a localização
destes, gerando endereço, telefone, responsável pelo IP ou pelo domínio em questão, em
resumo, todos os dados referentes a uma determinada organização procurada.
38
Na Figura 3.6, foi adicionado um domínio, para veri�cação dos possíveis responsáveis.
O domínio indicado foi o da empresa ProXad. Ao indicar este IP ou um domínio a
ferramenta retorna todos os dados da empresa responsável por este serviço como telefone,
endereço, responsáveis pelo setor, data de criação, dentre outras [Vargas, 2007].
Figura 3.6: Tela Principal da Ferramenta SmartWhois
O perito pode então, com o auxílio desta ferramenta, veri�car o IP de domínio em
questão e entrar em contato com o responsável, para poder reaver, mediante pedido
judicial a quebra de sigilo de e-mail do mesmo, para poder veri�car quem foi que enviou
esse e-mail, podendo dar um direcionamento à investigação.
3.9 IP-Adress.com
A ferramenta IP-Adress.com, ou melhor, o endereço eletrônico http://www.ip-adress.
com é um portal que disponibiliza uma série de informações relevantes, que podem auxiliar
no levantamento de informações, seja do IP utilizado pelo provedor de acessos, quanto
39
pelo IP de terceiros, que pode ter enviado alguma mensagem eletrônica, ou tentou invadir
algum sistema de rede, etc.
O questionamento inicial do serviço é: É possível descobrir a origem de um e-mail?
Sim, é! Basta copiar e colar o e-mail abaixo do cabeçalho da mensagem, que o sistema
apontará a localização dos remetentes e endereço IP. O que já explica a utilidade da
ferramenta oferecida pelo portal.
A cada dia essas ferramentas são mais importantes porque 76% dos casos de vítimas de
crimes virtuais tiveram o e-mail como meio de comunicação, como atesta [Vargas, 2007].
As ferramentas evoluem na medida em que o trabalho acontece com os crimes virtuais,
por isso é importante que aliado à tecnologia, haja um pro�ssional habilitado para usar e
aperfeiçoar essas ferramentas.
Além do pro�ssional habilitado cuja quali�cação é essencial na utilização e e�cácia
dessas ferramentas, tem se o usuário que desempenha um papel fundamental na facilitação
ou não do trabalho do perito.
Essas são as principais ferramentas de investigação computacional existentes no mer-
cado, mas existem outras com o mesmo intuito das citadas neste capítulo.
No capítulo 4 será apresentado um prótotipo que realiza a recuperação de informações
na área de swap, se comparado às ferramentas citadas nesse capítulo ele constitui uma
ferramenta bem básica. As ferramentas descritas neste capítulo são bastante complexas,
lidam com análise de e-mails, veri�cação de rotas de IP, recuperação de arquivos apagados
etc.
40
Capítulo 4
Desenvolvimento e Análise do
Protótipo
4.1 Introdução
Neste capítulo são apresentados alguns tópicos sobre análise forense na memória prin-
cipal e no espaço de swap. É feita uma descrição de como funciona a troca de processos
entre a memória e a área de swap, além de descrever algumas possíveis fontes de infor-
mações de interesse à forense. Por �m, é apresentado um protótipo para automatizar a
busca e extração de conteúdo (imagens, arquivos, URLs e Diretórios) na área de swap.
4.2 Investigando a Memória Principal
A Memória Principal tem por �nalidade armazenar toda a informação que é mani-
pulada pelo computador - programas e dados. Para que um programa possa ser ma-
nipulado pela máquina, primeiro ele precisa estar armazenado na memória principal
[Silberschatz et al., 2001].
Diante do grande �uxo de informações (processos, dados, drivers de dispositivos etc.)
armazenados na memória principal em um curto intervalo de tempo, surgem di�culdades
inerentes à obtenção de dados armazenados nesse dispositivo. Não obstante, é uma área
importante para a análise forense, pois pode conter diversas informações, como senhas,
textos em claro de mensagens cifradas, imagens comprometedoras etc [Bueno, 2007].
Um importante ponto a considerar na busca por informações nesse dispositivo é o seu
alto caráter de volatilidade. Segundo [Farmer e Venema, 2007], o �tempo de vida” das
informações armazenadas na memória é da ordem de nanossegundos. Por esse motivo, a
captura de informações apresenta um desa�o ao investigador, uma vez que as evidências
necessitam ser capturadas rapidamente.
41
Assim, as informações são mantidas na mémoria principal enquanto houver alimenta-
ção de energia elétrica. Dada essa característica, o procedimento usual é coletar dados da
memória com o sistema nativo ligado, ou seja, trata-se de uma live analysis, já exposta
no Capítulo 1.
4.2.1 Memória Virtual
É a técnica de gerenciamento que combina a memória principal e a secundária (disco
rígido) dando ao usuário uma idéia de que existe mais memória principal.
Assim, a Memória virtual é uma forma de contornar o problema de falta de me-
mória RAM (Random Access Memory) num computador utilizando a própria memória
interna do HD (Hard Disk) através da criação virtual de memória estendida que funci-
ona da mesma maneira que a RAM, embora, muito mais lentamente, uma vez que isto
acontece ao nível do HD e, como se sabe, a velocidade dos discos rígidos ainda é muito
inferior à de um pente de memória RAM normal. A memória virtual é feita deixando
um espaço do HD reservado para que seja possível a sua utilização como memória virtual
[Silberschatz et al., 2001].
4.3 Ánalise do espaço de Swap
O espaço de swap está essencialmente relacionado ao esquema de memória virtual
adotado por muitos sistemas operacionais, pois é um recurso usado quando a memória
RAM está sobrecarregada. Assim, ele armazena os dados que não �cabem” na memória
RAM em um arquivo ou partição swap criadas no HD.
Existem situações em que não é possível manter todos os processos na memória
[Tanenbaum, 2003].
• Um processo já alocado na memória faz uma chamada de sistema pedindo mais
memória e não existe memória livre contígua a área onde o mesmo está alocado.
• Um usuário dispara um programa, não existe memória disponível, mas é política do
sistema atender os pedidos do usuário.
Usando a técnica de Swap (Swapping), o sistema operacional escolhe um programa
residente que é levado da memória para o disco (swap-out) e retornando posteriormente
para a memória(swap-in) [Silberschatz et al., 2001].
Por Swap, entende-se como a ação de congelar e descongelar um processo na memória
principal com o apoio da memória secundária.
Assim, chamaremos de �Swap in” a leitura de um processo congelado no disco, sua
carga na memória principal e a transferência do controle do processador para este processo.
42
Da mesma forma, chamaremos de �Swap out” a retirada do controle do processador de
um processo, sua gravação no disco, e a liberação da memória principal por ele ocupada.
A �gura 4.1 ilustra essas operações. Esta técnica é empregada por dois motivos diferentes
[Silberschatz et al., 2001]:
• primeiro, para possibilitar a implementação de um S.O. multiusuário em esquemas
de gerenciamento de memória onde os vários usuários utilizam o mesmo espaço de
memória;
• segundo para implementar a memória virtual. Neste caso o que se congela/descongela
não é o processo inteiro, e sim uma parte dele, já que o programa do usuário neste
caso pode ser maior que a memória física do computador.
Figura 4.1: Troca de processos entre a memória principal e o espaço de swap, segundo
[Silberschatz et al., 2001]
No espaço de swap podem ser encontrados dados dos mais variados tipos, como: senhas
que não chegaram a ser armazenadas no disco rígido, arquivos con�denciais (completos e
parciais), rascunhos não salvos etc. Também podem ser encontradas nessa área: dados
de processos e do kernel do sistema, bu�ers de impressora, assim como dados ocultados
deliberadamente. Portanto, analisar à area de swap é uma tarefa importante na busca de
dados - possíveis evidências- que provavelmente nunca seriam encontrados em outra área
do disco [Silberschatz et al., 2001].
43
4.3.1 Arquivo de Swap do Windows e Linux (page�le.sys)
O arquivo page�le.sys é utilizado pelo Windows como espaço de troca (memória virtual
ou swap). Do ponto de vista de utilização da máquina não é recomendado a remoção deste
arquivo, na verdade o que se faz por questões de performance é sempre desfragmentar o
disco onde ele se encontra (justamente pelo seu tamanho, que na maioria das vezes é o
tamanho da quantidade de memória física).
No Linux a opção mais comum é implementar o espaço de swap como uma partição
especí�ca para tal �m. Mas pode ser usado arquivo de swap (semelhante ao modo feito
no Windows), no lugar da partição. No entanto, para se ter um uso mais e�ciente da
swap no Linux, é recomendado o uso da armazenagem da Swap em partição em lugar de
um arquivo. [Silberschatz et al., 2001].
No trabalho desenvolvido pelo ex-aluno Marcos Bueno, �Forense Computacional: Téc-
nicas e Ferramentas”, defendido no ano de 2007, neste departamento, a fonte de dados
utilizada foi um trecho da área de swap do Windows XP, extraída no Linux por meio da
sequência de comando descrita a seguir.
Para copiar o conteúdo da partição de swap do Windows, ele utilizou o comando dd
(direct copy) do Linux da seguinte forma:
# dd if=/dev/hdaX of=/swap/swaplinux bs=1024 count=131070
que copiará o conteúdo da partição de swap, localizada em /dev/hdaX (�hdaX” é o nú-
mero �ctício de dispositivo neste exemplo) para o arquivo �/swap/swaplinux”, instruindo
o dd a copiar 131070 blocos de 1024 bytes cada, resultando em 128MB, que é o tamanho
da partição de swap (esse valor depende do tamanho da partição de swap con�gurada no
sistema).
O comando dd é uma ferramenta do Linux utilizada para clonar uma partição inteira.
Para criar uma cópia de uma partição, é necessário saber como está estruturado a tabela
de partições. No caso do [Bueno, 2007], a partição de swap estava con�gurada com um
tamanho igual a 128MB.
No presente trabalho, também foi utilizado o arquivo de swap do Windows XP, ex-
traído no Linux por meio dos comandos Control-C e Control-V, diferenciando-se assim
do trabalho do [Bueno, 2007], o qual fez através de linhas de comando.
Em suma, talvez não seja possível copiar a swap sem causar o mínimo de alteração a
ela. Mas isso não quer dizer que a análise será em vão, pois deve-se ter em mente que este
é um caso de live analysis. Deve-se procurar minimizar os efeitos da coleta de evidências
no sistema em funcionamento, causando o menor distúrbio possível.
44
4.4 A linguagem de programação utilizada
A linguagem de programação escolhida para a implementação do protótipo foi a lin-
guagem Java no ambiente de desenvolvimento Net Beans 6.9.1. O motivo principal para
o uso desta linguagem se deve ao fato de sua portabilidade, robustez, padronização forte
e por possuir uma biblioteca de interface grá�ca consistente, facilitando a implementação
deste protótipo.
Uma das características principais de Java é a simplicidade da linguagem. Acompa-
nhada de um grande número de bibliotecas de classes já testadas e que proporcionam
várias funcionalidades (E/S, interface grá�ca, multimídia,etc.). Foi projetada para criar
software altamente con�ável. Além de prover veri�cações durante a compilação, Java
possui um segundo nível de veri�cações (em tempo de execução). Apresenta também,
características de segurança e a própria plataforma realiza veri�cações em tempo de exe-
cução. Assim, aplicações escritas em Java estão �seguras” contra códigos não autorizados
que tentam criar vírus ou invadir sistemas de arquivos [Pinto, 2003].
Esses motivos apresentados foram relevantes para o emprego desta linguagem. Por-
tanto, desenvolver aplicações em Java resulta em um software que é portável em múltiplas
plataformas de hardware e software (sistemas operacionais, interfaces grá�cas), seguro e
de alto desempenho.
4.5 Protótipo desenvolvido
O Protótipo desenvolvido consiste no aperfeiçoamento de uma ferramenta utilizada
para automatizar a busca e extração de conteúdo na área de swap, desenvolvida pelo
ex-aluno Marcos Bueno [Bueno, 2007].
Foram implementadas nesse protótipo algumas sugestões de trabalhos futuros citadas
por ele. Como:
• Desenvolver uma interface grá�ca;
• Implementar a extração de outros tipos de informação, como Diretórios, outros tipos
de imagens (GIF, PNG e TIFF), arquivos (PDF e UTF8) e documentos do Microsoft
Word.
Então, além das funções já existentes que eram Extração de imagens JPEG e Extração
de URLs, foram implementadas mais essas.
4.5.1 Interface Grá�ca
A ferramenta desenvolvida por Marcos Bueno [Bueno, 2007] era executada através de
linhas de comando, sem interface grá�ca. Como mostrado a seguir:
45
C:\PrototipoSwap\dist>java -jar PrototipoSwap.jar
SINTAXE: PrototipoSwap.jar [OPCOES] [ORIGEM] [DESTINO]
Opcoes
-i extrai imagens JPEG
-u extrai URLs
Origem
Caminho absoluto do arquivo de swap
Destino
Diretorio (pre-existente) para armazenar itens extraidos
Exemplos de uso:
PrototipoSwap.jar -u c:\swapcopy\swap.dd c:\swapcopy\ext_url
PrototipoSwap.jar -i c:\swapcopy\swap.dd c:\swapcopy\ext_jpeg
PrototipoSwap.jar -iu c:\swapcopy\swap.dd c:\swapcopy\extracao
C:\PrototipoSwap\dist> java -jar PrototipoSwap.jar-iu
c:\swapwin\swap.dd c:\swapwin\result
Como observado acima, utilizar as linhas de comando tornam o programa um tanto
complexo. Com a inteface grá�ca �ca melhor a visualização dos resultados, sem falar na
facilidade de uso da ferramenta, que se dá através de �clique” nas opções do sistema.
Por tais motivos torna-se interessante o desenvolvimento de uma interface grá�ca para
o protótipo, conforme mostra a Figura 4.2, que representa a tela inicial do programa com
os menus �Arquivo” e �Extração”.
Figura 4.2: Tela inicial da ferramenta Extrator de Arquivos
46
Ao se clicar no menu �Arquivo” tem-se as opções �Abrir Arq Swap” e �Sair”, onde a
primeira opção serve para selecionar a área de swap a ser utilizada e a segunda serve para
sair do programa, conforme mostra a Figura 4.3.
Ao clicar na primeria opção �Abrir Arq Swap” irá aparecer a seguinte janela, repre-
sentada pela Figura 4.4. Clica-se então no arquivo �page�le.sys” e em �Abrir”. Assim,
pode-se começar a extração de informações, pois a área de swap está selecionada.
Figura 4.3: Opções do menu Arquivo
Figura 4.4: Janela de seleção da área de swap
Clicando-se então na segunda opção do menu, que é �Extração”, irá aparecer as opções
�Diretórios”, �URLs”, �Imagens” e �Arquivos”, como mostrado na Figura 4.5.
47
Figura 4.5: Opções do menu Extração
Ao se clicar em �Diretórios”, depois de ter selecionado a área de swap, irá começar a
busca e extração de Diretórios na área de swap e aparecerá a seguinte janela, conforme
se observa na Figura 4.6.
Figura 4.6: Busca e Extração de Diretórios
É necessário esperar até a �nalização do comando �Aguarde...”. Será exibido na tela do
programa todos os resultados de Diretórios recuperados, um por linha, conforme mostra
a Figura 4.7.
Esse mesmo procedimento pode ser executado para as �URLs”.
48
Ao se clicar em �Imagens” irá aparecer as opções �JPG”, �GIF”, �PNG” e �TIFF”, que
representam os tipos de imagens a serem extraídas da área de swap, conforme mostra a
Figura 4.8.
Figura 4.7: Diretórios recuperados
Figura 4.8: Opções do menu Imagens
Clicando agora na opção �JPG”, depois de ter selecionado a área de swap, irá começar a
busca e extração de imagens JPG na área de swap e aparecerá a seguinte janela, conforme
mostra a Figura 4.9.
É necessário esperar até a �nalização do comando �Aguarde...”. Será exibido na tela do
49
programa todos os resultados de imagens JPEG recuperadas, uma por linha, informando
ao �nal a quantidade de arquivos extraídos, como pode ser observado na Figura 4.10.
Figura 4.9: Busca e Extração de imagens JPG
Figura 4.10: Imagens JPEG recuperadas
Será aberta uma janela, conforme mostra a Figura 4.11, denominada �Miniatura das
imagens JPEG” que irá conter todas as imagens JPEG extraídas pelo protótipo na forma
de miniaturas. Esse mesmo procedimento pode ser executado para as opções �GIF”,
�PNG” e �TIFF”, bastando clicar na opção correspondente.
Voltando ao menu �Extração” e clicando na opção �Arquivos”, irá aparecer a tela
representada pela Figura 4.12, com as opções �PDF”, �UTF8” e �DOC”, que representam
os tipos de arquivos a serem extraídos da área de swap.
50
Figura 4.11: Miniaturas das Imagens JPEG recuperadas
Figura 4.12: Opções do menu Arquivos
Clicando agora na opção �PDF”, com a área de swap selecionada, irá começar a busca
e extração de arquivos PDF na área de swap selecionada e aparecerá a seguinte janela,
representada pela Figura 4.13.
Da mesma forma que as imagens, é necessário esperar até a �nalização do comando
�Aguarde...”. Será exibido na tela do programa todos os resultados de arquivos PDF recu-
perados, um por linha, informando ao �nal a quantidade de arquivos extraídos, conforme
mostra a Figura 4.14.
Nesse caso não será aberta uma janela de �Miniaturas” como na extração de imagens,
pois agora estamos lidando com arquivos. Esse mesmo procedimento pode ser executado
para as opções �UTF8” e �DOC”, bastando clicar na opção correspondente.
51
Figura 4.13: Busca e Extração de arquivos PDF
Figura 4.14: Arquivos PDF recuperados
Para sair do programa basta selecionar no menu �Arquivo” a opção �Sair”. Apare-
cerá a janela representada pela Figura 4.15, perguntando se deseja realmente encerrar o
programa, se sim, basta clicar em �OK” que o programa será fechado.
Figura 4.15: Janela de encerramento do programa
52
Todas essas informações recuperadas (Diretórios, URLs, Imagens e Arquivos) são ar-
mazenadas automaticamente em pastas criadas pelo próprio programa, conforme mostra
a Figura 4.16.
Figura 4.16: Pastas com arquivos extraídos
4.5.2 Extração de Diretórios
Foi veri�cado que a swap apresenta diversos caminhos de diretórios armazenados, o que
pode con�gurar uma fonte interessante de informação. No protótipo, foi implementada a
busca de diretórios por meio de classes em Java para expressões regulares. A expressão
regular usada foi: [A-Z]\ \ s?:\ \ s?\ \ \ \ \ \ s?(([\ \ d\ \ w\ \ p{Punct}&&[� ,;` \”]])+\ \ s?)*
Para se chegar a expressão regular acima que realiza a extração de Diretórios, foi
necessário entender a estrutura de um caminho para diretório e monta-lá de acordo com
os conceitos de expressões regulares e programação. Para isso, foi necessário consultar o
livro �Java Como Programar” [Deitel, 2005], e entender algumas de�nições referenciadas
por ele.
\d - qualquer dígito.
\w - qualquer caractere de palavra.
\s - qualquer espaço em branco.
* - localiza zero ou mais ocorrências do padrão.
? - localiza zero ou uma ocorrência do padrão.
53
+ - localiza uma ou mais ocorrências do padrão.
\\- gera a saída do caractere de barra invertida (\).
\p{Punct} - Pontuação: ! ” # $ % & ' ( ) * + , - . / : ; = > ? @ [ \ ] �_ ` { | } �
& & - intersecção.
\\” - gera a saída do caractere de aspas duplas (”).
Com isso, foi possível montar a expressão regular para Extração de Diretórios.
4.5.3 Extração de URLs
Foi veri�cado que a swap apresenta diversas URLs armazenadas, o que pode con�gurar
uma fonte interessante de informação. No protótipo, foi implementada a busca de URLs
por meio de classes em Java para expressões regulares. A expressão regular usada foi:
(http|https|ftp|news|�le)://[!-� &&[� < \ \ > ]]*
Com isso, foram buscados diversos tipos de endereços:
• HTTP
• HTTPS
• FTP
• NEWS
• FILE (notação de navegadores para indicar arquivos locais da máquina)
Para se chegar a expressão regular acima que realiza a extração de URLS, foram usadas
as de�nições da seção anterior, mais as seguintes [Deitel, 2005]:
� - exceto o que vem na frente.
! - negação.
4.5.4 Extração de imagens JPEG
Foi implementada a busca e extração de imagens JPEG por meio do número mágico
e por uma variável chamada trailer que representa a sequência de �nalização dos tipos
de dados que se está extraindo. Os números mágicos são sequências hexadecimais pra
identi�car cada tipo de dado (PDF, BMP, JPEG etc) que se deseja extrair.
O protótipo busca exaustivamente, byte a byte, pelo número mágico JPEG (FF,D8,FF,E0),
e a varredura só termina quando for encontrado o valor armazenado na variável trailer,
0xD9, que representa o �m da imagem.
O protótipo armazena todas as ocorrências desse número mágico e depois extrai todos
os arquivos. Foi adotado neste trabalho uma implementação em Java que faz dumps de
54
imagens JPEG de tamanho 256 KB (de fácil alteração no código fonte). Esse tamanho
é razoavelmente su�ciente para a grande maioria das imagens que foram testadas, até
mesmo de outras fontes de dados, como por exemplo documentos do Microsoft Word.
4.5.5 Extração de imagens GIF
Foi implementada a busca de imagens GIF também por meio do número mágico e da
variável trailer. Os arquivos de imagens GIF tem um código ASCII para �GIF89a” (47
49 46 38 39 61) ou �GIF87a” (47 49 46 38 37 61), que são de�nidos na variável magico.
A variável trailer apresenta os valores (0x00, 0x3B), que representam o �m da imagem.
Então a busca da imagem GIF é feita também exaustivamente, byte a byte, através do
número mágico (47 , 49 , 46 , 38 , 37 , 61) ou (47 , 49 , 46 , 38 , 39 , 61) e só termina
quando for encontrado o segmento 0x3B.
4.5.6 Extração de imagens PNG
Foi implementada a busca de imagens PNG também por meio do número mágico e da
variável trailer. O número mágico de uma imagem PNG é representado por (89, 50 , 4E ,
47 , 0D , 0A , 1A , 0A) de�nido na variável magico. A sequencia (4E ,44 ,AE ,42 ,60 ,82)
de�nida na variável trailer representa o �m da imagem.
4.5.7 Extração de imagens TIFF
Foi implementada a busca de imagens TIFF também por meio do número mágico e
da variável trailer. O número mágico de uma imagem TIFF é representado por (49, 49,
2A, 00) de�nido na variável magico. A sequencia (0x00, 0x00) de�nida na variável trailer
representa o �m da imagem.
4.5.8 Extração de arquivos PDF
Foi implementada a busca de arquivos PDF também por meio do número mágico e da
variável trailer. O número mágico de um arquivo PDF é representado por (25, 50, 44, 46)
de�nido na variável magico. A sequencia (25, 25, 45, 4F, 46) de�nida na variável trailer
representa o �m da imagem.
4.5.9 Extração de arquivos UTF8
Foi implementada a busca de arquivos UTF8 também por meio do número mágico e
da variável trailer. O número mágico de um arquivo UTF8 é representado por (EF, BB,
55
BF) de�nido na variável magico. A sequencia (0x00, 0x00) de�nida na variável trailer
representa o �m da imagem.
4.5.10 Extração de arquivos DOC
Foi implementada a busca de arquivos DOC também por meio do número mágico e
da variável trailer. O número mágico de um arquivo DOC é representado por (D0, CF,
11, E0) de�nido na variável magico. A sequencia (0x57, 0x6F, 0x72, 0x64, 0x2E, 0x44,
0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x2E, 0x38, 0x00, 0xF4, 0x39, 0xB2, 0x71)
de�nida na variável trailer representa o �m da imagem.
4.6 Experimentos Realizados
4.6.1 Execução e Saída do Programa
O programa do [Bueno, 2007] foi executado através de linhas de comando, conforme
exposto nesse capítulo. A execução do programa pode ser observada abaixo::
Ferramenta forense de extração de imagens JPEG e URLs da área de swap e a�ns.
Armazena as URLs encontradas em um arquivo de texto �swap_urls.txt” e as imagens
encontradas usando nomes variáveis no diretório destino especi�cado.
SINTAXE: PrototipoSwap.jar [OPCOES] [ORIGEM] [DESTINO]
Opcoes
-i extrai imagens JPEG
-u extrai URLs
Origem
Caminho absoluto do arquivo de swap
Destino
Diretorio (pre-existente) para armazenar itens extraidos
Exemplos de uso:
PrototipoSwap.jar -u c:\swapcopy\swap.dd c:\swapcopy\ext_url
PrototipoSwap.jar -i c:\swapcopy\swap.dd c:\swapcopy\ext_jpeg
PrototipoSwap.jar -iu c:\swapcopy\swap.dd c:\swapcopy\extracao
C:\PrototipoSwap\dist> java -jar PrototipoSwap.jar-iu
c:\swapwin\swap.dd c:\swapwin\result
56
3903 URL(s) extraida(s).
28 imagem(ns) extraida(s).
Como saída do programa é gravado os seguintes arquivos no diretório destino (c:\swapwin\resul):
C:\swapwin\result>dir
O volume na unidade C não tem nome.
O número de série do volume é 44E9-1D64.
Pasta de C:\swapwin\result
13/06/2007 07:24 <DIR> .
13/06/2007 07:24 <DIR> ..
13/06/2007 05:07 524.288 img_rec_122394704.jpg
13/06/2007 05:07 524.288 img_rec_126819489.jpg
13/06/2007 05:07 524.288 img_rec_126819919.jpg
13/06/2007 05:07 524.288 img_rec_126820756.jpg
13/06/2007 05:07 524.288 img_rec_126821186.jpg
13/06/2007 05:07 524.288 img_rec_126838231.jpg
13/06/2007 05:07 524.288 img_rec_126838661.jpg
13/06/2007 05:07 524.288 img_rec_152634684.jpg
13/06/2007 05:07 524.288 img_rec_169684024.jpg
13/06/2007 05:07 524.288 img_rec_169689096.jpg
13/06/2007 05:07 524.288 img_rec_169697168.jpg
13/06/2007 05:07 524.288 img_rec_169709248.jpg
13/06/2007 05:07 524.288 img_rec_178074936.jpg
13/06/2007 05:08 524.288 img_rec_178761740.jpg
13/06/2007 05:08 524.288 img_rec_180715359.jpg
13/06/2007 05:08 524.288 img_rec_189319952.jpg
13/06/2007 05:08 524.288 img_rec_196595701.jpg
13/06/2007 05:08 524.288 img_rec_197001205.jpg
13/06/2007 05:08 524.288 img_rec_197382021.jpg
13/06/2007 05:08 524.288 img_rec_198340485.jpg
13/06/2007 05:08 524.288 img_rec_199358816.jpg
13/06/2007 05:07 524.288 img_rec_48656124.jpg
13/06/2007 05:07 524.288 img_rec_57613979.jpg
13/06/2007 05:07 524.288 img_rec_87146736.jpg
13/06/2007 05:07 524.288 img_rec_88166408.jpg
57
13/06/2007 05:07 524.288 img_rec_90595301.jpg
13/06/2007 05:07 524.288 img_rec_90678584.jpg
13/06/2007 05:07 524.288 img_rec_91189488.jpg
13/06/2007 05:05 231.658 swap_urls.txt
29 arquivo(s) 14.911.722 bytes
2 pasta(s) 741.470.208 bytes disponíveis
Nas �guras 4.17 e 4.18 seguem dois exemplares de imagens extraídas da área de swap
do programa do [Bueno, 2007].
Figura 4.17: Exemplar de �gura extraída pelo protótipo do Bueno
Figura 4.18: Exemplar de �gura extraída pelo protótipo do Bueno
Abaixo encontra-se um trecho do arquivo swap_urls.txt do programa do [Bueno, 2007]:
http://www.casabrasil.gov.br
http://www.w3.org/2000/09/xmldsig#
http://schemas.xmlsoap.org/soap/envelope/
http://imagine-msn.com/hotmail/tab/default.aspx?locale=en-us
http://schemas.xmlsoap.org/soap/envelope/
https://www.netlock.net/docs
http://www.usertrust.com1604
http://www.usertrust.com1604
http://
58
http://zone.msn.com/messengertab/?loc=en-us
http://www.entrust.net/CRL/net1.crl0+
http://www.casabrasil.gov.br
http://bmm.imgag.com/bmm/xml/menuitem_us_em_5.xml
http://rad.msn.com/ADSAdClient31.dll?GetAd?PG=IMUSCI
Pode-se perceber que o programa do [Bueno, 2007] extrai somente imagens JPG e
URls, fazendo a extração com muita e�ciência, como foi demonstrado anteriormente. Foi
proposto então, um aperfeiçoamento desse protótipo com algumas funções adicionais.
Será mostrado a seguir como se deu a execução desse protótipo.
Os diversos testes do protótipo foram realizados em um computador equipado com
processador AMD Turion-64 com 2 GB de memória RAM. A fonte de dados foi um tre-
cho da área de swap(500MB)do Windows XP, extraído no Linux por meio dos comandos
Control-C e Control-V.
Executa-se o arquivo jar, nesse caso de nome �Forense_karla.jar” e obtêm-se os se-
guintes resultados para:
Extração de Diretórios
É gerada a seguinte saída (Figura 4.19) com um diretório por linha:
Figura 4.19: Diretórios recuperados
Essa saída é armazenada na pasta �Diretorios” criada automaticamente na execução
do programa, a qual contém um arquivo de texto denominado �swap_Diretorios.txt” que
armazena os diretórios extraídos, um por linha, da swap selecionada. Como pode-se
observar na Figura 4.20.
59
Figura 4.20: Arquivo de texto usado para armazenar os diretórios extraídos
Extração de URLs
É gerada a seguinte saída (Figura 4.21), com uma URL por linha:
Figura 4.21: URLs extraídas
Essa saída é armazenada na pasta �URLs” criada automaticamente na execução do
programa, a qual contém um arquivo de texto denominado �swap_urls.txt” que armazena
as URLs extraídas, uma por linha, da swap selecionada. Como pode-se observar na Figura
4.22.
60
Figura 4.22: Arquivo de texto usado para armazenar as URLS extraídas
Extração de Imagens JPEG
É gerada a seguinte saída (Figura 4.23), com uma imagem JPEG recuperada por linha:
Figura 4.23: Imagens JPEG recuperadas
Essa saída é armazenada na pasta �imagensJPEG” criada automaticamente na execu-
ção do programa, conforme pode-se observar na Figura 4.24.
Figura 4.24: Pasta criada para armazenar imagens JPEG recuperadas
61
É aberta também uma janela com as miniaturas das imagens recuperadas, conforme
mostra a Figura 4.25.
Figura 4.25: Miniaturas das Imagens JPEG recuperadas
Extração de Imagens GIF
É gerada a seguinte saída (Figura 4.26), com uma imagem recuperada por linha:
Figura 4.26: Imagens GIF recuperadas
Essa saída é armazenada na pasta �imagensGIF”, conforme pode-se observar na Figura
4.27.
Da mesma forma que as imagens JPEG, também é aberta uma janela com as minia-
turas das imagens recuperadas, conforme pode-se observar na Figura 4.28.
62
Figura 4.27: Pasta criada para armazenar imagens GIF recuperadas
Figura 4.28: Miniaturas das Imagens GIF recuperadas
Extração de Imagens PNG
É gerada a seguinte saída (Figura 4.29), com uma imagem PNG recuperada por linha:
Figura 4.29: Imagens PNG recuperadas
63
Essa saída é armazenada na pasta �imagensPNG”, conforme pode-se observar na Fi-
gura 4.30.
Figura 4.30: Pasta criada para armazenar imagens PNG recuperadas
Da mesma forma que as outras imagens, também é aberta uma janela com as minia-
turas das imagens PNG recuperadas, conforme mostra a Figura 4.31.
Figura 4.31: Miniaturas das Imagens PNG recuperadas
Extração de Imagens TIFF
É gerada a seguinte saída (Figura 4.32), com uma imagem TIFF recuperada por linha:
64
Figura 4.32: Imagens TIFF recuperadas
Essa saída é armazenada na pasta �imagensTIFF”, conforme pode-se observar na
Figura 4.33.
Figura 4.33: Pasta criada para armazenar imagens TIFF recuperadas
Também é aberta uma janela com as miniaturas das imagens TIFF recuperadas, con-
forme mostra a Figura 4.34.
Figura 4.34: Miniaturas das Imagens TIFF recuperadas
65
Extração de Arquivos PDF
É gerada a seguinte saída (Figura 4.35), com um arquivo PDF recuperado por linha:
Figura 4.35: Arquivos PDF recuperados
Essa saída é armazenada na pasta �PDF”, conforme pode-se observar na Figura 4.36.
Figura 4.36: Pasta criada para armazenar arquivos PDF recuperados
66
Extração de Arquivos UTF8
É gerada a seguinte saída (Figura 4.37), com um arquivo UTF8 recuperado por linha:
Figura 4.37: Arquivos UTF8 recuperados
Essa saída é armazenada na pasta �UTF8”, conforme pode-se observar na Figura 4.38.
Figura 4.38: Pasta criada para armazenar arquivos UTF8 recuperados
Extração de Arquivos DOC
É gerada a seguinte saída (Figura 4.39), com um arquivo DOC recuperado por linha:
67
Figura 4.39: Arquivos DOC recuperados
Essa saída é armazenada na pasta �DOC”, conforme pode-se observar na Figura 4.40.
Figura 4.40: Pasta criada para armazenar arquivos DOC recuperados
Assim, encerram-se as funções do Protótipo. Pode-se observar que alguns conteúdos
são recuperados com e�ciência e outros não. Por exemplo, arquivos pdf e arquivos Word
não são recuperados com e�ciência por serem muito grandes, então é raro estarem com-
pletos na swap. Ao contrário das imagens; JPEG, GIF e PNG; que são extraídas com
muita e�ciência.
Neste capítulo, foi apresentado um aperfeiçoamento do protótipo de recuperação de
68
dados na área de swap, desenvolvido pelo ex-aluno Marcos Bueno, no qual foi implemen-
tado além das funções já existentes, as funções de extração de diretórios, extração de
imagens GIF, PNG e TIFF e extração de arquivos PDF, UTF8 e DOC.
Primeiramente foi necessário apresentar uma breve discussão sobre a coleta de dados
na memória principal e como se dá o processo de obtenção do espaço de swap do Win-
dows através do Linux. Além dessa caracterização, foram apresentados os processos para
obtenção das expressões regulares necessárias para a implementação das demais funções
do protótipo.
O protótipo e suas características foram, então, apresentados, e de que forma ele lida
com imagens e arquivos, o que requer a utilização do conceito de número mágico. Uma
limitação percebida foi a extração parcial que é feita pelo protótipo, mas para a Forense
é considerado uma valiosa fonte de informação.
Existem ainda algumas melhorias que podem ser realizadas no protótipo que serão
mencionadas no Capítulo 5, podendo servir de base para uma ferramenta mais abrangente
e e�ciente de perícia forense na área de swap ou áreas a�ns.
69
Capítulo 5
Considerações Finais
No atual contexto em que vivemos está claro que o papel da investigação forense é
fundamental para permitir uma sociedade mais justa e cienti�camente capaz de tratar
de crimes realizados por meio de um computador. Esse ramo da criminalística é recente
e, por isso, cresce expressivamente, tanto em uso como em evolução como ciência. Por
outro lado, sofre da falta de padrões, especialmente quando comparado a outros ramos
já consagrados da ciência forense, como a Psicologia Forense ou a Medicina Forense, os
quais são praticados a muito mais tempo.
Por tratar-se de uma área extremamente técnica, a computação forense exige um
estudo permanente e aprofundado de muitos aspectos da informática, sendo necessário
um acompanhamento constante, tanto das tecnologias envolvidas quanto das técnicas
mais utilizadas nos crimes eletrônicos.
A análise e a perícia de computadores que tenham passado por algum tipo de violação
ou ataque têm diversos aspectos relevantes. Primeiramente, ela é importante porque
permite que se entenda o que aconteceu, de forma a corrigir falhas que tenham sido
cometidas no processo. Em segundo lugar, ao olharmos para o passado, interpretando o
que aconteceu, pode ser possível coletar evidências necessárias a identi�car o atacante, de
tal forma que possam ser adotadas medidas legais ou jurídicas pertinentes.
Para realizar perícias forenses computacionais com e�ciência é necessário conhecer e
estabelecer procedimentos con�áveis, bem como documentá-los e auxiliá-los com ferra-
mentas seguras. Uma questão fundamental é que os resultados têm de ser con�áveis e
devem seguir uma cadeia rigorosa de procedimentos, a �m de que possam servir como
prova em um caso criminal. Além disso, as provas coletadas têm de estar à disposição
para novos esclarecimentos ou perícias, assim como ocorre em todas as áreas das ciências
do crime.
Neste trabalho, foi feito um estudo das diversas fontes de informação em um compu-
tador, como sistemas de arquivos, arquivos de log, memória, área de swap, etc. Foram
apresentados diversos aspectos dessas fontes, tendo em mente quais evidências podem ser
70
extraídas e de que forma.
Um ponto importante desse trabalho foi o estudo das principais vulnerabilidades de
segurança encontradas nos sistemas operacionais Windows e Linux. Essas vulnerabilida-
des podem ser encontradas através de ferramentas disponíveis publicamente na Internet
ou desenvolvida pelo próprio atacante.
Para que o trabalho com a forense computacional seja respeitado, é necessário ter
conhecimento das ferramentas de investigação computacional e que o perito seja capaz de
levantar hipóteses que possibilitarão supor ou a�rmar o que aconteceu, ou está ou poderá
acontecer. Neste trabalho, são citadas apenas algumas ferramentas computacionais, mas
existem outras no mercado com o mesmo intuito ou melhores.
O protótipo desenvolvido, consiste em uma implementação melhorada de uma ferra-
menta de recuperação de dados na área de swap desenvolvida pelo ex-aluno [Bueno, 2007].
As di�culdades encontradas no decorrer desse protótipo foram relacionadas ao processo
de extração de arquivos, pois sendo a swap uma área de armazenamento de informações
temporária, muitos dados não são armazenados, e as vezes quando são armazenados são
grandes demais e �cam fragmentados. Mas, mesmo assim a swap constitui uma valiosa
fonte de informação forense.
5.1 Trabalhos Futuros
Para trabalhos futuros têm-se:
• A perspectiva de ampliação do protótipo, no intuito de implementar a extração de
outros tipos de informação, como outros tipos de imagens, arquivos MP3, bytecodes
Java, códigos fonte de linguagens de programação, etc.
• Melhorar a e�ciência do programa, seja por meio da adoção de linguagens de pro-
gramação mais rápidas ou pelo uso de estruturas de programação mais e�cientes.
• Lidar com a fragmentação presente na área de swap.
• Melhorar o processo de extração de arquivos, além da swap, investigar outras fontes
de informação.
• Realizar um comparativo de e�ciência das principais ferramentas de investigação
computacional encontradas atualmente no mercado.
Em suma, a forense computacional é um tema bastante atual e que tem recebido
atenção signi�cativa tanto da comunidade cientí�ca quanto da indústria, principalmente
devido aos inúmeros crimes de tecnologia ocorridos.
71
Espera-se que este trabalho sirva de incentivo para futuras pesquisas sobre forense
computacional, vulnerabilidades de segurança nos Sistemas Operacionais, e especialmente
na recuperação de dados na área de swap.
72
Referências
Andrade, T. F. d. (2005). PERÍCIA FORENSE COMPUTACIONAL BASEADA EM
SISTEMA OPERACIONAL WINDOWS. Disponível em: http://www.batori.com.
br/downloads/trabalhosacademicos/periciaforensecomputacional.pdf. Acesso
em 29/03/2009.
Atilio, C., Cansian, A., e Siqueira, T. A. (2003). Análise Dinâmica de Código Malicioso
Baseado em Sistemas Windows: Conceitos e Procedimentos.
Bueno, M. L. d. P. (2007). Forense Computacional: Técnicas e Ferramentas.
Cagnani, C. e Santos, V. d. D. d. (2008). Computação Forense: Fundamentos. Disponí-
vel em: http://pt.scribd.com/doc/47774532/computacao-forense-fundamentos.
Acesso em 17/08/10.
Calazans, C. H. e Calazans, S. M. (2001). Ciência Forense: das Origens à Ciên-
cia Forense Computacional. Disponível em: http://pt.scribd.com/doc/51494536/
Ciencia-Forense-Das-origens-a-forense-computacional. Acesso em 10/06/2009.
Cansian, A. M. (2001). Conceitos para perícia forense computacional. Disponível em:
http://www.acmesecurity.org/~adriano/docs/eri2001/artigo-adr-icmc-2001.
pdf. Acesso em 13/06/2010.
CERT (2006). Crimes Cibernéticos Manual Prático de Investigação. Editora MPF.
Deitel (2005). Java Como Programar. Editora Prentice-Hall.
Farmer, D. e Venema, W. (2007). Perícia Forense Computacional Teoria e Prática Apli-
cada. Editora Pearson.
Freitas, A. R. d. (2006). Perícia Forense Aplicada à Informática. Editora Brasport.
Noblett, M. G., Pollitt, M. M., e Presley, L. A. (2000). Recovering and Examining
Computer Forensic Evidence.
Oliveira, F. d. S. (2002). Resposta a Incidentes e Análise Forense para Redes Baseadas
em Windows 2000. Disponível em: http://www.las.ic.unicamp.br/paulo/teses/
20021121-MSc-Flavio.Oliveira-Resposta.a.incidentes.e.analise.forense.
para.redes.baseadas.em.Windows.2000.pdf. Acesso em 05/09/2010.
Pereira, E., Fagundes, L. L., Neukamp, P., Ludwig, G., e Konrath, M. (2007).
Forense Computacional: fundamentos, tecnologias e desa�os atuais. Disponível
73
em: http://www.ppgia.pucpr.br/~maziero/static/ceseg/sbseg07/minicursos/
cap1-forense.pdf. Acesso em 02/10/2010.
Pimenta, F. A. (2007). Perícia forense computacional baseada em sistema operacional
Windows XP Professional. Disponível em: http://pt.scribd.com/doc/55358550/
Pericia-forense-computacional-baseada-em-sistema-operacional-Windows-XP
-Professional. Acesso em 27/10/2009.
Pinto, S. A. (2003). Introduçao a Linguagem Java. Disponível em: www.conquista.
cefetba.br/stenio/java.pdf,Unicamp. Acesso em 03/10/2010.
Reis, M. A. d. e Geus, P. L. d. (2001). Forense Computacional: Procedimen-
tos e Padrões. Disponível em: http://www.las.ic.unicamp.br/paulo/papers/
2001-SSI-marcelo.reis-forense.padroes.pdf. Acesso em 25/05/2009.
Rodrigues, W. d. P. (2004). ANÁLISE PERICIAL EM SISTEMA OPERACIONAL
MS-WINDOWS 2000. Disponível em: http://www2.dc.uel.br/nourau/document/
?down=169. Acesso em 22/03/2010.
SANS, T. I. (2002). As 20 Vulnerabilidades de Segurança Mais Críticas na Internet.
Silberschatz, Galvin, e Gagne (2001). Sistemas Operacionais: conceitos e aplicações.
Editora Campus.
Tanenbaum, A. S. (2003). Sistemas Operacionais Modernos. Editora Prentice-Hall.
Tavares, D. (2007). Forense Computacional. Disponível em: http://www.dsc.
ufcg.edu.br/~pet/atividades/ciclo_seminarios/tecnicos/2007/Forense_
Computacional.pdf. Acesso em 10/06/2011.
Vargas, R. (2007). Perícia Forense Computacional - Ferramentas Periciais. Dispo-
nível em: http://imasters.uol.com.br/artigo/6485/forense/pericia_forense_
computacional_ferramentas_periciais/. Acesso em 25/06/2009.
ZAGO (2007). log - obter informações do sistema, processos e hardware. Disponível em:
http://www.zago.eti.br/log.html. Acesso em 24/08/2009.
74
Apêndice A
Código fonte
A.1 Classe Janela
package forensekarla;
import com.sun.corba.se.impl.orbutil.closure.Constant;
import java.awt.FileDialog;
import java.io.File;
import java.io.FilenameFilter;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.SwingWorker;
public final class Janela extends javax.swing.JFrame {
final static int stc_urls = 1;
final static int stc_jpg = 2;
final static int stc_png = 3;
final static int stc_tiff = 4;
final static int stc_gif = 5;
final static int stc_diretorios = 6;
final static int stc_pdf = 7;
final static int stc_utf8 = 8;
final static int stc_doc = 9;
75
String diretorioImagensJPEG = "imagensJPEG";
String diretorioImagensPNG = "imagensPNG";
String diretorioImagensTIFF = "imagensTIFF";
String diretorioImagensGIF = "imagensGIF";
String diretorioURLs = "URLs";
String diretorioPDF = "PDF";
String diretorioUTF8 = "UTF8";
String diretorioDOC = "DOC";
//String diretorioDiretorios = "C:\\swap\\Diretorios";
String diretorioDiretorios = "Diretorios";
JFrame janelaArquivo = null;
String diretorioArquivo = "";
ArquivoSwap arq;
File diretorioacriar;
//Cria uma nova Janela
public Janela() {
initComponents();
setExtendedState(MAXIMIZED_BOTH);
//criar pasta JPEG
criarDiretorio(diretorioImagensJPEG);
//criar pasta PNG
criarDiretorio(diretorioImagensPNG);
//criar pasta TIFF
criarDiretorio(diretorioImagensTIFF);
//criar pasta GIF
criarDiretorio(diretorioImagensGIF);
//criar pasta Diretorios
criarDiretorio(diretorioDiretorios);
//criar pasta URL
criarDiretorio(diretorioURLs);
//criar pasta PDF
criarDiretorio(diretorioPDF);
76
//criar pasta UTF8
criarDiretorio(diretorioUTF8);
//criar pasta DOC
criarDiretorio(diretorioDOC);
}
//cria um diretorio
public void criarDiretorio(String localcriacao){
diretorioacriar= new File(localcriacao);
if (!diretorioacriar.mkdir()) {
System.out.println("O diretorio nao foi criado -> "
+ localcriacao);
} else {
System.out.println("Diretorio criado com sucesso -> "
+ localcriacao) ;
}
}
//executa a extração
private void executar(final int opcao) {
if (diretorioArquivo.length() != 0) {
final Progress p = new Progress();
p.setAlwaysOnTop(true);
p.setVisible(true);
SwingWorker worker = new SwingWorker() {
@Override
protected Object doInBackground() throws Exception {
// função que irá demorar algum tempo
executaCodigoExtracao(opcao);
return null;
}
@Override
77
protected void done() {
p.setVisible(false);
}
};
worker.execute();
} else {
JOptionPane.showMessageDialog(null, "Erro ao localizar arquivo
swap", "Erro", JOptionPane.ERROR_MESSAGE);
}
}
//executa URLs, imagens, arquivos e diretórios
private void executaCodigoExtracao(int opcao) {
switch (opcao) {
case stc_urls:
//cria o objeto da classe de extração de URLs passando como
//parâmetro a referencia da classe Janela (o this)
ExtratorURL ext = new ExtratorURL(this);
ext.extraiURL(arq, diretorioURLs);
break;
case stc_jpg:
//cria o objeto da classe de extração de imagens JPEG passando
// como parâmetro a referencia da classe Janela (o this)
JPEG jpeg = new JPEG(this, arq, diretorioImagensJPEG);
break;
case stc_png:
//cria o objeto da classe de extração de imagens PNG passando
//como parâmetro a referencia da classe Janela (o this)
PNG png = new PNG(this, arq, diretorioImagensPNG);
break;
case stc_tiff:
//cria o objeto da classe de extração de imagens TIFF passando
//como parâmetro a referencia da classe Janela (o this)
TIFF tiff = new TIFF(this, arq, diretorioImagensTIFF);
break;
case stc_gif:
//cria o objeto da classe de extração de imagens GIF passando
78
//como parâmetro a referencia da classe Janela (o this)
GIF gif = new GIF(this, arq, diretorioImagensGIF);
break;
case stc_diretorios:
//cria o objeto da classe de extração de Diretorios passando
//como parâmetro a referencia da classe Janela (o this)
ExtratorDiretorios dirs = new ExtratorDiretorios(this);
dirs.extraiDiretorios(arq, diretorioDiretorios);
break;
case stc_pdf:
//cria o objeto da classe de extração de arquivos pdf passando
//como parâmetro a referencia da classe Janela (o this)
PDF pdf = new PDF(this, arq, diretorioPDF);
break;
case stc_utf8:
//cria o objeto da classe de extração de arquivos UTF8 passando
// como parâmetro a referencia da classe Janela (o this)
UTF8 utf8 = new UTF8(this, arq, diretorioUTF8);
break;
case stc_doc:
//cria o objeto da classe de extração de arquivos DOC passando
// como parâmetro a referencia da classe Janela (o this)
DOC doc = new DOC(this, arq, diretorioDOC);
break;
}
}
//Abre a janela para selecionar o arquivo de swap
public String localizaArquivosSwap() {
FileDialog Fabrir;
Fabrir = new FileDialog(this, "Abrir arquivo", FileDialog.LOAD);
String nomeArq = "";
try {
Fabrir.setVisible(true);
if (Fabrir.getFile() != null) {
79
nomeArq = Fabrir.getDirectory() + Fabrir.getFile();
Status.setText("Diretório: " + nomeArq);
}
} catch (Exception e) {
e.printStackTrace();
}
return nomeArq;
}
}
A.2 Classe ArquivoSwap
package forensekarla;
import java.io.*;
public class ArquivoSwap {
private File swap;
private InputStream inBuffer = null;
private BufferedReader reader = null;
private String arquivo = null;
//Metodo construtor da classe, prepara o arquivo de swap para seu uso
public ArquivoSwap(String arquivo) {
this.arquivo = arquivo;
carregarSwap();
}
// carrega o arquivo de swap no buffer deixando-o pronto para o uso
public void carregarSwap(){
swap = new File(arquivo);
try {
inBuffer = new BufferedInputStream(new FileInputStream(arquivo));
// para classe de Exp. Reg.
80
reader = new BufferedReader(new FileReader(arquivo));
} catch (IOException e) {
System.out.println("erro de I/O");
}
}
//verifica se a swap esta pronta para ser lida
public boolean readerEstaPronto() {
try {
return reader.ready();
} catch (IOException e) {
System.out.println("erro de I/O");
}
return false; // erro
}
//faz a leitura da swap
public int leSwap() {
try {
return (inBuffer.read());
} catch (IOException e) {
System.out.println("erro de I/O");
}
return (-2); // erro
}
//marca posição de leitura
public void marcaPosicao(int pos) {
try {
inBuffer.mark(pos);
inBuffer.reset();
} catch (IOException e) {
System.out.println("erro de I/O");
}
}
//retorna posição
public void retornaPosicao() {
81
try {
inBuffer.reset();
} catch (IOException e) {
System.out.println("erro de I/O");
}
}
//fecha stream
public void fechaStream() {
try {
if (inBuffer != null) {
inBuffer.close();
}
} catch (IOException e) {
System.out.println("erro de I/O");
}
}
//fecha Reader
public void fechaReader() {
try {
reader.close();
} catch (IOException e) {
System.out.println("erro de I/O");
}
}
//faz a leitura das linhas
public String leLinha() {
try {
return reader.readLine();
} catch (IOException e) {
System.out.println("erro de I/O");
}
return (" -1"); // erro
}
public void setSwap(File arq) {
82
swap = arq;
}
public File getSwap() {
return swap;
}
//verifica se ainda existem bytes para serem lidos
public long bytesDisponiveis() {
try {
return inBuffer.available();
} catch (IOException e) {
System.out.println("erro de I/O");
}
return (-1);
}
public InputStream getBufferEntrada() {
return inBuffer;
}
}
A.3 Classe ArquivoSaida
package forensekarla;
import java.io.*;
public class ArquivoSaida {
private File out;
private OutputStream outBuffer = null;
private PrintWriter pw = null;
//gera o arquivo de saida
public ArquivoSaida(String saida) {
out = new File(saida);
83
try {
out.createNewFile();
outBuffer = new BufferedOutputStream(
new FileOutputStream(out));
pw = new PrintWriter(outBuffer);
} catch (IOException e) {
System.out.println("erro de I/O");
}
}
//escreve no arquivo
public void escreveNoArquivo(int valor) {
try {
outBuffer.write(valor);
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
public void flushEscrita() {
pw.flush();
}
//imprime a linha do arquivo
public void imprimeLinha(String saida) {
pw.println(saida);
}
//fecha a stream de saída
public void fechaStream() {
try {
if (outBuffer != null) {
outBuffer.close();
}
} catch (IOException e) {
System.out.println("erro de I/O");
}
}
84
}
A.4 Classe BuscadorNumeroMagico
package forensekarla;
public class BuscadorNumeroMagico {
private int[] numeroMagico;
public BuscadorNumeroMagico(int[] nm) {
numeroMagico = nm;
}
public void setNumeroMagico(int[] nm) {
numeroMagico = nm;
}
public int[] getNumeroMagico() {
return numeroMagico;
}
/* 'onde_encontrou' tem que ser -1 no INICIO. O valor zero nao deve ser
* usado pois ele pode ser atribuido á variável caso exista a primeira
* ocorrencia do n.m., isto eh, nm[0] casar com a primeira posicao do
*/arquivo de swap posicao (zero)
public long buscaNumeroMagico(ArquivoSwap swap) {
long onde_encontrou = -1;
int byteLido;
// variavel para contagem de correspondência entre NM e a Swap
// apartir do primeiro casamento
int j = 1;
while (true) {
byteLido = swap.leSwap();
if (byteLido == -1) {
return (-1);
}else if (byteLido == numeroMagico[0]) {//encontrou primeira ocorrencia
swap.marcaPosicao(numeroMagico.length);
85
onde_encontrou = swap.getSwap().length()
-swap.bytesDisponiveis()-1;
//laço para verificar se as proximas ocorrencias do numero magico
//batem com os proximos bytes lidos da swap
while (j < numeroMagico.length && numeroMagico[j] == swap.leSwap()){
j++;
}
/*nao chegou a encontrar o n.m. completo, esse teste if é necessário
*para não permitir que a soma de NM incompletos incremente a variavel
*j ate que ela atinja o comprimento de nm.length, o que causaria uma
*falsa ocorrencia de n.m. retornada logo abaixo do if
if (j < numeroMagico.length) {
j = 1;
swap.retornaPosicao();
} /*encontrou n.m. completo*/ else if (j == numeroMagico.length) {
return onde_encontrou;
}
}//if
}//while
}
}
A.5 Classe BuscarArquivos
package forensekarla;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Vector;
public class BuscarArquivos {
private int[] magico;
private int[] trailer;
private int dumpSize;
86
private String tipoImagem;
ArquivoSwap swap;
String destino;
Janela janela;
private String[] localizacoesImagens;
private Vector localizacoes;
private boolean usarTrailer = false;
private int byteCorrente;
private int posTrailer;
public BuscarArquivos(Janela janela, ArquivoSwap swap, String destino) {
this.janela = janela;
this.swap = swap;
this.destino = destino;
}
public void setVariaveis(int[] magico, int[] trailer, int dumpSize,
String tipoImagem, boolean usarTrailer) {
this.dumpSize = dumpSize;
this.magico = magico;
this.trailer = trailer;
this.tipoImagem = tipoImagem;
this.usarTrailer = usarTrailer;
}
/* Varre a swap e retorna as localizações dos itens identificados
* conforme o número mágico (por exemplo, caso o número mágico
* for para identificar imagens JPEG, o método retornará todas
* as localizações das imagens JPEG
*/
public long[] localizaTodasOcorrencias() {
//abri novamente o strem caso tenho sido fechado
swap.carregarSwap();
BuscadorNumeroMagico b = new BuscadorNumeroMagico(magico);
int quant = 0; // quantindade de NM encontrados
long[] pos = new long[500];
87
//limpa o array de posições
for (int i = 0; i < pos.length; i++)//limpando array de posiçoes
{
pos[i] = -1;
}
//tenta localizar na swap o primeiro número mágico(caso o resultado
//seja -1, significa que chegou no fim do arquivo)
pos[quant] = b.buscaNumeroMagico(swap);
// enquanto não tiver chegado no fim do arquivo, busca localizações
// do número mágico
while (pos[quant] != -1) {
quant++;
pos[quant] = b.buscaNumeroMagico(swap);
}
return pos;
}
/* Copia os arquivos da swap contidas no array localizações
* para o diretório de destino
*/
public String[] copiaArquivos() {
long[] pos;
pos = localizaTodasOcorrencias();
int count = 0;
localizacoes = new Vector();
janela.areaTexto.setText("");
try {
RandomAccessFile raf = new RandomAccessFile(swap.getSwap(),
"r");
88
for (int i = 0; i < pos.length; i++) {
if (pos[i] == -1) {//fim
swap.fechaStream();
janela.areaTexto.append("\n" + i + " arquivo(s)
extraido(s).");
break;
}else {
ArquivoSaida out = new ArquivoSaida(destino + swap.getSwap().
separator + "arq_recup_" + pos[i] + "." + tipoImagem);
raf.seek(pos[i]);//posiciona o cabeçote leitura no começo do NM
localizacoes.add(destino + swap.getSwap().separator + "arq_recup_"
+ pos[i] + "." + tipoImagem);
janela.areaTexto.append("\n" + localizacoes.lastElement().toString());
for (int j = 0; j < dumpSize; j++) {
byteCorrente = raf.read();
out.escreveNoArquivo(byteCorrente);
//posição do byte do array trailer
posTrailer = 0;
//procura fim do arquivo (trailer)
while (usarTrailer && posTrailer < trailer.length &&
byteCorrente == trailer[posTrailer]) {
System.out.println("bytecorrente: " + byteCorrente);
System.out.println("posTrailer: " + posTrailer);
System.out.println("trailer[posTrailer]: " + trailer
[posTrailer]);
byteCorrente = raf.read();
posTrailer++;
//para nao escrever o ultimo byte
if (posTrailer < trailer.length) {
out.escreveNoArquivo(byteCorrente);
}
89
}//fim while
//fim do arquivo
if (posTrailer == trailer.length) {
break;
}
}// fim for
out.fechaStream();
}//else
}//for
localizacoesImagens = new String[localizacoes.size()];
localizacoes.copyInto(localizacoesImagens);
} catch (IOException e) {
System.out.println("erro de I/O");
}
System.err.print("finalizou");
return localizacoesImagens;
}
}
A.6 Classe Progress
package forensekarla;
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JDialog;
import javax.swing.JProgressBar;
public class Progress extends JDialog {
public Progress( ) {
90
this.setTitle("Aguarde...");
setModal(false);
JProgressBar progress = new JProgressBar();
progress.setIndeterminate(true);
progress.setSize(200,20);
getContentPane().add(progress);
pack();
Dimension tela = Toolkit.getDefaultToolkit().getScreenSize();
this.setLocation((tela.width - this.getSize().width) / 2,
(tela.height - this.getSize().height) / 2);
}
}
A.7 Classe ExtratorDiretorios
package forensekarla;
import java.util.regex.*;
import java.io.*;
public class ExtratorDiretorios {
private String regex = null;
private Janela janela;
public ExtratorDiretorios(Janela janela) {
this.janela = janela;
//regex = "(http|hppts|ftp|news|file)://[!-^&&[^<\">]]*";
//regex = "[A-Z]\\s?:\\s?\\\\\\s?(([\\d\\w])+\\s?)*";
// regex = "[A-Z]\\s?:\\s?\\\\\\s?(([\\d\\w\\p{Punct}])+\\s?)*";
regex = "[A-Z]\\s?:\\s?\\\\\\s?(([\\d\\w\\p{Punct}&&[^,;`\"]])+\\s?)*";
}
public void extraiDiretorios(ArquivoSwap swap, String destino) {
//abre novamente o stream caso tenho sido fechado
swap.carregarSwap();
91
String input = null;
long cont = 0;//contador de linhas
//determinando onde será criado o arquivo destino
//ArquivoSaida out = new ArquivoSaida(destino + swap.getSwap().separator
+ "swap_Diretorios.txt");
ArquivoSaida out = new ArquivoSaida(destino + File.separator+
"swap_Diretorios.txt");
System.out.println(destino + swap.getSwap().separator + "swap_Diretorios.txt");
//limpar a area texto
janela.areaTexto.setText("");
Pattern pregex = Pattern.compile(regex);
Matcher m = pregex.matcher("");
while (true) {
if(!swap.readerEstaPronto()) {//nao há mais linhas para ler
swap.fechaReader();
out.flushEscrita();
out.fechaStream();
janela.areaTexto.append("\n" + cont + " diretorios(s) extraido(s).");
break;
else {
input = swap.leLinha();
m = pregex.matcher(input);
if (m.find() ){ //&& !(m.group().trim().contains((CharSequence) "WINDOWS")))
{ //&& !(m.group().trim().equals("http://")) && !(m.group().trim().
equals("ftp://")) && !(m.group().trim().equals("file://"))) {
//if (m.find() && (m.group().trim().contains((CharSequence) ".")) ) {
out.imprimeLinha(m.group());//escreve a URL no arquivo destino
//imprime na tela os diretórios
janela.areaTexto.append("\n" + m.group() );
cont++;
92
}//if
}//else
}//while
swap.fechaStream();
}//fim do metodo
}
A.8 Classe ExtratorURL
package forensekarla;
import java.util.regex.*;
import java.io.*;
public class ExtratorURL {
//expressão regular
private String regex = null;
Janela janela;
public ExtratorURL(Janela janela) {
this.janela = janela;
regex = "(http|https|ftp|news|file)://[!-^&&[^<\">]]*";
}
/*Metodo para extrair URLs do arquivo Swap e exibe as URLs na Janela
*/
public void extraiURL(ArquivoSwap swap, String destino) {
//abre novamente o stream caso tenho sido fechado
swap.carregarSwap();
String input = null;
/*contador de linhas*/
long cont = 0;
93
/*determinando onde será criado o arquivo destino*/
ArquivoSaida out = new ArquivoSaida(destino + swap.getSwap().
separator+ "swap_urls.txt");
//compila a expressão regular
Pattern pregex = Pattern.compile(regex);
Matcher m = pregex.matcher("");
// limpa area texto da janela
janela.areaTexto.setText("");
System.out.println("inicio..");
while (true) {
//verifica se nao há mais linhas para ler (chegou no fim do arquivo)
if (!swap.readerEstaPronto()) {
swap.fechaReader();
out.flushEscrita();
out.fechaStream();
System.out.println("fim..");
janela.areaTexto.append("\n" + cont + " URL(s) extraida(s).");
break;
} else {
input = swap.leLinha();
//aplicar a expressão regular na linha lida da swap
m = pregex.matcher(input);
// caso encontrou a expressão regular..
if (m.find() && !(m.group().trim().equals("http://"))
&& !(m.group().trim().equals("ftp://"))
&& !(m.group().trim().equals("file://"))&& !(m.group().
trim().equals("https://"))) {
//if (m.find() && (m.group().trim().contains((CharSequence)
".")) ) {
//escreve a URL no arquivo destino
out.imprimeLinha(m.group());
janela.areaTexto.append("\n" +m.group().trim());
94
cont++;
}//if
}//else
}//while
System.out.println("fim..");
swap.fechaStream();
}//fim do metodo
}
A.9 Classe JanelaFotos
package forensekarla;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Label;
import java.awt.Scrollbar;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
public class JanelaFotos extends JFrame {
private JLabel labels[];
95
/* Metodo construtor. Irá montar um janela com as imagens (em miniatura)
* cujas localizações foram passadas no array "localizações"
*/
public JanelaFotos ( String[] localizacoes, String tipoArquivo){
super("Miniatura das imagens " + tipoArquivo);
//setLayout(new FlowLayout());
Icon icon;
JPanel painel = new JPanel();
JScrollPane barra;
int valor = (int) Math.sqrt(localizacoes.length);
painel.setBackground(Color.WHITE);
labels = new JLabel[localizacoes.length];
for(int i=0; i<localizacoes.length; i++){
icon = new ImageIcon(localizacoes[i]);
labels[i] = new JLabel();
labels[i].setIcon(diminuiFoto((ImageIcon) icon));
painel.add(labels[i]);
//painel.add(barra);
// barra.add(painel);
painel.setLayout(new FlowLayout());
painel.setPreferredSize( new Dimension( valor * 150, valor * 150));
barra = new JScrollPane(painel);
//JScrollBar barra2 = new JScrollBar(painel);
barra.setVerticalScrollBarPolicy(ScrollPaneConstants.
VERTICAL_SCROLLBAR_ALWAYS);
barra.setHorizontalScrollBarPolicy(ScrollPaneConstants.
HORIZONTAL_SCROLLBAR_ALWAYS);
//barra = barra.createHorizontalScrollBar();
//janela.Painel_Imagens.add(labels);
add(barra);
}
96
}
/* Estabelece um tamanho único para as imagens (fotos em ImageIcon)
*/
private ImageIcon diminuiFoto(ImageIcon icon) {
ImageIcon iconeFoto = null;
//int maxDim = 230;
int maxDim = 130;
try {
Image inImage = icon.getImage();
double scale = (double) maxDim / (double) inImage.getHeight(null);
if (inImage.getWidth(null) > inImage.getHeight(null)) {
scale = (double) maxDim / (double) inImage.getWidth(null);
}
int scaleW = (int) (scale * inImage.getWidth(null));
int scaleH = (int) (scale * inImage.getHeight(null));
BufferedImage outImage = new BufferedImage(scaleW, scaleH,
BufferedImage.TYPE_INT_RGB);
AffineTransform tx = new AffineTransform();
if (scale < 1.0d) {
tx.scale(scale, scale);
}
Graphics2D g2d = outImage.createGraphics();
g2d.drawImage(inImage, tx, null);
g2d.dispose();
iconeFoto = new ImageIcon(outImage);
} catch (Exception e) {
97
e.printStackTrace();
}
return iconeFoto;
}
}
A.10 Classe JPEG
package forensekarla;
import javax.swing.JFrame;
public class JPEG extends BuscarArquivos {
// JPEG image files begin with FF D8 and end with FF D9.
private int[] magico = {0xFF, 0xD8, 0xFF, 0xE0};
private int[] trailer = {0xFF, 0xD9};
private int dumpSize = 1024 * 256; //256KB
String tipoImagem = "jpg";
boolean usarTrailer = true;
public JPEG(Janela janela, ArquivoSwap swap, String destino) {
super(janela, swap, destino);
iniciarExtracao();
}
//método de extração de JPEG
private void iniciarExtracao() {
setVariaveis(magico, trailer, dumpSize, tipoImagem, usarTrailer);
String[] localizacoes = copiaArquivos();
JanelaFotos prep = new JanelaFotos(localizacoes, "JPEG");
prep.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
prep.setLocation(0, 70);
prep.setSize(800, 450);
prep.setVisible(true);
}
}
98
A.11 Classe GIF
package forensekarla;
import javax.swing.JFrame;
public class GIF extends BuscarArquivos {
/*GIF image files have the ASCII code for "GIF89a" (47 49 46 38 39 61)
*or "GIF87a" (47 49 46 38 37 61)
*define que irá terminar com (00 3B)
*/
// private int[] magico = {0x47 , 0x49 , 0x46 , 0x38 , 0x37 , 0x61};
private int[] magico = {0x47 , 0x49 , 0x46 , 0x38 , 0x39 , 0x61};
private int[] trailer = {0x00, 0x3B};
private int dumpSize = 1024 * 256; //256KB
String tipoImagem = "gif";
boolean usarTrailer = true;
public GIF(Janela janela, ArquivoSwap swap, String destino) {
super(janela, swap, destino);
iniciarExtracao();
}
//método de extração de GIF
private void iniciarExtracao() {
setVariaveis(magico, trailer, dumpSize, tipoImagem, usarTrailer);
String[] localizacoes = copiaArquivos();
JanelaFotos prep = new JanelaFotos(localizacoes, "GIF");
prep.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
prep.setLocation(0, 70);
prep.setSize(500, 500);
prep.repaint();
prep.setVisible(true);
}
}
99
A.12 Classe PNG
package forensekarla;
import java.util.Locale;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class PNG extends BuscarArquivos {
/* PNG image files have the code
* (89 50 4E 47 0D 0A 1A 0A).
*/ defini que termina com 4E 44 AE 42 60 82
private int[] magico = {0x89, 0x50 , 0x4E , 0x47 , 0x0D , 0x0A , 0x1A , 0x0A};
private int[] trailer = {0x4E ,0x44 ,0xAE ,0x42 ,0x60 ,0x82};
private int dumpSize = 1024 * 256; //256KB
boolean usarTrailer = true;
String tipoImagem = "png";
public PNG(Janela janela, ArquivoSwap swap, String destino) {
super(janela, swap, destino);
this.janela = janela;
iniciarExtracao();
}
//método para extração de imagens PNG
private void iniciarExtracao(){
setVariaveis(magico, trailer,dumpSize, tipoImagem, usarTrailer);
String[] localizacoes = copiaArquivos();
JanelaFotos prep = new JanelaFotos( localizacoes, "PNG");
prep.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
prep.setLocation(0,70);
prep.setSize(600, 600);
prep.repaint();
prep.setVisible(true);
100
}
}
A.13 Classe TIFF
package forensekarla;
import javax.swing.JFrame;
public class TIFF extends BuscarArquivos {
/*TIFF files begin with either II or MM followed by 42 as a two-byte integer
* in little or big endian byte ordering. II was for Intel which uses little
*/ endian byte ordering, so the magic number is 49 49 2A 00.
private int[] magico = {0x49, 0x49, 0x2A, 0x00};
private int[] trailer = {0x00, 0x00};
private int dumpSize = 1024 * 256; //256KB
String tipoImagem = "tif";
boolean usarTrailer = false;
public TIFF(Janela janela, ArquivoSwap swap, String destino) {
super(janela, swap, destino);
iniciarExtracao();
}
//método de extração de imagens TIFF
private void iniciarExtracao() {
setVariaveis(magico, trailer, dumpSize, tipoImagem, usarTrailer);
String[] localizacoes = copiaArquivos();
JanelaFotos prep = new JanelaFotos(localizacoes, "TIFF");
prep.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
prep.setLocation(0, 70);
prep.setSize(800, 450);
prep.setVisible(true);
}
}
101
A.14 Classe PDF
package forensekarla;
import javax.swing.JFrame;
public class PDF extends BuscarArquivos {
/* PDF files start with "%PDF" (25 50 44 46).
*/ termina com %%EOF( 25 25 45 4F 46)
private int[] magico = {0x25, 0x50, 0x44, 0x46};
private int[] trailer = {0x25, 0x25, 0x45, 0x4F, 0x46};
private int dumpSize = 1024 * 256; //256KB
String tipoImagem = "pdf";
boolean usarTrailer = true;
public PDF(Janela janela, ArquivoSwap swap, String destino) {
super(janela, swap, destino);
iniciarExtracao();
}
/*método para extração de PDF
private void iniciarExtracao() {
setVariaveis(magico, trailer, dumpSize, tipoImagem, usarTrailer);
copiaArquivos();
}
}
A.15 Classe UTF8
package forensekarla;
import javax.swing.JFrame;
public class UTF8 extends BuscarArquivos {
/*UTF-8 text files often start with the UTF-8 encoding of the same character,
*/ EF BB BF.
102
private int[] magico = {0xEF, 0xBB, 0xBF};
private int[] trailer = {0x00, 0x00};
private int dumpSize = 1024 * 1024; //256KB
String tipoImagem = "txt";
boolean usarTrailer = false;
public UTF8(Janela janela, ArquivoSwap swap, String destino) {
super(janela, swap, destino);
iniciarExtracao();
}
/*método de extração de UTF8*/
private void iniciarExtracao() {
setVariaveis(magico, trailer, dumpSize, tipoImagem,usarTrailer);
copiaArquivos();
}
}
A.16 Classe DOC
package forensekarla;
import javax.swing.JFrame;
public class DOC extends BuscarArquivos {
/** Microsoft Office document files start with D0 CF 11 E0,
* which is visually suggestive of the word "DOCFILE0".
*/ definir que irá terminar com (57 6F 72 64...)
private int[] magico = {0xD0, 0xCF, 0x11, 0xE0};
private int[] trailer = {0x57, 0x6F, 0x72, 0x64, 0x2E, 0x44, 0x6F, 0x63,
0x75, 0x6D, 0x65, 0x6E, 0x74, 0x2E, 0x38, 0x00, 0xF4, 0x39, 0xB2, 0x71};
private int dumpSize = 1024 * 512; //512KB
String tipoImagem = "doc";
boolean usarTrailer = true;
public DOC(Janela janela, ArquivoSwap swap, String destino) {
103
super(janela, swap, destino);
iniciarExtracao();
}
/*método de extração de DOC
private void iniciarExtracao() {
setVariaveis(magico, trailer, dumpSize, tipoImagem, usarTrailer);
copiaArquivos();
}
}
104