Ransomware unter der Lupe am Beispiel von Vipasana – Teil II
Die Schwachstellen in Vipasana – warum diese Ransomware absolut unsicher ist
Im ersten Teil dieser Serie über die Ransomware Vipasana habe ich mich damit auseinandergesetzt, was bei dieser Art von Krypto-Virus neu ist, im Vergleich zu seinen Vorgängern. Außerdem ging es darum, was passiert wenn Ihr Gerät mit Vipasana infiziert ist und wie der Verschlüsselungsalgorithmus der Ransomware aussieht. Es wurde deutlich, dass Vipasana einen eigenen Verschlüsselungsalgorithmus hat. In Teil II geht es nun darum zu zeigen, welche Schachstellen in der Verschlüsselung stecken. Sie werden sehen, warum niemand solch einen Algorithmus nutzen sollte, um wichtige, sensible Daten zu verschlüsseln.
Während meiner Analyse habe ich gleich mehrere Probleme in der Dateiverschlüsselung von Vipasana gefunden. Um es vorwegzunehmen: Ich konnte den Trojaner nicht soweit brechen, dass ich ein Entschlüsselungstool bereitstellen könnte. Trotzdem habe ich ihn anhand seiner Schwachstellen bis auf einen kleinen Rest seiner Grundmauer heruntergebrannt.
Vipasana brechen – Die Schwachstellen der Verschlüsselung
Wie bereits erwähnt hat Vipasana so viele Schwachstellen, dass man diesen Algorithmus niemals für ernsthafte Verschlüsselung nutzen sollte. Was Sie in diesem Artikel lesen werden ist also sozusagen ein Lehrgang in schlechter Verschlüsselung. Wenn Sie selbst eine gute Verschlüsselungslösung kreieren möchten, wird der Artikel zeigen, was Sie auf keinen Fall tun sollten.
Schwachstelle 1: Der Dateiname ist lediglich versteckt
Da bleibt nicht viel zu erklären. Der Dateiname ist nicht wirklich verschlüsselt, sondern lediglich in der Datei versteckt.
Schwachstelle 2: Der Schlüsselstrom ist maximal 30.000 Bytes lang
Haben Sie sich die Grafik im ersten Teil dieser Serie genau angeschaut? Wenn ja haben Sie vielleicht bemerkt, dass der Schlüsselstrom lediglich 30.000 Bytes lang ist. Die Frage ist also: Was passiert, wenn die Datei größer als 30.000 Bytes ist? Und die Antwort ist...
Nichts.
Nur die ersten 30.000 Byte werden verschlüsselt und der Rest der Datei wird im Klartext angehängt. Bin ich ein schlechter Mensch, wenn ich von einem Virus enttäuscht bin? Der Autor des Virus’ war hier einfach zu faul.
Es ist offensichtlich, warum so etwas bei einer ernsthaften Verschlüsselung eine Unmöglichkeit ist. Im Fall der Ransomware ist diese faule Art zu verschlüsseln wahrscheinlich jedoch ausreichend, da das einzige Ziel der Kriminellen ist, die Dateien unbenutzbar zu machen.
Schwachstelle 3: Der Schlüsselstrom konvergiert nach 768 Bytes
Jetzt kommen wir zu den interessanten Schwachstellen. Wie sich nämlich herausstellt, konvergiert der Schlüsselstrom nach exakt 768 Bytes, unabhängig vom Zustandsbyte-Auswahlblock und den Zustandsbyte-Positionen. Das bedeutet, dass wir von dieser Position aus den Schlüsselstrom kennen, unabhängig davon, welchen Schlüssel der Virus gewählt hat.
Warum ist das so?
Wie schon erwähnt besitzt der PRNG einen internen Zustand, der zum Erzeugen des Schlüsselstroms genutzt wird. Während der PRNG läuft, wird dieser Zustand verändert. Nach jeweils 32 generierten Schlüsselstrombytes wird der Zustand durch einen der folgenden Algorithmen verändert (Die Algorithmen werden der der Reihe nach abgearbeitet, nach dem letzten folgt wieder der erste, usw.):
Betrachten wir die Funktionen einmal genauer. updateState1() addiert oder subtrahiert 0x80 zu jedem Byte des Zustands, abhängig vom vorherigen Wert. updateState2() addiert den Wert des nächsten Bytes im Zustand zum vorherigen Byte. updateState3() allerdings multipliziert jedes Byte des Zustands mit Zwei. Das ist die Stelle, an der es für die Sicherheit der Verschlüsselung problematisch wird.
Denn ein einzelnes Byte kann nur Werte bis maximal 255 speichern. Wenn der Wert größer ist, wird er einfach abgeschnitten. (Für unsere technisch versierten Nutzer: Wir verlieren in diesem Prozess jedes Mal das höchstwertige Bit). Wenn wir diese Operation achtmal durchführen, wurde der ursprüngliche Wert so oft abgeschnitten, dass er in jedem Fall Null ist – unabhängig davon, was der Wert ursprünglich war.
Erinnern Sie sich, dass eine PRNG immer dieselbe Zahlenfolge zurückgibt, wenn der interne Zustand derselbe ist? Diese Tatsache ist an dieser Stelle relevant, denn wir haben nun drei Zustandsänderungs-Funktionen, die jeweils nach 32 Byte generiertem Schlüsselstrom aufgerufen werden, und wir müssen davon updateState3() achtmal aufrufen. Wenn wir das Ganze ausrechnen, kommen wir zu dem Ergebnis, dass der Schlüsselstrom nach 768 Bytes überall gleich ist – wir ihn ab diesem Byte kennen.
Krypto-Experten wissen bereits, dass deterministische Schlüsselströme hochgradig unsicher sind. In der nächsten Schwachstelle werden wir diese Tatsache nutzen um den größten Teil der von Vipasana verschlüsselten Datei wieder zu entschlüsseln.
Schwachstelle 4: Der globale Algorithmus-Schlüssel kann rekonstruiert werden
Der Schlüsselstrom ist nur ein Teil des Puzzles. Der andere Teil ist der globale Algorithmus-Schlüssel. Dieser bestimmt, wie die Bytes des Schlüsselstroms mit den Bytes der Datei kombiniert werden. Wenn wir aber den Schlüsselstrom ab einem bestimmten Punkt kennen, können wir einen sogenannten Known-Plaintext-Angriff fahren, um den globalen Algorithmus-Schlüssel zu rekonstruieren.
Wenn der Virus die Dateien auf Ihrer Maschine verschlüsselt, wird er zwangsläufig über Dateien von Windows stolpern – und sie ebenfalls verschlüsseln.
Wie praktisch für uns, dass diese Dateien auf jedem Windows-System gleich sind. Es ist also nicht schwer, eine Kopie der unverschlüsselten Datei zu finden. Nun besitzen wir eine Datei im Klartext und ihr verschlüsseltes Gegenstück.
Wenn Sie an unser Beispiel zur Kombination von Klartext-Bytes mit Schlüsselstrom-Bytes in Teil I zurückdenken, werden Sie merken, dass wir alle Informationen bis auf den globalen Algorithmus-Schlüssel bereits besitzen. Wie ein einfaches Mathe-Problem können wir die Gleichung so umstellen, dass wir uns den unbekannten Wert – den globalen Algorithmus-Schlüssel – berechnen können. Nachdem dieser Schlüssel über alle Dateien hinweg der gleiche ist, können wir ihn nun dazu verwenden, andere Dateien – für die wir das entschlüsselte Gegenstück nicht besitzen – ebenfalls zu entschlüsseln.
Diese Schwachstelle ermöglicht uns, die Datei ab Byte-769 zu entschlüsseln.
Schwachstelle 5: Die Schlüsselstrombytes werden in manchen Fällen ignoriert
Der globale Algorithmus-Schlüssel bestimmt, wie die Bytes des Schlüsselstroms mit den Bytes der Klartextdatei kombiniert werden. Nun – für die Algorithmen „6“, „7“, „8“ und „9“ werden die Bytes des Schlüsselstroms einfach ignoriert und nicht mit eingerechnet. Stattdessen werden lediglich konstante Werte zu den Bytes der Datei addiert oder subtrahiert.
Nachdem wir den globalen Algorithmus-Schlüssel rekonstruieren können, können wir auch alle Bytes, die mit den besagten Algorithmen verschlüsselt wurden, wieder entschlüsseln. Das bedeutet, dass wir von den 768 Bytes am Anfang der Datei – die wir bisher nicht rekonstruieren konnten – im Schnitt trotzdem 40% entschlüsseln können.
Wenn ich nun alle Werte zusammenrechne, wird deutlich, dass mehr als 98% der verschlüsselten Datei wieder entschlüsselt werden können.
Und nun?
Vipasana’s Verschlüsselungsroutine enthält weitere gefährliche Codesequenzen. Leider waren diese keine Hilfe dabei, weitere Teile der verschlüsselten Dateien wiederherzustellen. Ein Beispiel ist die Tatsache, dass der interne Zustand der PRNG stetig abgeschnitten wird. Dadurch ergibt sich – kurz bevor alle Zustandsbytes 0 sind – die Situation, dass die Anzahl der unbekannten Bytes nur noch bei 64 Bit liegt. Das ist ein Wert, der sich mit der richtigen technischen Ausstattung knacken lässt. Sind diese 64 Bit erstmal rekonstruiert, kann dieser Schritt wiederholt werden, um weitere 64 Bit zu berechnen. Das lässt sich fortführen bis der gesamte, ursprüngliche Zustand der PRNG rekonstruiert ist. Damit könnte die Datei komplett enschlüsselt werden.
Eine weitere Schwachstelle ist, dass der Algorithmus intern größtenteils mit den ASCII-Werten 0-9, A-Z und a-z arbeitet. Diese haben – im Gegensatz zur Verwendung von tatsächlich zufälligen Bytes – eine definierte interne Struktur, was sich für einen Angriff nutzen lassen könnte. Wir sind uns daher sehr sicher, dass auch der letzte Teil der Verschlüsselung von Vipasana gebrochen werden kann – ein algebraischer Angriff beispielswese scheint erfolgsversprechend. Allerdings haben wir uns der Entwicklung von sicheren Verschlüsselungssystemen verschrieben, nicht dem Brechen von unsicheren Systemen. Deshalb stoppen wir unser Vorhaben an diesem Punkt.
Für unsere technisch versierten Nutzer:
Wir haben die extrahierte PRNG und den Vipasana Verschlüsselungsalgorithmus auf GitHub veröffentlicht: https://github.com/secomba/vipasana_reversed
Schützt Boxcryptor vor Krypto-Trojanern?
Boxcryptor kann Sie unter bestimmten Umständen tatsächlich vor Krypto-Trojanern schützen – aber das ist eher ein Nebeneffekt davon, wie Dateien im Boxcryptor-Laufwerk abgespeichert werden, und könnte sich jederzeit ändern. Angenommen Sie haben das Boxcryptor-Laufwerk nicht eingebunden. In diesem Falle findet der Virus keine Dateien mit der Endung .docx, .xlsx, sondern nur Dateien mit der Boxcryptor-Endung .bc. Diese Dateie-Endung wird von 95% der bekannten Ransomware-Exemplare ignoriert (abgesehen von denen, die einfach alle Dateien verschlüsseln...).
Natürlich gibt es nichts was einen zukünftigen Krypto-Trojaner davon abhalten würde, auch unsere Dateien ins Visier zu nehmen.
Wie Sie sich vor Ransomware schützen können
Es gibt eine Reihe an Maßnahmen, die Sie treffen können, um das Risiko eines Datenverlusts durch Ransomware drastisch zu senken.
1. Halten Sie Ihren Virenscanner aktuell.
Vipasana wird beispielsweise von mehr als 75% aller Scanner erkannt. Verlassen Sie sich jedoch nicht zu sehr auf Ihr Antivirus-Programm. Wenn die Ransomware neu ist, ist die Wahrscheinlichkeit groß, dass der Virenscanner sie nicht erkennt und ignoriert. Das Wichtigste, was Sie vor Ransomware schützen kann ist und bleibt Ihr eigenes, verantwortungsbewusstes Handeln in der Onlinewelt. Also:
2. Pflegen Sie ein gesundes Misstrauen gegenüber unerwarteten E-Mails.
Machen Sie sich bewusst, dass Ransomware in den meisten Fällen über infizierte E-Mailanhänge und Links verbreitet wird. Beherzigen Sie diese Tipps im Umgang mit E-Mails und seien Sie sehr vorsichtig bei Dateien aus dem Internet, besonders wenn es sich um ausführbare Dateien handelt.
3. Erstellen Sie regelmäßig Backups, entweder auf Speichermedien oder in der Cloud. Sicherheitskopien Ihrer Dateien die physikalisch von Ihrem Rechner getrennt sind, oder ein Cloud-Backup, natürlich mit Boxcryptor verschlüsselt, sind im Fall von Ransomware Gold wert. Wenn Sie eine unverschlüsselte Version Ihrer Dateien an einem anderen Ort aufbewahren, können Sie die verschlüsselten Dateien getrost löschen.
Ein Cloud-Backup ist sehr praktisch, da manche Cloud-Speicheranbieter (beispielsweise Dropbox) alte Versionen Ihrer Dateien speichern, sodass Sie die „Änderungen“ der Ransomware – also die Verschlüsselung – einfach zurücksetzen können:
Dropbox bietet Ihnen einen Versionsverlauf der letzten 30 Tage, falls Sie versehentlich eine Datei gelöscht haben oder eine vorherige Version wiederherstellen möchten.
4. Wenn Ihr Rechner bereits infiziert wurde: Bleiben Sie ruhig.
Wenn Sie notfalls auch ohne Ihre Dateien leben können, zahlen Sie nicht. Viele Kryptotrojaner konnten – und wurden – in der Vergangenheit nach einiger Zeit gebrochen. Besuchen Sie die Webseite Malwarehunterteam – unter Umständen existiert für Ihren Virus bereits ein kostenloses Entschlüsselungstool.
Was wir daraus lernen können
Ab und an hören wir die berechtigte Frage: „Wenn niemand die Verschlüsselung der Krypto-Trojaner brechen kann, warum verschlüsseln wir unsere Dateien dann nicht genauso?“
Nach diesem Artikel sollte die Antwort klar sein: Nur weil kein Werkzeug zur Entschlüsselung der betroffenen Dateien veröffentlicht werden kann, bedeutet das nicht, dass die Verschlüsselung nicht bis zum Kern unsicher ist. Vielleicht ist es mir nicht möglich, die Verschlüsselung von Vipasana soweit zu revertieren, dass ich Ihnen Ihr Word-Dokument im Klartext zurückgeben kann. Aber ich kann Ihnen 98% des Inhalts des Dokuments erzählen...
Kryptographie ist nicht einfach aber extrem wichtig. Aufgrunddessen ist es klug, sich auf Verschlüsselungssoftware zu verlassen, die von Spezialisten entwickelt wurde. Glücklicherweise besitzen Virus-Autoren generell wenig Kompetenz in diesem Gebiet, wodurch immer Hoffnung besteht, wenn Sie Opfer von Ransomware werden.