05-analise

25
Análise forense Sessão de aprendizagem 5 Recuperação e análise de evidências

description

Análise forense Sessão de aprendizagem 5 Recuperação e análise de evidências Recuperação e análise de evidências Estrutura do sistema de arquivos Recuperação de arquivos Recuperação de arquivos sobrescritos Recuperação de arquivos journaling Sumário

Transcript of 05-analise

Page 1: 05-analise

Análise forense

Sessão de aprendizagem 5

Recuperação e análise de

evidências

Page 2: 05-analise

Sumário

Recuperação e análise de evidências

Estrutura do sistema de arquivos

Recuperação de arquivos

Recuperação de arquivos sobrescritos

Recuperação de arquivos journaling

Page 3: 05-analise

Recuperação e análise de evidências

O processo de procurar evidências é cíclico, e o analista deve continuar procurando enquanto necessitar de evidências para comprovar a invasão e encontrar o responsável.

As ferramentas vistas até agora são úteis apenas para procurar arquivos que ainda estejam disponíveis no sistema de arquivos.

O que fazer, então, quando os arquivos foram apagados?

Page 4: 05-analise

Recuperação e análise de evidências

Invasores costumam apagar seus rastros quando percebem que estão sendo monitorados.

É necessário utilizar ferramentas para recuperar arquivos apagados.

A principal dificuldade para recuperar arquivos apagados é o fato de que os dados podem ter sido sobrescritos.

Versões mais novas de alguns sistemas operacionais utilizam journaling file systems.

Estes sistemas de arquivo têm um registro de todas as atividades realizadas no disco.

Page 5: 05-analise

Estrutura do sistema de arquivos

O sistema de arquivos do Linux é conhecido como Extended Filesystem (Ext)

Existem dois padrões: Ext2 e Ext3

A principal estrutura do Ext2 é chamada de superblock

O bloco de disco é a menor estrutura de armazenamento no sistema de arquivos, utilizado para armazenar o conteúdo dos arquivos

O inode é a estrutura que armazena as informações sobre cada arquivo

Page 6: 05-analise

Estrutura do sistema de arquivos

Cada inode armazena diversas informações sobre um arquivo:

Identificação do proprietário do arquivo

Tipo de arquivo (regular, diretório, dispositivos etc)

Permissões de acesso

Número de hard links

Tamanho do arquivo

Tempos de acesso/modificação/status do arquivo

Tabela de conteúdo (endereços dos blocos que

armazenam os dados do arquivo)

Page 7: 05-analise

Estrutura do sistema de arquivos

Page 8: 05-analise

Estrutura do sistema de arquivos

Ao apagar um arquivo em um sistema com Ext2, o sistema realiza as seguintes funções:

O inode alocado ao arquivo é marcado como livre;

Este inode é colocado na lista de inodes livres do superblock

O número de inodes livres é incrementado no superblock

Os blocos de disco utilizados pelo arquivo são recolocados na

lista de blocos livres

O número de blocos livres é incrementado no superblock

Em nenhum momento, o conteúdo dos blocos ou do inode é apagado, o que permite a recuperação de arquivos apagados

Page 9: 05-analise

Estrutura do sistema de arquivos

Ext3 é um sistema de arquivos com journaling, que mantém um registro de todas as operações de leitura e escrita em disco .

O problema do Ext3 é que o sistema trata de forma diferente o processo de apagamento de um arquivo:

Blocos de disco agrupados em blocos.

As tabelas de inodes também são associadas a estes grupos de

blocos, e os inodes nestas tabelas são localizados sempre dentro do

mesmo grupo.

Quando um arquivo é criado, o sistema operacional aloca um inode e

blocos para este arquivo dentro do mesmo grupo de blocos do

diretório pai.

Ao apagar um arquivo em um sistema Ext3, o kernel do Linux zera o

tamanho do arquivo e o endereço da lista de blocos no inode.

Page 10: 05-analise

Recuperação de arquivos

Para recuperar arquivos, precisamos descobrir em qual inode o arquivo procurado estava armazenado

Se não for possível descobrir o inode, talvez possamos recuperar apenas parte do arquivo

Podemos utilizar ferramentas para analisar o disco e encontrar as informações necessárias sobre os arquivos apagados

Em último caso, podemos utilizar ferramentas como grep e strings para descobrir onde a informação procurada está armazenada

Page 11: 05-analise

Recuperação de arquivos

Para recuperar um arquivo que não tenha sido sobrescrito, o procedimento é o seguinte:

Encontre o inode onde o arquivo estava armazenado:

fls –adpr /data/compromised/compromised_hda1.img

Descubra mais informações sobre o arquivo:

istat /data/compromised/compromised_hda1.img 47147

