G04 DES Padding Oracle

Das folgende Beispiel hört sich verharmlosend „Padding Orakel“ an, ist allerdings eine Unsicherheit der bösesten Art und zeigt anschaulich, das „gut gedacht“ nicht immer „gut gemacht“ sein muss. Die gesamte Seite basiert auf einem Blog-Artikel in „SkullSecurity“ mit dem Namen „A padding oracle example“ oder auf gut Deutsch „Ein Padding Orakel-Beispiel“. Die Seite erreicht Ihr über den Weblink https://blog.skullsecurity.org/2013/a-padding-oracle-example und – falls die Seite nicht erreichbar sein sollte – über die von mir erstellte PDF-Sicherungskopie: G04_a_padding_oracle_example.

Ich versuche Euch jetzt, die Grundlagen in kurzer und knapper Form zu schildern. Auf der Seite A07 PKCS5 Padding habe ich Euch die Grundlagen des Paddings, also das Auffüllen von Zeichen auf eine definierte String- Länge, näher gebracht. Beim Padding Orakel wird dieses Vorgehen durch eine gezielte Manipulation der verschlüsselten Daten genutzt und wir (die bösen Angreifer) werden die unverschlüsselten Daten erhalten!

Was ist also unser Szenario? Es gibt eine Webseite mit einem Log-In und der Webserver ist selbstverständlich in der Lage, die verschlüsselt übertragenen Passwörter auf Richtigkeit zu überprüfen. Erst wenn das richtige Passwort eingegeben worden ist wird der geschützte Inhalt freigegeben. Leider ist der Webserver sehr „gut“ programmiert und der Programmierer hat sehr viel mehr preisgegeben als es notwendig war, denn er informiert den Benutzer über ein falsches Padding. Wir nutzen dieses gezielt aus und arbeiten uns Byte für Byte durch das verschlüsselte Passwort und Ende erhalten wir das unverschlüsselte Passwort, obwohl wir den verwendeten (geheimen) Schlüssel nicht kennen. Solltet Ihr jetzt denken „was für ein doofer Programmierer“ dann gebe ich Euch zu bedenken, das durch diesen Hack die Webserver von namhaften Firmen erfolgreich angegriffen wurden.

Noch ein Hinweis von meiner Seite: Für dieses Beispiel nutze ich die veraltete DES-Verschlüsselung (der Vorgänger der heute üblichen AES-Verschlüsselung), da der Artikel darauf aufbaut. Auch wenn DES heute grundsätzlich nicht mehr genutzt werden sollte, ist Vorgehensweise dennoch erschreckend – binnen weniger Sekunden erhalten wir das geheime Passwort (in unserem Beispiel „HelloWorld“).

Bitte wundert Euch nicht über den „umständlichen“ Quellcode, aber er ist sehr eng an die Vorlage den Blog-Autors angelehnt und soll Euch das Verständnis erleichtern. Solltet Ihr eigene Daten zum Test verwenden wollen, habe ich Euch ein kleines Setup-Programm erstellt, wo Ihr die eigenen Daten eingeben und mittels „copy & paste“ in dieses Programm kopieren könnt. Das Programm findet Ihr über diesen Link: G04a DES Padding Oracle Setup.

Das ist die (erschreckende) und sehr schnelle Ausgabe auf der Konsole:

Alle Quellcodes zu den Unsicherheiten findet Ihr zum Download in meinem Github-Repository, welches Ihr über diesen Link erreicht: https://github.com/java-crypto/G-Unsicherheit. Alle Programme sind sowohl unter Java 8 als auch unter Java 11 lauffähig.

Die Lizenz zum obigen Beispiel findet Ihr auf der eigenen Lizenz-Seite.

Letzte Aktualisierung: 26.09.2019