SystÚme pour recevoir une copie de la mémoire dans des appareils fonctionnant sous Android via des canaux sans fil

Présentation


Les appareils mobiles - smartphones, tablettes et autres appareils mobiles - font désormais partie intégrante de la vie des gens. PrÚs de 67% des personnes dans le monde ont au moins un smartphone; 5,8 milliards d'appareils mobiles actifs sont prévus d'ici 2025 [1].


Selon IDC [2], sur tous les appareils mobiles vendus au troisiÚme trimestre 2018, 86,8% étaient équipés d'Android OS. Le nombre d'utilisateurs utilisant le systÚme d'exploitation Android est supérieur à 1,4 milliard. Selon Securelist [3], en 2018, 5,3 millions de packages de logiciels malveillants pour la famille de systÚmes d'exploitation Android ont été détectés. Par conséquent, un spécialiste dans le domaine de la criminalistique informatique doit utiliser différentes méthodes pour extraire une copie de la mémoire pour chaque appareil.


Actuellement, il n'existe aucun moyen d'obtenir uniformĂ©ment une copie de la mĂ©moire Ă  partir d'appareils exĂ©cutant Android OS. À cet Ă©gard, un spĂ©cialiste de l'informatique judiciaire doit utiliser de nombreuses mĂ©thodes diffĂ©rentes, lorsqu'il est confrontĂ© Ă  des problĂšmes techniques. Tout d'abord, des problĂšmes sont associĂ©s Ă  l'absence de pilote ou Ă  un dysfonctionnement du connecteur USB utilisĂ© dans les mĂ©thodes traditionnelles d'extraction de donnĂ©es. Cependant, pour obtenir et transmettre une copie de la mĂ©moire, vous pouvez utiliser des canaux de communication sans fil [4].


La section 1 décrira l'architecture du systÚme d'exploitation Android, les scénarios d'utilisation de la RAM, les structures de données contenues dans la RAM, les logiciels pour obtenir une copie de la mémoire et les logiciels pour transmettre les données.


La section 2 décrira l'architecture d'un systÚme permettant d'obtenir une copie de la RAM, la connexion entre les sous-systÚmes et les modules.


La section 3 dĂ©crira la mise en Ɠuvre d'un systĂšme d'obtention d'une copie de RAM.


Section 1: Explorer les moyens d'obtenir une copie de la mémoire dans les appareils exécutant Android OS via les canaux sans fil


Cette section traite des logiciels permettant d'obtenir une copie de la mémoire et de leur comparaison, des protocoles réseau pour transférer une copie de la RAM, des façons d'exécuter des fichiers exécutables via des connexions sans fil pour Android OS, des structures de RAM et également des scénarios d'utilisation d'une copie de la RAM.


Scénarios d'utilisation d'une copie de RAM


Aujourd'hui, le systÚme d'exploitation Android est présent sur différents appareils grùce au noyau Linux et à la machine virtuelle Dalvik. Ce document traite des périphériques fonctionnant sur la plate-forme matérielle ARM et x86 la plus courante.


Une copie de la mĂ©moire est constituĂ©e de donnĂ©es binaires non structurĂ©es difficiles Ă  analyser sans les outils spĂ©cialisĂ©s appropriĂ©s. Au moment d'Ă©crire ces lignes, les pĂ©riphĂ©riques ont une taille de RAM ne dĂ©passant pas dix gigaoctets, ce qui augmente considĂ©rablement le temps d'analyse d'une copie de RAM de cette taille. À l'heure actuelle, il n'existe pas de moyen unique d'analyser toutes les structures de la RAM. Pour une analyse complĂšte de la RAM, il faut utiliser plusieurs outils logiciels.


Il n'y a aucune garantie pour une analyse rĂ©ussie d'une copie de RAM, mĂȘme si vous avez tous les outils nĂ©cessaires en raison de problĂšmes au stade de l'obtention d'une copie de la mĂ©moire. S'il n'y a aucune possibilitĂ© de se connecter Ă  l'appareil ou s'il existe un Ă©norme risque de corruption de donnĂ©es, la mĂ©thode sans fil pour obtenir une copie de la mĂ©moire reste la seule et sĂ»re. Malheureusement, il n'existe actuellement aucun outil logiciel pour recevoir automatiquement une copie de la mĂ©moire via une communication sans fil.


