Erfolgreicher Angriff gegen X-pire!

Marc Ruef

Hinweis: Wir sehen uns aus rechtlichen Gründen nicht in der Lage das modifizierte Firefox-Addon von X-pire! mit integriertem Key-Cache zu veröffentlichen. Ein Screenshot eines erfolgreichen Angriffs mit dem erweiterten Plugin steht hier zur Verfügung.

Die letzten Wochen wurde in den deutschen Medien fortwährend von einem neuen Projekt zur Wahrung der Privatsphäre der Internet-Benutzer berichtet (z.B. Süddeutsche Zeitung, Heise). Durch das Kryptosystem X-pire! von Prof. Michael Backes sollte es von nun an möglich sein, dass im Internet bereitgestellte Bilder mit einem Verfallsdatum versehen werden.

In Fachkreisen war das Projekt – welches politisch durch die Bundesverbraucherministerin Ilse Aigner (CSU) getragen wird – schon vor Bekanntgabe von Details aus technischen, politischen, wirtschaftlichen und rechtlichen Gründen umstritten (TAZ, Die Welt). Entsprechend mit Spannung wurde die Veröffentlichung der Software erwartet. Auf der Projektseite unter x-pire.de können einige sehr allgemeine Informationen sowie das dazugehörige Firefox-Addon heruntergeladen werden.

Wir haben uns intensiv mit der Funktionsweise der Lösung auseinandergesetzt, um allfällige Schwachstellen in dieser finden und beweisen zu können. Hadmut Danisch hat in seinem umfangreichen Blog-Post mit dem Titel Idiotische Kryptographie, Made in Germany verschiedene Schwachpunkte der genutzten Ansätze zusammengefasst. Wir konzentrieren uns in diesem Beitrag auf den Ansatz des Auslesens und Wiederverwendens von legitimen Schlüsseln.

Einführung

Das Grundprinzip der Lösung besteht darin, dass ein Benutzer zuerst ein Konto erstellt. Mit diesem wird es ihm erlaubt, kostenpflichtig ein Bild mit AES256 zu verschlüsseln und diese Fassung in Internet hochzuladen. Damit ein anderer Benutzer dieses Bild einsehen kann, muss er das X-pire! Plugin installieren. Dieses fragt beim Erkennen von verschlüsselten Bildern beim Schlüsselserver an, ob das Bild schon abgelaufen ist. Ist dies nicht der Fall, wird der Schlüssel an den Client zurückgegeben, der damit das Bild entschlüsseln und anzeigen kann. Bleibt ein solches Entschlüsseln aus, wird ein Hinweis auf das Ablaufen des Bildes angezeigt. Nachfolgende Grafik illustriert das Resultat dieses Prozesses, wobei das erste Bild im Gegensatz zu den anderen beiden aufgrund des Verfallsdatums nicht mehr eingesehen werden kann:

Demonstration eines abgelaufenen Bilds

Mit X-pire! will also durchgesetzt werden, dass ein Bild nach dem Ablauf des vordefinierten Zeitpunkts nicht mehr geladen wird. Dieses Ziel wird auf verschiedenen Ebenen verfehlt. Dass ein legitim angezeigtes und heruntergeladenes Bild weiterverarbeitet und ohne das weiterführende Zutun von X-pire! genutzt werden kann, erscheint offensichtlich (Stichwort Printscreen). Auf technischer Ebene interessanter ist jedoch der Umstand, dass durch das Auslesen und Zwischenspeichern der symmetrischen Schlüssel diese ohne zukünftige Absegnung des Schlüsselservers weiterverwendet werden können.

Auslesen der Schlüssel

Will ein mit X-pire! verschlüsseltes Bild angezeigt werden, fragt das Plugin bei keyserver.x-pire.net um den Erhalt des entsprechenden Schlüssels an. Hierzu wird der Hashwert (SHA256) des Bilds an den Server übermittelt, anhand dessen sich das Bild und der dazugehörige Schlüssel identifizieren lassen.

Die Bearbeitung des Bilds durch den damit erlangten Schlüssels wird im Firefox-Addon in \chrome\content\overlay.js umgesetzt. Von Interesse ist die Funktion Xpire.KeyServerApi.getKey(), welche für das Entschlüsseln verantwortlich ist. Sie benutzt die exportierten Funktionen der vorkompilierten Datei \components\XpireJPEG.dll (Quelltext steht nicht zur Verfügung):

lib.decryptJPEG(img.value, result.key, base64, width, height);

Das verschlüsselte Bild wird dann mit replaceFunction() umgewandelt und damit im Browser ohne weiteres Zutun des Benutzers (sofern keine CAPTCHAs aktiviert sind) angezeigt:

replaceFunction(image, "data:image/jpeg;base64," + base64.value);

In unserer modifizierten Version des Firefox-Addons wird dieser Funktionsablauf um einen Logging-Mechanismus erweitert, wodurch die Grundlage für ein Zwischenspeichern des legitimen Keys geschaffen wird. Dabei wird bei jeder erfolgreichen Umwandlung eine Alert-Box generiert, und darin auf den neu erhaltenen Key hingewiesen:

Gehacktes X-pire Plugin informiert über neuen Key

Das grundlegende Problem besteht in der Nutzung einer symmetrischen Verschlüsselung, deren Schlüssel nicht ablaufen kann. In einem weiteren Schritt sollen nun die erhaltenen Schlüssel gesammelt und in einem lokalen Cache abgelegt werden. Dadurch lassen sich diese wiederverwenden.

Wiederverwenden der Schlüssel

Durch die zuvor vorgestellte Funktion besteht die Möglichkeit, eine Liste mit den erhaltenen Schlüsseln zu erstellen. Ein Bild wird einerseits durch seinen Hash-Wert in hash.value als auch durch eine Identifikationsnummer in id.value identifiziert. Der dazugehörige Schlüssel wird in result.key abgelegt.

Durch das Speichern dieser Informationspaare können nun die Schlüssel lokal gesammelt werden. Auf der Demo-Webseite des Projekts werden drei geschützte Bilder bereitgestellt (siehe Screenshot oben), wobei durch die Datensammlung folgende Informationen zusammengetragen werden konnten:

ID Hash Key Ablaufdatum
5 fb1c038c912c46c41181c8cb32b39e39 6abacdb0abf1d0683b6ca3d12ee386ba e6f207509afa3908 da116ce61a757695 27.01.2011 19:00
6 2b4c6711793140ea5fa88c27f6135403 4f69dbdbaaae82f6c88490fcd019bd09 ab897fbdedfa502b 2d839b6a56100887 08.02.2011 19:01

Durch diese dynamisch angefertigte Lookup-Table wird es möglich, im weiteren Verlauf den Zugriff auch auf jene Schlüssel zu gewährleisten, die mittlerweile aufgrund des Ablaufzeitpunkt des Bilds nicht mehr durch den Schlüsselserver herausgegeben werden würden. Stattdessen wird einfach auf den lokalen Key-Cache zugegriffen und damit der Server umgangen. Auf der Projekt-Webseite wird auf diese drohende Gefahr eines Key-Store hingewiesen.

Fazit

Dieser Beitrag illustriert lediglich einen der möglichen Angriffe auf das gesamte System. Es gibt eine Vielzahl anderer Varianten, wie die Funktionsweise und Sicherheit dessen attackiert und kompromittiert werden kann. Die Lösung missachtet eine erstaunlich hohe Anzahl grundlegender Aspekte von moderner Informationssicherheit und Kryptografie (z.B. symmetrische Kryptografie verfehlt das Ziel, Wiederverwendung von Keys nicht geregelt, Revoke-Möglichkeit ausser Acht gelassen, Server als Single Point of Failure, etc.) Es ist damit in keinster Weise geeignet, gegen Angreifer mit einem minimalen Verständnis für die eingesetzten Mechanismen vorzugehen.

Die gezeigten Anpassungen im bereitgestellten Code beweisen zudem, dass ein manipuliertes Addon gleichzeitig als erfolgreiches Angriffswerkzeug eingesetzt werden kann. Der Erfolg dieses Ansatzes fusst in erster Linie darauf, dass sich die Entwickler von X-pire! darauf verlassen, dass ein Benutzer keine böswilligen Absichten hat. Dies ist jedoch Wunschdenken und blendet schlichtweg in naiver Weise die bestehenden und bestens bekannten Gefahren aus. Wir raten vom Einsatz dieser Lösung im gegenwärtigen Zustand ab.

Update 13. Februar 2011 19:25 Uhr

Verschiedene Nachrichtenportale berichten über unsere Entwicklung. Unter anderem:

Zudem wurde anonym eine in C++ geschriebene und quelloffene Re-Implementierung des X-pire! Plugins veröffentlicht. Dieses lässt einfache Manipulationen und damit ebenfalls die Kompromittierung des Systems zu.

Links

Tags

API, Artikel, Browser, Captcha, Firefox, Interview, PDF, Webseite

CVSSv3 als Risikometrik - Eine detaillierte Betrachtung

Marc Ruef

Blockchain ist die Zukunft - Einführung in die revolutionäre Technologie

Marc Ruef

Analyse von Medizingeräten - Ein pragmatischer Ansatz

Marc Ruef

Sie haben Fragen zum Thema?

Unsere Spezialisten kontaktieren Sie gern!