Sistema para receber uma cópia da memória em dispositivos executando Android via canais sem fio

1. Introdução


Dispositivos móveis - smartphones, tablets e outros dispositivos móveis - estão se tornando parte integrante da vida das pessoas. Quase 67% das pessoas no mundo têm pelo menos um smartphone; 5,8 bilhões de dispositivos móveis ativos estão previstos para 2025 [1].


Segundo o IDC [2], de todos os dispositivos móveis vendidos no terceiro trimestre de 2018, 86,8% estavam equipados com sistema operacional Android. O número de usuários que usam o sistema operacional Android é superior a 1,4 bilhão. Segundo a Securelist [3], em 2018, 5,3 milhões de pacotes de software malicioso para a família de sistemas operacionais Android foram detectados. Portanto, um especialista na área de computação forense precisa usar métodos diferentes para extrair uma cópia da memória para cada dispositivo.


Atualmente, não há como obter uma cópia uniforme da memória de dispositivos executando o sistema operacional Android. A esse respeito, um especialista em computação forense precisa usar muitos métodos diferentes, quando se depara com problemas técnicos. Antes de tudo, os problemas estão associados à falta de um driver ou ao mau funcionamento do conector USB usado nos métodos tradicionais de extração de dados. No entanto, para obter e transmitir uma cópia da memória, você pode usar canais de comunicação sem fio [4].


A Seção 1 descreverá a arquitetura do sistema operacional Android, cenários para o uso da RAM, estruturas de dados contidas na RAM, software para obter uma cópia da memória e software para transmissão de dados.


A Seção 2 descreverá a arquitetura de um sistema para obter uma cópia da RAM, a conexão entre subsistemas e módulos.


A Seção 3 descreverá a implementação de um sistema para obter uma cópia da RAM.


Seção 1: Explorando maneiras de obter uma cópia da memória em dispositivos executando o sistema operacional Android via canais sem fio


Esta seção discute o software para obter uma cópia da memória e sua comparação, os protocolos de rede para transferir uma cópia da RAM, as maneiras de executar arquivos executáveis ​​por meio de conexões sem fio para o sistema operacional Android, estruturas de RAM e também cenários para o uso de uma cópia da RAM.


Cenários para usar uma cópia da RAM


Hoje, o sistema operacional Android está presente em diferentes dispositivos, graças ao kernel do Linux e à máquina virtual Dalvik. Este documento discute os dispositivos em execução na plataforma de hardware ARM e x86 mais comum.


Uma cópia da memória são dados binários não estruturados que são difíceis de analisar sem as ferramentas especializadas apropriadas. No momento da redação deste artigo, os dispositivos tinham um tamanho de RAM não superior a dez gigabytes, o que aumenta significativamente o tempo de análise de uma cópia da RAM desse tamanho. No momento, não há um meio único de analisar todas as estruturas da RAM. Para uma análise completa da RAM, é necessário o uso de várias ferramentas de software.


Não há garantias para uma análise bem-sucedida de uma cópia da RAM, mesmo se você tiver todas as ferramentas necessárias devido a problemas no estágio de obtenção de uma cópia da memória. Se não houver possibilidade de conexão com o dispositivo ou houver um grande risco de corrupção de dados, a maneira sem fio de obter uma cópia da memória permanece a única e segura. Infelizmente, no momento não existem ferramentas de software para receber automaticamente uma cópia da memória via comunicação sem fio.


Uma cópia pode ser usada na investigação forense do computador. Por exemplo, se os dados no dispositivo em estudo estiverem criptografados, uma cópia da memória pode ajudar a descriptografar os dados que contêm senhas e chaves criptográficas [5]. Cada aplicativo que processa dados pessoais usa criptografia de dados. Tendo a imagem de uma cópia da RAM e alguma habilidade em trabalhar com ela, é possível restaurar as mensagens mais recentes ou arquivos temporários que podem ajudar em uma investigação forense.


No caso de um ataque ao dispositivo, a análise da cópia da RAM do dispositivo permite descobrir como o ataque foi realizado, quais canais de comunicação, malware e vulnerabilidades foram usados ​​pelo invasor para impedir esses ataques no futuro.


Copiar periodicamente dados críticos para detectar software malicioso. Essa abordagem é usada para detectar malware que usa métodos para ocultar sua presença no sistema.


Além disso, uma cópia da memória (ou a parte que contém apenas o contexto do aplicativo ou processo em estudo) pode ser usada para identificar vulnerabilidades e recursos não documentados do software. As ferramentas de software especializadas existentes usam uma cópia da RAM para detectar rootkits [6]. Uma cópia da memória de todo o sistema pode ser usada para monitorar alterações em todo o sistema, a fim de identificar ações ilegais.


Para analisar a cópia operacional, o Volatility Framework é usado [7]. Volatility Framework é um conjunto de ferramentas para obter e analisar uma cópia da RAM de vários sistemas operacionais, incluindo o Android. Usando essas ferramentas, você pode obter as informações necessárias contidas na imagem da RAM. Para obter uma cópia da RAM, o Volatility Framework usa o módulo do kernel do LiME. Para extrair uma cópia da RAM via LiME, é necessário o código fonte do kernel Linux do dispositivo em estudo.


Análise de ferramentas e métodos para executar arquivos executáveis ​​por meio de conexões sem fio no sistema operacional Android


Para instalar aplicativos, como em qualquer sistema operacional semelhante ao UNIX, os pacotes são usados. No Android, esses pacotes têm a extensão .apk. Esses pacotes são armazenados na memória do dispositivo mesmo após a instalação e são excluídos apenas quando o aplicativo é desinstalado. O pacote .apk contém código Java compilado, bem como o arquivo AndroidManifest.xml que declara as permissões necessárias para o funcionamento do aplicativo.


Existem dois tipos de aplicativos: sistema e usuário. Os aplicativos do sistema, diferentemente dos aplicativos do usuário, têm mais privilégios, portanto, alterá-los ou excluí-los somente é possível se você tiver direitos de superusuário. Os pacotes de aplicativos do usuário estão localizados no diretório "/ data / app". Os pacotes de aplicativos do sistema estão localizados no diretório "/ system / app".


A partir do Android 5.0, a máquina virtual Android Runtime é usada em vez da máquina virtual Dalvik. Ao contrário do Dalvik, o Android Runtime não compila o aplicativo durante a inicialização, mas durante a instalação. Isso aumenta a velocidade de lançamento do programa e aumenta a vida útil da bateria. Para garantir compatibilidade com versões anteriores, o Android Runtime usa o mesmo bytecode que o Dalvik.


Ao contrário de um processo do sistema, um processo do usuário tem menos privilégios no sistema. Para obter privilégios como um processo do sistema, um processo do usuário requer direitos de superusuário ou direitos "raiz". O superusuário é um usuário do sistema operacional que possui direitos ilimitados no sistema.
Os direitos de superusuário são de dois tipos: permanente e temporário. Os direitos permanentes de superusuário são mantidos mesmo após uma reinicialização, e os direitos temporários são válidos até que o dispositivo seja reinicializado.


Normalmente, os direitos de superusuário em dispositivos não estão disponíveis. Devido à grande variedade de dispositivos, não há uma maneira uniforme de obter direitos de superusuário. Portanto, para obter direitos de superusuário, diferentes ferramentas são usadas. É necessário obter direitos de superusuário para obter uma cópia da memória de dispositivos Android.
Para executar arquivos executáveis, são necessários alguns privilégios no sistema, bem como um conjunto de comandos Unix. Inicialmente, o Android possui um conjunto mínimo de comandos, que geralmente não são suficientes para obter uma cópia da memória. Portanto, eles usam o BusyBox, que inclui um conjunto estendido de comandos. Os utilitários incluídos no BusyBox permitem trabalhar no sistema de arquivos, iniciar aplicativos, exibir informações do sistema e muito mais. Também é possível criar scripts de shell.


Scripts de shell são arquivos executáveis ​​que contêm um script para executar um conjunto de comandos. Diferentemente do aplicativo, os scripts de shell não requerem instalação e compilação. Se você precisar consertar algo, basta fazer alterações no arquivo de script do shell.
Como os arquivos executáveis ​​são iniciados via comunicação sem fio, consideraremos duas maneiras de iniciar os arquivos executáveis ​​usando ADB e SSH.