Une copie peut ĂȘtre utilisĂ©e en informatique judiciaire. Par exemple, si les donnĂ©es de l'appareil Ă©tudiĂ© sont cryptĂ©es, une copie de la mĂ©moire peut aider Ă  dĂ©crypter les donnĂ©es qui contiennent des mots de passe et des clĂ©s cryptographiques [5]. Chaque application qui traite des donnĂ©es personnelles utilise le cryptage des donnĂ©es. Ayant l'image d'une copie de RAM et une certaine habiletĂ© Ă  travailler avec, il y a une chance de restaurer les derniers messages ou fichiers temporaires qui peuvent aider dans une enquĂȘte mĂ©dico-lĂ©gale.


Dans le cas d'une attaque sur l'appareil, l'analyse de la copie de la RAM de l'appareil vous permet de savoir comment l'attaque a Ă©tĂ© menĂ©e, quels canaux de communication, logiciels malveillants et vulnĂ©rabilitĂ©s ont Ă©tĂ© utilisĂ©s par l'attaquant pour empĂȘcher de telles attaques Ă  l'avenir.


Copie périodique des données critiques pour détecter les logiciels malveillants. Cette approche est utilisée pour détecter les logiciels malveillants qui utilisent des méthodes pour masquer sa présence dans le systÚme.


En outre, une copie de la mĂ©moire (ou la partie qui contient uniquement le contexte de l'application ou du processus Ă  l'Ă©tude) peut ĂȘtre utilisĂ©e pour identifier les vulnĂ©rabilitĂ©s et les fonctionnalitĂ©s non documentĂ©es du logiciel. Les outils logiciels spĂ©cialisĂ©s existants utilisent une copie de la RAM pour dĂ©tecter les rootkits [6]. Une copie de la mĂ©moire de l'ensemble du systĂšme peut ĂȘtre utilisĂ©e pour surveiller les changements dans l'ensemble du systĂšme afin d'identifier les actions illĂ©gales.


Pour analyser la copie opérationnelle, le cadre de volatilité est utilisé [7]. Volatility Framework est un ensemble d'outils permettant d'obtenir et d'analyser une copie de la RAM de divers systÚmes d'exploitation, y compris Android. En utilisant ces outils, vous pouvez obtenir les informations nécessaires contenues dans l'image de RAM. Pour obtenir une copie de la RAM, le Volatility Framework utilise le module du noyau LiME. Pour extraire une copie de la RAM via LiME, le code source du noyau Linux du périphérique à l'étude est requis.


Analyse d'outils et de méthodes pour exécuter des fichiers exécutables via des connexions sans fil pour Android OS


Pour installer des applications, comme dans tous les systĂšmes d'exploitation de type UNIX, des packages sont utilisĂ©s. Sur Android, ces packages ont l'extension .apk. Ces packages sont stockĂ©s dans la mĂ©moire de l'appareil mĂȘme aprĂšs l'installation et sont supprimĂ©s uniquement lorsque l'application est dĂ©sinstallĂ©e. Le package .apk contient du code Java compilĂ©, ainsi que le fichier AndroidManifest.xml qui dĂ©clare les autorisations nĂ©cessaires au fonctionnement de l'application.


Il existe deux types d'applications: systÚme et utilisateur. Les applications systÚme, contrairement aux applications utilisateur, ont plus de privilÚges, donc les modifier ou les supprimer n'est possible que si vous avez des droits de superutilisateur. Les packages d'application utilisateur se trouvent dans le répertoire «/ data / app». Les packages d'applications systÚme se trouvent dans le répertoire «/ system / app».


À partir d'Android 5.0, la machine virtuelle Android Runtime est utilisĂ©e Ă  la place de la machine virtuelle Dalvik. Contrairement Ă  Dalvik, Android Runtime ne compile pas l'application au dĂ©marrage, mais lors de l'installation. Cela augmente la vitesse de lancement du programme et augmente la durĂ©e de vie de la batterie. Pour garantir la compatibilitĂ© descendante, Android Runtime utilise le mĂȘme bytecode que Dalvik.


Contrairement à un processus systÚme, un processus utilisateur a moins de privilÚges sur le systÚme. Pour obtenir des privilÚges comme un processus systÚme, un processus utilisateur nécessite des droits de superutilisateur ou des droits "root". Le superutilisateur est un utilisateur du systÚme d'exploitation qui dispose de droits illimités sur le systÚme.
Les droits de superutilisateur sont de deux types: permanents et temporaires. Les droits de superutilisateur permanents sont conservĂ©s mĂȘme aprĂšs un redĂ©marrage et les droits temporaires sont valides jusqu'au redĂ©marrage de l'appareil.


