Travail de Master
Transcription
Travail de Master
Travail de Master Forensic Analysis and Data Recovery from Mobile Phones 2008 Gian-Luca CORBO Sous la direction de Mr. David BILLARD ii Table des matières 1 Introduction 1.1 Préambule . . . . . . . . 1.2 But . . . . . . . . . . . . 1.3 Etat de l’art . . . . . . . 1.4 Environnement de travail . . . . . . . . . . . . . . . . . . . . . . . . 2 JTAG 2.1 Introduction à JTAG . . . . . . . . 2.2 Le fonctionnement de JTAG . . . . 2.3 Lecture de la mémoire du téléphone 2.4 Les difficultés . . . . . . . . . . . . 2.5 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 2 3 4 . . . . . 7 7 8 9 12 13 3 Dump Mémoire 17 3.1 Choix du logiciel et du mobile . . . . . . . . . . . . . . . . . . 17 3.2 Comment effectuer un Dump . . . . . . . . . . . . . . . . . . 18 4 Extraction des vidéos 4.1 Introduction . . . . . . . . 4.2 Norme 3GP . . . . . . . . 4.3 Structure d’une vidéo 3GP 4.4 Analyse dump mémoire . . 4.5 Reconstruction de vidéo . 4.6 Résultats et conclusion . . 5 Extraction des messages 5.1 Introduction . . . . . . . 5.2 Détails techniques . . . . 5.3 Le format PDU . . . . . 5.4 Recherche dans le Dump 5.5 Extraction des SMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 21 21 22 25 30 34 . . . . . 37 37 38 40 41 44 iv TABLE DES MATIÈRES 5.6 Résultats et conclusion . . . . . . . . . . . . . . . . . . . . . . 47 6 Extraction des contacts 6.1 Introduction . . . . . . . 6.2 Détails techniques . . . . 6.3 Recherche dans le Dump 6.4 Extraction des contacts . 6.5 Résultats et conclusion . 7 Logiciel développé 7.1 Explication . . . . . . 7.2 SourceForge . . . . . . 7.3 Fonctionnalité de base 7.4 Inversion de fichier . . 7.5 Exportation CSV . . . 7.6 Captures d’écran . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 51 51 52 54 57 . . . . . . 59 59 59 59 60 60 61 8 Conclusion 63 9 Remerciement 67 Bibliographie 69 Table des figures 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 Interface interne TAP . . . . . . . . . . . . . . . . . . . Machine d’état . . . . . . . . . . . . . . . . . . . . . . Exemple d’envoi de l’instruction BYPASS sur le TDI . Exemple d’un système embarqué classique . . . . . . . Utilisation du mode Extest pour accéder à la mémoire Port JTAG sur le Sony Ericsson K700i . . . . . . . . . Mobile Sagem V65 . . . . . . . . . . . . . . . . . . . . Mobile Nokia 1110i . . . . . . . . . . . . . . . . . . . . 3.1 3.2 Flash and backup - Ecran initial . . . . . . . . . . . . . . . . . 19 Flash and backup - Ecran lecture mémoire . . . . . . . . . . . 20 4.1 4.2 4.3 4.4 4.5 4.6 4.7 Structure du format MPEG-4 . . . . . . . . . . . . . . . . . Structure de la (( moov box )) . . . . . . . . . . . . . . . . . . Structure d’un entête vidéo avec le nom . . . . . . . . . . . . Structure d’une boı̂te mdat . . . . . . . . . . . . . . . . . . Structure général d’une vidéo dans un dump . . . . . . . . . Flowchart pour la recherche et la reconstruction d’une vidéo Architecture d’une vidéo dans un dump . . . . . . . . . . . . . . . . . . . 23 24 27 28 29 34 35 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 Signature d’un SMS . . . . . . . . . . . . . . . . Première version d’une structure d’un SMS dans Structure d’un header SMS . . . . . . . . . . . Pattern date . . . . . . . . . . . . . . . . . . . . Exemple du format d’un numéro de téléphone . Calcul permettant de savoir le début du SMS . Table ASCII permettant de faire la conversion . Flowchart pour la recherche d’un SMS . . . . . Pattern de recherche pour Motorola V3R . . . . . . . . . . . . . 42 43 44 44 46 46 47 48 49 6.1 6.2 Pattern pour un contact . . . . . . . . . . . . . . . . . . . . . 53 Structure d’une entrée dans le répertoire . . . . . . . . . . . . 54 v . . . . . . . . . . . . . . . . . . . . . . un dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 10 10 11 12 14 15 15 vi TABLE DES FIGURES 6.3 6.4 6.5 Différence entre la taille SMS et contact . . . . . . . . . . . . 55 Flowchart pour la recherche d’un contact . . . . . . . . . . . . 56 Pattern de recherche pour Motorola V3R . . . . . . . . . . . . 58 7.1 7.2 7.3 7.4 Capture Capture Capture Capture du du du du programme une fois l’exécution terminée . . fichier de sortie contenant le nom des vidéos fichier de sortie contenant les SMS . . . . . . fichier de sortie contenant les contacts . . . . . . . . . . . . . . . . 61 61 62 62 Chapitre 1 Introduction 1.1 Préambule De nos jours, les téléphones mobiles sont devenus omniprésents dans la société. Tout d’abord, au niveau financier, le marché des mobiles est désormais un marché de masse qui comprend 51 millions de clients, et ce, seulement 15 ans après la commercialisation des premiers services. L’idée d’être joignable et de pouvoir appeler partout dans le monde ou dans n’importe quelle situation renforce le besoin d’avoir un mobile. De plus, la multitude de fonctionnalités que proposent les différents fabriquant, tels que photos, vidéos, vidéophonie et même l’accès Wifi1 ne font que favoriser cette croissance. Malheureusement, ces fonctionnalités sont quelques fois utilisées à des fins violentes, voir criminelles dans les cas les plus extrêmes. Cette néfaste utilisation entraı̂ne aussi la perte de la fonction première du téléphone qui est celle de téléphoner. En effet, les auteurs de violences n’hésitent pas à se mettre en scène avec leur propre mobile ou devant l’objectif d’un camarade au moment où ils commettent des délits. Les plus prudents se contentent de montrer ces images à leurs copains, dans les cours de récréation ou en petit comité, alors que les plus violents font circuler les images dans le but d’humilier leurs victimes et d’affirmer leur supériorité physique. Les moyens les plus utilisés pour faire véhiculer l’information sont les MMS2 et Internet (grâce à la récente prolifération des blogs accessibles à tous). L’envoi de MMS et la publication de blogs peuvent très souvent donner lieu à des conséquences dramatiques, comme lors de la diffusion d’images du viol d’une collégienne en 2005. Son agresseur, mineur, a montré les images enregistrées sur son portable au sein de son établissement de Nice. Dans un élan de fierté, l’agresseur a envoyé 1 Wireless Fidelity - Technique de réseau informatique sans fil mis en place pour fonctionner en réseau interne 2 Multimedia Messaging Service - messages multimédias permettant l’envoi de photos ou de vidéos par téléphone portable 1 2 CHAPITRE 1. INTRODUCTION par MMS les images choquantes du viol, et par conséquent, c’est par le biais de camarades que la victime a appris que les photos circulaient sur tous les téléphones mobiles de ses camarades. Il est important de rajouter que la possession de téléphones mobiles atteint des taux très impressionnants surtout chez les jeunes de 15 ans. En effet, près de 4 personnes sur 5 âgées de 15 ans et plus étaient en possession d’un téléphone mobile à la fin 2006 et les taux ne cessent de progresser. Mais l’ampleur du phénomène concernant les actes de violences reste difficile à estimer. D’un point de vue judiciaire, peu d’affaires ont fait l’objet de poursuites, car les preuves peuvent être très facilement supprimées. C’est pour lutter contre cette injustice sociale dont font l’objet de nombreuses victimes qu’est née l’idée d’analyser la mémoire des téléphones et de pouvoir y récupérer certaines données intentionnellement effacées. 1.2 But Le but de ce sujet de Master est d’analyser le fonctionnement de la mémoire d’un téléphone mobile et de prouver qu’il est possible d’en récupérer les informations intentionnellement supprimées à travers les différents supports que sont les SMS3 , les vidéos, les photos ou les MMS. La récupération de données du contenu du téléphone ne peut s’accomplir qu’à travers la lecture de la mémoire interne de l’appareil. Cependant, il faut tout d’abord comprendre le fonctionnement d’un système embarqué, dans notre cas un téléphone mobile, et les différentes connexions qui sont proposées avant de pouvoir procéder à la lecture. En effet, la réalisation d’un dump de la mémoire, à proprement parlé, peut s’avérer difficile à cause de l’importante variété de téléphone mobile présente sur le marché et à cause de la non divulgation d’informations de la part du fabriquant. Il est bon de noter que plusieurs méthodes permettant la récupération de données existent dans la littérature. Dans un premier temps, nous allons essayer d’extraire les données au moyen de la méthode JTAG4 dont les détails concernant la procédure sont reportés au chapitre 2 intitulé JTAG. Dans un deuxième temps, nous extrairons ces données grâce à un logiciel qui a pour but d’effectuer cette manipulation par simple interface USB. Ce logiciel est fourni et projeté par un tiers fabriquant, mais qui lui nécessite les drivers du téléphone mobile réalisé par le fabriquant. Lorsque la mémoire est obtenue, grâce à l’une des deux 3 4 Short Message Service - message texte sous forme électronique Joint Test Action Group - Port de tests 1.3. ETAT DE L’ART 3 méthodes citées ci-dessus, l’objectif de ce projet - l’analyse des données des mobiles - peut alors débuter. 1.3 Etat de l’art Cette section fait l’objet d’une synthèse des solutions qui existent et que nous avons pu rencontrer. Dans le domaine de la recherche digitale, beaucoup de solutions proposées peuvent être plus ou moins convaincantes. La récupération de données existe depuis de nombreuses années sur les ordinateurs étant donné que le support de stockage est très bien connu et comporte des normes détaillées. C’est pour cela que beaucoup de logiciels permettant la recherche et la récupération des données effacées ou intentionnellement (( cachées )) sur un disque dur existent. Le plus connu et le plus utilisé par R Forensic qui existe sur le marché depuis de les enquêteurs est EnCase nombreuses années et qui a fait ses preuves dans de nombreux cas. Ensuite viennent des petits logiciels qui permettent une récupération assez basique comme c’est le cas de PC INSPECTOR File Recovery qui à l’avantage d’être gratuit. Mais quand à la récupération sur des téléphones mobiles, les solutions sont moins communes et surtout elles ont un point faible non négligeable. Cette faiblesse se situe au niveau de la méthode de recherche elle-même. En effet, dans la plupart des solutions existantes, le téléphone doit être allumé et par conséquent, ceci peut comporter certains risques de modifications involontaires de données. De plus, survient le problème du verrouillage du téléphone au moyen d’un code de sécurité. Il est impératif d’en connaı̂tre le code afin que le logiciel puisse correctement s’exécuter. Il existe une solution qui, d’après le fabriquant, permet de récupérer tous types de données sur un téléphone mobile par le biais d’une connexion Bluetooth5 et garantit la préservation des données. Ce logiciel, qui n’est pas gratuit, se nomme (( Oxygen Forensic Suite 2 )). Les fabricants proposent une version d’essai, mais celle-ci est limitée à l’extraction de cinq résultats. Si nous continuons à regarder dans la littérature, nous pouvons constater, qu’à l’heure actuelle, aucuns logiciels permettant de manipuler un dump6 mémoire et capable d’en extraire son contenu uniquement grâce à l’analyse de celui-ci n’a pu être trouvé. En revanche, beaucoup de scientifiques ainsi que des centres de recherche ont commencé à se lancer dans cette voie et à chercher des solutions pour accéder aux données. 5 technologie radio courte distance permettant la connexion entre les appareils électroniques 6 Mot anglais qui signifie copier le tout ou seulement une partie du contenu d’une mémoire 4 CHAPITRE 1. INTRODUCTION En effet, un article scientifique très populaire [Breeuwsa, 2006], parle des différentes méthodes qu’il est possible d’utiliser avec le port JTAG et ceci afin de pouvoir lire les données dans un téléphone, ainsi que de pouvoir extraire toute la mémoire de celui-ci et de la sauvegarder sur un ordinateur dans le but de pouvoir travailler avec une copie de la mémoire et par conséquent, la donnée qui réside dans le téléphone ne peut être altérée. Etant donnée l’importance du sujet de cet article, nous y ferons référence plus tard au cours de ce travail. Un autre article [Breeuwsa et al., 2007], toujours du même auteur, explique la façon de procéder pour pouvoir lire une mémoire flash. La lecture de ce type de mémoire peut paraı̂tre hors contexte, mais il faut savoir que les téléphones actuels intègrent comme unité de stockage des mémoires flash. Il est donc intéressant de connaı̂tre diverses techniques pour permettre d’accéder et de lire les données de ces mémoires. Dans son article, l’auteur explique différents procédés, qui sont plus ou moins réalisables, et émet quelques suppositions quant aux procédés. De plus, il explique que la méthode la plus efficace, mais qui est de loin la moins facilement réalisable, est de dessouder la puce et de la placer sur un lecteur de mémoire flash. Il est évident que cette méthode ne peut pas être utilisée dans la plupart des cas étant donné qu’il faut des appareils spéciaux et de plus cette manipulation peut entraı̂ner un non-fonctionnement de l’appareil. Afin de continuer dans l’extraction de données de l’appareil mobile, un travail de thèse [McCarthy, 2005] portant sur l’étude des différentes investigations numériques légales concernant les téléphones mobile a été effectué dans la University of South Australia. Ceci démontre bien que le sujet étudié dans ce travail comporte un réel intérêt et par conséquent, il commence à devenir un besoin concret. Malgré toutes ses références citées ci-dessus, nous pouvons constater que les études menées jusqu’à présent, couvrent en grande partie la façon de procéder à un (( dump )) mémoire, mais aucun article explique ou ne parle de la manière de traiter ou d’analyser les données contenues dans celui-ci. En effet, l’ampleur et la complexité de ce point ne doivent être négligées, car elles représentent un travail considérable. Nous pouvons donc nous prononcer sur le fait que ce travail est un (( Proof Of Concept )) et qu’il est possible de rechercher et de reconstituer des données en ayant à disposition uniquement l’image mémoire d’un téléphone. 1.4 Environnement de travail Afin de mener à bien ce travail, il a fallu se munir de plusieurs outils et de deux environnements de travail adéquats. Voici la liste des programmes des 1.4. ENVIRONNEMENT DE TRAVAIL 5 langages de programmation et des différents outils qui ont été utilisés tout au long de ce travail. Environnement et OS Deux systèmes d’exploitations interviennent dans notre travail. – Le premier système qui va nous servir à coder et à exécuter le programme est Linux Ubuntu 8.04 - Hardy Heron – Le deuxième système qui va nous permettre d’effectuer une image mémoire est Windows XP sp2 Processeur Intel de la classe Pentium cadencé à 1,6 Ghz - 1Gb de ram Langages de programmation et espace de développement Programmation en C L’aide au développement a été assurée par Netbeans Programmes complémentaires Flash and backup permettant de faire des images SETool2 lite 6 CHAPITRE 1. INTRODUCTION Chapitre 2 JTAG 2.1 Introduction à JTAG La norme JTAG a été définie en 1990 par un consortium d’entreprises qui s’est penché sur la problématique suivante qui consiste à tester et à contrôler le bon fonctionnement des circuits imprimés. Ceci a donné naissance à un standard de test et de débogage. Ce standard s’appelle IEEE std. 1149.1, plus communément connu sous le nom de JTAG (JTAG provient du nom du groupe qui a mis au point cette norme). Le principe de ce standard consiste à ajouter un port supplémentaire ou des points de connexions sur le circuit imprimé. Cette fonctionnalité qui, en principe, est utilisée uniquement à la fin de la phase de production, permet de détecter certains défauts de conception et de s’assurer qu’aucun bug n’est apparu durant le processus de fabrication. Lorsque le produit est définitivement fini et testé, ce port n’est en (( général )) pas retiré du circuit imprimé, mais il reste tout de même inaccessible (par des voies standards) à l’utilisateur de tous les jours. Toutefois, bien que ce soit dans de rares cas, ce port peut être désactivé volontairement par le fabriquant. Pour conclure cette brève introduction sur JTAG, voici une liste non exhaustive des différents modes opératoires que comporte l’interface JTAG. Ces différentes fonctions vont être vues plus en détails dans les paragraphes suivants. – Extest1 : Mode permettant de commander les broches d’entrée-sortie des composants externes afin de tester les interconnexions de la carte. – Debug Mode : Mode utilisé pour analyser et vérifier le fonctionnement du programme. Utile pour effectuer du pas à pas. – Normal 1 External Test mode 7 8 CHAPITRE 2. JTAG Mode de fonctionnement normal. Le JTAG est court-circuité (bypass). 2.2 Le fonctionnement de JTAG Dans ce paragraphe, nous allons parcourir brièvement et succinctement le fonctionnement de l’interface JTAG. Le premier élément à entrer en considération est le connecteur. Ce bus de test utilise quatre signaux au minimum, cependant il peut en comporter un cinquième qui est le (( reset )). Le tableau 2.1 ci-dessous énumère les caractéristiques des signaux ainsi que leurs utilisations. TCK Test Clock TMS Mode Select TDI TDO TRST Data In Data Out Test Reset horloge qui permet de synchroniser le périphérique de test avec le périphérique à tester signal permettant de sélectionner le mode de fonctionnement du JTAG permet d’envoyer des données (données séries) permet de recevoir des données (données séries) entrée optionnelle qui permet l’initialisation du séquenceur de test Tab. 2.1 – Signaux JTAG La figure 2.1 est la représentation schématique des différentes interfaces que possèdent les circuits implémentant la norme JTAG avec les quatre, voir cinq, signaux de contrôle du TAP2 . Maintenant que nous avons brièvement étudié l’aspect électrique de l’interface JTAG, nous allons en analyser son fonctionnement. La figure 2.2 représente le fonctionnement de la norme JTAG qui est entièrement basé sur (( une machine d’état )). Afin de facilité la compréhension du procédé de cette machine d’état, nous allons, tout d’abord, nous focaliser sur la séquence représentée par la figure 2.3. Dans cet exemple, nous allons envoyer une simple instruction à l’interface JTAG. Cette instruction ne sera rien d’autre que la commande (( BYPASS )) (11111111). La séquence peut être résumée de la façon suivante : Dans un premier temps, nous nous trouvons dans un état de (( reset )) logique permanent, mais grâce aux tests (Run-Test) que nous effectuons au moyen d’une transition vers le bas du signal TMS, puis au moyen de deux transitions vers le haut du signal TMS, nous nous retrouvons dans l’état (( Select IR-Scan )). Pour se faire, nous allons mettre l’entrée TDI à 1 et 2 Test Acces Point - Points d’accès au module 2.3. LECTURE DE LA MÉMOIRE DU TÉLÉPHONE 9 Fig. 2.1 – Interface interne TAP envoyer huit coups de clock. Afin de déterminer le terme de l’envoi, le signal TMS remonte à 1 ce qui permet la mise à jour du registre et l’envoi de l’instruction insérée dans le registre au préalablement. Cet exemple, nous montre à quel point il est essentiel de comprendre la machine d’état, car la totalité du fonctionnement du port JTAG est basé sur celle-ci. Toutes ces étapes sont détaillées dans la figure 2.3. Pour conclure ce paragraphe, il est intéressant de noter que l’envoi et la réception d’instructions peuvent s’avérer compliqués et fastidieux, c’est pour cela qu’il existe des modules (( préfabriqués )) que l’on branche directement sur le port USB. Celui-ci contient l’intégralité de la mécanique nécessaire à l’envoi et à la réception de messages entre le port JTAG et le périphérique connecté. Ce périphérique peut être un téléphone mobile, un Pocket-PC ou tout autre appareil ayant intégré la norme et le connecteur JTAG. 2.3 Lecture de la mémoire du téléphone Dans ce paragraphe, nous allons observer de plus près le procédé de lecture de la mémoire grâce à un port qui sert principalement au débogage (JTAG). Il est important de préciser que les observations qui apparaissent dans ce paragraphe sont principalement tirées d’un fondement théorique. De plus, il est indispensable de rappeler que le mode de fonctionnement qui 10 CHAPITRE 2. JTAG Fig. 2.2 – Machine d’état Fig. 2.3 – Exemple d’envoi de l’instruction BYPASS sur le TDI 2.3. LECTURE DE LA MÉMOIRE DU TÉLÉPHONE 11 Fig. 2.4 – Exemple d’un système embarqué classique permet la lecture de la mémoire du téléphone est (( Extest )) (mode étudié dans la section 2.1). Dans la plupart des cas, les mémoires non-volatiles ainsi que les mémoires volatiles ne sont pas directement connectées au port JTAG, car les mémoires contenant une interface JTAG sont rares et couteuses. C’est pourquoi, on ne peut accéder directement à la mémoire que par le biais du port de débogage. Afin de limiter les complications liées à la lecture de la mémoire, nous adoptons la solution élaborée par un des nombreux articles [Breeuwsa, 2006] qui sont les plus reconnus dans le domaine du (( forensic )). La figure 2.4 illustrée ci-dessus est un bref rappel de l’interconnexion d’un système embarqué classique. En observant cette image, nous pouvons constater que la mémoire est connectée par un bus de données au processeur. Ainsi, en passant par le processeur, il est possible d’envoyer directement une instruction à celui-ci en lui demandant de lire une adresse en mémoire et de nous la retourner. En principe, le tour est joué, cependant des difficultés peuvent survenir comme nous le verrons au paragraphe suivant. Voici la théorie proposée par [Breeuwsa, 2006] en ce qui concerne la manipulation responsable de la lecture de la mémoire du téléphone. 1. Tout d’abord, il faut envoyer un vecteur de test contenant l’adresse mémoire que l’on désire lire suivi d’un signal de contrôle (le signal de contrôle sert à indiquer si nous sommes en lecture ou en écriture, mieux connu sous l’abréviation R/W). Dans notre cas, nous utiliserons uniquement (( Read ))étant donné que l’on désire lire la mémoire et non y écrire dedans. Pour illustrer ce point, il faut se référer à la première 12 CHAPITRE 2. JTAG Fig. 2.5 – Utilisation du mode Extest pour accéder à la mémoire étape de la figure 2.5. 2. Une fois envoyé ce vecteur dans le registre, il faut activer ce registre grâce au signal TMS. Après un bref délai, la mémoire transmet comme information la donnée que l’on a demandée. Toutefois, l’instruction doit être correcte et l’adresse mémoire existante. Maintenant, ces informations sont sur le bus de données. Pour illustrer ce point, il faut se référer à la deuxième étape de la figure 2.5. 3. Une fois arrivé à ce stade, il faut envoyer une commande afin de capturer les informations se trouvant sur ce bus. Le but du second vecteur est de faire un (( shift )) de la valeur lue sur la sortie TDO. Au même moment, on peut envoyer la nouvelle adresse à lire sur l’entrée TDI. Pour illustrer ce point, il faut se référer à la troisième étape de la figure 2.5. Afin d’obtenir une image complète de la mémoire, il suffit de répéter cette manipulation avec les différents emplacements mémoire que l’on désire lire. La mémoire peut être également lue au moyen du fonctionnement (( Debug Mode )), mais cette méthode ne sera pas prise en compte dans l’analyse de ce projet, car elle nécessite du matériel très spécifique ainsi que des compétences qui dépassent de loin le périmètre de ce travail. Pour de plus amples informations à ce sujet, il est possible de se référer à la page 34 de l’article [Breeuwsa, 2006], car il traite la fonction (( Debug Mode )) plus en détails. 2.4 Les difficultés Dans ce paragraphe, nous allons tenter de comprendre pourquoi la lecture de l’adresse mémoire a échoué malgré un fondement théorique approprié et une marche à suivre bien détaillée. 2.5. CONCLUSION 13 La raison de cet échec est relativement simple à comprendre. Il s’est avéré difficile, voir impossible, de trouver le port JTAG. En effet, les constructeurs de téléphones mobiles ne veulent en aucun cas divulguer des informations au sujet de l’emplacement de ces ports dans le but de protéger leurs produits. Comme nous avons pu le constater tout au long de ce chapitre, il est relativement dangereux pour le constructeur qu’une personne arrive à accéder à ce port, car elle pourrait en modifier le fonctionnement de l’appareil en écrivant des données dans la mémoire ou procéder à une manipulation de reverse engineering3 . Malgré les nombreuses heures passées à éplucher les forums, les sites de forensic et sans compter les innombrables mails envoyés aux différents constructeurs, ces fameux ports restent introuvables. Le travail de Bachelor de McCarthy [McCarthy, 2005] qui porte sur l’analyse des téléphones mobiles ne désigne cependant que les ports JTAG de certains modèles, comme le Nokia 3410 dont le port JTAG se situe à l’arrière de la batterie. Malheureusement, après diverses recherches, il s’est avéré que cette information est inexacte et il en est de même pour les emplacements JTAG des autres modèles de Nokia. Les ports qui sont illustrés par la photo de la page 37 du travail [McCarthy, 2005] ne sont rien d’autres que des ports M-BUS4 . Ce pattern est utilisé dans plusieurs mobiles Nokia comme le montre la figure 2.8. Les informations qui indiquent que ce port est bien le port M-BUS/F-BUS ont été tirées du site [pinouts.ru, 2007] qui regroupe bon nombre de (( pinout )) de différents appareils électroniques, ainsi que du site[Peacock, 2005] qui explique le fonctionnement et les capacités de ce port. En ce qui concerne la marque Sony Ericsson, nous avons pu déterminer l’emplacement du port JTAG. En effet, cette compagnie utilise un pattern présent dans d’autres modèles. Malheureusement, vu la taille réduite des pastilles (voir figure 2.6), il s’est avéré impossible d’effectuer une soudure précise avec le matériel mis à disposition par l’université de Genève (Département CUI) ainsi que par celui de l’école d’ingénieur de Genève (laboratoire de microsystème). 2.5 Conclusion Les difficultés rencontrées liées aux secrets professionnels du constructeur et au matériel inapproprié m’ont contraint à l’incapacité d’effectuer des tests 3 Consiste à étudier un objet pour en déterminer le fonctionnement interne ou sa méthode de fabrication 4 M-Bus est un bus de connexion bidirectionnel qui permet de transmettre et de recevoir des données du téléphone mobile. C’est une connexion relativement lente (9600bps) et elle est uniquement half-duplex 14 CHAPITRE 2. JTAG Fig. 2.6 – Port JTAG sur le Sony Ericsson K700i relatifs à la lecture de la mémoire. En revanche, tout porte à croire que si le port JTAG est trouvé, que celui-ci est correctement connecté à l’ordinateur et qu’il n’est pas désactivé par le constructeur, la lecture de la mémoire peut s’effectuer en procédant de la manière expliquée au paragraphe 2.3, démarche testée et démontrée par l’article de [Breeuwsa et al., 2007] et que l’on retrouve également à l’adresse [Openwince, 2007]. L’exemple cité à l’adresse suivante montre que la personne se connecte directement aux pastilles en y soudant des câbles, ainsi elle parvient à analyser la mémoire et à en introduire ses propres données. De plus, afin de renforcer la conviction que la lecture de la mémoire interne sur un téléphone mobile est possible, il suffit de lire l’article de [Willassen, 2005] qui démontre l’exactitude de ce procédé. En revanche, il faut préciser que pour parvenir à la lecture, il est primordial d’avoir en sa possession les schémas électriques ainsi que les informations relatives aux composants des différents modèles à analyser. Malgré ces précieuses informations, il s’est avéré que dans la documentation électronique concernant les Nokia 5110, les ports JTAG étaient indiqués comme (( not assembled )). Tout ceci porte à croire que pour qu’un jour cette méthode puisse fonctionner et devenir un (( standard )) qui permette de lire les mémoires, il faudrait une plus grande collaboration entre les fabricants et les scientifiques désirant récupérer des informations primordiales se situant dans les mémoires internes 2.5. CONCLUSION 15 Fig. 2.7 – Mobile Sagem V65 Fig. 2.8 – Mobile Nokia 1110i des téléphones mobiles. Pour conclure ce chapitre, voici des photos de différentes cartes mères de mobiles. La figure 2.7 montre un mobile de la marque Sagem, modèle V65. Plusieurs composants sont facilement identifiables dont le processeur (1), la caméra (2) et la mémoire flash (3). Toutefois, l’emplacement du port JTAG demeure inconnu. La figure 2.8 montre le mobile de la marque Nokia, modèle 1110i. Sur cette illustration également plusieurs composants sont identifiables comme le processeur (1), le port M-BUS (2) et la mémoire flash (3). Ici aussi, le port JTAG demeure inconnu. 16 CHAPITRE 2. JTAG Chapitre 3 Dump Mémoire 3.1 Choix du logiciel et du mobile Suite à l’échec que nous avons pu constater dans le chapitre précédant de l’extraction de la mémoire avec le procédé JTAG, afin de continuer ce travail, il faut absolument disposer d’une image mémoire. C’est pour cela que nous allons utiliser une autre méthode et d’où la nécessité de se tourner vers un logiciel permettant d’accomplir cette tâche. Plusieurs recherches ont montré qu’il existe diverses solutions qui permettent d’effectuer des (( flash )) de la mémoire ou des modifications de fonctionnalités dans les téléphones. Mais ces méthodes ne nous intéressent pas, car dans notre cas, le but est de pouvoir lire la mémoire et non d’y écrire des données. Après plusieurs recherches, deux programmes ont retenu mon attention, car ils sont très simples d’utilisation et ils permettent de lire la mémoire. Voici les deux logiciels en question : – Le premier se nomme SeTool2lite Ce logiciel est un logiciel spécialisé dans les mobiles Sony Ericsson. Il permet de lire exclusivement les mémoires des téléphones de cette marque. – Le deuxième se nomme Flash and Backup Ce logiciel est un logiciel payant spécialisé dans les mobiles Motorola. Il permet de lire exclusivement les mémoires des téléphones de cette marque. D’après l’analyse comparative des avantages et des inconvénients des deux logiciels qui sont reportés dans le tableau 3.1, le logiciel Flash and Backup semble être le plus approprié. D’après nos exigences, ce logiciel sera donc retenu, car la connaissance de la position des différentes adresses mémoire dans le téléphone, dont celle des données utilisateur, est une information primordiale. Cependant, le choix de celui-ci impose également des restrictions quant aux téléphones. En effet, ce logiciel étant spécifique aux téléphones Motorola, notre analyse va donc porter exclusivement sur cette marque. C’est pour cela que tout le travail sera fait au moyen du téléphone Motorola V3i. 17 18 CHAPITRE 3. DUMP MÉMOIRE Nom Avantages SeTool2lite - Logiciel complètement gratuit et 100% fonctionnel (aucune restriction). - Ne nécessite pas l’installation de nombreuses librairies tierces (les (( dll )) sont embarquées dans le programme). Flash and Les différentes adresses Backup mémoires sont connues pour de nombreux téléphones (par exemple : les données utilisateur, le firmware, etc.). - Affiche les commandes utilisées pour effectuer une opération. Inconvénients - Les plages mémoires à lire doivent être introduites à la main, ainsi que la taille du bloc de lecture. - Logiciel payant, utilisable uniquement 30 jours. - Il faut au préalable installer le logiciel de mise à jour de Motorola pour que celui-ci installe les différentes librairies dont à besoin l’application pour qu’elle puisse fonctionner Tab. 3.1 – Comparaison de logiciels 3.2 Comment effectuer un Dump Comme expliqué dans la section 3.1, le choix a été porté sur le logiciel Flash and Backup. Afin d’installer correctement ce logiciel, il faut tout d’abord être sous un environnement Windows. Ensuite, il faut se procurer et installer le logiciel de mise à jour de Motorola, celui-ci peut être téléchargé sur le site du fabriquant dans la rubrique support - http:// www.motorola.com. L’installation de ce logiciel a pour but de copier dans le répertoire système de Windows les librairies nécessaires au bon fonctionnement du téléphone. Une fois cette opération effectuée, il faut se procurer le logiciel Flash and Backup, celui-ci peut être téléchargé sur le site - http://www.motorola-tools.com/backup-tool.php. Une fois que nous avons procédé à la mise en place des différents logiciels, l’application est prête à être utilisée. Attention ! Etant donné que ce logiciel est payant, il ne peut être utilisé gratuitement que durant la période limitée de 30 jours. Voici maintenant la marche à suivre qui permet d’effectuer un dump : – Etape 1 Allumer le téléphone en mode Program. Pour lancer ce mode, il faut maintenir la touche * et la touche # enfoncées et allumer le téléphone. 3.2. COMMENT EFFECTUER UN DUMP 19 Fig. 3.1 – Flash and backup - Ecran initial – – – – Cette manipulation fonctionne avec la plupart des modèles Motorola, mais il est possible que cette manipulation soit différente sur certains modèles, voir des modèles à venir. Une fois le téléphone allumé, sur l’écran apparaı̂t la version du boot loader et une information indique que le système est prêt à être connecté à un ordinateur. Etape 2 Installer le programme de mise à jour de Motorola. Il ne sert qu’à installer les drivers et les librairies adéquates. Etape 3 Connecter le téléphone à l’ordinateur grâce au câble USB. Une fois celui-ci connecté, Windows installe correctement les drivers. Attendre la fin de l’installation. Etape 4 Exécuter le programme. Une fenêtre ressemblant à la fig 3.1 doit apparaı̂tre à l’écran. Sur celle-ci, plusieurs informations sont visibles : L’état et la version du téléphone(1), le chemin de stockage des backups(2) et le modèle du téléphone que l’on désire lire(3). Une fois que le modèle du téléphone est choisi et que le chemin des backups est entré, il suffit de passer à l’étape suivante en sélectionnant l’onglet (( Read Data )). Etape 5 Une fenêtre ressemblant à la fig 3.2 apparaı̂t. Sur celle-ci, on peut 20 CHAPITRE 3. DUMP MÉMOIRE Fig. 3.2 – Flash and backup - Ecran lecture mémoire sélectionner la zone mémoire que l’on désire lire(1) (dans notre cas, il s’agit de la CG2 Flex ) puis il faut choisir le mode de format du backup(2) (dans notre cas le SMG binary files). Une fois entré toutes les informations, il suffit de cliquer sur le bouton (( Read data )) et de patienter un certain moment. Lorsque ces opérations sont terminées, nous avons en notre possession un dump complet de la zone mémoire des données utilisateur. Celles-ci se présentent sous forme d’un fichier binaire. Maintenant, il s’agit de passer à l’étape suivante qui consiste à analyser le fichier obtenu. Afin de protéger les données des mauvaises manipulations lors de l’analyse, il faut procéder systématiquement à la recherche de la signature du fichier. Cette signature peut être obtenue grâce à la commande (( md5 )) ou (( sha1 )). Ces deux instructions ont comme objectif d’obtenir une signature unique pour chacun des fichiers et ceci permet de s’assurer que le fichier ne subit aucunes altérations de la part du logiciel ou de l’utilisateur. Chapitre 4 Extraction des vidéos 4.1 Introduction Ce chapitre va s’articuler de la manière suivante, tout d’abord nous allons procéder à l’analyse des vidéos, puis à la recherche et enfin à la reconstruction de celles-ci. Le choix de commencer par la recherche et l’extraction des séquences vidéo est simplement dû à la taille de celles-ci. En effet, ce type de document multimédia est composé de nombreux éléments qui peuvent être représentés sous forme de boı̂tes. Cette caractéristique sera analysée plus en détails dans les sections suivantes. Etant donné le nombre important de boı̂tes et la conséquente taille de celles-ci, une très grande partie de la mémoire va être affectée et donc elle sera plus facilement repérable. Il ne faut pas oublier qu’en moyenne la taille d’un dump d’un Motorola V3i est approximativement de 28MB. C’est pourquoi, si les modifications sont minimes, il sera plus difficile de les trouver. En ce qui concerne le document multimédia, nous utiliserons une vidéo ayant le format 3GP. Ce format est réputé pour être utilisé par les appareils mobiles, ceci est dû à ses caractéristiques et à ces spécificités qui vont être vues en détails dans les sections suivantes. De plus, le fait de commencer par la recherche de cet élément comporte un autre avantage. En effet, les différentes boı̂tes que nous allons étudier dans ce chapitre peuvent se situer à des endroits différents de la mémoire du téléphone ce qui peut avoir pour effet de nous obliger à effectuer un certain nombre de recherches et de déplacements dans le dump, nous permettant ainsi de nous familiariser avec les outils de travail et de comprendre la structure du dump. 4.2 Norme 3GP Cette section à pour objectif d’expliquer dans les grandes lignes la norme 3GP et ses dérivés. De plus, elle explique les avantages qu’apportent ce format et pourquoi il est si diffusé dans le monde des appareils mobiles. Pour obtenir 21 22 CHAPITRE 4. EXTRACTION DES VIDÉOS de plus amples informations sur les différentes normes, il suffit de se référer aux sources qui leurs sont associées, lesquelles sont citées ci-dessous. Pour commencer, il est important de savoir que le 3GP est un conteneur vidéo défini par la norme 3GPP1 [Lecomte et al., 2000] qui lui n’est rien d’autre qu’une version simplifiée[Pereira and Ebrahimi, 2002] du format MPEG-4 partie 142 . L’objectif principal de ce format est de réduire le volume de stockage d’une vidéo et les besoins en bande passante, ceci afin de faciliter la vision, que ce soit en direct ou en streaming3 depuis un serveur multimédia ainsi que le transfert d’un appareil mobile à un autre. Il contient entre autre la description de la taille des images et le (( Bit rate )), ce qui facilite l’obtention d’informations au sujet de la vidéo. De plus, lors d’un transfert d’un support à un autre, l’envoi du plus grand et du plus important octet d’informations est toujours envoyé en premier, ceci afin de savoir ce qui va être reçu et donc de pouvoir corriger, en cas d’erreur de transmission, les données reçues. Dans le cas où une altération des données est trop importante, il est possible que le receveur demande à nouveau un certain nombre de paquets. C’est pour les raisons évoquées ci-dessus que ce support est surtout destiné aux téléphones mobiles de troisième génération, c’est à dire ce qui disposent de la fonction UMTS ou plus connu sous le nom 3G, mais on peut le trouver tout aussi bien sur ceux de deuxième génération, de simples GSM, ou encore sur des appareils mobiles comme des Palms, des Ipod, etc. 4.3 Structure d’une vidéo 3GP Comme expliqué dans la section 4.2, la norme 3GP n’est rien d’autre qu’un dérivé de MPEG-4. C’est pour cela que ces deux normes sont très semblables et c’est pourquoi elles doivent être étudiées en respectant un ordre bien précis qui consiste donc à comprendre, au préalable, la norme MPEG4 et uniquement par la suite le 3GP, car celui-ci n’est en fait rien d’autre qu’une version simplifiée de la norme MPEG-4. La figure 4.1 nous montre la hiérarchie principale de MPEG-4, qui dans notre cas est identique à celle que nous étudions. Nous pouvons constater qu’elle est composée d’un certain nombre de (( boı̂tes )) qui sont communément appelées (( box )) et elles ont une disposition bien définie. Il est intéressant de noter que c’est en partie grâce à cette hiérarchisation en forme de boı̂te que le MPEG-4 est devenu le standard le plus diffusé parmi tous les formats vidéo. En effet, il est très bien 1 3rd Generation Partnership Project - assure la maintenance et le développement de spécifications techniques pour les normes mobiles 2 Norme ISO/IEC 14496-14 3 permet la lecture d’un flux audio ou vidéo, à mesure qu’il est diffusé 4.3. STRUCTURE D’UNE VIDÉO 3GP 23 Fig. 4.1 – Structure du format MPEG-4 structuré et il suit une hiérarchie bien précise et logique. De plus, celui-ci comporte diverses extensions permettant l’indexation d’images dans la vidéo ou bien encore la superposition de différents plans dans une même image afin de modifier différentes informations dans la vidéo, comme par exemple, dans un match de football, le nom des sponsors en bordure de stades peut être modifié en fonction de la chaı̂ne de télévision qui les diffuse. Mais ce qui est relatif à la modification de la vidéo ou des trames, ne sera pas traité dans ce document. Afin d’essayer de comprendre la figure 4.1, nous allons analyser les boı̂tes les plus importantes ainsi que celles qui nous permettent de reconstruire une vidéo pouvant être lue par un lecteur multimédia. La première (( boı̂te )) qui nous intéresse est la boı̂te nommée (( ftyp4 )). Le rôle de celle-ci consiste à indiquer, au périphérique qui va lire cette vidéo, le format de la (( boı̂te )). Dans notre cas, ce sera principalement du 3GP(3GP1), voir du 3GP2. Il est intéressant de préciser qu’un logiciel sachant lire une version antérieure, comme par exemple le 3GP1, est capable de lire un format 3GP2. Ceci est dû au fait que le format MPEG-4 a la propriété (( Compatibilité avant et arrière )). La deuxième (( boı̂te )) qui nous intéresse se nomme (( moov5 )). Le but de cette boı̂te si complexe est de décrire la vidéo et son contenu. Elle contient toutes les métadonnées sur le document multimédia. En d’autres termes, elle contient toutes les informations relatives à la vidéo. C’est à l’aide des informations inscrites dans cette hiérarchie qu’il est possible de se promener 4 5 ftyp - File Type moov - Movie 24 CHAPITRE 4. EXTRACTION DES VIDÉOS Fig. 4.2 – Structure de la (( moov box )) dans la vidéo, d’aller de chapitre en chapitre, d’avoir le son synchronisé avec l’image, de savoir combien de pistes audio elle contient, etc. Il est donc facile de concevoir que cette boı̂te est primordiale. La figure 4.2 est une tentative de représentation de la structure complexe de la (( moov box )), car il en va de soit que cette figure n’est là qu’à titre indicatif dans le but de montrer que la structure de cette boı̂te peut encapsuler énormément d’informations. C’est également grâce à cette boı̂te que le streaming est en partie possible. En effet, comme expliqué brièvement dans la section 4.2, c’est le premier élément qui est envoyé. Permettant ainsi à la personne qui reçoit d’être en possession de toutes les données nécessaires pour diffuser les données avant la réception des données elles-mêmes. Enfin, vient la dernière boı̂te qui nous intéresse. Elle contient les données proprement dites de la vidéo. Celle-ci se nomme (( mdat6 )). Son but est de contenir la séquence du film sous forme binaire. Les données contenues dans celle-ci sont entrelacées, ce qui permet de jouer les flux synchronisés au fur et à mesure de leur arrivée. Il est possible qu’il en existe plusieurs si le contenu devait s’avérer trop volumineux pour être contenu en une seule boı̂te. Le but est de trouver ces éléments. Si nous arrivons à réunir et à remettre dans le bon ordre les trois boı̂tes citées ci-dessus, alors la vidéo serait reconstituée et elle pourrait à nouveau être lue. Il en va de soit que si la moov box ou la mdat box venaient à être supprimées, il s’avérerait difficile, voir impossible, de reconstruire la vidéo correctement. En revanche, s’il venait à 6 mdat - Media Data 4.4. ANALYSE DUMP MÉMOIRE 25 manquer la ftyp box, une reconstruction partielle, voir complète, serait envisageable grâce aux éléments des deux autres boı̂tes et aux spécifications du mobile, dans notre cas celle du 3GP. 4.4 Analyse dump mémoire Maintenant que nous savons de quoi est formée une vidéo au format 3GP et que nous savons quelles boı̂tes sont importantes pour pouvoir afficher une vidéo, nous pouvons procéder à la recherche de ces informations dans le dump mémoire du téléphone mobile. Ceci n’est pas une mince affaire, car comme expliqué dans l’introduction, la taille approximative d’une sauvegarde est d’environ 28Mb et afin de retrouver des informations utiles à la reconstruction de la vidéo, il faut avoir une méthode structurée et bien détaillée. Avant de commencer quoi que ce soit, il faut être en possession d’un outil permettant d’éditer des fichiers hexadécimaux qui devra en outre intégrer une fonction de recherche. Le logiciel retenu pour effectuer ces manipulations est (( Gedit )). Il a l’avantage d’être léger et facile à prendre en main. Maintenant que nous avons le logiciel, il nous faut une méthode de travail qui nous permette de retrouver les vidéos enregistrées. Voici la procédure qui a été utilisée afin d’effectuer l’analyse et la recherche d’informations. – Etape 1 Effectuer un dump mémoire en suivant les étapes vues dans le chapitre 3 section 3.2 et nommer le fichier, par exemple (( dump initial )). – Etape 2 Attendre la fin du dump et allumer le téléphone en mode normal (sans le mode Program). – Etape 3 Enregistrer une séquence vidéo assez courte (entre 4 et 8 secondes). – Etape 4 Eteindre le téléphone et le démarrer en mode Program. – Etape 5 Effectuer un nouveau dump mais cette fois-ci le nommer différemment, par exemple (( dump final )). Une fois ces opérations terminées, nous avons en notre possession un dump initial, sans vidéo, et un autre final qui lui contient la vidéo enregistrée. Arrivé à ce stade, l’idéal serait de pouvoir effectuer une comparaison entre les deux et examiner les différences qui s’y rapportent. En procédant ainsi, il serait plus facile de retrouver la nouvelle vidéo qui a été enregistrée. 26 CHAPITRE 4. EXTRACTION DES VIDÉOS Malheureusement, l’outil qui a été choisi au départ, ne permet pas la comparaison entre deux fichiers, et l’idée de procéder à une comparaison manuelle ne serait pas envisageable étant donné la taille et l’important contenu des fichiers. Il faut donc trouver un outil permettant de comparer deux fichiers hexadécimaux. Le programme comprenant cette exigence est (( emacs )). À la base, c’est un logiciel qui permet d’éditer de simples textes, mais en basculant dans le mode hexl-mode, il est possible d’afficher correctement un fichier au format binaire. De plus, il permet la comparaison de deux, voir trois fichiers. En revanche, la fonction de recherche n’est pas aussi efficace que celle de (( Gedit )), c’est donc pour cela que nous allons travailler avec les deux logiciels en parallèle. Le premier qui va servir de recherche et l’autre va servir de comparateur. Maintenant que nous disposons de tous les outils utiles pour analyser la mémoire, nous pouvons aller de l’avant et passer à l’étape suivante. Celle-ci consiste à interpréter les différences et à comprendre lesquelles interviennent au niveau de l’enregistrement, car (( emacs )) rencontre en moyenne 400 différences par comparaison. Il en va de soi que le simple fait d’allumer ou d’éteindre le mobile provoque plusieurs modifications dans les données utilisateurs. Il est en outre possible qu’il utilise une certaine partie de la mémoire comme (( mémoire temporaire )) pour charger différents éléments pour lui essentiel mais qui n’entrent pas en compte dans la création d’une vidéo. En faisant le tri, cette fois-ci de façon manuelle, nous arrivons à identifier certaines zones qui sont plus significatives que d’autres. En effet, celles-ci contiennent des symboles connus dans le format MPEG-4, comme par exemple MOOV ou MDAT. Une fois ces zones isolées, les phases de compréhension, de recherche et d’analyse peuvent commencer. Ces phases sont typiquement du reverse engineering, elles consistent à essayer de comprendre comment sont goupillées les données par le fabriquant, et ceci afin de trouver une logique au placement des diverses informations, et trouver une façon générique de pouvoir lires et récupérer les données. C’est sans aucun doute la partie la plus complexe et la plus longue du travail. C’est après plusieurs jours de recherche que les résultats suivants ont pu être déduits. Il est important de préciser que certains termes utilisés dans l’explication proviennent des déductions qui ont été effectuées durant la recherche. Il est donc possible qu’ils ne soient pas corrects, mais ce sont des termes qui ont été jugés appropriés pour expliquer la fonction de l’instruction ou même pour décrire un certain bloc. Tout d’abord, il est intéressant de constater que le nom d’un fichier vidéo est écrit sous forme ASCII, mais séparé par des zéros. Cette représentation est plus connue sous le nom d’unicode. Par exemple, (( test.3gp )) – en ASCII simple : 74 65 73 74 2E 33 67 70 4.4. ANALYSE DUMP MÉMOIRE 27 Signature Nom Fichier Série de FFF Moov box Fig. 4.3 – Structure d’un entête vidéo avec le nom – en ASCII unicode : 74 00 65 00 73 00 74 00 2E 00 33 00 67 00 70 Une fois que l’on connaı̂t cette petite subtilité, il est facile de trouver tous les noms des vidéos qui sont contenus dans le téléphone. Arrivé à ce stade, il est intéressant de constater qu’il y a des noms de fichiers qui ne sont pas visibles même par l’intermédiaire de l’explorateur du mobile. Il est donc facile de comprendre que nous sommes en présence de noms de vidéos qui ont dû être pris et supprimés par la suite. Maintenant que nous avons trouvé sous quelle forme sont transcrits les noms des vidéos dans la mémoire, nous pouvons procéder à l’analyse des (( alentours )) du nom, c’est-à-dire avant et après les noms dans le but d’essayer de trouver d’autres informations utiles à la reconstruction. Il s’avère que le nom est immédiatement suivi de l’entête d’une (( moov box )). Ceci est une information forte intéressante, car cela signifie que le nom du fichier est directement associé à un entête de vidéo. De plus, en comparant un certain nombre de noms de vidéo, il s’est avéré qu’une certaine séquence de bit apparaı̂t toujours sous la même forme juste avant le nom, à l’exception des vidéos qui ne sont pas filmées par le téléphone luimême, mais qui sont des séquences que Motorola a inséré directement. Ceci nous porte à croire qu’il existe une signature spécifique à la nature de la prise de la vidéo. Voici donc les deux signatures qui vont nous permettre de déterminer et surtout de différencier les vidéos du fabriquant de celles prises par le téléphone. Signature 3GP Constructeur Signature 3GP Personnel 00 07 00 04 00 00 00 00 0E 00 04 00 00 00 La figure 4.3 consiste en la représentation de la structure d’un entête de vidéo avec son nom associé. Maintenant que nous avons une structure correcte pour la boı̂te (( moov box )) et le nom qui lui est associé, il faut essayer de trouver et d’analyser le contenu proprement dit de la vidéo, c’est-à-dire la (( mdat box )). Celle-ci s’est avérée facilement identifiable. En effet, le simple fait d’effectuer une recherche avec comme terme mdat nous amène directement à la boı̂te en question. 28 CHAPITRE 4. EXTRACTION DES VIDÉOS 0x10000 0x10000 0x1C00 0x1C00 0x11C00 0x11C00 0x1C00 0x1C00 0x13800 0x13800 0x1C00 0x1C00 0x15400 0x15400 0x1C00 0x1C00 0x17000 ?????? Taille (4bits) Série de FF Mdat Signature Taille (4bits) Taille (4bits) Série de FF Fdat 0x17000 Mdat Signature Fig. 4.4 – Structure d’une boı̂te mdat L’analyse de la boı̂te (( mdat )) est possible étant donné que nous avons réussi à trouver un moyen de l’identifier dans la mémoire. La première chose qu’il est possible de constater, c’est que la structure diffère énormément de celle de la (( moov box )). En effet, la boı̂te contenant l’entête de la vidéo est écrite dans le sens croissant des adresses, ce qui signifie que les données partent par exemple de l’adresse 0x1000 et se finissent en 0x1FFF. Tandis que dans cette boı̂te, les données sont écrites dans le sens décroissant, c’està-dire qu’elle commence à l’adresse 0x1FFF et se termine en 0x1000. Mais après mûre réflexion et analyse, il s’est avéré que la structure est nettement plus complexe qu’elle n’y paraissait. Comme expliqué ci-dessus, les données sont écrites dans l’ordre décroissant, mais en plus d’être inversées, elles sont écrites par des blocs qui ont une taille bien définie. Cette dimension vaut 0x1C00 ce qui correspond à une taille de 7 KB. Mais dans cette boı̂te, les données sont inscrites dans un ordre tout à fait normal, c’est-à-dire en sens croissant. L’image de gauche de la figure 4.4 permet d’illustrer cette structure si spécifique. De plus, nous y voyons figurer aussi la structure de la (( fdat )) qui est expliquée ci-dessous et un élément de signature qui sera expliqué par la suite. La boı̂te (( ftyp ))peut être trouvée de la même façon que les autres, c’est à dire qu’il suffit d’effectuer une simple rechercher du terme (( fdat )) dans la mémoire, et ceci nous amène directement à l’endroit contenant le début de la boı̂te. La structure est la même que pour celle d’une (( mdat box )), c’est-àdire que les quatre premiers bits nous indiquent la taille et que la façon dont sont inscrites les données est normale (croissant). Il est intéressant de noter qu’il n’est pas possible de savoir si les blocs sont inscrits par taille de 0x1C00, car la taille de cette boı̂te est extrêmement réduite (environ 20 bit).Il reste à savoir comment est fait le lien entre cette boı̂te et les autres. La jointure se fait presque automatiquement, car la boı̂te (( ftyp )) est immédiatement suivie 4.4. ANALYSE DUMP MÉMOIRE 29 Dump mémoire Signature + nom de fichier Moov box Ftyp box Mdat box Fig. 4.5 – Structure général d’une vidéo dans un dump de la boı̂te étudiée précédemment, c’est-à-dire la (( mdat )). L’image de droite de la figure 4.4 représente une vue d’ensemble de la structure (( fdat )) ainsi que de la structure (( mdat )). Maintenant que nous sommes en possession de tous les éléments nécessaires à la reconstruction de la vidéo, c’est-à-dire le nom du fichier, les boı̂tes (( moov )), (( ftyp )) et (( mdat )), il nous reste à les réunir dans le bon ordre et à effectuer un lien entre l’entête de la vidéo et les données de celles-ci, car jusqu’à présent, nous avons analysé tous les éléments séparément mais nous n’avons trouvé aucun lien permettant l’union des deux. En fait, cette liaison est assurée par (( une signature unique )) que l’on retrouve avant la signature indiquant la nature de la vidéo, avant le nom de fichier (se référer à la fig 4.3) et juste après les données de la vidéo (dans la figure 4.4 cette signature est déjà présente). C’est en effet après de nombreux jours de recherches et de comparaisons que cette déduction a pu être faite. Cette (( signature unique )) (terme inventé) est codée sur 8 Bytes qui n’est autre qu’une séquence de 4 Bytes répétée deux fois. Voici un exemple de cette (( signature unique )). 47 4D 63 1C 47 4D 63 1C C’est grâce à cette information qu’il est maintenant possible d’associer un entête de vidéo, qui lui comporte un nom de fichier avec son contenu. La figure 4.5 résume l’architecture d’un fichier vidéo tel qu’il a pu être déduit jusqu’à présent dans le fichier binaire de départ. Il faut noter que cette architecture est le fruit d’une analyse menée au cours de nombreuses comparaisons de fichiers, de nombreux tests et essais. Il se peut très bien que celle-ci ne soit pas exacte et pourrait comporter quelques erreurs. Mais dans notre cas, elle apporte des résultats plutôt satisfaisants. Enfin, il faut souligner que cette architecture fonctionne très bien pour les 30 CHAPITRE 4. EXTRACTION DES VIDÉOS vidéos de nature personnelle, mais hélas, elle ne peut pas s’appliquer aux vidéos du fabriquant, car celles-ci ont un format différent de celui qui a été jusqu’à présent analysé. De plus, il s’est avéré impossible de créer ou de reconstituer une vidéo avec les mêmes spécificités que celles enregistrées par le fabricant, d’où la décision de ne pas étudier, ni analyser ce type d’architecture différente. 4.5 Reconstruction de vidéo Maintenant que nous avons analysé la mémoire et que nous connaissons la façon dont sont sauvegardées les données au sein de celle-ci, il faut reconstruire la vidéo grâce à toutes les informations recueillies jusqu’à présent. Pour procéder à cette reconstruction, nous devons mettre au point un programme qui sera écrit en langage C. Le choix de ce langage est dû au fait que celui-ci s’applique très bien en bas niveau, lecture-écriture bit à bit, et permet de se promener dans les fichiers binaires de manière très facile grâce aux pointeurs. De plus, étant donné qu’il est particulièrement efficace en bas niveau, l’exécution de celui-ci s’avère très rapide. A présent passons à l’explication du code et surtout aux difficultés encourues durant la partie proprement dite de programmation. La première étape consiste à (( mapper )) un pointeur sur le fichier, ainsi il sera plus facile de naviguer à l’intérieur de celui-ci. Cette manipulation est réalisée grâce à l’instruction suivante : mmap(adress, length, read-write, flags, file descriptor, offset) Cette instruction provient de la librairie standard du C et elle permet de retourner un pointeur sur le fichier passé en paramètres. Maintenant que nous avons un moyen de déplacement dans le fichier, voici la façon dont nous allons procéder pour reconstruire la vidéo. Mais avant de commencer, il est important de noter que certaines informations étudiées dans les sections 4.3 et 4.4 peuvent s’avérer manquantes dans le cas de vidéos effacées. Il faut donc prévoir à l’avance ce cas de figure. C’est pourquoi, il nous faut travailler avec une structure pouvant contenir toutes les informations nécessaires à la reconstruction. Voici la forme de cette structure. 4.5. RECONSTRUCTION DE VIDÉO 31 VideoStructure – char *title – char *ID – long moovAddress – int moovSize – long ftypAddress – int ftypSize – long mdatAddress – int mdatSize Celle-ci contient toutes les informations utiles et nécessaires à la reconstruction d’une vidéo. Le rôle du programme est de remplir ces informations, puis, toujours grâce à ces informations, il sera possible de recréer l’objet multimédia. De plus, grâce à cette structure, il est possible de remplir au fur et à mesure les données et uniquement à la fin, il est possible de contrôler si la vidéo peut être reconstruite ou pas. En effet, trois passes dans le fichier sont nécessaires pour remplir tous les champs. La première passe sert à trouver tous les noms de fichiers et toutes les signatures. De plus, cette manipulation permet de remplir les champs moovAdress et moovSize. En effet, comme expliqué dans la section précédente, la (( moov box )) est précédée par le nom du fichier s’il en existe (dans notre cas c’est le nom de la vidéo qui a été supprimée). C’est uniquement arrivé à la fin du premier passage, qu’il sera possible de savoir exactement combien de vidéos nommées sont contenues dans toute la mémoire et il ne pourra pas y en avoir une de plus. Ce premier passage terminé, trois cas de figures peuvent se présenter. Le premier cas de figure est celui où toutes les informations désirées ont été trouvées. Nous allons donc créer un tableau de vidéos (( namedVideo )) qui contiendra toutes les structures nommées. Voici à quoi ressemble la structure dans ce cas de figure. VideoStructure – title – ID – moovAddress – moovSize Le deuxième cas de figure est celui où les informations sur la (( moov box )) sont manquantes. Cette structure peut être insérée dans le tableau des vidéos nommées, mais malheureusement nous sommes dans un cas où la vidéo ne pourra pas être complètement reconstruite, voir pas du tout. En effet, les informations contenues dans la (( moov box )) sont primordiales étant donné 32 CHAPITRE 4. EXTRACTION DES VIDÉOS qu’elle contient toutes les informations relatives à la vidéo, et sans cette boite la vidéo ne peut être visionnée. Voici à quoi ressemble la structure dans ce cas de figure. VideoStructure – title – ID Le troisième et dernier cas de figure qui peut survenir est celui où les informations sur le nom seraient manquantes. Nous allons donc pour cela créer une nouvelle variable qui sera un tableau de vidéos (( unNamedVideo )) qui contiendra toutes les structures non nommées avec quelques informations. Cette fois-ci, nous sommes dans un cas où la vidéo peut être reconstruite facilement à condition que l’ID soit présent. Si ce n’est pas le cas, la vidéo pourra peut-être être reconstruite, mais seulement à l’aide de différents essais. Voici à quoi ressemble la structure dans ce cas de figure. VideoStructure – ID (il est possible que cette information ne soit pas trouvée) – moovAddress – moovSize Maintenant, il faut procéder à un nouveau passage afin d’essayer de trouver et d’associer, si possible, le contenu de la vidéo avec son entête. Cette opération peut être menée à bien grâce à l’information contenu dans ID de la structure. Pour ce faire, il suffit de reparcourir à nouveau toute la mémoire, mais cette fois-ci en cherchant toutes les boı̂tes (( Mdat )). Une fois trouvé une boı̂te, la signature de celle-ci est comparée à celles en notre possession qui ont été obtenues lors du premier passage. Si la même est trouvée cela signifie qu’une association entre un entête et son contenu a été trouvée. Il suffit donc de compléter les informations relatives à l’adresse et à la taille de la (( moovBox )) dans notre structure. Dans le cas où la signature ne correspond à aucunes en notre possession, il nous faut ajouter un nouvel élément dans le tableau des vidéos (( unNamedVideo )) avec comme informations uniquement l’adresse et la taille de la (( mdatbox )). A ce stade voici la structure que l’on obtient dans le cas d’une vidéo dont nous avons tous les renseignements. 4.5. RECONSTRUCTION DE VIDÉO 33 VideoStructure – title – ID – moovAddress – moovSize – mdatAddress – mdatSize Pour finir, vient le troisième et dernier passage, qui lui permet de rechercher et de remplir les champs manquant, c’est-à-dire les informations sur la boı̂te (( ftyp )). Comme dans les autres cas, il peut s’avérer que la (( signature unique )) ne corresponde à aucune autre que l’on possède. Il faut donc ajouter ce nouvel élément au tableau des vidéos non nommées. Dans le cas contraire, la structure sera complète et nous pourrons passer à l’étape de reconstruction de la vidéo grâce à tous les renseignements obtenus jusqu’à présent. Nous allons commencer par l’analyse du tableau des vidéos nommées. Tout d’abord, nous parcourons la totalité des éléments du tableau, puis nous contrôlons si toutes les valeurs de la structure sont valables. Si effectivement c’est le cas, nous reconstruisons la vidéo en suivant le schéma et les instructions de la norme 3GP vus dans la section 4.3. Si en revanche, une des deux boı̂tes, c’est-à-dire soit la (( fdat )) soit la (( mdat )), n’est pas valable ou serait manquante, nous serions contraints d’essayer de reconstruire la vidéo avec les éléments se trouvant dans le tableau des vidéos qui sont non nommées, cependant à condition que celles-ci soient existantes et valides à leur tour. Ceci permet de faire des essais avec différents éléments dont il n’a pas été possible de trouver ce fameux lien qui permette d’unir l’entête avec les données. La figure 4.6 permet d’illustrer toutes les étapes expliquées jusqu’à présent et ceci de façon schématique. Enfin, nous parcourons les éléments du tableau dont on ne connaı̂t pas le nom du fichier. Cela ne sert à rien d’essayer de faire des combinaisons avec les éléments du tableau nommé, car celles-ci ont déjà été effectuées précédemment. En revanche, il serait utile de parcourir tous les éléments et de contrôler si la boı̂te (( mdat )) n’est pas corrompue. Si c’est le cas, il est intéressant de construire cette boı̂te afin d’essayer de l’examiner avec d’autres outils de (( Forensics )). Il en va de soi que malheureusement cet élément ne pourra être visionné par aucun lecteur multimédia étant donné que l’entête est manquant. Ceci met fin au programme et au processus de reconstruction des vidéos. A l’écran apparaı̂t un résumé concernant le nombre de vidéos nommées ou non nommées trouvées, ainsi que la taille du fichier, etc. 34 CHAPITRE 4. EXTRACTION DES VIDÉOS Fig. 4.6 – Flowchart pour la recherche et la reconstruction d’une vidéo 4.6 Résultats et conclusion Les résultats de cette exécution du programme produisent des vidéos qui se situent dans un répertoire portant l’heure actuelle et la date du jour. Ces fichiers portent si possible le nom réel de la vidéo (si on a pu le trouver) et peuvent être visionnés par un lecteur multimédia ayant les codecs7 adéquats. Après une exécution sur notre dump, nous pouvons constater que les vidéos enregistrées ainsi que celles effacées ou bien même celles qui n’ont pas été sauvegardées ont été récupérées. Ceci est un résultat fort satisfaisant, cependant, les vidéos sont incomplètes... En effet, il s’est avéré que le contenu de la vidéo (la boı̂te (( mdat ))) n’est pas enregistré à la suite. Arrivé à un certain stade, les données sont écrites dans une autre partie de la mémoire comme le montre la figure 4.7. Malheureusement, aucuns liens ni aucunes informations n’ont été trouvés à ce sujet. Aucunes informations se trouvant dans les alentours des boı̂tes étudiées n’ont pu être utiles à la détermination du nombre de saut de 0x1C00 qu’il faut effectuer avant de devoir lire la mémoire dans un autre endroit. Il n’a même pas été possible de savoir à quel 7 COdeur / DECodeur - permet de décoder ou d’encoder un type de vidéo ayant un certain format (dans notre cas 3GP) 4.6. RÉSULTATS ET CONCLUSION 35 Dump mémoire 0x05000 0x1C00 0x06C00 0x1C00 ????????? 0x10000 0x1C00 ????????? 0x11C00 0x1C00 0x13800 0x1C00 0x15400 0x1C00 Taille (4bits) Taille (4bits) Série de FF Fdat 0x17000 Mdat Signature Fig. 4.7 – Architecture d’une vidéo dans un dump endroit se trouve la suite de la vidéo. Après de nombreuses suppositions, celle qui paraı̂t la plus plausible est que le téléphone tient à jour une base de données qui permet de savoir où sont localisés exactement tous les fragments de la vidéo. Mais étant donné le nombre important de modifications dans la mémoire et la compréhension des données modifiées, il s’est avéré impossible de trouver cette soit disant base de données. Cette méthode a donc une limite quant à la validité en tant que preuve, car la vidéo est incomplète et elle ne comporte que le début. Un autre point négatif est l’exécution de ce même programme sur un téléphone dérivé du Motorola V3. En effet, il a été effectué un dump de la mémoire d’un téléphone V3r en suivant les instructions du chapitre 3 et il s’est avéré que les informations ne sont pas stockées de la même manière que sur un V3i. Ceci a donné lieu à l’impossibilité d’extraire correctement toutes les vidéos et celles qui ont été trouvées ne comportaient aucun nom et étaient, elles aussi, incomplètes. Ceci nous amène à la conclusions que malgré tous les efforts fournis pour trouver une méthode aussi générique que possible, chaque téléphone a sa propre méthode d’écriture des vidéos et par conséquent elle ne peut être considérée comme générique en ce qui concerne la recherche de vidéo. De plus, la vidéo est incomplète, ce qui se résume à un échec partiel de la reconstruction d’une vidéo. Mais malgré tous ces points négatifs, il faut souligner qu’il a été prouvé qu’il est possible de retrouver des informations qui ont été supprimées, voir même jamais enregistrées. Si le temps le permettait, il serait intéressant de passer plus de temps sur ce type d’analyse. Cependant 36 CHAPITRE 4. EXTRACTION DES VIDÉOS il faudrait élargir la recherche à d’autres méthodes et à d’autres modèles de téléphone tout en collaborant avec les fabricants, comme il a déjà été évoqué au préalable dans le chapitre 2, et ceci afin de pouvoir mettre au point une (( base de connaissance )) aussi riche et juste que possible. Chapitre 5 Extraction des messages 5.1 Introduction Les messages, plus connus sous l’acronyme de SMS1 ou encore (( texto2 )), permettent de transmettre du texte, de taille relativement réduite, d’un téléphone mobile à un autre ou d’un téléphone mobile à un ordinateur. Le premier SMS écrit depuis un terminal remonte à décembre de 1992 et il aurait été envoyé par un employé de Sema Group. En revanche, le premier message rédigé et envoyé depuis un téléphone mobile par un étudiant en ingénierie de Nokia remonte à 1993. L’invention du minimessage avait pour principal objectif de permettre à l’opérateur d’envoyer des messages aux clients, mais par la suite, le texto a pris une toute autre forme dans notre société et celui-ci est devenu rapidement un moyen de communication très prisé, tout particulièrement parmi les jeunes. Sa popularité est telle que de nos jours, l’envoi de messages par minute dans le monde est équivalent à 50’000 SMS3 . De plus, l’étendue de son utilisation est tellement vaste que chaque jour les utilisateurs particuliers ou les professionnels spécialisés dans le domaine découvrent de nouvelles techniques de communication. Ainsi, les SMS peuvent, par exemple, être utilisés dans les communications de machine à machine, ce qui est le cas des afficheurs à LED4 qui sont contrôlés par SMS ou encore dans des systèmes d’alarmes qui envoient un message lors d’une intrusion, etc. Les SMS sont transportés dans des canaux de signalisation définis par la norme GSM et donc ils n’occupent pas la bande passante réservée aux transports de la voix. La taille du SMS étant limitée à un certain nombre de caractères, son transport ne coûte à l’opérateur que très peu. 1 Short Message Service Marque déposée par l’opérateur SFR 3 Source : Guiness World Records 2007 - Hachette - p. 91 4 LED ou DEL - Diode électroluminescente 2 37 38 CHAPITRE 5. EXTRACTION DES MESSAGES La version améliorée du SMS n’est autre que le MMS qui permet de transmettre des messages beaucoup plus longs et au contenu riche et élaboré tels que le sont les photos, les messages vocaux ou encore les vidéos. Contrairement aux SMS, les MMS utilisent des canaux spécifiques qui doivent donc être prévus par l’opérateur. 5.2 Détails techniques L’envoi et la diffusion de SMS sont basés sur deux protocoles différents qui suivent chacun une norme précise. – La première est basée sur le protocole Short Message Service - Point to Point (SMS-PP) qui est défini par la norme de téléphonie mobile GSM 03.40[ETSI, 2001]. Cette méthode permet l’envoi et la réception de message d’un point à un autre, c’est-à-dire d’un téléphone mobile, ordinateur, etc. – La deuxième est basée sur le protocole Short Message Service - Cell Broadcast (SMS-CB) qui est défini par la norme GSM 03.41[ETSI, 2002]. Cette deuxième méthode permet de diffuser des messages publicitaires, informations publiques, etc, à tous les utilisateurs de mobiles d’une zone géographique déterminée. La taille d’un SMS est relativement réduite, cependant elle varie en fonction de l’encodage utilisé. Ainsi la taille maximum d’un message est de 160 caractères si l’encodage de celui-ci est sur 7 bits (standard), en revanche, si l’encodage est sur 8 bits, alors la taille maximum du SMS sera de 140 caractères, et enfin si l’encodage est sur 16 bits alors le message de disposera que de 70 caractères. Un texte plus long, appelé SMS long ou SMS concaténé, peut être envoyé par le biais de la segmentation que l’appareil mobile fait de manière automatique donnant lieu à plusieurs messages. C’est ensuite à l’appareil qui reçoit de devoir reconstituer le message d’origine en rassemblant tous les segments. En théorie, il serait possible de concaténer jusqu’à 255 messages, mais en pratique, nous sommes limités entre 4 et 8 messages à la suite. Il est important de souligner que l’opérateur facture chaque SMS indépendamment. Pour toutes informations relatives à l’alphabet utilisé ou à l’encodage utilisé, il faut se référer à la norme GSM 03.38 [ETSI, 1998]. L’envoi d’un message est basé sur le mécanisme du (( Store and forward )). Ce mécanisme a pour but d’enregistrer une information à un endroit et par la suite de l’envoyer. En effet, lors de l’envoi d’un sms, il est envoyé à un centre SMS (SMSC) qui essaie de le transmettre au destinataire. Si ce dernier n’est pas joignable, le centre stocke le message pour le retransmettre plus tard et ceci jusqu’à ce que le destinataire soit disponible ou que la période de validité 5.2. DÉTAILS TECHNIQUES 39 du message soit dépassée. Pour que cette mécanique soit possible, il y a deux opérations : – Mobile Originating (MO), pour ceux qui sont envoyés depuis un terminal mobile. – Mobile Terminated (MT), pour les messages envoyés à un terminal mobile, La livraison du message étant basée sur la politique du (( best effort5 )), il n’y a donc aucune garantie qu’un message soit effectivement délivré à son destinataire. L’expéditeur peut demander un accusé de réception de son message, mais les notifications d’échec ou de réussite ne peuvent pas être garanties, car elles aussi sont basées sur la même politique. Pour finir cette section, il est intéressant de savoir qu’il existe plusieurs classes de messages. En effet, quand un SMS est reçu par un téléphone mobile, il est traité de manière différente en fonction de sa classe. Voici une brève description de celles-ci. – Classe 0 Le message est directement affiché à l’utilisateur sur l’écran du mobile à la réception. Un rapport est envoyé ensuite au centre de service. Le message n’est enregistré ni dans la mémoire du téléphone ni dans la carte SIM6 . Il est effacé dès que l’utilisateur a validé la visualisation. – Classe 1 Le message est directement enregistré dans la mémoire du téléphone, en revanche, si cette mémoire est pleine, il est enregistré dans la carte SIM par défaut. – Classe 2 Le message est enregistré sur la carte USIM7 . Un accusé de réception est envoyé au centre de services une fois que le message a bien été transféré sur l’USIM. – Classe 3 Le message est transféré sur un équipement externe connecté au mobile (PDA, PC portable, etc.) 5 Meilleur effort - Aucune garantie de livraison, mais fournis l’effort maximum pour y parvenir 6 Subscriber Identity Module 7 Universal Subscriber Identity Module- gère le 3G 40 CHAPITRE 5. EXTRACTION DES MESSAGES 5.3 Le format PDU Pour permettre l’envoi et la réception de messages, deux méthodes s’offrent à nous, le (( Text Mode )) et le PDU8 mode. Le (( text mode )) est simplement l’encodage d’un flux de bits qui représente uniquement le message. Il est important de savoir que certains téléphones ne sont pas compatibles avec ce mode. Le mode PDU est le moyen d’encoder un message avec toutes les informations relatives à celui-ci. En effet, le PDU ne contient pas seulement le message, mais beaucoup d’autres méta-informations comme par exemple l’envoyeur, l’heure et la date d’envoi, le numéro du centre de messagerie(SMSC), etc. Ces informations peuvent être écrites sous deux formes différentes. Sous la forme hexadécimale octets ou la forme décimale semi-octets. La séquence d’octets du PDU est constituée de trois parties principales : les informations sur le SMSC, les informations sur l’envoyeur, et la date et l’heure. Pour essayer de comprendre davantage ce format, nous allons utiliser une suite de bits comme exemple pratique. Le tableau 5.1 regroupe et donne une explication des différents octets qui sont contenus dans la chaı̂ne. Voici l’exemple : 07917283010010F5040BC87238880900F10000993092516195800AE832 Octet(s) Description 07 Taille des informations SMSC 91 Type d’adresse de l’SMSC*. 72 83 01 00 10 F5 Numéro du Centre de service 04 Premiers octets du SMS-DELIVER 0B Taille des informations de l’émetteur C8 Type d’adresse de l’émetteur*. 72 38 88 09 00 F1 Numéro du l’émetteur 00 TP-PID Protocol identifier 00 TP-DCS Data coding scheme 99 30 92 51 61 95 80 TP-SCTS Time stamp (date et heure) 0A TP-UDL User data length, taille du message E8 32 TP-UD Message ∗91 est le format international de numéro de téléphone Tab. 5.1 – Explication des octets PDU 8 Protocol Description Unit 5.4. RECHERCHE DANS LE DUMP 41 Ceux pour qui l’explication concernant les derniers bits peut paraı̂tre un peu floue, la référence [Pettersson, 2007] apporte davantage d’informations. Il est important de souligner que l’exemple qui précède a été tiré de cette même référence. Pour finir cette section, il est important de dire que le format PDU comporte plusieurs avantages. Premièrement, n’importe quel encodage de caractère peut être implémenté et utilisé pour l’envoi de messages. Deuxièmement, tous les téléphones sont compatibles avec ce mode, et enfin, comme expliqué ci-dessus, ce format ne contient pas uniquement le message, mais énormément d’informations complémentaires qui se révèlent d’une grande importance, comme par exemple l’heure, la date de réception, etc. Il est important de comprendre ce format, car il y a de fortes chances que le message soit stocké dans la mémoire sous cette forme. 5.4 Recherche dans le Dump Maintenant que nous sommes en possession de toutes les informations relatives à la norme SMS, au format du message et à l’encodage de celui-ci, il est maintenant possible de passer à l’étape suivante qui consiste à rechercher les minimessages dans le dump mémoire et à pouvoir en extraire toutes les informations le concernant. Pour commencer, nous aller procéder de la même méthode qui a été vue dans les chapitres précédents, c’est-à-dire que nous allons d’abord essayer de trouver dans la mémoire un message existant et uniquement par la suite, nous allons voir s’il en existe pas des autres qui ne seraient pas visibles par le téléphone mobile. Dans le modèle que nous avons à disposition, il existe un message avec le mot (( SAMSUNG )). Nous allons utiliser ce mot assez (( spécifique )) pour essayer de le retrouver dans le dump. Le simple fait de rechercher cette expression en simple format ascii nous apporte aussi ses fruits. En effet, nous atterrissons directement là où le message est stocké dans la mémoire et celui-ci est écrit en clair dans la zone mémoire, c’est à dire que simplement avec l’éditeur hexadécimal il est possible de lire le message, cependant surviennent quelques exceptions. En effet, un certain nombre de caractères n’apparaissent pas dans l’éditeur. Ce phénomène est dû aux caractères spéciaux tels que, les caractères accentués, les apostrophes, etc. Tout caractère qui n’est pas une simple lettre ou chiffre n’apparaı̂t malheureusement pas dans l’éditeur étant donné son encodage. Mais nous verrons par la suite comment traiter ces exceptions et trouver le moyen de rendre visible ces caractères, non pas dans l’éditeur hexadécimal, mais dans un fichier texte par exemple. 42 CHAPITRE 5. EXTRACTION DES MESSAGES Maintenant que nous avons réussi à trouver un message, il faut découvrir un moyen de pouvoir chercher les autres. Dans le cas précédent, nous avons fait une recherche sur un terme connu et spécifique. Il est impossible de retrouver un autre message avec cette expression. Il faut donc chercher un (( pattern )) qui nous permettra de trouver d’autres messages et pourquoi pas les messages effacés. Afin de découvrir ce pattern, il est nécessaire d’avoir plusieurs échantillons comme pour les vidéos. Nous allons donc effectuer la manipulation de recherche avec d’autres messages et d’autres termes exactement comme expliqué dans le paragraphe précédent. Grâce à tous ces messages, il est donc possible de trouver un éventuel pattern. C’est après quelques heures de recherches et de raisonnements qu’un pattern susceptible d’en être un, a été trouvé. La figure 5.1 illustre la signature trouvée. 00 91 00 00 Fig. 5.1 – Signature d’un SMS Malheureusement, cette signature est beaucoup trop large, ce qui signifie qu’elle ramène des éléments qui ne sont pas des messages. Il faut donc trouver un moyen d’éliminer les (( faux messages )). Pour réussir à supprimer les intrus, il faut au préalable savoir, qu’avant ce pattern se trouve la taille du message complet. En effet, cette découverte est nécessaire pour permettre le filtrage des messages qui sont vides. L’idée de trouver la taille est venue grâce au chapitre précédent (chapitre 4, Les vidéos), dont le but consistait à déterminer la taille de chacune des boı̂tes. Cette démarche s’est avérée positive étant donné qu’il existe aussi une taille pour chaque message. Il est intéressant de souligner que la taille du message est codée 4 bytes. Arrivé à ce stade il serait intéressant de voir le schéma de la figure 5.2 qui représente la structure des SMS décrite jusqu’à maintenant. Il est important de rappeler que tous les SMS étudiés jusqu’à présent sont (( courts )), c’està-dire qu’ils ont une longueur maximum de 160 caractères et ils ne sont pas composés de plusieurs morceaux. Maintenant que nous avons le début du SMS et la taille de celui-ci, nous pouvons constater qu’entre le pattern et le début du texte, il y a une bonne quantité de bits qui sont présents. Tout porte à croire qu’il s’agit du Header du message qui est codé de façon spécifique, comme il a été vu dans la section 5.2. Le but est de réussir à déchiffrer le contenu de cet entête. D’après la fig 5.2 et les constatations évoquées précédemment, l’entête se situe entre le pattern et le contenu du message écrit sous forme ascii. De plus, la chaı̂ne de bits dont est constitué l’entête est relativement long, mais ceci est compréhensible, car nous devrions y retrouver les informations principales suivantes : 5.4. RECHERCHE DANS LE DUMP 43 Taille total du SMS (header inclus) Pattern 00 91 00 00 Header (voir plus bas) SMS sous forme ASCII Fig. 5.2 – Première version d’une structure d’un SMS dans un dump – – – – numéro SMSC numéro expéditeur date de l’envoi heure de l’envoi Après de nombreux essais et de nombreux jours de recherche, les informations les plus importantes ont pu être extraites du header. Pour aboutir dans cette entreprise, les informations vues au préalable dans la section 5.3 - Format PDU - sont primordiales. En effet, les données sont inscrites de manière à suivre l’ordre du tableau 5.1, mais elles ne sont pas toujours représentées de la manière décrite et surtout elles ne sont pas toujours présentes, cette absence est souvent relevée pour les numéros SMSC. De plus, en ce qui concerne la date, elle n’est pas encodée de la même manière qu’expliqué dans la norme PDU, car si nous prenons le cas de l’année, celle-ci fait référence au nombre d’années suivant l’an 1970. Ainsi, par exemple, pour indiquer l’année 2008, nous allons trouver comme information 38, qui correspond à 38 ans après l’an 1970. Afin de mieux comprendre l’entête, il faut se référer à la figure 5.3 Comme le montre cette figure, certains éléments demeurent inconnus, mais une chose importante qu’il faut souligner c’est que la date est précédée d’un autre pattern. Celui-ci va nous être utile afin de nous positionner au commencement de la date. Voici le pattern de la date : Maintenant que nous avons toutes les informations nécessaires, que nous 44 CHAPITRE 5. EXTRACTION DES MESSAGES Signature 00 91 00 00 Inconnu Patterne date ??? 90 00 00 01 01 Numéro SMSC taille num. format Date Année Mois Numéro expediteur numéro taille num. format numéro Heure Jour Heure Minute Inconnu ??? Seconde SMS taille SMS SMS ASCII Fig. 5.3 – Structure d’un header SMS 90 00 00 01 01 Fig. 5.4 – Pattern date savons comment est formée l’entête d’un SMS et surtout de quoi il est composé, nous pouvons passer à l’étape d’extraction de ces éléments de façon automatisée. Les informations et le texte du SMS seront inscrits dans un fichier texte qui pourra être ouvert par un quelconque éditeur de texte. 5.5 Extraction des SMS Pour commencer, il est important de savoir qu’une bonne partie de l’algorithme a été repris du chapitre 4, surtout la façon de parcourir et d’explorer le dump mémoire. En effet, la méthode qui est utilisée est la même que pour celle des vidéos mais le pattern de recherche change, comme nous avons pu le voir à la figure 5.1 de la section 5.4. De la même manière que précédemment nous allons travailler avec une structure de données que nous allons compléter au fur et à mesure que nous rencontrons les informations à insérer. Voici à quoi ressemble la structure : 5.5. EXTRACTION DES SMS 45 smsStructure – long total adress – int total size – long sms adress – int sms size – char *SMSC number – char *phone number – int date year – int date month – int date day – int time houre – int time minute – int time second – unsigned char *sms text Maintenant que nous avons tous les éléments, nous pouvons commencer l’explication de la recherche et de l’extraction. Pour commencer, nous parcourrons le dump et lorsque l’on rencontre le pattern, il nous faut voir si la taille du message est différente de zéro. Si c’est le cas, nous pouvons procéder à l’extraction et au décodage de l’entête du (( texto )). Pour se faire, nous allons commencer par trouver la date grâce au pattern défini par la figure 5.4, mais avec une marge de sécurité, c’est-à-dire que nous allons essayer de rechercher le pattern avec un incrément maximum de la position que l’on ne peut pas dépasser. Si cette sécurité est dépassée, par exemple si la sécurité est de cinq et que la date n’est toujours pas trouvée, alors nous considérons que ce n’est pas un sms et nous quittons la fonction. Si en revanche la date est trouvée, nous nous positionnons au début et nous commençons à remplir les entrées de la structure avec les données concernant l’année, le mois, le jour, l’heure, les minutes et pour finir les secondes. Ces informations sont inscrites sous forme hexadécimale. Il faut donc les convertir en décimales pour les rendre compréhensibles. Pour la conversion, ce sera le langage C qui va s’en charger lors de l’écriture dans le fichier. Il faut juste spécifier que l’on désire une écriture en décimales. Une fois cette opération terminée, nous pouvons passer aux numéros de téléphones. D’abord, vient le numéro SMSC et ensuite le numéro de l’expéditeur. Pour les trouver nous utilisons aussi une marge de sécurité qui fonctionnera de la même manière que précédemment. Il n’existe pas de pattern pour les numéros, mais d’après les normes PDU, il y a le type d’adresse qui permet de savoir si le numéro est international ou pas, c’est à dire s’il est sous la forme +41 76 333 33 33 ou sous la forme 076 333 33 33. C’est donc au moyen de ce paramètre que nous allons pouvoir les retrouver. Comme il 46 CHAPITRE 5. EXTRACTION DES MESSAGES a été expliqué dans la section précédente, les numéros sont précédés de leur longueur. Nous allons donc copier le numéro en faisant attention à son format, car ce dernier est assez particulier, il est sous forme ascii, mais inversé deux à deux. De plus, si la longueur du numéro de téléphone est impaire, le dernier byte sera un F. Pour expliquer au mieux ce format, voici un exemple : 91 33 06 09 10 93 F0 + 33 60 90 01 39 0 Fig. 5.5 – Exemple du format d’un numéro de téléphone Afin de permettre le décodage, la fonction (( decoding number )) a dû être mise au point. Elle a pour but de retourner une chaı̂ne de caractères contenant le numéro correctement écrit y compris avec le format international si cela s’avère nécessaire. Ce numéro est inscrit dans la structure à l’endroit correspondant. Une fois fini, cette opération est répétée pour le numéro de l’expéditeur qui est structuré de la même manière. Maintenant que les informations voulues de l’entête ont été inscrites dans leur emplacement respectif, il faut s’occuper du contenu du message. Pour ce faire nous allons procéder de la manière suivante. Nous connaissons la taille complète du message, y compris l’entête, et nous avons vu qu’au début du contenu du SMS se situe le nombre de caractères que contient ce dernier. Nous pouvons donc faire le calcul se reportant à la figure 5.6 pour savoir si nous nous trouvons au début du message : position depuis le début du sms + byte actuelle = taille total du SMS Fig. 5.6 – Calcul permettant de savoir le début du SMS Si l’égalité de la figure 5.6 est vérifiée, alors nous avons trouvé le début du message. Maintenant, il suffit de retranscrire les valeurs ascii dans la structure en modifiant les caractères spéciaux, car les caractères accentués et non standard comme les (( é, ê, ç, etc. )) ne s’affichent pas correctement. Il faut donc, en suivant la conversion de la figure 5.7, faire la correspondance entre le caractère inscrit dans le message et la table. Ainsi il est possible d’afficher correctement tous les caractères, qu’ils soient accentués ou normaux. La fonction qui permet de retranscrire le message dans la structure de données se charge aussi de la conversion. Arrivé à ce stade, nous sommes en possession de toutes les informations concernant le SMS y compris le texte lui-même. Il suffit de répéter toutes ces opérations afin de trouver tous les messages effacés. Une fois que le dump 5.6. RÉSULTATS ET CONCLUSION 47 Fig. 5.7 – Table ASCII permettant de faire la conversion mémoire a été entièrement parcouru, une fonction va se charger de parcourir toutes les structures et de retranscrire les informations dans un fichier texte. Ainsi tous les messages seront sauvegardés dans un fichier qui pourra être consulté par la suite. Celui-ci va se trouver à la racine du répertoire qui a été créé par la recherche de vidéos dans le chapitre 4. Pour conclure cette section, une synthèse de l’extraction des SMS a été effectuée grâce au (( flowchart )) représenté par la figure 5.8. Il contient les étapes et les choix principaux du programme. 5.6 Résultats et conclusion Le résultat de l’exécution du programme va être sous forme d’un fichier texte qui sera sauvegardé dans le répertoire créé auparavant. Il contient tous les SMS récupérés dans la mémoire avec les informations suivantes : – – – – – – – Numéro du sms Date du SMS Heure du SMS Numéro SMSC Numéro de téléphone Taille du SMS Contenu du SMS 48 CHAPITRE 5. EXTRACTION DES MESSAGES Fig. 5.8 – Flowchart pour la recherche d’un SMS Maintenant, afin de clore ce chapitre, il est important de faire le bilan du nombre d’SMS retrouvés, et heureusement celui-ci est très positif. En effet, nombreux sont les SMS qui ont été retrouvés, malgré le fait que certains d’entre eux soient incomplets. Ce phénomène est dû au fait qu’un nouveau message est venu écraser la fin d’un SMS qui a été supprimé, c’est pourquoi ce dernier n’apparaı̂t plus dans la base de données internes du téléphone. Un problème survient lorsque la nouvelle entrée vient écraser le début d’un SMS au préalable supprimé, car étant donné que nous effectuons la recherche sur un pattern qui se situe au début, si celui-ci venait à manquer, il serait impossible pour le programme de retrouver ce SMS. C’est malheureusement ce qui arrive dans certains cas, mais heureusement sur un très faible pourcentage de messages. Une remarque importante découle de cette étude, c’est qu’il est impossible de supprimer définitivement un SMS uniquement par le biais du téléphone mobile, car le fait d’exécuter l’action de suppression ne fait que retirer l’entrée dans la base de données. Il faut par la suite attendre qu’un autre message vienne écraser la quasi-totalité du message. Le seul moyen d’augmenter les chances de suppression est de s’envoyer énormément de SMS pour remplir un maximum la mémoire. Maintenant un mot en ce qui concerne la méthode de recherche et d’extraction. Comme dans le cas précédent, cette méthode ne peut pas être considérée comme générique. Rien que le fait d’avoir un pattern de recherche 5.6. RÉSULTATS ET CONCLUSION 49 pour les SMS et un autre pour les dates constitue une contrainte importante. En effet, ce programme a été exécuté sur le dump d’un Motorola V3R et il n’a donné lieu à aucuns résultats satisfaisants, aucun SMS n’a été trouvé. Il a fallu trouver de nouveaux patterns afin de pouvoir récupérer les messages. En revanche, la méthode de recherche et d’extraction synthétisée par la figure ?? fonctionne très bien, à condition de mettre les patterns suivants : pattern SMS : 01 45 00 00 pattern date : 00 FF 00 00 00 Fig. 5.9 – Pattern de recherche pour Motorola V3R Avec ces deux patterns, la recherche fonctionne sur un V3R et sur un V3I, mais il est impossible de savoir si ceux-ci fonctionneraient sur un autre modèle. C’est pour cela qu’il serait intéressant d’effectuer une étude ou une recherche sur les patterns de différents modèles, voir de différentes marques. A la suite de ce test, une légère modification a été apportée au code lui permettant ainsi d’accepter les dump des modèles V3I et V3R. Enfin un dernier mot sur les messages récupérés, il a malheureusement été impossible de savoir si le message récupéré a été envoyé ou reçu. Mais étant donné que l’on connaı̂t exactement la date et l’heure il serait envisageable de contacter l’opérateur et de demander la facture détaillée, ainsi il serait possible de savoir si le message a été reçu ou envoyé. 50 CHAPITRE 5. EXTRACTION DES MESSAGES Chapitre 6 Extraction des contacts 6.1 Introduction Les contacts ou plus communément appelé répertoire téléphonique sont simplement des noms avec des numéros de téléphones qui sont stockés dans le mobile. Cette fonctionnalité est présente de base sur les téléphones de différentes marques. En effet, depuis l’apparition du premier téléphone mobile, cette fonction de mémorisation des numéros téléphoniques existait déjà. Certes, la quantité de numéros que l’on pouvait insérer dans la base de données du téléphone était limitée par rapport à l’espace disponible sur les téléphones actuels, ainsi que les données complémentaires pour un contact ne pouvaient être introduites à l’époque. Les données complémentaires sont relatives à l’adresse, la date de naissance, l’adresse e-mail, etc. Ces données varient en fonction du modèle de téléphone. Le fait de pouvoir récupérer une partie ou la totalité des contacts ainsi que les données complémentaires est une étape obligatoire dans notre processus de récupération de données. En effet, ce sont des informations très précieuses qui permettent par la suite de pouvoir (( tisser )) un réseau de connaissances avec la personne ayant eu le téléphone mobile. 6.2 Détails techniques Cette section comporte beaucoup moins de théorie et de thermes techniques que les sections étudiées précédemment. En effet, aucune norme ni aucune méthode de stockage de données ne sont définies. En revanche, dans ce chapitre, nous allons nous heurter à un tout autre type de difficultés qui est celui de la modification ou de la suppression partielle de données. Dans les chapitres étudiés précédemment, cette problématique n’existait pas étant donné la nature non modifiable de l’objet. En effet, un message reçu peut être transféré ou supprimé, mais il ne peut aucunement être modifié. Il en 51 52 CHAPITRE 6. EXTRACTION DES CONTACTS est de même pour les vidéos, elles peuvent être envoyées par Bluetooth ou supprimées, mais son contenu ne peut être altéré par le téléphone mobile. En revanche, dans notre cas, un contact peut se voir supprimé un numéro de téléphone tout en existant encore et en ayant toujours une adresse, ou tout simplement que les données concernant le numéro ou l’adresse changent. Dans un premier temps, nous allons faire abstraction de la modification de données d’un contact et nous concentrer uniquement sur la recherche et l’extraction de données. Par la suite, quand les premières données auront été extraites, nous pourrons analyser la gestion de ce phénomène. Cependant, nous pouvons déjà émettre quelques hypothèses. La première hypothèse que nous pouvons faire est celle dont la nouvelle donnée vient remplacer l’ancienne et dans ce cas il n’y aurait aucune trace de celle précédente, ce qui signifie que l’on pourrait récupérer uniquement la nouvelle valeur. La deuxième hypothèse est que l’enregistrement soit écrit à nouveau avec les bonnes valeurs, ce qui signifie qu’il y aurait deux fois le même contact mais avec des données différentes. Dans cette situation, il serait possible de récupérer toutes les informations, mais le problème qui risque de surgir est celui de savoir laquelle des données est la bonne. Voici pour ce qui en est des principales hypothèses. Maintenant il reste à rechercher les valeurs dans le dump mémoire et à les extraire. 6.3 Recherche dans le Dump Pour essayer de rechercher les contacts dans le dump mémoire, nous allons procéder de la même manière que pour les vidéos et les SMS vu dans les chapitres précédents. Pour ce faire, nous allons créer un contact avec toutes les informations et un numéro facilement identifiable. Voici les informations du nouveau contact : Information Contact – Nom : Test – Prénom : Test Prénom – Numéro : 1234567 – Adresse : Rue Ville – Complément : 1227 Etat Pays Ensuite, nous faisons le dump et nous effectuons une recherche ASCII avec le numéro (( 1234567 )) qui est le numéro du contact qui a été créer, ainsi celle-ci nous permettrait de nous positionner à l’endroit souhaité comme il s’est avéré dans les cas précédents. Malheureusement, la recherche n’aboutit 6.3. RECHERCHE DANS LE DUMP 53 qu’à des résultats négatifs. Il est donc impossible de rechercher un contact directement par le numéro de téléphone. C’est pourquoi, nous allons procéder à une nouvelle recherche, mais cette fois avec comme information de base, le nom du contact qui est (( Test )) tout en respectant bien la casse. Cette fois-ci, la recherche est positive et elle nous positionne directement au bon endroit. Nous pouvons constater que le numéro de téléphone se trouve sous la même forme que les numéros qu’il a fallu décoder dans la section SMS (voir section 5.4 et section 5.5 du chapitre 5). Ceci explique pourquoi la recherche par numéros de téléphone n’a pu aboutir à aucuns résultats positifs. En procédant à la même marche à suivre que lors des exemples précédents, nous devons impérativement trouver une signature nous permettant de pouvoir rechercher tous les autres contacts de manière aussi générale que possible. Le pattern qui a été trouvé est représenté par la figure 6.1 Signature : 02 FE Fig. 6.1 – Pattern pour un contact Cependant, cette signature est beaucoup trop large, ce qui signifie qu’elle ramène des éléments qui ne sont pas des contacts. Il faut donc essayer de trouver un moyen de filtrer les objets qui ne sont pas valides. Malheureusement, après de nombreuses heures passées à analyser la structure, aucunes informations ne peuvent nous être utiles pour connaı̂tre avec certitude si le pattern trouvé est celui d’un contact ou pas. Il faut donc procéder différemment pour filtrer les bons résultats. La solution retenue sera expliqué plus en détails dans la section 6.4 Maintenant, il nous faut étudier les éléments d’un contact, c’est-à-dire les informations le concernant, comme par exemple le nom, le prénom, l’adresse, etc. L’analyse qui en découle est que chaque élément d’un contact est séparé, soit par la séquence 0xFF, soit par une série de 0xFF, à l’exception du nom et du prénom. En effet, ils sont considérés comme une seule et même entité. Ce qui au premier abord ne pose aucun problème. L’adresse aussi ne forme qu’un seul bloc d’informations qui contient la rue, le numéro, la ville et enfin le pays. En ce qui concerne ces informations, elles sont stockées sous forme ASCII et chaque lettre est séparée par un caractère vide. Ce format rappelle beaucoup la façon dont est sauvegardé le nom d’une vidéo dans la mémoire (voir chapitre 4). Enfin, le contact se termine par la séquence suivante : Fin contact : FF FE Pour conclure cette section, nous allons résumer grâce à la figure 6.2 les différentes parties d’un contact et l’enchaı̂nement qu’elles ont dans la 54 CHAPITRE 6. EXTRACTION DES CONTACTS Pattern 02 FE Nom Prénom 0xFF Numéro téléphone 0xFF FF FF FF FF Adresse complète 0xFF ???????? Pattern fin FF FE Fig. 6.2 – Structure d’une entrée dans le répertoire mémoire. Il est important de souligner qu’il n’a pas été possible de trouver la signification pour toutes les différentes parties. Celles-ci sont notées par des (( ? )). En effet, il est possible que ces champs puissent être complétés par le téléphone pour ajouter une photo à un contact ou une sonnerie particulière, mais si tel était le cas, ces informations ne seraient pas indispensables pour nous. 6.4 Extraction des contacts Pour commencer, il est important de savoir qu’une grande partie de l’algorithme a été repris du chapitre 4 concernant les vidéos et le chapitre 5 qui traite les SMS. En effet, la méthode permettant de parcourir et d’explorer le dump mémoire est identique au deux précédents à l’exception du pattern de recherche, qui lui est différent, comme nous avons pu le voir à la figure 6.1 de la section 6.3. Pour garder une homogénéité dans le travail, nous procédons de la même manière que précédemment et pour ce faire, nous utilisons une structure de données que nous allons compléter au fur et à mesure que nous rencontrerons les informations à insérer. Voici à quoi ressemble la structure : 6.4. EXTRACTION DES CONTACTS 55 contactStructure – long memory adress – char *name – char *adress – char *phone number Maintenant que nous avons tous les éléments, nous pouvons commencer l’explication de la recherche et de l’extraction. Nous allons commencer par parcourir le dump à la recherche du pattern (( contact )). Une fois celui-ci rencontré, il nous faut savoir si nous sommes en présence d’un contact valide ou pas. Comme il a été dit dans la section 6.3, il n’a pas été possible de trouver une taille ou un tout autre élément capable d’indiquer que nous sommes en présence d’un contact valide. Il faut donc utiliser une autre méthode, qui consiste à chercher le pattern de séparation de l’élément dans une limite donnée. En résumé, une fois trouvé la signature d’un contact, il nous faut chercher le pattern (( 0xFF )) avec une limite que l’on se définit. Si ce pattern est trouvé, il y a de fortes chances que le contact soit valide, sinon le contact est forcément corrompu et dans ce cas, la recherche se poursuit. Dans le cas d’un contact valide, on commence par renseigner le champ concernant l’adresse mémoire. Ensuite, on décode le nom et le prénom, qui pour rappel, sont dans un même et unique bloc. Il est important de souligner que cette fois-ci le nom ne subit aucuns traitements, c’est-à-dire que les espaces séparant chaque lettre ne sont pas éliminés. Ce choix a été fait suite à la difficulté rencontrée lors de la distinction entre un espace voulu et un espace imposé par le téléphone mobile. En effet, entre le nom et le prénom il existe un espace ou qu’il peut y avoir des blancs dans un nom à particules et ainsi de suite. C’est pour cette raison que le bloc est copié tel-quel dans la structure. Quant au numéro de téléphone. Celui-ci a le même encodage que les SMS à l’exception de la taille. En effet, cette fois, la taille ne désigne plus le nombre de chiffres que comporte le numéro de téléphone, mais il indique le nombre de blocs de deux bytes dont il est composé. Grâce à la figure 6.3 il et possible de voir la différence entre la taille exprimée par un SMS et celle exprimée par un contact. Exemple numéro d’un message : 07 91 14 22 37 33 33 F3 Exemple numéro d’un contact : 0B 91 33 16 79 88 30 F7 Fig. 6.3 – Différence entre la taille SMS et contact Etant donné que la différence entre l’encodage d’un numéro SMS et celui 56 CHAPITRE 6. EXTRACTION DES CONTACTS Fig. 6.4 – Flowchart pour la recherche d’un contact d’un contact est minime, il est donc possible d’utiliser la fonction qui permet de décoder les numéros SMS pour décoder les numéros des contacts en lui appliquant certaines modifications. Une fois celui-ci lisible, il suffit de le mémoriser dans notre structure. Enfin vient l’adresse qui est un unique bloc. En effet, la rue, le code postal, l’état et le pays sont réunis dans un seul bloc séparé par des espaces et se terminant par le séparateur 0xFF. Ces informations sont sauvegardées sous forme ASCII de la même manière que le nom et le prénom. Pour les raisons évoquées précédemment, nous n’allons faire aucuns traitements sur la chaı̂ne de caractères contenant les informations. Il est donc possible, pour lire l’adresse, d’utiliser la même fonction que celle qui a été utilisée précédemment pour le nom et le prénom. Une fois cette opération terminée, il faut sauvegarder les informations dans notre structure. Cette étape met un terme à la structure et ainsi nous pouvons rechercher un autre contact en commençant l’itération depuis le début. Pour résumer les étapes du processus d’extraction des entrées dans le répertoire téléphonique, la figure 6.4 nous montre les étapes importantes de façon schématique. 6.5. RÉSULTATS ET CONCLUSION 6.5 57 Résultats et conclusion Le résultat de l’exécution du programme va être présenté sous forme d’un fichier texte qui sera sauvegardé dans le répertoire créé auparavant. Il contient toutes les entrées récupérées dans la mémoire avec les informations suivantes (il se peut que l’adresse ne soit pas valable) – Adresse mémoire du contact trouvé – Nom et prénom du contact – Numéro de téléphone du contact – Adresse du contact Afin de clore ce chapitre, il est important de faire un bilan du nombre de contacts retrouvés. Celui-ci est satisfaisant, car de nombreux contacts ont pu être récupérés, malgré le fait que certains d’entre eux soient incomplets ou corrompus. En ce qui concerne les entrées incomplètes, celles-ci sont très rares, en effet, sur une moyenne de 140 contacts trouvés, seulement trois ou quatre ne portent par de numéro. L’adresse est très souvent absente, mais ceci est dû au fait qu’elle n’a jamais été entrée. En revanche, la présence du nombre d’entrées corrompues, par corrompu on sous-entend que ce n’est pas un contact, s’élève à une dizaine. Mais ceci n’est pas un gros problème étant donné qu’elle ne contient aucunes informations utiles, le seul inconvénient de ce phénomène consiste en la possibilité de fausser le nombre de contacts retrouvé. De plus nous avons évoqué une problématique au début de ce chapitre qui est celle de la modification des entrées. Arrivé à ce stade, il est possible de répondre à cette problématique en disant que les données sont doublées. En effet, quand on modifie une valeur, l’appareil écrit à nouveau toutes les informations dans une autre partie de la mémoire en ayant pour conséquence de doubler l’entrée. Il reste à savoir laquelle des deux valeurs est la plus récente. Un point important qui découle de cette étude et qui rejoint la même remarque faite lors des messages, c’est qu’il est impossible de supprimer définitivement un contact uniquement par le biais du téléphone mobile, car le fait d’exécuter l’action de suppression ne fait que retirer l’entrée dans la base de données. Il faut par la suite attendre qu’une autre donnée (message, vidéo, contact) vienne écraser la totalité ou la quasi-totalité du contenu pour que la donnée soit totalement supprimée. En ce qui concerne la méthode de recherche et d’extraction de données, comme nous avons pu le voir dans les cas précédents, cette méthode ne peut pas être considérée comme générique. La contrainte d’avoir un pattern spécifique est beaucoup trop restrictif et rend la méthode beaucoup trop spécialisée. En effet, ce programme a été exécuté sur le dump d’un 58 CHAPITRE 6. EXTRACTION DES CONTACTS pattern contact V3R : 00 FE Fig. 6.5 – Pattern de recherche pour Motorola V3R Motorola V3R et il a retrouvé uniquement deux ou trois contacts, ce qui signifie que ce pattern ne doit pas être le principal dans le V3R. Il a donc été nécessaire de trouver un autre pattern pour le V3R. Une fois celui-ci trouvé, il a tout simplement fallu l’intégrer à notre code et les contacts ont ainsi pu être récupérés sans aucunes difficultés. En effet, la méthode synthétisée par la figure 6.4 fonctionne toujours à condition de mettre les patterns de la figure 6.5. Avec ces deux patterns, la recherche fonctionne sur un V3R et sur un V3I, mais il est impossible de savoir si ceux-ci fonctionneraient sur un autre modèle. C’est pour cela qu’il serait intéressant d’effectuer une étude ou une recherche sur les patterns de différents modèles, voir de différentes marques. Chapitre 7 Logiciel développé 7.1 Explication Ce chapitre à pour but de faire un récapitulatif des fonctions qu’intègre le logiciel développé ainsi que d’expliquer les fonctionnalités qui n’ont pu être vues dans les chapitres ou sections précédentes. Ces fonctionnalités supplémentaires ont été rajoutées suite à divers besoins ou exigences qui sont apparues en deuxième lieu. 7.2 SourceForge Il a été décidé de mettre à disposition les sources du projet sur la plateforme d’hébergement de projets mondialement connue SourceForge. Le choix de mettre ce projet sur ce site est dû au fait que les logiciels libres sont en train de connaı̂tre une grande expansion. De plus, le fait que d’autres développeurs puissent enrichir et améliorer le projet est un atout considérable pour l’évolution de ce logiciel. L’adresse du projet est la suivante : https://sourceforge.net/projects/motomoviefinder 7.3 Fonctionnalité de base Les fonctions nommées de bases sont celles qui ont été étudiées tout au long de ce travail, c’est-à-dire : – Recherche et reconstruction des vidéos – Recherche et reconstruction des SMS – Recherche et reconstruction des contacts Elles s’exécutent les unes après les autres de façon complètement automatique ainsi l’utilisateur n’a pas besoin d’interagir. Une fois ces opérations terminées, 59 60 CHAPITRE 7. LOGICIEL DÉVELOPPÉ viennent les opérations complémentaires qui sont énumérées et expliquées dans les paragraphes suivants. 7.4 Inversion de fichier Cette fonction a été rajoutée à la suite de l’analyse des vidéos. En effet, après mûre réflexion, il a été constaté que les boı̂tes (( mdat ))sont inversées par bloc de 0x1C00, comme nous avons pu le voir dans la section 4.3 du chapitre 4. De ce fait, aucuns programmes permettant la recherche de segments vidéo ne peuvent fonctionner sur ces données. Il a donc été décidé de mettre au point une fonction qui est capable d’inverser tout le dump mémoire de la valeur 0x1C00. Ceci permet donc de (( retourner )) le fichier et ainsi il peut être traité par un programme comme (( Defraser1 )) qui permet de trouver des parties de séquences vidéos qui auraient échappé à notre programme. Cette fonction, qui se nomme (( swap file )) est automatiquement exécutée par le programme sans que l’utilisateur n’ait à faire une quelconque manipulation. Pendant la phase de développement et afin de vérifier son bon fonctionnement, il suffit d’effectuer deux fois l’inversion sur le même fichier et de contrôler que la signature MD5 soit inchangée. Ceci permet d’affirmer que l’image mémoire ne subit aucunes autres modifications. En ce qui concerne le fichier de sortie, celui-ci porte le même nom que le fichier de base, mais il comporte un suffixe (( swap )) qui indiquer qu’il a été modifié. 7.5 Exportation CSV Cette fonctionnalité a dû être implémentée suite aux exigences nécessaires à l’intégration des résultats dans un rapport. En effet, les résultats sont stockés sous forme de fichier texte et peuvent être difficilement intégrés dans un tableur tel qu’Excel de Microsoft. Il est donc intéressant de pouvoir avoir un fichier qui soit compatible avec la plupart des tableurs. Ce type d’extension est le format CSV 2 qui représente les données sous forme de valeurs séparées par des virgules. Il est donc possible, grâce à ces fichiers, de pouvoir faire des statistiques ou toutes autres formes d’analyses. C’est donc pour les raisons évoquées ci-dessus qu’il a été décidé d’intégrer cette fonctionnalité qui ne nécessite aucunes manipulations supplémentaires de la part de l’utilisateur, car les données sont automatiquement exportées en CSV et celles-ci vont être créées dans le même répertoire que les données sous forme de texte. 1 2 Outil d’analyse forensique qui permet de détecter des fichiers multimédia Comma-separated values 7.6. CAPTURES D’ÉCRAN 7.6 61 Captures d’écran Voici quelques capture d’écran des différents résultats que le logiciel est capable de fournir. Fig. 7.1 – Capture du programme une fois l’exécution terminée Fig. 7.2 – Capture du fichier de sortie contenant le nom des vidéos 62 CHAPITRE 7. LOGICIEL DÉVELOPPÉ Fig. 7.3 – Capture du fichier de sortie contenant les SMS Fig. 7.4 – Capture du fichier de sortie contenant les contacts Chapitre 8 Conclusion La recherche de données sur un téléphone mobile est à ce stade très satisfaisante en ce qui concerne ce modèle. En effet, nous avons pu constater, tout au long de notre analyse, qu’il est possible d’extraire des données effacées ou simplement enregistrées dans une mémoire tampon et ceci avec les différents supports que nous offre le téléphone mobile : les SMS, les vidéos et les répertoires téléphoniques, car les informations ne sont jamais vraiment supprimées de l’appareil. La fonction (( effacer )) dans le mobile ne supprime que l’entrée dans la base de données et non le contenu lui-même donnant ainsi l’illusion au possesseur du téléphone d’avoir effacer les données. La recherche et l’extraction de données nous a permis de mettre en place une méthode de travail efficace, concluante et applicable à chacun des supports du mobile et aux différentes marques de téléphone, simplifiant ainsi l’analyse. La méthode est la suivante : 1. Effectuer un dump mémoire 2. Insérer une donnée personnalisée (un contact avec un nom particulier, s’envoyer un SMS avec du texte à répétition, etc.) avec des informations très spécifiques pour permettre de les retrouver facilement 3. Effectuer un nouveau dump mémoire 4. Rechercher les données dans le dump. Si les informations sont vite retrouvées, analyser les données afin d’essayer de trouver des patterns, etc. Si en revanche il est difficile de trouver la donnée, comme dans le cas des vidéos, alors il faut procéder à l’étape suivante 5. Utiliser un programme permettant de comparer deux fichiers hexadécimaux et rechercher les différences entre le dump effectué avant d’insérer les données personnalisées et celui effectué après. Ceci permet d’identifier les zones qui ont été impactées par l’insertion de la donnée. Cependant, comme nous avons pu le constater lors de ce projet, la méthode de travail ne suffit pas à déchiffrer les données pour lesquelles il n’existe pas de 63 64 CHAPITRE 8. CONCLUSION méthode systématique et fiable. Seul l’analyse, la déduction, les hypothèses, les essais, etc. peuvent nous amener à la lecture finale des données. De plus, notre recherche s’est portée exclusivement sur la marque de téléphone mobile Motorola V3i et par conséquent nos résultats satisfaisants sont propres à ce modèle. En effet, chacun des modèles de téléphone a un pattern spécifique pour un certain type de données et le simple fait de changer de modèle de mobile modifie le pattern de celui-ci nous empêchant ainsi de retrouver les données. Toutefois, si l’on retrouve le pattern correspondant au modèle étudié, il suffit de l’appliquer au code comme nous avons pu le constater lors de l’analyse du V3R. Malheureusement, n’ayant à disposition aucun système de fichier sur lequel se baser et ne possédant aucune documentation technique sur la manière dont sont stockées les données, la recherche de pattern a semblé être le moyen le plus judicieux et le plus facile à mettre en oeuvre pour qu’il soit facilement extensible à d’autres modèles. De plus, une autre restriction entre en jeu, celle du fabricant. En effet, le fait de changer de fabriquant pourrait entraı̂ner le non-fonctionnement global du logiciel, car rien ne prouve que les données soient (( encodées )) de la même manière. Le travail s’étant déroulé exclusivement sur une marque de téléphone et sur un modèle bien précis, ceci nous permet de relever un point très important. En effet, l’analyse approfondie de la structure des données ainsi que l’interprétation de celles-ci dans la mémoire ont pris une grande partie du temps mis à disposition. Ceci est d’une part dû au fait qu’il n’existe, à l’heure actuelle, aucuns outils efficaces permettant d’aider à l’analyse d’un dump mémoire. D’autre part, la documentation mise à disposition par les fabricants touche uniquement l’aspect (( programmation )) de logiciels, mais nullement l’aspect fonctionnel du téléphone ou de la représentation interne des données. De plus, il est essentiel de rappeler qu’avant de pouvoir analyser un dump mémoire, il est indispensable d’être en possession de celui-ci et son contenu doit être identique à son référentiel de départ, qui est dans notre cas la mémoire du téléphone mobile. Cette étape qui est fortement compliquée s’avère être primordiale et dans les cas les plus extrêmes, elle peut ne pas s’effectuer, comme nous l’a si bien démontré l’utilisation du port JTAG. Dans notre situation, il s’est avéré impossible d’effectuer une copie par le biais de ce système, c’est pourquoi il a été essentiel de trouver une alternative au problème afin de pouvoir tout de même obtenir le dump mémoire. Pour terminer, la recherche et l’extraction de données sur le Motorola V3i sont très satisfaisantes et positives, car elles sont un premier pas vers la recherche scientifique et policière, mais toutefois elles restent encore insuffisantes. En effet, l’analyse de données de mobile est encore fortement obstruée par les fabricants eux-mêmes qui refusent de divulguer des données 65 relatives à leurs produits, sans doute pour des raisons de concurrence du marché, comme nous avons pu le constater avec l’utilisation du port JTAG. Cependant l’enjeu scientifique et sociale devrait primer sur l’économie, c’est pourquoi il est essentiel de continuer à persévérer dans cette direction et à exiger une plus grande collaboration entre les fabricants et la police ce qui amènerait, qui sait peut-être, à diminuer toute forme de violence, aujourd’hui et plus que jamais, fortement présente dans notre société. 66 CHAPITRE 8. CONCLUSION Chapitre 9 Remerciement Je tiens à remercier tous ceux qui m’ont permis de mener à bien ce travail à savoir Mr. David Billard, professeur au CUI et à l’école de police, qui m’a offert l’opportunité de collaborer avec le milieu de la forensique qui m’a toujours beaucoup attiré et enfin Mr. Beuchat, résponsable du Laboratoire de Systèmes Numériques de l’école d’ingénieur de Genève qui m’a dédié une grande partie de son temps à m’expliquer la norme et le protocole JTAG. 67 68 CHAPITRE 9. REMERCIEMENT Bibliographie [Breeuwsa, 2006] Breeuwsa, I. M. (2006). Forensic imaging of embedded systems using jtag (bundary-scan). Digital investigation, 3 :32–42. [Breeuwsa et al., 2007] Breeuwsa, M., de Jongh, M., Klaver, C., van des Knijff, R., and Roeloffs, M. (2007). Forensic data recovery from flash memory. Small scale digital device forensics journal, 1 :4–6. [ETSI, 2002] ETSI (Août 2002). [online] gsm 03.41 - technical realization of short message service cell broadcast (smscb). Digital cellular telecommunications system (Phase 2+), http://pda.etsi.org/pda/AQuery.asp?qSEARCH_STRING=03.41. [ETSI, 2001] ETSI (Décembre 2001). [online] gsm 03.40 - technical realization of short message service (sms) point-to-point (pp). Digital cellular telecommunications system (Phase 2+), http://pda.etsi.org/pda/AQuery.asp?qSEARCH_STRING=03.40. [ETSI, 1998] ETSI (Juillet 1998). [online] gsm 03.38 - alphabets and language-specific information. Digital cellular telecommunications system (Phase 2+), http://pda.etsi.org/pda/AQuery.asp?qSEARCH_STRING=03.38. [Lecomte et al., 2000] Lecomte, D., Cohen, D., de Bellefonds, P., and Barda, J. (2000). Les normes et les standards du multimédia. Dunod. [McCarthy, 2005] McCarthy, P. (2005). Forensic Analysis of a Mobile Phones. PhD thesis, University of South Australia. [Openwince, 2007] Openwince (2007). [online] fitting a jtag interface to an ipaq 3600. openwince, http://openwince.sourceforge.net/jtag/iPAQ-3600/. [Peacock, 2005] Peacock, W. (Samedi, 9 Avril, 2005). [online] nokia f-bus protocol. Embedtronics, http://www.embedtronics.com/nokia/fbus.html. [Pereira and Ebrahimi, 2002] Pereira, F. and Ebrahimi, T. (2002). MPEG-4 Book. IMSC Press Multimedia Series/Andrew Tescher. 69 The 70 BIBLIOGRAPHIE [Pettersson, 2007] Pettersson, L. (2007). [online] sms and the pdu format. GSM, http://www.dreamfabric.com/sms/. [pinouts.ru, 2007] pinouts.ru (2007). [online] handbook of hardware pinouts, cables schemes and connectors layouts. Pinouts, http://pinouts.ru/CellularPhones-Nokia/nokia_3310_pinout. shtml. [Willassen, 2005] Willassen, S. Y. (2005). Forensic analysis of mobile phone internal memory, volume 194/2005. Springer Boston.