Para o primeiro método, basta executar o “setprop service.adb.tcp.port 5555; parar adbd; iniciar adbd ”. Em seguida, execute um prompt de comando no computador e conecte-se ao dispositivo usando o comando “adb connect X”, em que “X” é o endereço IP do dispositivo na rede e o valor da porta é 5555. Para executar o arquivo executável, use o comando “adb shell am start -n com. package.name/com.package.name.ActivityName ”se este for um aplicativo. Se o arquivo executável for um script de shell, ele será iniciado usando o comando “adb shell ./name”, em que name é o nome do script.


O segundo método usa o protocolo SSH. Diferentemente do método anterior, esse método requer um cliente SSH no computador e um servidor SSH no dispositivo. No Windows, você pode usar o PuTTY ou no Linux Openssh. Depois de conectar o dispositivo ao computador, obtemos acesso ao shell de comando do Shell. Os comandos para executar os arquivos executáveis ​​são os mesmos do primeiro método.


Assim, pode-se ver que ambos os métodos diferem apenas no método de conexão. Ambos os métodos usam o shell de comando do Shell para executar arquivos executáveis. A partir daí, ao obter acesso ao shell, você pode executar qualquer comando e executar qualquer arquivo executável, seja um aplicativo ou um script de shell.


Ferramentas de software para obter uma cópia da RAM


Os métodos de software existentes podem ser divididos em duas categorias:


  • obtendo uma cópia da memória do espaço do usuário e do kernel;
  • recuperar uma cópia da memória apenas do espaço do usuário.

As ferramentas de software para recuperar uma cópia do espaço do usuário e do kernel incluem o AMExtractor e o LiME. As ferramentas Mem e Memfetch podem obter apenas uma cópia da memória apenas do espaço do usuário.


Considere as ferramentas de software acima mencionadas para obter uma cópia da RAM de dispositivos sob o controle do sistema operacional Android:


  • Mem: um utilitário de código aberto usado para obter dados de RAM do processo [8];
  • Memfetch: um utilitário de código aberto para obter o espaço de endereço da RAM do processo usando os dispositivos / proc / $ pid / map e / proc / $ pid / mem [9];
  • LiME: um módulo para o kernel Linux com código-fonte aberto para obter dados armazenados na RAM no espaço do usuário e no kernel [10];
  • AMExtractor: um utilitário de código aberto que usa o pseudo-dispositivo / dev / kmem para carregar na memória do kernel [11].

Os programas Mem e Memfetch podem ser usados ​​sem configuração preliminar, mas eles não conseguem obter dados da área de memória do kernel e exigem direitos de superusuário para seu trabalho.


Apesar de seu amplo uso e versatilidade, o módulo LiME requer a configuração correta e o código fonte do kernel Linux para cada dispositivo individual.
Para que o AMExtractor funcione, são necessárias informações sobre o tipo de modelo de endereçamento de memória virtual usado pelos direitos do kernel e do superusuário.


As ferramentas de software consideradas neste trabalho, cujo código fonte está disponível ao público, são usadas apenas para obter uma cópia da RAM.


Ferramentas de software como Oxygen, UFED e MSAB XRY são caras e estão disponíveis apenas para uso comercial. Os programas desse nível são capazes de: receber uma cópia da memória de um dispositivo bloqueado, obter direitos de superusuário, gerar relatórios forenses e muito mais.


A ferramenta ANDROPHSY é a primeira ferramenta de código aberto que suporta todos os estágios da investigação forense de dispositivos Android [12]. A arquitetura ANDROPHSY consiste em quatro módulos principais: um módulo de processamento, um módulo de coleta, um módulo de análise e um módulo de relatório. A aquisição de dados é realizada usando a ferramenta dd e o serviço ADB. Um cabo USB é usado para conectar-se entre o computador e o dispositivo sob investigação e os dados são transmitidos pelo protocolo TCP.


