Archiv

Archive for 2010-11-09

AusweisApp gehackt (Malware über Autoupdate)

2010-11-09 194 Kommentare

Gestern Abend wurde die AusweisApp freigegeben, und damit stand fest: Das wird für mich eine lange Nacht. Ich habe mir eine schöne Liste möglicher Angriffe zurechtgelegt. Wenn die einzelnen Angriffe klappen, werden sie einige hässliche Dinge ermöglichen. Ich bin mir recht sicher, dass einer der Angriffe in der Lage sein wird, die PIN und evtl. die aufgedruckte Kartenzugangsnummer zu klauen, ohne dass (wie beim CCC-Angriff) der Rechner des Nutzers verseucht werden muss. Ein anderer Angriff erlaubt es eventuell, dem Nutzer vorzutäuschen, dass er sich für etwas harmloses ausweist, während der Angreifer mit dessen Identität einkaufen geht. Eventuell kann man so auch ein Signaturzertifikat für die qualifizierten elektronischen Signaturen mit dem Namen des Opfers bekommen.

Da ich allerdings weder Lesegerät noch ePerso habe, konnte ich die Angriffe nicht ausprobieren. Also habe ich mir stattdessen die AusweisApp selbst vorgenommen. Von besonderem Interesse war dabei die Updatefunktion. Kann ein Angreifer diese kontrollieren, könnte es ihm gelingen, Malware auf dem Rechner des Users einzuspielen. Das wissen natürlich auch die Entwickler, und deswegen ist die Updatefunktion ordentlich gesichert: Zunächst wird vom Updateserver über eine HTTPS-geschützte Verbindung eine Versionsdatei geholt. Dort wäre für einen Angreifer normalerweise Schluss, denn HTTPS ist (halbwegs) sicher. Der Client überprüft auch, ob das Zertifikat gültig ist – da hört es aber auch schon auf. Der Client prüft nicht, ob das Zertifikat auch zum Servernamen passt! Somit braucht der Angreifer nicht ein gültiges Zertifikat für den Updateserver (welches er hoffentlich nicht bekommen sollte), sondern ein beliebiges gültiges Zertifikat (z. B. für seine eigene Website, welches er selbstverständlich bekommt – Nachtrag: Wir reden hier über gewöhnliche SSL-Zertifikate die es an jeder Ecke gibt, nicht über irgendwelche eID-Berechtigungszertifikate!). Das ist übrigens ein Fehler den man in Java leicht machen kann: Die eingebauten Libraries prüfen soweit ich weiß das Zertifikat, aber den Hostnamen muss man ausdrücklich selbst prüfen.

Mittels einer DNS-Manipulation (für die es im praktischen Einsatz zahlreiche Wege gibt, DNS ist ein völlig unverschlüsseltes Protokoll – zur einfachen Demonstration kann man die Hostsdatei manipulieren) können wir nun den Client überreden, sich zu unserem falschen Update-Server zu verbinden und dessen Zertifikat akzeptieren. Da ich kein eigenes SSL-Zertifikat habe, habe ich einfach das genommen, dessen Key Akamai vor ein paar Jahren freundlicherweise (unfreiwillig) öffentlich gemacht hat. Damit dieses Zertifikat als gültig angesehen wird, muss die Uhr auf dem Client verstellt werden – mit einem aktuellen Zertifikat würde das anders aussehen. (Ich hab auch noch andere, ebenfalls leider abgelaufene, Zertifikate getestet.)

Der Updatefunktion kann nun eine manipulierte Antwort untergeschoben werden, welche sie anweist, eine Datei von einer beliebigen URL herunterzuladen und zu installieren. Der Updater erwartet hierbei eine ZIP-Datei. Diese wird entpackt und dann sollte eigentlich eine bestimmte .msi-Datei darin ausgeführt werden. Hier waren die Entwickler allerdings schlau genug, noch eine Signatur einzubauen, die vor dem Ausführen geprüft wird. Hier ist also eigentlich wieder einmal Schluss. Allerdings wird die ZIP-Datei vor der Signaturprüfung bereits entpackt, und ZIP-Dateien können relative Pfadangaben enthalten. Mit einem (per Hexeditor) in der ZIP-Datei eingebauten “../../” kann man aus dem temporären Verzeichnis ausbrechen und somit beliebige Dateien ins Dateisystem schreiben (directory traversal). Beispielsweise eine Schadsoftware ins Autostartverzeichnis. Vorhandene Dateien werden übrigens gnadenlos überschrieben.

Ein Dolev-Yao-Angreifer, d.h. ein Angreifer, welcher den Netzwerkverkehr beliebig manipulieren kann, jedoch nicht in der Lage ist als sicher geltende Verschlüsselung zu brechen oder den Client des Opfers vorher zu manipulieren, kann somit aufgrund zweier Implementierungsfehler in der AusweisApp über die Auto-Update-Funktion Schadsoftware einspielen.

Der Angriff ist gegen die aktuelle AusweisApp getestet, die sich bei der Installation als 1.0.1, beim Update als 1.0.0 identifiziert.

Diese Lücke können die Entwickler natürlich relativ einfach schließen. Aber was ist mit den anderen, sicherlich noch vorhandenen, unentdeckten Lücken? Mitgeliefert wird beispielsweise eine Java-VM der Version 6 Update 18 – aktuell ist Update 22. Die Kryptographie des Personalausweises selbst mag bewiesen sicher sein. In den umliegenden Protokollen jedoch erwarte ich die ein oder andere Lücke, von denen sich einige leicht, andere vielleicht gar nicht nachträglich stopfen lassen. Der Panzerschrank mag absolut unknackbar sein – was aber, wenn der Angreifer einfach den Besitzer unter falschem Vorwand bittet, ihn aufzuschließen, und/oder den ganzen Schrank mitnimmt?

Ich bedanke mich jedenfalls für diese nette Herausforderung der heutigen Nacht. Gute Sicherheitsmaßnahmen mit kleinen unscheinbaren Löchern, die kreative Kombinationen von Angriffen erfordern, nicht trivial, aber machbar. Genau nach meinem Geschmack. Hat Spaß gemacht! Den Preis, den diese Wirtschaftsförderungsmaßnahme gekostet hat, ist das allerdings nicht wert.

Die Dateien zum Demonstrieren des Angriffs gibts hier als base64-encodetes ZIP-File:


_=_ 
_=_ Part 001 of 001 of file ausweisapp-updatehack.zip
_=_ 

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
dFBLBQYAAAAACAAIAOoBAADKDgAAAAA=

(SHA1: 22b96851042bfece3c641851eaa6e890a7b28bff)

Kontakt/Fragen bitte über die Kommentarfunktion wenn es Zeit hat oder per Jabber (XMPP, Google Talk) an janschejbal at jabber.ccc.de (das ist keine Mailadresse!) wenn es dringend ist. Telefon ist ungünstig. Notfalls geht auch Mail an janhomepage [at] gmx punkt net.

Folgen

Erhalte jeden neuen Beitrag in deinen Posteingang.

Schließe dich 107 Followern an