Encontre o nome original do arquivo:

ffind -a /data/compromised/compromised_hda1.img 47147

Recupere o arquivo armazenado no inode encontrado:

icat /data/compromised/compromised_hda1.img 47147 > /data/compromised/s.tgz

Page 12: 05-analise

Recuperação de arquivos sobrescritos

Para recuperar arquivos que tenham sido sobrescritos, o procedimento é diferente:

Para facilitar, precisamos extrair do disco todos os

blocos não alocados para nenhum arquivo:# dls –f linux-ext2

/data/compromised/compromised_hda1.img >

/data/compromised/compromised_hda1.img.dls ����

Descubra em que posição no arquivo está localizada a

informação que procura:# grep –ab "rm -rf"

/data/compromised/compromised_hda1.img.dls ����

Page 13: 05-analise

Recuperação de arquivos sobrescritos

Agora, descubra onde essa informação está localizada no disco original:# echo $((66511837/4096)) �

16238

# dcalc –u 16238 /data/compromised/compromised_hda1.img �

39342

Caso o bloco não esteja alocado por nenhum inode, recupere os blocos de dados que conseguir:# ifind –a –d 39342

/data/compromised/compromised_hda1.img �

Inode not found

Page 14: 05-analise

Recuperação de arquivos sobrescritos

Ao examinar o conteúdo do bloco, vemos que ele é parte de um arquivo TAR. Para tentar recuperar este arquivo, podemos recuperar bloco por bloco do disco até montar o arquivo completo.

Primeiro, vamos analisar diversos blocos ao redor do bloco que achamos, para descobrir onde o arquivo termina:# dcat -f linux-ext2

/data/compromised/compromised_hda1.img 39341 1000�

Procuramos por um texto que esteja próximo do fim do arquivo:# grep -ab './udhss -f ./s'

/data/compromised/compromised_hda1.img.dls�

Page 15: 05-analise

Recuperação de arquivos sobrescritos

Encontramos o bloco de disco que armazena esta informação e o número de blocos que devemos recuperar:# dcalc -u 16839

/data/compromised/compromised_hda1.img �

# echo $((39943-39341)) �

602

Finalmente, recuperamos os blocos do arquivo:# dcat -f linux-ext2

/data/compromised/compromised_hda1.img 39341 �

602 > /data/compromised/recovered.tar

Page 16: 05-analise

Recuperação de arquivos sobrescritos

# tar tvf /data/compromised/recovered.tar����

tar: This does not look like a tar archive

tar: Skipping to next header

-rwxr-xr-x hack3r/hack3r 190 2001-04-15 14:56:20 rootkit/scan/.. /xdr

-rwxr-xr-x hack3r/hack3r 840 2001-04-15 14:55:58 rootkit/scan/.. /rdx

-rw-r--r-- hack3r/hack3r 7108 2000-04-08 18:38:47 rootkit/scan/.. /cl.sh

...

-rw------- hack3r/hack3r 307200 2001-08-03 09:41:20 rootkit/core

...

-rw-r--r-- hack3r/hack3r 64 2001-11-24 10:34:07 rootkit/ess-0.8.6/install

-rwxr-xr-x hack3r/hack3r 624753 2001-11-24 10:17:54 rootkit/udhss

tar: Skipping to next header

-rwxr-xr-x hack3r/hack3r 158 2001-11-24 16:59:35 rootkit/rula

tar: Error exit delayed from previous errors

Page 17: 05-analise

Recuperação de arquivos journaling

No Ext3, o processo para recuperar arquivos é mais difícil e muitas vezes não podemos recuperar totalmente o arquivo:

A lista de blocos que apontam para o conteúdo dos

arquivos é zerada quando o arquivo é removido.

Vamos conhecer uma técnica para recuperar um arquivo em um sistema de arquivos Ext3.

Para isso, vamos utilizar as informações gravadas no

journaling do sistema de arquivos para recuperar as

informações que foram apagadas do inode original.

Page 18: 05-analise

Recuperação de arquivos journaling

Quando é feita qualquer atualização no sistema de arquivos, o journaling guarda uma cópia completa do inode modificado no journal

Como não queremos prejudicar nenhuma evidência na imagem que estamos utilizando, vamos realizar os exercícios a seguir no disco da máquina virtual de nossa estação forense

Para isso, vamos criar um arquivo, apagá-lo do disco, e tentar recuperá-lo utilizando as informações do journal

Page 19: 05-analise

Recuperação de arquivos journaling

Criar o arquivo de exemplo e coletar informações:# gzip -9 -c /data/compromised/compressed.files > /data/compromised/test.gz����

# ls -li /data/compromised/test.gz�

937288 -rw-r--r-- 1 root root 5252 Jan 17 12:06 /data/compromised/test.gz

# istat /dev/sda5 937288�

inode: 937288

Allocated

Group: 58

Generation Id: 1159893987

uid / gid: 0 / 0

mode: -rw-r--r--

size: 5252

num of links: 1

Inode Times:

Accessed: Thu Jan 17 12:06:12 2008

File Modified: Thu Jan 17 12:06:13 2008

Inode Modified: Thu Jan 17 12:06:13 2008

Direct Blocks:

262651 262652

Page 20: 05-analise

Recuperação de arquivos journaling

Com istat descobrimos as datas de modificação e criação e os blocos onde o arquivo está armazenado:

# rm -f /data/compromised/test.gz�

# ls -li /data/compromised/*.gz�

ls: /data/compromised/*.gz: No such file or directory

# istat /dev/sda5 937288�

inode: 937288

Not Allocated

Group: 58

Generation Id: 1159893987

uid / gid: 0 / 0

mode: -rw-r--r--

size: 0

num of links: 0

Inode Times:

Accessed: Thu Jan 17 12:06:12 2008

File Modified: Thu Jan 17 12:09:54 2008

Inode Modified: Thu Jan 17 12:09:54 2008

Deleted: Thu Jan 17 12:09:54 2008

Direct Blocks:

Page 21: 05-analise

Recuperação de arquivos journaling

Utilizar as informações presentes no journal do sistema de arquivos para tentar recuperar a lista de blocos original do inode.

Quando o arquivo foi removido, uma cópia do inodeoriginal foi copiada para o journal antes que as informações fossem zeradas.

Se conseguirmos recuperar essa informação, poderemos recuperar o arquivo original.

Ferramenta debugfs permite acessar o sistema de arquivos diretamente.

Page 22: 05-analise

Recuperação de arquivos journaling

# debugfs /dev/sda5����

debugfs 1.39-WIP (10-Dec-2005)

debugfs: logdump -i <937288>

Inode 937288 is at group 58, block 1900546, offset 896

Journal starts at block 1, transaction 116

FS block 1900546 logged at sequence 1143, journal block 6560

(inode block for inode 937288):

Inode: 937288 Type: regular Mode: 0644 Flags: 0x0 Generation: 1159893987

User: 0 Group: 0 Size: 5252

ctime: 0x478fa725 -- Thu Jan 17 12:06:13 2008

atime: 0x478fa724 -- Thu Jan 17 12:06:12 2008

mtime: 0x478fa725 -- Thu Jan 17 12:06:13 2008

Blocks: (0+2): 262651

FS block 1900546 logged at sequence 1145, journal block 6570

(inode block for inode 937288):

Inode: 937288 Type: regular Mode: 0644 Flags: 0x0 Generation: 1159893987

User: 0 Group: 0 Size: 0

ctime: 0x478fa802 -- Thu Jan 17 12:09:54 2008

atime: 0x478fa724 -- Thu Jan 17 12:06:12 2008

mtime: 0x478fa802 -- Thu Jan 17 12:09:54 2008

dtime: 0x478fa802 -- Thu Jan 17 12:09:54 2008

Blocks:

No magic number at block 6578: end of journal.

Page 23: 05-analise

Recuperação de arquivos journaling

Utilizar comandos para recuperar os blocos de dados:

# dcat /dev/sda5 262651 2 > /tmp/recover.gz�

# file /tmp/recover.gz�

/tmp/recover.gz: gzip compressed data, was

"compressed.files", from Unix, max compression

# ls -l /tmp/recover.gz�

-rw-r--r-- 1 root root 8192 Jan 17 12:26

/tmp/recover.gz

Page 24: 05-analise

Recuperação de arquivos journaling

O arquivo recuperado contém 8192 bytes e não o tamanho original de 5252 bytes

O arquivo original pode ser recuperado com dd:# dd if=/tmp/recover.gz of=/tmp/test_recovered.gz bs=1

count=5252����

5252+0 records in

5252+0 records out

5252 bytes (5.3 kB) copied, 0.034853 seconds, 151 kB/s

# gzip -l -t /tmp/test_recovered.gz����

compressed uncompressed ratio uncompressed_name

5252 18067 71.1% /tmp/test_recovered

Page 25: 05-analise

Conclusões

Algumas vezes não é possível encontrar no disco as evidências necessárias para comprovar o caso de invasão

As evidências podem ter sido apagadas ou sobrescritas

Mesmo assim, existem ferramentas para recuperar

estes dados

Aprendemos também um pouco mais sobre a estrutura dos sistemas de arquivos do Linux, e também como recuperar arquivos em um sistema com journaling como o Ext3