A confirmação da relevância deste trabalho é a presença de falhas na ANDROPHSY. Isso inclui desempenho apenas no ambiente Linux, a falta de funções para obter e analisar uma cópia da RAM do dispositivo e a falta de conexão com o dispositivo via Wi-Fi ou Bluetooth para extrair dados.


Com base na análise, uma tabela comparativa foi construída (veja a Figura 1). Na tabela 1, o símbolo "+" indica fundos que atendem aos requisitos e o símbolo "-" indica o contrário.



Figura 1 - Software para obter uma cópia da RAM


De acordo com os resultados da comparação, foi decidido usar o AMExtractor para tirar a imagem da RAM, devido ao recebimento de uma cópia completa da RAM, bem como à falta da necessidade de código fonte do kernel e suporte para o carregamento de módulos.


Software de transferência de dados


Um cabo USB é usado para recuperar dados de dispositivos executando o sistema operacional Android. A maioria dos dispositivos Android pode ser conectada a um computador pessoal usando um cabo USB.


No entanto, durante uma investigação de um dispositivo Android, pode ser impossível extrair dados dele usando uma conexão USB. Os motivos para isso podem ser um cabo defeituoso ou um conector danificado. Nesses casos, apenas um cartão de memória externo, que não é encontrado em todos os dispositivos, estará disponível para o especialista para pesquisa. Às vezes, um dispositivo contém apenas memória interna. O conteúdo desta memória, assim como a RAM, pode ser removido com segurança através de uma conexão USB. Uma alternativa para uma conexão com fio é sem fio. De todos os protocolos sem fio, o sistema operacional Android suporta os mais populares: Wi-Fi e Bluetooth.


O Wi-Fi nos modernos dispositivos Android é usado para acessar a Internet ou transferir dados. Os dispositivos móveis baseados em droides suportam a maioria dos padrões Wi-Fi até 802.11ac. A velocidade de transferência de dados entre dispositivos via Wi-Fi excede a velocidade de transferência de dados via Bluetooth [13].


Para conectar dispositivos via Wi-Fi, basta conectar-se a um ponto de acesso compartilhado. Como outros dispositivos podem se conectar ao ponto de acesso compartilhado, é importante limitar o acesso à rede. A disponibilidade do suporte no Android, Wi-Fi Hotspot, permite usar o dispositivo como um ponto de acesso.


O protocolo sem fio Bluetooth, disponível em dispositivos Android, foi projetado para transferir dados entre dispositivos que possuem uma bateria pequena. Comparado ao Wi-Fi, a velocidade de transferência de arquivos via Bluetooth é muito menor. O protocolo é baseado em uma piconet composta por um nó principal e vários nós subordinados [14]. Os perfis são usados ​​para transferir diferentes tipos de dados. Um perfil Bluetooth define os comandos e a funcionalidade que os dispositivos podem trocar entre si. Existem pelo menos 27 perfis Bluetooth.


Um perfil PAN é usado para criar uma WPAN entre dois dispositivos. O perfil HID permite conectar um mouse, teclado e outros dispositivos periféricos que suportam esse perfil [14].


Neste trabalho, com base nos recursos do sistema operacional Android, consideramos a seguinte transferência de dados de software:


  • SSHFS: um cliente de sistema de arquivos baseado em FUSE para montar diretórios remotos por meio de uma conexão SSH [15];
  • Rsync: um utilitário de código aberto que fornece rápida transferência passo a passo de dados [16];
  • SCP: utilitário e protocolo para transmissão de dados através do protocolo SSH [17];
  • SFTP: em comparação com o SCP, que permite copiar apenas arquivos, o SFTP tem a capacidade de executar operações de arquivos: por exemplo, retomar a transferência de arquivos após a desconexão, excluir arquivos no servidor e muitas outras operações [18];
  • NetCat: utilitário UNIX que lê e grava dados através de conexões de rede usando o protocolo TCP ou UDP [19].

O utilitário rsync é usado na maioria dos casos para sincronizar arquivos ou diretórios. Durante a sincronização, apenas as alterações são enviadas usando um algoritmo de pesquisa de soma de verificação eficaz. A funcionalidade Rsync permite transferir via protocolo SSH, compactar arquivos, bem como copiar links, arquivos de dispositivos, atributos do proprietário, grupos e direitos.
A maioria dos meios de obter uma cópia da memória usa o protocolo TCP para transferência de dados para excluir a possibilidade de gravar dados na memória do dispositivo em estudo.


