Ich wurde von einer Reihe unglücklicher iPhone-Benutzer gebeten, ihnen bei der Wiederherstellung von Daten aus ihren iTunes-Backups zu helfen. Dies ist einfach, wenn sie unverschlüsselt sind, aber nicht, wenn sie verschlüsselt sind, unabhängig davon, ob das Kennwort bekannt ist oder nicht.
Daher versuche ich, das Verschlüsselungsschema herauszufinden, das bei der Verschlüsselung für mddata- und mdinfo-Dateien verwendet wird. Ich habe keine Probleme, diese Dateien ansonsten zu lesen, und habe dafür einige robuste C # -Bibliotheken erstellt. (Wenn Sie helfen können, ist es mir egal, welche Sprache Sie verwenden. Es ist das Prinzip, nach dem ich hier bin!)
Im Apple "iPhone OS Enterprise-Bereitstellungshandbuch" heißt es: "Gerätesicherungen können in verschlüsseltem Format gespeichert werden, indem Sie im Bereich" Geräteübersicht "von iTunes die Option" iPhone-Sicherung verschlüsseln "auswählen. Dateien werden mit AES128 mit einem 256-Bit-Schlüssel verschlüsselt sicher im iPhone-Schlüsselbund gespeichert. "
Das ist ein ziemlich guter Hinweis, und hier gibt es einige gute Informationen zur Interoperabilität von Stackoverflow auf dem iPhone AES / Rijndael, die darauf hindeuten, dass eine Schlüsselgröße von 128 und der CBC-Modus verwendet werden können.
Neben jeder anderen Verschleierung sind ein Schlüssel und ein Initialisierungsvektor (IV) / Salz erforderlich.
Man könnte annehmen, dass der Schlüssel eine Manipulation des "Sicherungskennworts" ist, das Benutzer von iTunes zur Eingabe aufgefordert und an " AppleMobileBackup.exe " übergeben werden, aufgefüllt auf eine von CBC vorgegebene Weise. Angesichts des Verweises auf den iPhone-Schlüsselbund frage ich mich jedoch, ob das "Sicherungskennwort" möglicherweise nicht als Kennwort für ein X509-Zertifikat oder einen symmetrischen privaten Schlüssel verwendet wird und ob das Zertifikat oder der private Schlüssel selbst möglicherweise als Schlüssel verwendet wird. ( AES und der iTunes-Verschlüsselungs- / Entschlüsselungsprozess sind symmetrisch.)
Die IV ist eine andere Sache, und es könnte ein paar Dinge sein. Vielleicht ist es einer der Schlüssel, die in iTunes oder in den Geräten selbst fest codiert sind .
Obwohl der obige Kommentar von Apple darauf hinweist, dass der Schlüssel am Schlüsselbund des Geräts vorhanden ist, denke ich, dass dies nicht so wichtig ist. Man kann ein verschlüsseltes Backup auf einem anderen Gerät wiederherstellen , was darauf hindeutet, dass alle für die Entschlüsselung relevanten Informationen in der Backup- und iTunes-Konfiguration vorhanden sind und dass alles, was sich ausschließlich auf dem Gerät befindet, in diesem Zusammenhang irrelevant und ersetzbar ist. Wo könnte also der Schlüssel sein?
Ich habe unten Pfade von einem Windows-Computer aufgelistet, aber es ist sehr viel, welches Betriebssystem wir verwenden.
Die Datei "\ appdata \ Roaming \ Apple Computer \ iTunes \ itunesprefs.xml" enthält eine PList mit einem Diktateintrag "Schlüsselbund". Die Datei "\ programdata \ apple \ Lockdown \ 09037027da8f4bdefdea97d706703ca034c88bab.plist" enthält eine PList mit "DeviceCertificate", "HostCertificate" und "RootCertificate", die alle als gültige X509-Zertifikate erscheinen. Dieselbe Datei scheint auch asymmetrische Schlüssel "RootPrivateKey" und "HostPrivateKey" zu enthalten (meine Lektüre legt nahe, dass diese möglicherweise PKCS # 7-umhüllt sind). Außerdem gibt es in jeder Sicherung "AuthSignature" - und "AuthData" -Werte in der Manifest.plist-Datei, obwohl diese scheinbar gedreht werden, wenn jede Datei inkrementell gesichert wird, was darauf hindeutet, dass sie als Schlüssel nicht so nützlich sind, es sei denn, etwas wirklich ziemlich involviert wird getan.
Es gibt viele irreführende Dinge, die darauf hindeuten, dass das Abrufen von Daten aus verschlüsselten Backups einfach ist. Es ist nicht und meines Wissens wurde es nicht getan. Das Umgehen oder Deaktivieren der Sicherungsverschlüsselung ist eine ganz andere Sache und nicht das, was ich tun möchte.
Hier geht es nicht darum, das iPhone oder ähnliches auseinander zu hacken. Alles, was ich hier suche, ist ein Mittel, um Daten (Fotos, Kontakte usw.) aus verschlüsselten iTunes-Backups zu extrahieren, da ich unverschlüsselte Backups kann. Ich habe alle möglichen Permutationen mit den Informationen versucht, die ich oben notiert habe, bin aber nicht weitergekommen. Ich würde mich über Gedanken oder Techniken freuen, die ich möglicherweise übersehen habe.
quelle
Antworten:
Die Sicherheitsforscher Jean-Baptiste Bédrune und Jean Sigwald stellten dies auf der Hack-in-the-Box Amsterdam 2011 vor .
Seitdem hat Apple eine veröffentlicht iOS Security Whitepaper mit weiteren Details zu Schlüsseln und Algorithmen veröffentlicht, und Charlie Miller et al. haben das iOS-Hacker-Handbuch veröffentlicht , das einige der gleichen Themen auf eine Art und Weise abdeckt. Als iOS 10 herauskam, gab es Änderungen am Sicherungsformat, die Apple zunächst nicht veröffentlichte, aber verschiedene Leute haben die Formatänderungen rückentwickelt .
Verschlüsselte Backups sind großartig
Das Tolle an verschlüsselten iPhone-Backups ist, dass sie Dinge wie WiFi-Passwörter enthalten, die nicht in normalen unverschlüsselten Backups enthalten sind. Wie im Whitepaper zur iOS-Sicherheit erläutert , gelten verschlüsselte Sicherungen als „sicherer“. Apple hält es daher für in Ordnung, vertraulichere Informationen in sie aufzunehmen.
Eine wichtige Warnung: Wenn Sie das Backup Ihres iOS-Geräts entschlüsseln, wird die Verschlüsselung entfernt. Um Ihre Privatsphäre und Sicherheit zu schützen, sollten Sie diese Skripts nur auf einem Computer mit vollständiger Festplattenverschlüsselung ausführen. Während es einem Sicherheitsexperten möglich ist, Software zu schreiben, die Schlüssel im Speicher schützt, z. B. durch Verwendung von Funktionen wie
VirtualLock()
undSecureZeroMemory()
unter anderem, speichern diese Python-Skripte Ihre Verschlüsselungsschlüssel und Kennwörter in Zeichenfolgen, die von Python im Müll gesammelt werden. Dies bedeutet, dass Ihre geheimen Schlüssel und Passwörter eine Weile im RAM verbleiben, von wo aus sie in Ihre Auslagerungsdatei und auf Ihre Festplatte gelangen, wo ein Gegner sie wiederherstellen kann. Dies macht den Punkt einer verschlüsselten Sicherung völlig zunichte.So entschlüsseln Sie Backups: theoretisch
Das iOS-Sicherheits-Whitepaper erläutert die grundlegenden Konzepte von Schlüsseln pro Datei, Schutzklassen, Schutzklassenschlüsseln und Schlüsseltaschen besser als ich. Wenn Sie mit diesen noch nicht vertraut sind, nehmen Sie sich ein paar Minuten Zeit, um die entsprechenden Teile zu lesen.
Jetzt wissen Sie, dass jede Datei in iOS mit einem eigenen zufälligen Verschlüsselungsschlüssel pro Datei verschlüsselt ist, zu einer Schutzklasse gehört und die Verschlüsselungsschlüssel pro Datei in den Metadaten des Dateisystems gespeichert sind, die in den Schutzklassenschlüssel eingeschlossen sind.
So entschlüsseln Sie:
Dekodieren Sie den im
BackupKeyBag
Eintrag von gespeicherten SchlüsselbeutelManifest.plist
. Eine allgemeine Übersicht über diese Struktur finden Sie im Whitepaper . Das iPhone-Wiki beschreibt das Binärformat: ein 4-Byte-Zeichenfolgentypfeld, ein 4-Byte-Big-Endian-Längenfeld und dann den Wert selbst.Die wichtigen Werte sind die PBKDF2-
ITER
Werte undSALT
die doppelte Schutzsalz- undDPSL
IterationszahlDPIC
sowie für jeden SchutzCLS
derWPKY
umschlossene Schlüssel.Verwenden Sie das Sicherungskennwort, um einen 32-Byte-Schlüssel mit dem richtigen PBKDF2-Salt und der richtigen Anzahl von Iterationen abzuleiten. Verwenden Sie zuerst eine SHA256-Runde mit
DPSL
undDPIC
dann eine SHA1-Runde mitITER
undSALT
.Wickeln Sie jeden verpackten Schlüssel gemäß RFC 3394 aus .
Entschlüsseln der Manifest - Datenbank , indem Sie die 4-Byte - Schutzklasse und längere Schlüssel aus dem Zug
ManifestKey
inManifest.plist
und Abwickeln es. Sie haben jetzt eine SQLite-Datenbank mit allen Dateimetadaten.Rufen Sie für jede interessierende Datei den klassenverschlüsselten Verschlüsselungsschlüssel pro Datei und den Schutzklassencode ab, indem Sie in der
Files.file
Datenbankspalte nach einer Binärliste suchen, dieEncryptionKey
und enthältProtectionClass
Einträge. Entfernen Sie das anfängliche Tag mit einer Länge von vier Byte vonEncryptionKey
vor der Verwendung mit einer .Leiten Sie dann den endgültigen Entschlüsselungsschlüssel ab, indem Sie ihn mit dem Klassenschlüssel entpacken, der mit dem Sicherungskennwort entpackt wurde. Entschlüsseln Sie dann die Datei mit AES im CBC-Modus mit einer Null IV.
So entschlüsseln Sie Backups: in der Praxis
Zuerst benötigen Sie einige Bibliotheksabhängigkeiten. Wenn Sie mit einem von Homebrew installierten Python 2.7 oder 3.7 auf einem Mac arbeiten, können Sie die Abhängigkeiten installieren mit:
In Form eines ausführbaren Quellcodes können Sie eine einzelne Voreinstellungsdatei aus einem verschlüsselten iPhone-Backup entschlüsseln:
Welches druckt dann diese Ausgabe:
Extra Gutschrift
Der von Bédrune und Sigwald veröffentlichte iPhone-Datenschutzcode kann den Schlüsselbund aus einem Backup entschlüsseln , einschließlich lustiger Dinge wie gespeichertem WLAN und Website-Passwörtern:
Dieser Code funktioniert nicht mehr bei Backups von Telefonen mit dem neuesten iOS, aber es gibt einige Golang- Ports , die auf dem neuesten Stand gehalten wurden und den Zugriff auf den Schlüsselbund ermöglichen .
quelle
pip install --user pycrypto
Danke!Entschuldigung, aber es könnte noch komplizierter sein, pbkdf2 oder sogar eine Variation davon. Hören Sie sich die WWDC 2010-Sitzung Nr. 209 an, in der hauptsächlich die Sicherheitsmaßnahmen in iOS 4 behandelt werden, aber auch kurz die separate Verschlüsselung von Sicherungen und deren Beziehung erwähnt wird.
Sie können ziemlich sicher sein, dass Sie das Passwort ohne Kenntnis des Passworts auch mit brutaler Gewalt nicht entschlüsseln können.
Nehmen wir einfach an, Sie möchten versuchen, Personen, die das Kennwort kennen, den Zugriff auf die Daten ihrer Sicherungen zu ermöglichen.
Ich fürchte, es führt kein Weg daran vorbei, den tatsächlichen Code in iTunes zu betrachten, um herauszufinden, welche Algen verwendet werden.
In den Newton-Tagen musste ich Daten aus einem Programm entschlüsseln und konnte seine Entschlüsselungsfunktion direkt aufrufen (natürlich mit Kenntnis des Passworts), ohne den Algorithmus überhaupt verstehen zu müssen. Das ist leider nicht mehr so einfach.
Ich bin sicher, es gibt qualifizierte Leute, die diesen iTunes-Code zurückentwickeln könnten - Sie müssen sie nur interessieren.
Theoretisch sollten Apples Algen so gestaltet sein, dass die Daten für jeden Angreifer, der die genaue Verschlüsselungsmethode kennt, immer noch sicher sind (dh mit Brute-Force-Methoden praktisch unzerbrechlich sind). Und in der WWDC-Sitzung 209 gingen sie ziemlich tief in Details darüber ein, was sie tun, um dies zu erreichen. Vielleicht können Sie Antworten direkt vom Apple-Sicherheitsteam erhalten, wenn Sie ihnen Ihre guten Absichten mitteilen. Schließlich sollten auch sie wissen, dass Sicherheit durch Verschleierung nicht wirklich effizient ist. Probieren Sie die Sicherheits-Mailingliste aus. Selbst wenn sie nicht antworten, antwortet möglicherweise jemand anderes, der still auf der Liste steht, mit etwas Hilfe.
Viel Glück!
quelle
Ich habe es noch nicht ausprobiert, aber Elcomsoft hat ein Produkt veröffentlicht, von dem behauptet wird, dass es Backups für forensische Zwecke entschlüsseln kann. Vielleicht nicht so cool wie selbst eine Lösung zu entwickeln, aber es könnte schneller sein.
http://www.elcomsoft.com/eppb.html
quelle
Sie sollten eine Kopie von Erica Sadun des mdhelper Befehlszeilenprogramm (greifen OS X binäre & Quelle ). Es unterstützt das Auflisten und Extrahieren des Inhalts von iPhone / iPod Touch-Sicherungen, einschließlich Adressbuch- und SMS-Datenbanken sowie anderer Anwendungsmetadaten und -einstellungen.
quelle