Aller au contenu principal

Technology, security analysis

Investigation iOS et récupération de données SQLite : analyse approfondie et comparatif

Aidan FitzpatrickPublié le 1 juin 2018Mis à jour le 17 février 2020
Sur cette page
Cover image for: Investigation iOS et récupération de données SQLite : analyse approfondie et comparatif

Nous employons de nombreuses techniques pour aider les gens à récupérer leurs données avec nos produits, et une bonne partie de l’ingéniosité que nous avons développée au cours de la dernière décennie se cache sous la surface. Aujourd’hui, nous allons plonger dans l’une des approches que nous utilisons pour récupérer des messages supprimés : la récupération forensique de données SQLite.

Au fait, comment les iPhone stockent-ils les données ?

En bref, de nombreuses apps stockent leurs données dans des bases de données, et la plupart utilisent le format SQLite. SQLite est un petit format de base de données sans serveur, bien pensé, qui convient parfaitement aux besoins d’Apple et des éditeurs d’apps. Comme SQLite fonctionne sans serveur de base de données distinct, il diffère des autres bases de données sur plusieurs points. En particulier, pour que l’accès reste rapide, il ne peut pas se maintenir régulièrement pendant son utilisation. Les utilisateurs ne veulent pas qu’une app ralentisse pendant que la base de données effectue une maintenance de routine, comme le nettoyage des index, par exemple.

Ces opérations de nettoyage ou d’optimisation sont possibles avec SQLite, mais elles sont généralement exécutées rarement. Pour les utilisateurs, c’est le bon équilibre : votre iPhone reste raisonnablement rapide et vos données restent robustes. Et, si le besoin s’en fait sentir, vous aurez de meilleures chances que la moyenne de récupérer vos données iOS supprimées, justement parce que cette maintenance est peu fréquente.

Sans entrer dans les détails techniques, le fonctionnement est assez simple. Imaginez ces bases de données comme de grands classeurs :

  • Quand il faut y ajouter des informations, vous ajoutez un dossier avec une belle étiquette qui explique ce qu’il contient, et c’est ainsi que fonctionne votre téléphone.
  • Mais quand vous supprimez des données, au lieu de retirer le dossier du classeur, le téléphone se contente d’arracher l’étiquette. Les anciennes données ne sont donc pas supprimées : elles sont simplement laissées sans étiquette (ou « orphelines », comme nous pourrions dire techniquement). Ainsi, lorsque vous supprimez des données, votre téléphone n’a pas à passer par le processus relativement lent qui consiste à libérer de la place dans le classeur. Il se dit simplement « bon, oublions ça », et passe à autre chose.
  • Lorsqu’il faut ajouter d’autres données, s’il y a de la place, votre téléphone ajoute de nouveaux dossiers. S’il n’y en a plus, il cherche s’il reste de ces dossiers sans étiquette, et s’il en trouve, il jette les parties dont il a besoin pour faire de la place.

Il faut en retenir qu’il est rapide de supprimer des données sur votre téléphone, et assez rapide d’en ajouter, à condition qu’il y ait de la place. Et, de façon contre-intuitive, c’est l’ajout de données plus récentes qui entraîne réellement la disparition des informations plus anciennes.

Récupérer des informations supprimées de SQLite sur iOS

Supposons que vous utilisiez votre téléphone depuis quelques mois. Les bases de données qu’il contient ressemblent aux classeurs décrits plus haut. Elles renferment un tas de dossiers, et là où vous avez supprimé des données, ces dossiers sont toujours là, avec deux réserves : ils peuvent avoir été partiellement ou totalement écrasés, et ils n’ont pas d’étiquette.

La technique de récupération est alors à peu près celle que l’on imagine : il s’agit de retrouver ces dossiers orphelins, complets ou non, de déterminer où ils s’insèrent et s’il reste assez de données pour qu’ils aient du sens. Comme on peut s’y attendre, tout cela est assez délicat, et diverses autres subtilités techniques peuvent compliquer les choses. En particulier, les bases de données de plus de quelques mégaoctets, et celles qui contiennent des données binaires, peuvent rendre le processus bien plus difficile.

