Virus “Locky” über JavaScript einfangen? Wie funktioniert das?

In den letzten Tagen häuften sich die Meldungen über eine neue Verbreitungsart des Virus “Locky”. Zur Erinnerung: “Locky” ist Ransomware, der eine Fülle an unterschiedlichen Dateien (darunter .jpg, .zip, .doc, .docx, .xls, .xlsx, etc.) auf allen zugänglichen Laufwerken (inklusive Netzwerklaufwerken) mit RSA-2048 verschlüsselt. Die Erpresser fordern dann einen (je nach Modifikation unterschiedlichen) Bitcoin-Betrag um Zugang zum Schlüssel zu erhalten, um die Dateien wieder entschlüsseln zu können. Bisher verbreitete sich die Schadsoftware vor allem über in Office-Dokumenten enthaltene Makros. Doch mittlerweile meldeten mehrere bekannten Medien (darunter heise.de, derstandard.at oder pc-magazin.de), dass Locky auch über JavaScript ins System geschleust werden kann. Ist das möglich? Und vor allem wie funktioniert das? Eine Analyse.

Viele Menschen dürften in den vergangenen Tagen eine Mail erhalten haben, die ungefähr so aussieht wie jene im nachfolgenden Bild dargestellt: Eine deutsche Wursterzeugungsfirma bittet um Korrektur einer Rechnung, im Anhang befindet sich eine .zip-Datei. Während Privatnutzer sofort skeptisch werden sollten wenn sie eine Rechnung einer großen Wurstfachhändlers erhalten (es sei denn, sie haben einen ausgesprochen großen Appetit nach Wurst und kaufen diese nur im Großhandel) ist eine solche Mail für Unternehmen, insbesondere solche, die in der Lebensmittelbranche tätig sind, nichts ungewöhnliches.

locky1

Öffnet man das .zip-file, findet man darin eine Datei mit kryptischem Namen die auf .js endet. An dieser Stelle sei erwähnt: Windows-Nutzer sollten diese Datei nun auf keinen Fall ausführen, Benutzer von auf Linux basierenden Systemen sowie Mac OS X sind von den aktuell kursierenden Locky-Varianten nicht betroffen.

locky2

Öffnet man die Datei mit einem Texteditor, schlägt einem zunächst nur schwer lesbarer Text entgegen. Auf den ersten Blick macht der Code auch wenig Sinn, er enthält Listen an Strings wie “epidsode”, “tablet” oder “memoirs”, die innerhalb eines eval()-Statements geclustert sind. Eine der wenigen sofort sichtbaren Funktionen ist e(). Dies ist eine selbst gebaute Erweiterung des String prototype objects und liefert den ersten character der übergebenen Zeichenkette zurück.

locky3
Im Endeffekt wird hier nichts anders gemacht als den Inhalt der Datei zu verschleiern. Nacheinander wird die Funktion e() für mehrere Zeichenketten aufgerufen und alle zurückgegebenen Buchstaben (teilweise in Unicode) werden zu einem String konkateniert der danach mit eval() interpretiert wird. Macht man dies, erhält man Kommandos wie absorptionAbort = new specificationStandard(‘ADODB.Stream’) oder absorptionAbort[‘saveToFile’]. Hier wird ein neues ActiveX-Objekt erstellt, auf der lokalen Festplatte gespeichert und danach ausgeführt. Das bedeutet: Der eigentliche Locky-Virus befindet sich nicht in der Datei sondern wird über eine externe Adresse nachgeladen. Auch die URL versteckt sich in den verschleierten Fragmenten, sie beginnt mit http://www.bag-online.com/…

locky4

Aufmerksamen Leser wird es schon aufgefallen sein: ActiveXObject zählt nicht zum JavaScript-Standard und wird daher auf praktisch keinem Browser außer dem Internet Explorer unterstützt. Damit klärt sich auch die Frage worum es sich bei dieser Datei handelt, nämlich nicht um ein JavaScript-file sondern um JScript – ein ähnlich wie JavaScript auf dem ECMAScript-basierendes Derivat das um einige Funktionalitäten (wie eben ActiveX-Support) erweitert ist und damit enorme Sicherheitslücken aufreißt. In JavaScript sind die Möglichkeiten, auf das lokale Dateisystem zuzugreifen stark eingeschränkt. Das bedeutet aber nicht, dass es prinzipiell unmöglich ist, sich mit JavaScript Malware einzufangen. Die beliebte Plattform node.js mit der JavaScript-Code serverseitig ausgeführt werden kann, bietet einige APIs um etwa .exe Dateien lokal zu speichern und auszuführen.

Abschließend lässt sich sagen: Locky nutzt (derzeit) keine wirklichen Sicherheitslücken sondern die Unachtsamkeit des Users auf, um in das System zu gelangen. Mittlerweile springen die meisten aktuellen Virenscanner (darunter auch Windows Defender) auf die Signatur von Locky an und machen die .js-Datei automatisch sofort unbrauchbar. Wer sich Locky eingefangen hat, dem bleibt meist nur die Wiederherstellung über externe Sicherungskopien oder der nicht empfehlenswerte riskante Weg, auf die Zahlungsforderung der Erpresser einzugehen – was natürlich keinesfalls eine Garantie dafür ist, dass die Verschlüsselung auch tatsächlich aufgehoben wird.


Christian Vorhemus
… ist Autor, Softwareentwickler und Consultant.
Seine Interessensgebiete reichen von Cloud Computing und verteilte Systeme über IT Security bis zu Datenanalyse.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: