COMO EXTRAIR A IMAGEM DE UM ANDROID UTILIZANDO A FERRAMENTA DC3DD PARA ANÁLISE FORENSE

Olá a todos!

Na postagem anterior ( https://douglasmendes.code.blog/2020/05/02/extraindo-imagem-para-analise-forense-com-a-ferramenta-dc3dd/ ) vimos como criar uma imagem de um pendrive (simulando um HD) com o DC3DD.

Nesta postagem, abordo outro caso comum que pode ocorrer em uma investigação digital: a extração de imagem de um dispositivo Android.

Os dispositivos mais comuns são smartphones e tablets que utilizam esse Sistema Operacional. O Android é, de longe, a plataforma móvel mais usada no mercado.

Vou explicar como o armazenamento de dados é organizado no Android, também irei falar sobre o rooteamento para uso do Android Debug Bridge, irei falar também sobre os dois tipos de aquisição de dados (lógicos e físicos) e como executar praticamente os dois.

Vamos lá?

ARMAZENAMENTO DE DADOS NO ANDROID

O Android, como outro sistema operacional móvel, armazena dados em dois locais: a memória flash interna do dispositivo e o cartão micro SD removível externo. A memória flash interna é o principal local de armazenamento, onde a imagem de recuperação, o kernel, os aplicativos e os dados do sistema são armazenados. O armazenamento externo é geralmente usado para armazenar principalmente dados do usuário, como imagens, vídeos e assim por diante. Mas também pode conter aplicativos de usuário.

O armazenamento interno é dividido em diferentes partições. Estes são os importantes:

  • Principais partições de armazenamento interno;
  • Inicialização (BOOT);
  • Recuperação;
  • Dados;
  • Sistema;
  • Cache;
  • A partição de dados é a mais relevante para uma investigação forense, pois contém os aplicativos e os dados do usuário.

A partição do carregador de inicialização (BOOTLOADER) é onde o carregador de inicialização se responsabiliza pela inicialização do dispositivo e pela inicialização do kernel.

A partição de inicialização contém os arquivos necessários para inicializar o dispositivo e o kernel.

A partição de recuperação armazena a imagem de recuperação. Um sistema Android mínimo usado para backup de recuperação e ROMs personalizadas do Android. A partição do sistema é onde a estrutura do Android e as bibliotecas do sistema são armazenadas.

A partição do sistema é onde a estrutura do Android e as bibliotecas do sistema são armazenadas.

A partição de dados contém o aplicativo do usuário e todos os dados relacionados. A partição de dados é onde os dados mais úteis para investigação forense devem ser encontrados.

ROOTING” O ANDROID

Usuários padrão no Android têm permissão para acessar apenas diretórios específicos da partição de dados e não podem acessar certas partições. Para poder acessar todas as partições de dados em um dispositivo Android, precisamos obter permissão ROOT, que faz o papel de conta super-usuário. Este procedimento também é necessário em sistemas Linux / Unix. Portanto, não é uma surpresa que o Android precise obter acesso ROOT, pois o Android é derivado do Linux.

O procedimento que permite ao usuário normal obter privilégios de root no Android é chamado ROOTING. Para rootear um dispositivo, normalmente é necessário desbloquear o carregador de inicialização, porque os fabricantes geralmente o bloqueiam para impedir que os usuários adulterem o firmware. O procedimento para desbloquear e rotear um dispositivo varia muito de modelo para modelo. Portanto, não abordarei muito sobre esse assunto. Um recurso muito útil para pesquisar como fazer é o fórum do XDA DEVELOPER: ( https://forum.xda-developers.com/ )

Matéria sobre adbd insecure: ( https://www.xda-developers.com/run-adbd-in-root-mode-with-adbd-insecure/ )

PONTE DE DEBUG ANDROID (ADB)

Para ir em frente, vamos assumir que o dispositivo que irei utilizar como exemplo para capturar a imagem já está “rooteado”. Portanto, tenho acesso total ao armazenamento, acesso total para comunicar acesso e controlar o dispositivo Android conectado via porta USB à minha estação de trabalho forense.

Uma ferramenta CLI poderosa é a ANDROID DEBUG BRIDGE (ou ADB), que faz parte do Android SDK, que vem pré-instalado no Kali Linux. O ADB tem muitas opções e permite, entre outros, listar os dispositivos conectados ao pull de computadores, enviar arquivos para o dispositivo, executar um shell, e instalar aplicativos no dispositivo.

Se estiver conectando um dispositivo em execução ao computador, o recurso de depuração USB deve estar ativado para que o Android Debugging Bridge funcione. Para configurá-lo, vá para as opções de desenvolvedor de configurações.

ADB E O MODO DE RECUPERAÇÃO

A geração de imagens do dispositivo não pode ser executada enquanto estiver usufruindo dos recursos do smartphone e tablet. Todo aplicativo enquanto está rodando pode estar modificando seus próprios dados. Para conseguir uma imagem forense do dispositivo, o método correto é iniciar o dispositivo no modo de recuperação.

Se o aparelho estiver desligado, também não conseguirá permitir a depuração. Portanto, é necessário instalar anteriormente uma recuperação personalizada (custom recovery), pois o ADB não funciona com imagens de recuperação de fábrica.

Quando inicializadas no modo de recuperação, as partições devem ser montadas para acessá-las e podemos fazer isso selecionando as entradas apropriadas no menu com os botões de hardware.

AQUISIÇÃO LÓGICA E FÍSICA

Basicamente, existem duas maneiras de adquirir dados de um dispositivo móvel: lógica e fisicamente.

  • A aquisição lógica envolve a cópia de todos, ou, de arquivos e diretórios específicos no nível do sistema de arquivos, como fazemos ao fazer um backup.
  • A aquisição física envolve copiar o armazenamento do dispositivo pouco a pouco em um nível RAW, como eu já disse na postagem anterior (baseada na ferramenta GUYMAGER) ao criar imagens com pendrive simulando HD.

Agora vamos ver como realizar os dois tipos de aquisição. O primeiro passo é conectar o dispositivo a uma porta USB de nossa estação de trabalho forense e inicializar o dispositivo no modo de recuperação para se comunicar e executar comandos no dispositivo que usamos para tal.

Para verificar se o dispositivo é reconhecido, execute adb devices em um terminal. A saída deve ficar assim: Um ID do dispositivo e o estado como recuperação.

IMAGEM: Do Autor

Para gerar um shell no dispositivo, digite adb shell:

IMAGEM: Do Autor

Se o dispositivo estiver rooted, o shell deverá aparecer com o símbolo ~ #. Como temos privilégios de root, podemos listar todos os diretórios com o comando ls. Podemos listar, por exemplo, o conteúdo do diretório /data/data/, que armazena todos os dados dos aplicativos, como bancos de dados, configurações etc.

IMAGEM: Do Autor

Para copiar esse diretório para o computador não podemos executar o comando copy no shell porque ele funciona apenas internamente no armazenamento do dispositivo. Portanto, saímos do shell com o comando exit, e retornando à estação de trabalho, utilize o adb pull para copiar o diretório escolhido.

Apenas para exemplificar, utilizei o diretório /data/log. A opção –p mostra o progresso da cópia. Depois se insere o diretório a copiar. Por último insere o diretório local na estação de trabalho que desejar colar os dados:

IMAGEM: Do Autor

Para conferir a gravação, fui até o diretório escolhido:

IMAGEM: Do Autor

Para mais informações sobre como ADB funciona e suas opções, use o guia oficial do ADB.

NOTA: Estarei explicando como copiar o diretório /data/data no final da postagem, após abordagem completa dos assuntos escolhidos.

A limitação da aquisição lógica é que ela perde o espaço de armazenamento não alocado e sem folga. Portanto, não podemos recuperar arquivos excluídos. Para obter um despejo completo de todas ou algumas partições, precisamos realizar uma aquisição física.

A geração de imagens físicas envolve a aquisição do cartão micro SD removível e da memória interna. Para criar uma imagem do micro SD, devemos removê-lo do dispositivo e conectar-se à estação de trabalho usando um dispositivo de bloqueio de hardware correto ou técnicas corretas de bloqueio do software. Em seguida, capturamos a imagem com o DC3DD da mesma maneira que na postagem anterior com o disco rígido

A criação de imagens do armazenamento interno é mais complicada, pois precisamos copiar e executar o DC3DD diretamente no dispositivo. Claro que não poderia ser o DC3DD de compilação padrão para PC.
É necessário procurar uma versão compilada para a arquitetura ARM. Está disponível, entre outras ferramentas, nesta página:

(https://github.com/jakev/android-binaries/blob/master/dc3dd)

IMAGEM: Do Autor

Disponibilizei também nesse link:

https://mega.nz/file/SMUU1CIJ#cu0oFCoqj65k_R7gEi8v2lTaL-XSu56TCbrrKXG2tZ8

Hash SHA-1: 7959E35F54475C8A502D6BFBF6AADAE30D902E96

Clique em download e salve o arquivo no diretório de trabalho atual. Não devemos copiá-lo no armazenamento interno porque ele modifica e corrompe as possíveis evidências. Em vez disso, poderíamos inserir um cartão micro SD limpo (ou com memória suficiente), e copiar o arquivo binário nele.

No caso, quando eu fiz o cartão SD no menu de recuperação, vejo que ele está montado no diretório /sdcard (alguns dispositivos montam em /storage/sdcard ), então digitei o seguinte comando: adb push dc3dd /sdcard

IMAGEM: Do Autor

A saída disponibiliza a taxa de transferência, a quantidade de arquivos, e os bytes copiados.

Agora criamos um shell no dispositivo com adb shell. Temos que identificar a entrada do DC3DD na imagem. Lembre-se de que o DC3DD não exclui os diretórios como entrada, mas bloqueia os arquivos do dispositivo no Android. Esses arquivos de dispositivo estão associados a partições para listar arquivos de dispositivo de bloco.
Além do adb shell, utilizei ls /dev/block.

IMAGEM: Do Autor

A memória flash interna geralmente é associada ao arquivo de dispositivo MMCBLK0 e todos os arquivos com esse nome, seguidos por P e um número, representam suas partições.

Antes de fazer isso, precisamos remontar o cartão SD para executar o DC3DD como padrão. O Android monta cartões SD com a opção no exec. Não permite executar aplicativos no próprio cartão SD.
Portanto, execute o seguinte comando: mount -o remount, rw, exec / sdcard (Ou o nome do cartão no dispositivo)

IMAGEM: Do Autor

Para garantir, execute o comando chmod 777 dc3dd para que habilite todas as permissões do arquivo DC3DD.
Em seguida, execute: /dc3dd if=/dev/block/mmcblk0 hof=mmcblk0.img hash=sha512 log=mmcblk0.log

IMAGEM: Do Autor

Durante a operação, o cartão SD que eu estava utilizando não foi suficiente (armazenamento total inferior ao necessário para conclusão da operação). Substituí o mesmo, e fracionei a imagem em arquivos de menor valor (cartão FAT32). Executei também o comando mount –o para devidos acessos.
A pasta que foi montada com esse novo cartão aparece na shell como external_sd. Com esse cartão SD obtive conclusão.

Utilizei o código nessa formatação:

./dc3dd if=/dev/block/mmcblk0 hofs=mmcblk0.img.0000 ofsz=200M hash=sha512 log=mmcblk0.log

IMAGEM: Do Autor

IMAGEM: Do Autor

IMAGEM: Do Autor

Em alguns casos, podemos estar interessados apenas na criação de imagens de partições específicas, como por exemplo a partição de dados. Para ver qual partição corresponde a qual dispositivo, damos uma olhada no arquivo /proc/mounts.

Comando: cat /proc/mounts

IMAGEM: Do Autor

Como observamos, a partição de dados está associada a este arquivo de dispositivo.

IMAGEM: Do Autor

Portanto, se você deseja criar uma imagem dessa partição, executaríamos o mesmo comando de antes, mas com um arquivo de entrada diferente, especificando o arquivo de dispositivo associado a uma partição. Exemplo:

./dc3dd if=/dev/block/mmcblk0p24 (… continua …)

O último passo que resolvi aplicar após a imagem do Android ser criada dentro do pendrive foi transferir para o disco rígido. Assim pude retirar o dispositivo.

IMAGEM: Do Autor

Outra forma de adquirir uma cópia da imagem gravada no cartão SD seria remover o mesmo do dispositivo Android e conectar via USB direto na estação de trabalho. O processo dessa maneira chega a ser mais ágil, devido o comando adb pull demorar da memória e do processador do dispositivo Android. Dependendo do smartphone ou tablet que tiver em mãos, o processo pode ficar rodando bem lento. Chega até a ficar travando dependendo do tamanho do arquivo .img.0…

Resumindo, cobrimos a organização de armazenamento e partições em dispositivos Android. Foi introduzido o conceito de ROOTING e a ferramenta ADB, e finalmente explicado a diferença entre a aquisição de dados lógicos e físicos. E como praticamente executá-los.

Agora, como prometido, estarei dizendo agora como concluir a execução do comando adb pull /data/data sem que dê problemas.

adb pull /data/data/

A primeira vez que tentei executar esse comando não deu certo, porquê o diretório estava protegido de fábrica.
Se você é habituado com sistemas Linux, sabe muito bem que arquivos e diretórios dependem de permissões. Permissão definida para usuário, grupo e outros. Permissão para leitura, gravação e execução. Para examinar quais permissões estão definidas para esse diretório, utilizo o comando ls –l dentro do adb shell, e analiso a coluna da esquerda:

IMAGEM: Do Autor

Esse “código” na coluna da esquerda simboliza que o usuário do grupo + o grupo têm permissão de gravar, escrever e executar. E depois do 272, primeiro vem o nome do usuário do grupo (system) e o grupo(system) na sequência.

Então vou explicar duas maneiras…

1ª – Mais segura:

Com um cartão SD vazio inserido no dispositivo Android, digitar:

root@kali:~# adb shell

~ # mkdir /external_sd/data

~ # cp -p /data/data/* /external_sd/data

~ # exit

~ # exit

root@kali:~# adb pull /external_sd/data .

root@kali:~# adb shell

~ # rm -r /external_sd/data/

~ # exit

2ª – Menos segura:
Nós acessaremos o adb shell.

Na pasta /data, utilize o comando chmod -R 777 data.

IMAGEM: Do Autor

Agora, volte no lugar aonde irá copiar o conteúdo da pasta, e digite adb pull /data/data . para copiar.

Terminado o processo, acesse novamente o adb shell, entre na pasta /data e digite o comando chmod –R o-rw data para voltar as configurações anteriores

Deixe seus comentários. Até logo!

Deixe um comentário