Cela dit, il n’est pas très difficile de récupérer une partie des données, ce qui explique le grand nombre d’outils du marché qui prétendent y parvenir. En général, on peut répartir ces outils en trois catégories :

  • Les bons. Ils emploient de nombreuses techniques différentes, conçues et testées sur des milliers d’exemples de suppression ou de corruption.
  • Les mauvais. Ils ne récupèrent que le contenu restant qui est parfaitement formé et comporte plusieurs indices sur son emplacement d’origine.
  • Les brutes. Ils recherchent du contenu orphelin et signalent tout vieux rebut qui pourrait vaguement convenir au contexte, à condition de plisser les yeux. « NSMutableArray » : serait-ce le nom de votre fiche de contact manquante ? Hmmm.

Annulation de suppression et récupération SQLite sur iOS en conditions réelles

Maintenant que nous avons un peu parlé du fonctionnement, voyons son efficacité en conditions réelles. Après tout, nous voulons permettre aux utilisateurs ordinaires de récupérer leurs données sans être des experts. Y parvenons-nous ? Nous allons comparer les quatre principaux outils de récupération SQLite à iPhone Backup Extractor. Au moment de la rédaction, les dernières versions de ces outils sont les suivantes :

NomVersion et date de sortiePlateformesPrix
Reincubate iPhone Backup Extractor7.6.1.2201, mai ’18Windows et macOS$34.95
SQLite Doctor de SQLabs1.3.0, août ’13Windows et macOS$49
Sqlite Database Recovery de SysTools1.2, date de sortie non indiquéeWindows uniquement$149
Stellar Phoenic Repair For Sqlite de Stellar Data Recovery 1.0, date de sortie non indiquéeWindows uniquement$599
Forensic Explorer (FEX) de GetData4.3.5.7364, mai ’18Windows uniquement$1,695
Sqlite Forensics Explorer d’Acquire Forensics2.0, date de sortie non indiquéeWindows uniquement$149

Pour mettre en place ce test, nous allons utiliser une belle grande base de données, remplie de données réelles. Il s’agit ici d’une base « Messages » de 169 Mo, extraite d’un iPhone sous iOS 11. Examinons-la : les commandes suivantes affichent sa taille et le résultat d’une requête qui compte le nombre de messages qu’elle contient.

$ ls -l sms.db
-rw------- 1 afitzpatrick 177565696 Oct  2  2017 sms.db

$ sqlite3 sms.db
SQLite version 3.19.3 2017-06-27 16:48:08
Enter ".help" for usage hints.
sqlite> SELECT COUNT(*) FROM message;
220261

Il y a donc plus de 220 000 messages. Ce sont ceux qui n’ont pas été supprimés. Mais combien de messages supprimés les outils de récupération peuvent-ils retrouver ?

Récupération de données SQLite sur iOS : les résultats

Nous avons exécuté tous les outils ci-dessus sur le même fichier et noté les résultats dans le tableau ci-dessous. Nous aurions adoré utiliser un Mac, mais comme tous les outils ne prennent pas en charge macOS, nous avons utilisé un PC avec 16 Go de RAM sous Windows 10 Pro (version 1803, build 17134.48).

ReincubateAcquire ForensicsSQLabsSysToolsStellar Data RecoveryGetData
Nombre récupéré34256 (mais surtout des déchets)00 (Après une longue analyse, il a trouvé 220 261 enregistrements, soit exactement le nombre d’enregistrements valides déjà présents !)0 (À chaque exécution, il a compté jusqu’à 37 messages supprimés, mais a planté avec l’erreur 0x40000015 avant la fin du processus. Il n’a pas été possible d’en exporter ni d’en enregistrer.)0 (We reached out multiple times to purchase a license, but never heard back.)
« Déchets » récupérés ?Aucun ; tous semblent être de véritables messages supprimés. Les emojis, dates, heures et numéros d’expéditeur / de destinataire sont tous récupérés.La plupart des éléments récupérés sont des déchetsNous avons dû saisir manuellement les valeurs maximales de ROWID à plusieurs reprises pour essayer différents paramètres. Aucun message récupéré, à aucun moment.N’a trouvé que des messages déjà existants.A planté à chaque fois, impossible de conclure.Wasn’t possible to get it running.
Coût effectif par message récupéré (dans cet exemple)$0.10$2.66>$49>$149>$599>$1,695

OK. C’était donc une petite surprise, car nous nous attendions à ce qu’ils récupèrent tous au moins quelques données. Il s’avère que notre modeste outil est en tête du marché de la récupération de données SQLite, alors qu’il n’est pas un outil dédié à cela. (Si vous vous le demandiez, c’est aussi pourquoi nous concédons notre technologie sous licence à d’autres entreprises. C’est un domaine difficile.)

