Analyse der Verschlüsselung von App-Daten unter iOS 7 / Privacy Leackage in iOS 7

1. Vorwort

Apple hat mit der Veröffentlichung von iOS in der Version 7 neben der Einführung von neuen Convenience-Features und einer kompletten Neugestaltung der Benutzeroberfläche auch zahlreiche Erweiterungen und Verbesserungen für den Einsatz in Enterprise-Umgebungen geschaffen. Neben der Eingrenzung von einzelnen Applikationen, welche zum Öffnen von bestimmten Datentypen genutzt werden dürfen und der Einführung von dedizierten VPN-Tunneln für einzelne Applikationen, hat Apple nun auch die Verschlüsselung auf Dateisystemebene mit ihrer Data-Protection für alle Thirdparty-Applikationen eingeführt. Bisher musste der App-Entwickler dafür Sorge tragen, dass die Daten seiner App verschlüsselt werden und welche der von Apple bereitgestellten Schutzklassen er für die sensiblen Daten seiner App einsetzen möchte. Die Schutzklassen unterscheiden sich jeweils darin, ab welchem Zeitpunkt die geschützten Daten entschlüsselt zur Verfügung stehen und in der Frage, ob diese Daten bei einem Gerätebackup mit gesichert werden sollen. Seit iOS 7 werden nun die Dateien in den Ordnern Documents und Library aller Thirdparty-Apps mit der Schutzklasse NSFileProtectionCompleteUntilFirstUserAuthentication abgesichert, welche dafür sorgt, dass die Dateien mit einem Schlüssel verschlüsselt sind, in den der Passcode des Anwenders eingeht. Erst nach erstmaliger Eingabe dieses Passcodes nach einem Booten stehen die Daten entschlüsselt auf Dateisystem zur Verfügung. Wir haben diesen neuen Sachverhalt zum Anlass genommen, um uns genauer anzuschauen, ob dieses Versprechen ohne Einschränkungen für alle Thirdparty-Apps gilt und ob Apple diesen Mechanismus auch für die bei iOS mitgelieferten Apps einsetzt. Als Untersuchungsgegenstand haben wir die Instant-Messaging Apps von Thirdparty-Anbietern sowie Apple's eigene Apps ausgewählt.

1.1. Untersuchungsaufbau

Als Testaufbau wurde ein iPhone 4 mit iOS 7.0.4 und einer ActiveSync-Anbindung an einen Exchange-Server verwendetet. Für den Zugriff auf das Dateisystem wurde der „limera1n“ Exploit verwendet, mit dem eine beliebige und nicht signierte RAM-Disk geladen werden kann. Durch das Verwenden einer RAM-Disk lässt es sich am einfachsten feststellen, welche Daten durch eine Verschlüsselung auf Dateisystemebene geschützt sind, da hier absichtlich der Geräte-Unlock nicht durchgeführt wird und folglich die benötigten Schlüssel zur Freischaltung der Dateisystemverschlüsselung nicht generiert werden können.

1.2. Überprüfung

Nach erfolgreichem Laden der RAM-Disk haben wird uns mittels SSH auf das iPhone 4 verbunden, um sowohl die Daten der Apple eigenen Apps als auch die Daten von Thirdparty-Messenger-Apps genauer untersuchen zu können.

1.2.1. Apple eigene Apps

1.2.1.1. SMS/iMessage

Zu Beginn haben wir die SMS/iMessage SQLite-Datenbank (SMS.db) vom Gerät kopiert und stellten fest, dass diese unverschlüsselt ist. Wie die folgende Abbildung zeigt ist ein Zugriff auf die Nachrichten möglich: Speicherort: /private/var/mobile/Library/SMS/SMS.db

SMS.db

1.2.1.2. Kontakte

Als nächstes wurde betrachtet, ob das Adressbuch inzwischen verschlüsselt ist. Folgende Abbildung bestätigt die Vermutung, dass auch das Adressbuch noch unverschlüsselt auf dem Dateisystem vorgehalten wird. Auch beim Adressbuch wäre eine Verschlüsselung mit NSFileProtectionCompleteUntilFirstUserAuthentication sinnvoll, um den Zugriff über eine RAM-Disk zu verhindern. Speicherort: /private/var/mobile/Library/AddressBook/AddressBook.sqlitedb

AddressBook.sqlitedb

1.2.1.3. Kalender / Aufgaben / Erinnerungen

Unverschlüsselte Ablage von Terminen, Aufgaben und Erinnerungen. Speicherort: /private/var/mobile/Library/Calendar/Calendar.sqlitedb

Calender.sqlitedb

1.2.1.4. Notizen

Unverschlüsselte Ablage von Notizen. Speicherort: /private/var/mobile/Library/Notes/notes.sqlite

notes.sqlite

1.2.1.6. Bilder und Videos