En rÚgle générale, les droits de superutilisateur sur les appareils ne sont pas disponibles. En raison de la grande variété d'appareils, il n'existe aucun moyen uniforme d'obtenir les droits de superutilisateur. Par conséquent, pour obtenir les droits de superutilisateur, différents outils sont utilisés. L'obtention des droits de superutilisateur est nécessaire pour obtenir une copie de la mémoire des appareils Android.
Pour exécuter des fichiers exécutables, certains privilÚges sont requis sur le systÚme, ainsi qu'un ensemble de commandes Unix. Initialement, Android a un ensemble minimal de commandes, qui ne sont généralement pas suffisantes pour obtenir une copie de la mémoire. Par conséquent, ils utilisent BusyBox, qui comprend un ensemble étendu de commandes. Les utilitaires inclus avec BusyBox vous permettent de travailler dans le systÚme de fichiers, de lancer des applications, d'afficher des informations systÚme et bien plus encore. Il est également possible de créer des scripts shell.


Les scripts shell sont des fichiers exécutables qui contiennent un script pour exécuter un ensemble de commandes. Contrairement à l'application, les scripts shell ne nécessitent ni installation ni compilation. Si vous devez corriger quelque chose, apportez simplement des modifications au fichier de script shell.
Étant donnĂ© que les fichiers exĂ©cutables sont lancĂ©s via une communication sans fil, nous envisagerons deux façons de lancer des fichiers exĂ©cutables Ă  l'aide d'ADB et SSH.


Pour la premiĂšre mĂ©thode, il suffit d'exĂ©cuter le «setprop service.adb.tcp.port 5555; stop adbd, start adbd ”. Ensuite, exĂ©cutez une invite de commande sur l'ordinateur et connectez-vous au pĂ©riphĂ©rique Ă  l'aide de la commande «adb connect X», oĂč «X» est l'adresse IP du pĂ©riphĂ©rique sur le rĂ©seau et la valeur du port est 5555. Pour exĂ©cuter le fichier exĂ©cutable, utilisez la commande «adb shell am start -n com. package.name/com.package.name.ActivityName »s'il s'agit d'une application. Si le fichier exĂ©cutable est un script shell, il est lancĂ© Ă  l'aide de la commande «adb shell ./name», oĂč nom est le nom du script.


La deuxiĂšme mĂ©thode utilise le protocole SSH. Contrairement Ă  la mĂ©thode prĂ©cĂ©dente, cette mĂ©thode nĂ©cessite un client SSH sur l'ordinateur et un serveur SSH sur l'appareil. Sous Windows, vous pouvez utiliser PuTTY ou sous Linux Openssh. AprĂšs avoir connectĂ© l'appareil Ă  l'ordinateur, nous avons accĂšs au shell de commandes Shell. Les commandes pour exĂ©cuter les fichiers exĂ©cutables sont les mĂȘmes que dans la premiĂšre mĂ©thode.


Ainsi, on peut voir que les deux méthodes ne diffÚrent que par la méthode de connexion. Les deux méthodes utilisent le shell de commande Shell pour exécuter des fichiers exécutables. Il s'ensuit que lors de l'accÚs au shell, vous pouvez exécuter n'importe quelle commande, ainsi que lancer n'importe quel fichier exécutable, que ce soit une application ou un script shell.


Outils logiciels pour obtenir une copie de la RAM


Les mĂ©thodes logicielles existantes peuvent ĂȘtre divisĂ©es en deux catĂ©gories:


  • obtenir une copie de la mĂ©moire de l'espace utilisateur et du noyau;
  • rĂ©cupĂ©rer une copie de la mĂ©moire uniquement Ă  partir de l'espace utilisateur.

Les outils logiciels pour récupérer une copie de l'espace utilisateur et de l'espace noyau comprennent AMExtractor et LiME. Les outils Mem et Memfetch ne peuvent obtenir une copie de la mémoire que depuis l'espace utilisateur.