Para transferência segura de dados, é importante que o software use o protocolo SSH. O protocolo Secure Shell (SSH) é um protocolo para login remoto seguro no sistema e outros serviços de rede seguros em uma rede insegura [20].


A compactação de dados pode aumentar significativamente a taxa de transmissão com baixa largura de banda do canal. A transferência de arquivos, bem como seus atributos, é de grande importância para análises forenses subseqüentes.


dd. dd , , .


(. 2). “+” , , “-” — .



2 — .


- NetCat, Rsync ,


  1. Relatório Global de Economia Móvel da GSMA 2018 [Recurso eletrônico]. // GSMA. - Modo de acesso a recursos: http://www.gsma.com/mobileeconomy/ (acessado em 15/04/2019).
  2. International Data Corporation, Worldwide Quarterly Mobile Phone Tracker [ ]. // International Data Corporation — : http://www.idc.com/prodserv/smartphone-os-market-share.jsp ( : 15.04.2019).
  3. Securelist, Mobile malware evolution 2018 [ ]. // Kaspersky Lab — : https://securelist.ru/mobile-malware-evolution-2018/93451/ ( : 15.04.2019).
  4. Oleg Davydov. Mobile Phone Forensics Challenges [ ] // Eforensics magazine. — : http://www.tverlingua.by.ru/archive/005/5_3_1.htm ( : 22.08.2018).
  5. Christian Hilgers. Post-Mortem Memory Analysis of Cold-Booted Android Devices [ ].// IEEE Xplore Digital Library — : http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=6824082 ( : 15.09.2018)
  6. Haiyu Yang. A Tool for Volatile Memory Acquisition from Android Devices [ ]. // ResearchGate — : https://www.researchgate.net/publication/308300539_A_Tool_for_Volatile_Memory_Acquisition_from_Android_Devices ( : 16.09.2018).
  7. About Volatility Framework [ ]. // Volatility Foundation — : https://www.volatilityfoundation.org/about ( : 16.09.2018).
  8. Mem [ ]. // GitHub — : https://github.com/MobileForensicsResearch/mem ( : 23.10.2018).
  9. LiME [ ]. // GitHub — : https://github.com/volatilityfoundation/volatility/wiki/Android ( : 23.10.2018).
  10. Memfetch [ ]. // GitHub — : https://github.com/citypw/lcamtuf-memfetch ( : 23.10.2018).
  11. AMExtractor [ ]. // GitHub — : https://github.com/ir193/AMExtractor ( : 23.10.2018).
  12. ANDROPHSY [ ]. // GitHub — : https://github.com/scorelab/ANDROPHSY ( : 23.10.2018).
  13. Android Developer [ ]. // Google Developers — : https://developer.android.com/guide/topics/connectivity/wifip2p.html ( : 18.11.2018).
  14. Bluetooth overview [ ]. // Google Developers. — : https://developer.android.com/guide/topics/connectivity/bluetooth ( : 23.11.2018).
  15. SSHFS [ ]. // ArchLinux — : https://wiki.archlinux.org/index.php/SSHFS ( : 08.11.2018).
  16. Rsync [ ]. // Rsync — : https://rsync.samba.org/ ( : 23.11.2018).
  17. SCP [ ]. // Die.net — : https://linux.die.net/man/1/scp ( : 08.12.2018).
  18. SFTP [ ]. // SSH Communications Security — : https://www.ssh.com/ssh/sftp/#sec-SCP-Command-on-Linux/ ( : 08.12.2018).
  19. Unix . Netcat [ ]. // — : https://handynotes.ru/2010/01/unix-utility-netcat.html ( : 08.12.2018).
  20. The Secure Shell (SSH) Connection Protocol [ ]. // IETF — : https://tools.ietf.org/html/rfc4254 ( : 13.12.2018).

PS ...

Source: https://habr.com/ru/post/pt473678/


All Articles