Mostrando postagens com marcador dd. Mostrar todas as postagens
Mostrando postagens com marcador dd. Mostrar todas as postagens

domingo, 12 de agosto de 2012

Aquisição de dados através da rede

Na computação forense, a aquisição de dados é a cópia dos dados armazenados em um dispositivo que está sendo examinado. Esta cópia pode ser física, onde se realiza uma clonagem fiel de toda a unidade de armazenamento, gerando um arquivo imagem, ou pode ser lógica, onde se realiza a cópia arquivo por arquivo de toda a unidade de armazenamento.

Sempre, a cópia é realizada à uma outra unidade de armazenamento para que o examinador possa trabalhar sem prejudicar a evidência. Esta conduta serve para garantir o conteúdo da prova.

Em situações adversas, o examinador poderá encontrar uma máquina onde não se é possível retirar o disco rígido, seja por razões judiciais ou pela tecnologia aplicada no hardware, por exemplo, a tecnologia RAID. Nestes casos, será necessário iniciar esta máquina com algum sistema forense e assim realizar a aquisição dos dados para uma unidade de armazenamento externa. A distribuição DEFT Linux LiveCD (http://www.deftlinux.net/) pode ser usada para isso.

Se o examinador possui um dispositivo de armazenamento externo, poderá copiar os dados pela própria máquina suspeita. Se possui um computador portátil, poderá estabelecer uma rede entre as máquinas e realizar a aquisição pela rede. É neste segundo cenário que este artigo se aplica, em uma rede cabeada, para uma cópia física de todo o dispositivo. Será utilizado o DEFT Linux na máquina suspeita e um notebook com a distro Fedora. Conecte um cabo crossover entre as placas de rede.

Primeiramente vamos preparar o terreno, configurando a rede com IP estático no Fedora e no DEFT. Digamos que o Fedora, que está no computador portátil do examinador, esteja usando o NetworkManager para gerenciar a rede. Vamos desativá-lo para usar neste processo de coleta o serviço de rede tradicional do Linux.

Execute o script do NetworkManager com o parâmetro "stop":

# /etc/init.d/NetworkManager stop

Em seguida edite o arquivo de configuração do dispositivo de rede:

# vi /etc/sysconfig/network-scripts/ifcfg-eth0

Usando este conteúdo na configuração (adapte se necessário):

DEVICE="eth0"
ONBOOT="yes"
BOOTPROTO=static
IPADDR=192.168.1.10
NETMASK=255.255.255.0
GATEWAY=192.168.1.1

Inicie o serviço de rede:

# /etc/init.d/network start

O comando 'ifconfig' nos mostra se a rede está ativa corretamente. No exemplo a interface "eth0". Ainda no Fedora, é necessário liberar uma porta no firewall. Edite o arquivo de configuração do iptables, adicionando a linha para a porta 2222 e reinicie o serviço iptables:

# vi /etc/sysconfig/iptables

-A INPUT -m state --state NEW -m tcp -p tcp --dport 2222 -j ACCEPT

# /etc/init.d/iptables restart

Com o DEFT operando na máquina suspeita, precisa-se também configurar uma rede com IP estático. O DEFT Linux é compatível com a distro Debian, possui uma ligeira diferença na configuração em relação ao Fedora. Edite o arquivo de configuração da interface de rede, usando o conteúdo abaixo e reinicie o serviço de rede:

# vi /etc/network/interfaces

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.1.11
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1

# /etc/init.d/networking restart

Mais uma vez, o comando 'ifconfig' nos mostra se a rede está ativa corretamente. Os endereços IPs escolhidos nas duas configurações serão usados nos exemplos dos comandos de aquisição. A máquina com Fedora recebeu o IP 192.168.1.10 e a máquina suspeita, rodando o com DEFT, recebeu o IP 192.168.1.11.

Existem duas ferramentas para estabelecer uma conexão de rede e assim transferir dados: nc e ssh.

A ferramenta 'nc' (netcat) é capaz de abrir uma conexão TCP, enviar pacotes UDP e ouvir em uma porta arbitrária. Esta ferramenta será executada nos dois computadores que irão "conversar" pela rede.

Sinopse:

nc [opção]... [endereço] [porta]

Primeiramente, executa-se o 'nc' na máquina que vai receber, no nosso caso, no Fedora. Escolha uma das linhas de comandos abaixo, de acordo com a ferramenta "diskdump" de sua preferência:

$ nc -l 2222 | bunzip2 | dd of=Tempo/sda.dd
$ nc -l 2222 | bunzip2 | dc3dd of=Tempo/sda.dd
$ nc -l 2222 | bunzip2 | dcfldd of=Tempo/sda.dd

A opção -l define que o 'nc' vai ficar "ouvindo" pela porta 2222.

Depois, executar o 'nc' na máquina que vai enviar, no nosso caso, no DEFT. Use a respectiva linha de comando de acordo com a ferramenta "diskdump" usada acima:

# dd if=/dev/sda1 | bzip2 -c | nc 192.168.1.10 2222
# dc3dd if=/dev/sda1 | bzip2 -c | nc 192.168.1.10 2222
# dcfldd if=/dev/sda1 | bzip2 -c | nc 192.168.1.10 2222

O comando 'nc' vai enviar o fluxo de dados para o endereço e porta especificado.


Outro procedimento é utilizar a ferramenta 'ssh', para enviar o fluxo de dados à um arquivo em uma máquina remota. Considerando que o servidor sshd esteja em execução no computador portátil, com o Fedora, execute na máquina suspeita, com o DEFT, o comando para enviar o arquivo imagem. Escolha uma das linhas de comandos:

# dd if=/dev/sda | bzip2 -c | ssh usuario@192.168.1.10 dd of=/home/usuario/imagem.dd.bz2
# dc3dd if=/dev/sda | bzip2 -c | ssh usuario@192.168.1.10 dd of=/home/usuario/imagem.dd.bz2
# dcfldd if=/dev/sda | bzip2 -c | ssh usuario@192.168.1.10 dd of=/home/usuario/imagem.dd.bz2

Neste procedimento não é necessário executar qualquer comando na máquina que vai receber os dados, no nosso caso o notebook com Fedora, apenas o servidor sshd deve estar ativo e utilize uma conta de usuário do sistema Fedora. Será solicitada a senha deste usuário.


Como visto, é relativamente simples a aquisição de dados pela rede. Muitas vezes até compensa em relação a desmontar a máquina suspeita para a retirada do disco rígido. Os computadores portáteis costumam dar trabalho desta desmontagem. O único inconveniente pode ser a velocidade de transmissão, de acordo com a tecnologia da rede, pois uma rede de 100 Mbits a velocidade máxima teórica é 12,5 MB/s.

segunda-feira, 26 de julho de 2010

Como criar imagens de partições e montá-las separadamente

Um arquivo imagem de um disco rígido ou de uma partição pode ser criado utilizando a ferramenta dd. O dd é um comando usado para copiar de um arquivo ou dispositivo sendo a entrada, para um arquivo ou dispositivo sendo a saída, gerando uma simples imagem idêntica. O dd cria uma cópia exata do arquivo ou dispositivo, incluindo o slack space dos arquivos e o espaço não alocado. Não é somente uma cópia lógica da estrutura de arquivos. O dd não adiciona informações extras em sua saída, é apenas uma cópia do fluxo de bits do início ao fim.

Para fazer uma imagem de um dispositivo de armazenamento para um arquivo, a sintaxe da linha do comando dd é semelhante ao apresentado abaixo:

# dd if=/def/sdf of=arquivoimagem.dd

No exemplo acima o operador "if" recebe o dispositivo de entrada e o operador "of" indica o arquivo de saída. Este comando serve para copiar um disquete, um pendrive, um DVD e até um disco rígido inteiro, claro que respeitando o caminho para o respectivo dispositivo. Opcionalmente pode-se acrescentar um controle para que o processo de cópia não seja interrompido caso encontre algum erro na leitura. A linha de comando ficaria assim:

# dd if=/def/sdf of=arquivoimagem.dd conv=noerror,sync

O arquivo imagem gerado, se for de um dispositivo de armazenamento com uma estrutura simples, isto é, com uma partição apenas, como é o caso de disquetes, pendrives ou DVDs, pode ser facilmente montado para acesso ao seu conteúdo. O comando para isso é semelhante ao comando como se fosse montar o próprio dispositivo, apenas acrescido de algumas opções para usar uma interface de loop:

# mount -t vfat -o ro,loop arquivoimagem.dd /mnt/pendrive

A opção "loop" indica que será utilizado um dispositivo de loop para montar o sistema de arquivos contido no arquivo imagem. O kernel das distros Linux costumam já vir com suporte para dispositivos de loop. A opção "ro" é porque o conteúdo do arquivo imagem é só para leitura.

Para desmontar, o comando é o padrão:

# umount /mnt/pendrive

Para imagens de discos rígidos a situação é um pouco diferente. Um disco rígido possui diversos componentes que são um setor de boot, uma tabela de partição e uma ou várias partições. A imagem deste tipo de dispositivo também possui todos estes componentes, lembre-se, é uma cópia idêntica.

O comando de montagem não é capaz de encontrar o sistema de arquivos em uma imagem de disco rígido porque não é capaz de reconhecer a tabela de partição.

Quando a imagem é de um disco rígido que contém somente uma partição, o comando de montagem pode receber uma opção que direciona ao início da partição, pulando o setor de boot. Normalmente cada setor do disco contém 512 bytes e os primeiros 63 setores são para as informações da MBR etc., isto equivale a 32256 bytes do início até a partição. O comando de montagem para um caso deste tipo é como o exemplo abaixo:

# mount -t vfat -o ro,loop,offset=32256 arquivoimagem.dd /mnt/hd

Com o seguinte comando podemos confirmar estes valores de tamanho de setor etc:

# fdisk -lu arquivoimagem.dd

Mas é possível criar uma imagem somente da partição, que deste modo a imagem poderá ser facilmente montada como um dispositivo de loop. O comando para criar a imagem de uma partição é:

# dd if=/dev/sda1 of=imagemparticao1.dd

As partições podem ser listadas pelo comando:

# fdisk -l /dev/sda

Quando a imagem é de um disco rígido que contém mais de uma partição, podemos separar a imagem em partes onde cada parte vai se referir a uma única partição. Podemos utilizar para isso a mesma ferramenta dd. Cada partição estará em um arquivo imagem exclusivo e esta imagem poderá ser montada diretamente como um dispositivo de loop.

Primeiramente é preciso confirmar as posições de início e fim de cada partição. Utiliza-se para isso a ferramenta sfdisk em uma linha de comando semelhante a:

# sfdisk -luS imagem.dd

A saída deste comando é como as linhas a seguir:

Disk imagem.dd: cannot get geometry
Units = sectors of 512 bytes, counting from 0

    Device  Boot    Start       End    #sectors     Id     System
imagem.dd1             57     10259       10203     83     Linux
imagem.dd2          10260    112859      102600     83     Linux
imagem.dd3         112860    178694       65835     82     Linux swap / Solaris
imagem.dd4         178695    675449      496755     83     Linux

As informações que interessam são a do início (Start) e número de setores (#sectors) para cada uma das partições. Estes valores serão utilizados nas opções "skip" e "count" do comando dd. A opção "skip" faz com que o dd pule alguns setores do início da entrada e a opção "count" faz com que o dd copie somente alguns blocos de entrada. Um exemplo de linha de comando, com o aviso de conclusão, para extrair a segunda partição do exemplo acima é apresentado abaixo:

# dd if=imagem.dd of=imagemparticao2.dd bs=512 skip=10260 count=102600
102600+0 records in
102600+0 records out

Para extrair cada uma das partições existentes no arquivo imagem é necessário executar o mesmo comando, apenas alterando os valores para "skip" e "count". Examinando este comando mais a fundo, o arquivo de entrada é o arquivo imagem de todo o disco rígido (imagem.dd), a saída é a criação de um outro arquivo imagem. O tamanho do bloco é o tamanho do setor (512 bytes), conforme mostrado pelo comando sfdisk, e cada pedaço diskdump precisa iniciar onde a partição inicia e terminar no final da partição.

Esta imagem de somente uma partição pode ser montada para leitura utilizando o mesmo comando para montar dispositivos de loop. Um exemplo de comando é o abaixo:

# mount -t ext2 -o ro,loop imagemparticao2.dd /mnt/part2/

Se for preciso, é possível descobrir qual o sistema de arquivos da partição contida na imagem. A ferramenta file, que mostra o tipo do arquivo, pode ajudar nesta informação. Um exemplo de linha de comando com sua mensagem de saída é:

# file imagemparticao2.dd
imagemparticao2.dd: Linux rev 1.0 ext2 filesystem data (mounted or unclean)

A imagem gerada pela ferramenta dd é uma réplica fiel da sua origem. Muitas ferramentas disponíveis para o sistema Linux são capazes de trabalhar com uma imagem da mesma forma que com o dispositivo original, principalmente as ferramentas forenses.