Considérez les outils logiciels mentionnés ci-dessus pour obtenir une copie de la RAM à partir d'appareils sous le contrÎle du systÚme d'exploitation Android:


  • Mem: un utilitaire open source utilisĂ© pour obtenir des donnĂ©es de RAM de processus [8];
  • Memfetch: un utilitaire open source pour obtenir l'espace d'adressage de la RAM de processus en utilisant les pĂ©riphĂ©riques / proc / $ pid / map et / proc / $ pid / mem [9];
  • LiME: un module pour le noyau Linux avec du code open source pour obtenir des donnĂ©es stockĂ©es dans la RAM dans l'espace utilisateur et le noyau [10];
  • AMExtractor: un utilitaire open source qui utilise le pseudo-pĂ©riphĂ©rique / dev / kmem pour charger dans la mĂ©moire du noyau [11].

Les programmes Mem et Memfetch peuvent ĂȘtre utilisĂ©s sans configuration prĂ©alable, mais ils ne sont pas en mesure d'obtenir des donnĂ©es de la zone de mĂ©moire du noyau et nĂ©cessitent des droits de superutilisateur pour leur travail.


Malgré son utilisation et sa polyvalence généralisées, le module LiME nécessite la configuration et le code source corrects pour le noyau Linux pour chaque périphérique individuel.
Pour que AMExtractor fonctionne, des informations sont requises sur le type de modÚle d'adressage de mémoire virtuelle utilisé par le noyau et les droits de superutilisateur.


Les outils logiciels pris en compte dans cet ouvrage, dont le code source est accessible au public, ne sont utilisés que pour obtenir une copie de la RAM.


Les outils logiciels tels que Oxygen, UFED et MSAB XRY sont chers et sont disponibles pour un usage commercial uniquement. Les programmes de ce niveau sont capables de: recevoir une copie de la mémoire d'un appareil verrouillé, obtenir des droits de superutilisateur, générer des rapports médico-légaux, et bien plus encore.


L'outil ANDROPHSY est le premier outil open source qui prend en charge toutes les Ă©tapes de l'enquĂȘte mĂ©dico-lĂ©gale des appareils Android [12]. L'architecture ANDROPHSY se compose de quatre modules principaux: un module de traitement, un module de collecte, un module d'analyse et un module de reporting. L'acquisition des donnĂ©es est effectuĂ©e Ă  l'aide de l'outil dd et du service ADB. Un cĂąble USB est utilisĂ© pour se connecter entre l'ordinateur et l'appareil faisant l'objet de l'enquĂȘte, et les donnĂ©es sont transmises via le protocole TCP.


La confirmation de la pertinence de ce travail est la présence de failles dans ANDROPHIE. Ceux-ci incluent les performances uniquement dans l'environnement Linux, le manque de fonctions pour obtenir et analyser une copie de la RAM de l'appareil et le manque de connexion à l'appareil via Wi-Fi ou Bluetooth pour extraire des données.


Sur la base de l'analyse, un tableau comparatif a été construit (voir figure 1). Dans le tableau 1, le symbole «+» indique les fonds qui satisfont aux exigences et le symbole «-» indique le contraire.



Figure 1 - Logiciel pour obtenir une copie de RAM


Selon les résultats de la comparaison, il a été décidé d'utiliser AMExtractor pour prendre l'image de la RAM, en raison de la réception d'une copie complÚte de la RAM, ainsi que du manque de code source du noyau et de la prise en charge du chargement des modules.


Logiciel de transfert de données


Un cĂąble USB est utilisĂ© pour rĂ©cupĂ©rer les donnĂ©es des appareils exĂ©cutant le systĂšme d'exploitation Android. La plupart des appareils Android peuvent ĂȘtre connectĂ©s Ă  un ordinateur personnel Ă  l'aide d'un cĂąble USB.


Cependant, lors d'une enquĂȘte sur un appareil Android, il peut arriver qu'il soit impossible d'extraire des donnĂ©es de celui-ci Ă  l'aide d'une connexion USB. Les raisons peuvent ĂȘtre un cĂąble dĂ©fectueux ou un connecteur endommagĂ©. Dans ces cas, seule une carte mĂ©moire externe, qui ne se trouve pas sur tous les appareils, sera Ă  la disposition de l'expert pour la recherche. Parfois, un appareil ne contient que de la mĂ©moire interne. Le contenu de cette mĂ©moire, ainsi que la RAM, peuvent ĂȘtre retirĂ©s en toute sĂ©curitĂ© via une connexion USB. Une alternative Ă  une connexion filaire est sans fil. De tous les protocoles sans fil, le systĂšme d'exploitation Android prend en charge les plus populaires: Wi-Fi et Bluetooth.