Bilder unter Video werden weiterhin unverschlüsselt gespeichert. Speicherort: /private/var/mobile/Media/DCIM

1.2.1.7. Keyboard Cache

Unverschlüsselte Ablage von getätigten Eingaben auf der Bildschirmtastatur Speicherort: /private/var/mobile/Library/Keyboard/de_DE_dynamic-text.dat

de_DE_dynamic-text.dat

1.2.1.8. Screenshots

Die Screenshots der Apple eigenen Apps als auch die von Thirdparty-Herstellern werden unter iOS 7 durch die Apple Data-Protection geschützt.

1.2.1.9. Safari Bookmarks

Unverschlüsselte Ablage von Lesezeichen des Safari-Webbrowsers Speicherort: /private/var/mobile/Library/Safari/Bookmarks.db

Bookmarks.db

1.2.1.10. Emails/Anhänge

Durch die Verwendung eines ActiveSync-Profils ist die Maildatenbank „Protected Index“ unverschlüsselt abgelegt. Diese Datenbank beinhaltet jedoch nicht die eigentlichen E-Mails, sondern nur noch IDs der E-Mails, welche bereitliegen oder empfangen wurden. Dies hat den Hintergrund, dass eine neue E-Mail dem iPhone über eine Push-Nachricht mitgeteilt wird und diese Push-Nachricht bzw. ID der E-Mail auch in einem gesperrten Gerätezustand gespeichert werden muss. Erst wenn das Gerät einsperrt und die Nachrichten-App geöffnet wird, wird die eigentlich E-Mail geladen. Die empfangenen E-Mails und deren eventuell vorhandenen Anhänge werden in einer separaten Datenbank verschlüsselt gespeichert.

Speicherort E-Mails: /private/var/mobile/Library/Mail/ExchangeActiveSync<ID> Speicherort Mail-Datenbank: /private/var/mobile/Library/Mail/Protected Index

Protected Index

1.2.1.11. Weitere Apps von Apple

Ein Zugriff auf Daten weiterer Apps von Apple ist ebenso möglich, wie zum Beispiel Voice-Mails oder gespeicherten Sprachmemos.

1.2.2. Thirdparty-Apps

Bei den Untersuchungen einiger Thirdparty-Apps stellten wir folgende interessante Tatsache fest: Die Dateisystemverschlüsselung ist nur aktiviert, wenn die App unter iOS 7 neu installiert wurde. Wurde das Gerät von einer früheren iOS-Version aktualisiert und die App war schon vor dem Update auf dem Gerät installiert, liegen die Daten weiterhin unverschlüsselt auf dem Dateisystem.

1.2.2.1. Skype

Bei Skype wurde festgestellt, dass die Datenbank, welche die gesamte Kommunikationsdaten enthält seit iOS 7 automatisch mit der Apple Data-Protection auf Dateisystemebene verschlüsselt ist. Die entsprechende Datenbank befindet sich im Verzeichnis %APP HOME%/Library/Application\ Support/Skype/<Profil>/main.db Falls die App schon unter früheren iOS-Versionen installiert wurde, dann liegen die Daten weiterhin unverschlüsselt im Dateisystem.

main.db der Skype-App

1.2.2.2. Facebook-App und Facebook-Messenger

Auch hier zeigt sich der gleiche Sachverhalt wie bei der Skype-App. Die Dateisystemverschlüsselung ist nur aktiv, wenn die App nach dem Updatevorgang auf iOS 7 neu auf dem Gerät installiert wurde. Speicherort: %APP HOME%/Library/Caches/orca2.db

orca2.db der Facebook-App

1.2.2.3. Viper

Hier war ein Zugriff auf die Datenbanken nicht möglich, da Viper schon in früheren Versionen die API der Apple Data-Protection benutzt hat.

1.2.2.4. Whatsapp

Auch Whatsapp benutzte bereits in früheren Versionen die API der Apple Data-Protection. Somit war auch hier kein Zugriff möglich.

1.2.3. Aktualisierung von Thirdparty-Apps

Die Daten einer App liegen unverschlüsselt auf dem Endgerät bei Apps, die vor dem Updatevorgang auf iOS 7 installiert wurden. Auch nach einer Aktualisierung der App über den Apple App Store liegen diese Daten weiterhin unverschlüsselt auf dem Endgerät, obwohl sich bei einer Aktualisierung die GUID der App auf dem Dateisystem ändert. Erst nach einer Deinstallation und einer erneuten Installation der App unter iOS 7 werden die Daten verschlüsselt abgelegt.

orca2.db der Facebook-App nach einem App-Update

sms.db.png
addressbook.sqlitedb.png
calender.sqlitedb.png
notes.sqlite.png
de_de_dynamic-text.dat.png
bookmarks.db.png
protected_index.png
skype.png
facebook.png
facebook_after_update.png

16/12/2013 15:00:23

Tags: ios, research