Comment décrypter une sauvegarde iPhone iTunes Apple iTunes cryptée?
Author: Maximus63 —
Short summary: Les chercheurs en sécurité Jean-Baptiste Bédrune et Jean Sigwald présenté comment pour faire ça à Hack-in-the-Box Amsterdam 2011. Depuis lors, Apple a publié un livre blanc sur la sécurité iOS avec plus de détails sur les clés et les algorithmes, et Charlie Miller et al. avoir publié le manuel iOS Hacker’s Handbook, qui couvre certaines […]
Quick overview
- Site
- iPom
- Canonical URL
- https://ipom.fr/2019/06/12/comment-decrypter-une-sauvegarde-iphone-itunes-apple-itunes-cryptee/
- LLM HTML version
- https://ipom.fr/2019/06/12/comment-decrypter-une-sauvegarde-iphone-itunes-apple-itunes-cryptee/llm
- LLM JSON version
- https://ipom.fr/2019/06/12/comment-decrypter-une-sauvegarde-iphone-itunes-apple-itunes-cryptee/llm.json
- Manifest
- https://ipom.fr/llm-endpoints-manifest.json
- Estimated reading time
- 6 minutes (359 seconds)
- Word count
- 1194
Key points
- Les chercheurs en sécurité Jean-Baptiste Bédrune et Jean Sigwald présenté comment pour faire ça à Hack-in-the-Box Amsterdam 2011.
- Depuis lors, Apple a publié un livre blanc sur la sécurité iOS avec plus de détails sur les clés et les algorithmes, et Charlie Miller et al.
- avoir publié le manuel iOS Hacker’s Handbook, qui couvre certaines des mêmes sol dans une mode-comment.
- Quand iOS 10 est sorti pour la première fois, des changements se sont produits au format de sauvegarde qu'Apple n'a pas annoncé au début, mais divers les gens ont inversé les modifications de format.
Primary visual
Structured content
Les chercheurs en sécurité Jean-Baptiste Bédrune et Jean Sigwald présenté comment pour faire ça à Hack-in-the-Box Amsterdam 2011. Depuis lors, Apple a publié un livre blanc sur la sécurité iOS avec plus de détails sur les clés et les algorithmes, et Charlie Miller et al. avoir publié le manuel iOS Hacker’s Handbook, qui couvre certaines des mêmes sol dans une mode-comment. Quand iOS 10 est sorti pour la première fois, des changements se sont produits au format de sauvegarde qu'Apple n'a pas annoncé au début, mais divers les gens ont inversé les modifications de format.
Contenus ToggleLes sauvegardes cryptées sont excellentesComment décrypter les sauvegardes: en théorieComment décrypter des sauvegardes: en pratiqueCrédit supplémentaire Les sauvegardes cryptées sont excellentes L’atout majeur des sauvegardes iPhone cryptées est qu’elles contiennent des éléments comme les mots de passe WiFi qui ne figurent pas dans les sauvegardes régulières non chiffrées. Comme discuté dans le livre blanc sur la sécurité iOS, les sauvegardes cryptées sont considérés comme plus "sûrs", donc Apple considère qu'il est correct d'inclure plus informations sensibles en eux. Un avertissement important: évidemment, déchiffrer la sauvegarde de votre appareil iOS supprime son cryptage. Pour protéger votre vie privée et votre sécurité, vous devriez N'exécutez ces scripts que sur une machine dotée d'un chiffrement intégral du disque. Pendant que est possible pour un expert en sécurité d'écrire un logiciel qui protège les clés mémoire, par exemple en utilisant des fonctions comme VirtualLock () et SecureZeroMemory () parmi beaucoup d'autres choses, ces Les scripts Python stockent vos clés de cryptage et vos mots de passe dans des chaînes pour être ramassé par Python. Cela signifie vos clés secrètes et mots de passe vivra dans la RAM pendant un certain temps, d'où ils fuiront dans votre échange fichier et sur votre disque, où un adversaire peut les récupérer. Ce défait complètement le point d'avoir une sauvegarde cryptée. Comment décrypter les sauvegardes: en théorie Le livre blanc sur la sécurité iOS explique les concepts fondamentaux des clés par fichier, des classes de protection, des clés de classe de protection et des keybags mieux que je peux. Si vous ne les connaissez pas déjà, prenez quelques instants. minutes pour lire les parties pertinentes. Maintenant, vous savez que chaque fichier sur iOS est chiffré avec sa propre mémoire aléatoire clé de chiffrement par fichier, appartient à une classe de protection, et la clé par fichier Les clés de cryptage sont stockées dans les métadonnées du système de fichiers, clé de classe de protection. Décrypter:
Décoder le sac à clé stocké dans le BackupKeyBag entrée de Manifest.plist. Un aperçu de haut niveau de cette structure est donné dans le livre blanc. Le wiki de l'iPhone décrit le format binaire: un champ de type chaîne de 4 octets, un champ de 4 octets champ de longueur big-endian, puis la valeur elle-même. Les valeurs importantes sont le PBKDF2 ITERations et SEL, le double sel de protection DPSL et le nombre d'itérations DPIC, puis pour chacun protection CLS, la WPKY clé enveloppée.
En utilisant le mot de passe de sauvegarde, dérivez une clé de 32 octets en utilisant le PBKDF2 approprié. sel et nombre d'itérations. Commencez par utiliser une cartouche SHA256 avec DPSL et DPIC, puis un tour SHA1 avec ITER et SEL. Déballer chaque clé emballée selon RFC 3394.
Décryptez la base de données de manifestes en extrayant la classe de protection de 4 octets et la clé plus longue ManifestKey dans Manifest.plistet le déballer. Vous avez maintenant un Base de données SQLite avec toutes les métadonnées du fichier.
Pour chaque fichier d’intérêt, obtenez le chiffrement par fichier chiffré par classe. code de classe de clé et de protection en regardant dans le Files.file base de données colonne pour un plist binaire contenant Clé de cryptage et Classe de protection les entrées. Dénudez la balise initiale de longueur sur quatre octets de Clé de cryptage avant d'utiliser. Ensuite, dérivez la clé de déchiffrement finale en la dépliant avec la classe. clé qui a été déballée avec le mot de passe de sauvegarde. Puis déchiffrer le fichier utiliser AES en mode CBC avec un IV nul.
Comment décrypter des sauvegardes: en pratique Vous aurez d’abord besoin de dépendances de la bibliothèque. Si vous utilisez un Mac utilisant une version 2.7 ou 3.7 de Python installée chez Homebrew, vous pouvez installer les dépendances avec: CFLAGS = "- I $ (infusion - préfixe) / opt / openssl / include" LDFLAGS = "- L $ (infusion - préfixe) / opt / openssl / lib" pip installer biplist fastpbkdf2 pycrypto
Sous forme de code source exécutable, voici comment décrypter un seul Fichier de préférences d’une sauvegarde cryptée de l’iPhone: #! / usr / bin / env python3.7 # codage: UTF-8
depuis __future__ import print_function de __future__ division d'importation
importer argparse import getpass importer os.path importer pprint importer au hasard importation importer sqlite3 chaîne d'importation structure d'importation fichier temporaire d'importation de binascii import hexlify
importer Crypto.Cipher.AES # https://www.dlitz.net/software/pycrypto/ importer biplist importer fastpbkdf2 depuis import biplist InvalidPlistException
def main (): ## Options d'analyse analyseur = argparse.ArgumentParser () parser.add_argument ('- répertoire-sauvegarde', dest = 'répertoire_sauvegarde', default = 'testdata / encrypted') parser.add_argument ('- password-pipe', dest = 'password_pipe', help = "" " Empêche le mot de passe d'être visible dans la liste de processus du système. Utilisation typique: --password-pipe = <(echo -n foo) "" ") parser.add_argument ('- no-anonymize-output', dest = 'anonymize', action = 'store_false') args = parser.parse_args () ANONYMIZE_OUTPUT global ANONYMIZE_OUTPUT = args.anonymize si ANONYMIZE_OUTPUT: print ('Avertissement: toutes les clés de sortie sont fausses pour protéger votre vie privée')
manifeste_fichier = os.path.join (args.backup_directory, 'Manifest.plist') avec open (manifest_file, 'rb') comme infile: manifest_plist = biplist.readPlist (infile) keybag = Keybag (manifest_plist['BackupKeyBag']) # les clés réelles sont inconnues, mais les clés enveloppées sont connues keybag.printClassKeys ()
si args.password_pipe: password = readpipe (args.password_pipe) si password.endswith (b ' n'): mot de passe = mot de passe[:-1] autre: password = getpass.getpass ('Mot de passe de sauvegarde:') .encode ('utf-8')
## Déverrouiller le sac avec mot de passe sinon keybag.unlockWithPasscode (mot de passe): raise Exception ('Impossible de déverrouiller le sac à clé; mot de passe incorrect?') # maintenant les clés sont connues aussi keybag.printClassKeys ()
## Déchiffrer la base de données de métadonnées manifest_key = manifest_plist['ManifestKey'][4:] avec open (os.path.join (args.backup_directory, 'Manifest.db'), 'rb') en tant que db: encrypted_db = db.read ()
manifest_class = struct.unpack ('
Topics and keywords
Themes: Apple
License & attribution
License: CC BY-ND 4.0.
Attribution required: yes.
Manifest: https://ipom.fr/llm-endpoints-manifest.json
LLM Endpoints plugin version 1.1.2.