Le Wi-Fi dans les appareils Android modernes est utilisé pour accéder à Internet ou pour transférer des données. Les appareils mobiles basés sur des droïdes prennent en charge la plupart des normes Wi-Fi jusqu'à 802.11ac. La vitesse de transfert de données entre les appareils via Wi-Fi dépasse la vitesse de transfert de données via Bluetooth [13].


Pour connecter des appareils via Wi-Fi, connectez-vous simplement Ă  un point d'accĂšs partagĂ©. Étant donnĂ© que d'autres appareils peuvent se connecter au point d'accĂšs partagĂ©, il est important de limiter leur accĂšs au rĂ©seau. La disponibilitĂ© du support dans Android, Wi-Fi Hotspot, vous permet d'utiliser l'appareil comme point d'accĂšs.


Le protocole sans fil Bluetooth, disponible sur les appareils An-droid, a Ă©tĂ© conçu pour transfĂ©rer des donnĂ©es entre des appareils dotĂ©s d'une petite batterie. Par rapport au Wi-Fi, la vitesse de transfert de fichiers via Bluetooth est beaucoup plus faible. Le protocole est basĂ© sur un piconet composĂ© d'un nƓud principal et de plusieurs nƓuds subordonnĂ©s [14]. Les profils sont utilisĂ©s pour transfĂ©rer diffĂ©rents types de donnĂ©es. Un profil Bluetooth dĂ©finit les commandes et les fonctionnalitĂ©s que les appareils peuvent Ă©changer entre eux. Il existe au moins 27 profils Bluetooth.


Un profil PAN est utilisé pour créer un WPAN entre deux appareils. Le profil HID vous permet de connecter une souris, un clavier et d'autres périphériques qui prennent en charge ce profil [14].


Dans ce travail, basé sur les fonctionnalités du systÚme d'exploitation Android, nous considérons le transfert de données logiciel suivant:


  • SSHFS: un client de systĂšme de fichiers basĂ© sur FUSE pour monter des rĂ©pertoires distants via une connexion SSH [15];
  • Rsync: un utilitaire open source qui permet un transfert rapide et pas Ă  pas des donnĂ©es [16];
  • SCP: utilitaire et protocole de transmission de donnĂ©es via le protocole SSH [17];
  • SFTP: en comparaison avec SCP, qui vous permet de copier uniquement des fichiers, SFTP a la capacitĂ© d'effectuer des opĂ©rations sur les fichiers: par exemple, reprendre le transfert de fichiers aprĂšs la dĂ©connexion, supprimer des fichiers sur le serveur et de nombreuses autres opĂ©rations [18];
  • NetCat: utilitaire UNIX qui lit et Ă©crit des donnĂ©es via des connexions rĂ©seau en utilisant le protocole TCP ou UDP [19].

L'utilitaire rsync est dans la plupart des cas utilisé pour synchroniser des fichiers ou des répertoires. Pendant la synchronisation, seules les modifications sont envoyées à l'aide d'un algorithme de recherche de somme de contrÎle efficace. La fonctionnalité Rsync vous permet de transférer via le protocole SSH, de compresser des fichiers, ainsi que de copier des liens, des fichiers de périphérique, des attributs de propriétaire, des groupes et des droits.
La plupart des moyens d'obtenir une copie de la mémoire utilisent le protocole TCP pour le transfert de données pour exclure la possibilité d'écrire des données dans la mémoire de l'appareil à l'étude.


Pour un transfert de données sécurisé, il est important que le logiciel utilise le protocole SSH. Le Secure Shell Protocol (SSH) est un protocole de connexion à distance sécurisée au systÚme et à d'autres services réseau sécurisés sur un réseau non sécurisé [20].


La compression des données peut augmenter considérablement le taux de transmission à faible bande passante du canal. Le transfert de fichiers, ainsi que leurs attributs, est d'une grande importance pour l'analyse médico-légale ultérieure.


dd. dd , , .


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



2 — .


- NetCat, Rsync ,


  1. Rapport 2018 de la GSMA sur l'économie mobile mondiale [ressource électronique]. // GSMA. - Mode d'accÚs aux ressources: http://www.gsma.com/mobileeconomy/ (consulté le 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/fr473678/


All Articles