Récupération de données SQLite selon les versions d’iOS

À chaque nouvelle version d’iOS, Apple peut modifier la façon dont le système d’exploitation gère les bases de données SQLite. Cela inclut des optimisations de la fréquence des opérations de nettoyage et de maintenance, et de leurs déclencheurs.

À mesure que les appareils gagnent en puissance, ces opérations peuvent être utilisées plus librement, car leur impact sur l’expérience utilisateur diminue. Ainsi, à chaque nouvelle génération, une base de données SQLite a de fortes chances d’être nettoyée plus souvent, ce qui la rend plus rapide pour les opérations courantes. Cela rejoint l’objectif d’Apple de renforcer la protection et la confidentialité des données des utilisateurs, puisqu’aucune donnée indésirable ne reste sur l’appareil. Mais cela a pour contrepartie de rendre impossible la récupération de données par la méthode SQLite.

Dans iOS 11, nous avons commencé à observer une hausse de l’activité de nettoyage des bases de données pour les SMS et les iMessages. La récupération reste possible, et plus probable pour les messages récents supprimés par la suite, mais elle n’est pas garantie.

Dans iOS 12, la fréquence de nettoyage de la base de données des SMS et des iMessages a fortement augmenté. Comme cette version a été présentée comme très axée sur la maintenance et l’amélioration de la vitesse, ce changement est logique, car il se traduira probablement par des performances plus fluides pour les opérations les plus courantes.

Que dois-je faire pour en profiter lors de la récupération de données iOS ?

C’est peut-être le meilleur : cette technologie est intégrée à Reincubate iPhone Backup Extractor, et ce depuis les débuts. Lorsque vous utilisez l’app, elle applique cette technologie pour afficher l’aperçu ou exporter vos messages et plusieurs autres types de données. Selon les données que vous consultez et la façon dont vous les consultez, l’app indique quels éléments ont été récupérés après suppression et lesquels ne l’ont pas été. Tout est inclus.


À propos de l'auteur

Aidan Fitzpatrick

Fondateur, PDG

Aidan a fondé Reincubate en 2008, après avoir créé le premier outil de récupération de données iOS au monde. Depuis, il a fait de l’entreprise l’un des meilleurs éditeurs de logiciels indépendants au monde, travaillant avec des entreprises telles qu’AMD, Qualcomm et HP pour développer des fonctionnalités de machine learning pertinentes pour les logiciels vidéo, à l’image de l’écosystème d’applications Camo. Sous la direction d’Aidan, Reincubate a remporté à quatre reprises la plus haute distinction économique du Royaume-Uni, s’est vu attribuer une place dans le classement 100 Tech du Sunday Times, et a été reconnu par l’industrie avec des nominations aux Apple Design Award et à l’App Store. Ses travaux et ses techniques sont souvent cités dans des articles universitaires consacrés à l’investigation numérique mobile, et il a été invité à intervenir lors d’événements organisés par des entreprises comme Google, Microsoft et Snap.


Commentaires (1)

jon 22 mai 2019

I have a question. When apple release new ios , do they provide any information about schema change? or we can get them from ios backup. Thanks in advance.

Réponse de l'assistance Reincubate 22 mai 2019

Hey Jon. Apple don't, and it's not just them changing things: any time a third-party app gets updates things can change. We have a set of tools and a team testing these things every day.


Contenu associé


Articles populaires

Logo du King's Award for Enterprise

King's Award for Enterprise : Reincubate a remporté quatre fois la plus haute distinction officielle des entreprises du Royaume-Uni, la plus récente en reconnaissance de la croissance exceptionnelle de l'entreprise au cours des trois dernières années.

Nos relations avec les utilisateurs et les partenaires sont au cœur de nos valeurs et des produits que nous créons. Consultez nos avis pour découvrir ce qu’ils disent de nous.

Certifié ISO 27001 par le Centre for Assessment, accrédité par l'UKAS

© 2008-2026 Reincubate Ltd. Tous droits réservés. Immatriculée en Angleterre et au pays de Galles sous le n° 5189175, TVA GB151788978. Camo®, Streamlight® et Reincubate® sont des marques déposées. Brevets en instance.

Aide