Poweliks: hartnäckige Malware ohne Datei

31.07.2014
G DATA Blog

Wenn Sicherheitsexperten von Malware sprechen, geht es in der Regel um Dateien, die auf einem Computer gespeichert sind. Ihr Zweck ist es, das betreffende Gerät zu beschädigen oder vertrauliche Daten auszuspähen, die auf dem Gerät gespeichert sind. Solche Dateien können von Virenscannern gescannt und auf herkömmliche Weise behandelt werden. Die folgende Analyse beschäftigt sich mit einem Beispiel für Malware, die sich nur in der Registry befindet, die hartnäckig ist und nicht als Datei vorliegt, welche einfach gescannt werden kann.

Kurzdarstellung

Wenn Sicherheitsexperten von Malware sprechen, geht es in der Regel um Dateien, die auf einem Computer gespeichert sind. Ihr Zweck ist es, das betreffende Gerät zu beschädigen oder vertrauliche Daten auszuspähen, die auf dem Gerät gespeichert sind. Solche Dateien können von Virenscannern gescannt und auf herkömmliche Weise behandelt werden. Die folgende Analyse beschäftigt sich mit einem Beispiel für Malware, die sich nur in der Registry befindet, die hartnäckig ist und nicht als Datei vorliegt, welche einfach gescannt werden kann.

Dieser Technik wird selten Aufmerksamkeit geschenkt. Die Ausgangsdatei, die alle bösartigen Aktivitäten auf dem Computer startet, enthält den gesamten Angriffscode in verschlüsselter, verborgener Form. Er wartet darauf, aufgerufen und ausgeführt zu werden. Um die schädliche Wirkung zu entfalten, arbeiten die Angreifer den Code Schritt für Schritt tiefer ab. Die sequentielle Ausführung dieser Schritte erinnert an das Stapelprinzip russischer Matrjoschka-Puppen:

  • Als Einstiegspunkt nutzen sie eine Schwachstelle von Microsoft Word. Dabei kommt ein speziell gestaltetes Word-Dokument zum Zuge, das per E-Mail verbreitet wird. Dasselbe Konzept würde genausogut mit anderen Exploits funktionieren.
  • Danach stellen die Angreifer sicher, dass die bösartigen Aktivitäten einen Neustart des Systems überleben, indem sie einen codierten Autostart-Registrierungsschlüssel erstellen. Um unentdeckt zu bleiben, ist dieser Schlüssel getarnt bzw. verborgen.
  • Bei der Dekodierung dieses Schlüssels stellten sich zwei neue Aspekte heraus: Zum einen Code, durch den Microsoft PowerShell auf dem System installiert wird, zum anderen zusätzlicher Code.
  • Der zusätzliche Code ist ein mit Base64 codiertes PowerShell-Skript, das den Shellcode (Assembler) aufruft und ausführt.
  • Im letzten Schritt führt dieser Shellcode ein Windows-Binärdatei aus, den Payload. Im untersuchten Fall versuchte die Binärdatei, eine Verbindung mit fest codierten IP-Adressen herzustellen, um weitere Befehle zu empfangen. Die Angreifer hätten zum jetzigen Zeitpunkt aber auch beliebige andere Aktionen auslösen können.
  • Alle Aktivitäten werden in der Registry gespeichert. Zu keinem Zeitpunkt wird eine Datei erzeugt.

Dank diesem Konzept sind Angreifer in der Lage, klassische Scan-Techniken zur Erkennung von Malware-Dateien zu umgehen. So können sie in der Lage, beliebige gewünschte Aktionen ausführen, wenn sie die „innerste Schicht der Matrjoschka-Puppe“ erreicht haben – selbst nach einem Neustart des Systems!

Um derartige Angriffe zu verhindern, müssen Virenschutzlösungen entweder die Datei (das ursprüngliche Word-Dokument) abfangen, bevor dieses ausgeführt wird (falls ein solches Dokument vorhanden ist), am besten gleich vor dessen Eintreffen im E-Mail-Posteingang des Kunden. Alternativ dazu muss in der nächsten Verteidigungslinie der Software-Exploit nach dem Ausführen der Datei erkannt werden, oder die Registry-Überwachung muss als letzten Schritt ungewöhnliches Verhalten erkennen, die entsprechenden Prozesse blockieren und den Benutzer alarmieren.

Die Analyse

Die G DATA SecurityLabs haben hartnäckige Malware analysiert, die sich nur in der Registry befindet und daher keine Datei auf dem infizierten System erstellt. Ein Überblick über diesen Mechanismus wurde erst vor kurzem im Forum KernelMode.info vorgestellt. Das analysierte Muster wird über ein Microsoft Word-Dokument verbreitet, das die in CVE-2012-0158  beschriebene Sicherheitslücke ausnutzt. Das Dokument soll als Anhang gefälschter E-Mails versendet worden sein, die vorgeblich von der kanadischen bzw. US-amerikanischen Post stammen und Informationen zu bestellten Artikeln für den Empfänger der Spam-Mail enthalten sollen.

Autostart-Funktion

Damit die Malware bei jedem Systemstart startet, muss sie einen Autostart-Eintrag erzeugen. In diesem Fall erstellt die Malware den folgenden Registrierungsschlüssel:

Beachten Sie, dass das für den Namen des Schlüssels verwendete Zeichen kein ASCII-Zeichen ist. Wir werden später noch auf diese Tatsache eingehen. Der erwähnte Eintrag enthält Folgendes:

rundll32.exe  javascript:"\..\mshtml,RunHTMLApplication";  
     document.write("<script language=jscript.encode>"+
     (new ActiveXObject("WScript.Shell")).
     RegRead("HKCU\\software\\microsoft\\windows\\currentversion\\run\\")+
     "</script>")

Der Zweck dieses Befehls ist es, den codierten Inhalt des Schlüssels (das Tag „JScript.Encode“ zeigt die Codierung an) zu öffnen und auszuführen: \\HKCU\software\microsoft\windows\currentversion\run\(default)

Autostart-Eintrag vor Administratortools verbergen

Wie bereits erwähnt besteht der Name des Registrierungsschlüssels zum Starten der Malware nicht aus einem ASCII-Zeichen. Dadurch soll der Eintrag vor Systemtools verborgen werden. Der folgende Screenshot zeigt den Inhalt des Registrierungsschlüssels, wenn dieser mit dem gängigen Windows-Tool regedit geöffnet wird:

Regedit kann das Zeichen nicht lesen, da es kein ASCII-Zeichen ist. Folglich kann der Schlüssel nicht geöffnet werden, wie die Fehlermeldung anzeigt. Darüber hinaus kann auch der Benutzer den Schlüssel nicht anzeigen.

Malware in einem Registry-Wert – wie Matrjoschka-Puppen

Der Entwickler verwendet eine Technik, die dem Stapelprinzip der russischen Matrjoschka-Puppen ähnelt: In den anfangs genutzten Code ist weiterer Code eingebettet, der dann ausgeführt wird. Dieser Code führt dazu, dass weiterer Code verwendet wird, und so weiter und so fort. Der anfangs ausgeführte Code ist JScript-Code und dann ein PowerShell-Skript, das schließlich Shellcode ausführt, welcher den Schadcode von Poweliks enthält.
 

Schritt 1 (JScript-Code)

Es überrascht nicht, dass der Inhalt des oben genannten, ausgeführten Registrierungsschlüssels codiert ist:

Diese Codierungstechnik wurde ursprünglich von Microsoft entwickelt, um den Quellcode vor unbefugtem Kopieren und vor Manipulationen zu schützen. Allerdings hatte ein Sicherheitsexperte eine Möglichkeit gefunden, diese Art von Daten zu decodieren, die jetzt genutzt werden kann. Untersucht man den decodierten Schlüssel, können die folgenden Aufgaben festgestellt werden:

  • Das Skript prüft, ob Windows PowerShell auf dem System installiert ist. Wenn das Programm nicht installiert ist, lädt das Skript es herunter und installiert es.
  • Es führt weiteren Code aus, der in Base64 gespeichert ist. Dies wird im folgenden Abschnitt untersucht.

Nachdem der gespeicherte Code decodiert wurde, zeigt sich, dass es sich um ein PowerShell-Skript handelt. Das macht ganz klar und deutlich, warum die Malware diese Software im vorherigen Schritt gesucht bzw. installiert hat. Standardmäßig verfügt Microsoft Windows über einen Schutz, der die Ausführung unbekannter PowerShell-Skripts verhindert. Wenn wir versuchen, ein PowerShell-Skript auszuführen, wird die folgende Fehlermeldung angezeigt:

PS C:\Users\User> .\script.ps1
Die Datei "script.ps1" kann nicht geladen werden, da die Ausführung von Skripts auf diesem System deaktiviert ist.

Die Angreifer umgehen diese Einschränkung, indem sie Windows glauben machen, dass das Skript im interaktiven Modus von PowerShell ausgeführt wird. Daher kann das Skript ohne Benachrichtigung des Benutzers ausgeführt werden.

Schritt 2 (Das PowerShell-Skript und seine Verwendung)

Das PowerShell-Skript weist die Variable $P auf, die den mit Base64 codierten Shellcode enthält. Dieser Code nutzt VirtualProtect(), um die Ausführung des Codes im Speicher zu ermöglichen, sowie CallWindowProcA(), um den Shellcode in $p auszuführen.

Schritt 3 (ASM-Shellcode)

Der Shellcode führt mehrere Aktionen durch:

  • Er weist mithilfe von VirtualAlloc() Speicher zu.
  • Er kopiert Daten, einschließlich sich selbst (an Offset 0x1104 ).
  • Er führt den kopierten Code aus.

Werfen wir nun einen Blick auf die an Offset 0x1104 kopierten Daten:

Wir sehen hier eine Microsoft Windows-Binärdatei (beginnend mit MZ). Darüber hinaus sehen wir zwei weitere wichtige Strings: MPRESS1 und MPRESS2. Diese Strings werden von einem Packprogramm namens MPress  hinzugefügt. Das Entpacken werden wir zum jetzigen Zeitpunkt jedoch nicht im Detail besprechen. Dieser letzte Payload, der gesamte MZ-Header, ist der eigentliche schädliche Teil; er stellt Verbindungen zu zwei IP-Adressen in Kasachstan her, um Befehle zu empfangen. Zum Zeitpunkt der Analyse dieses Falls waren die beiden IP-Adressen bereits offline. Deshalb konnten wir nicht feststellen, welche Angriffe die Urheber starten wollten.

Da die Malware sehr leistungsfähig ist und jeden beliebigen Payload herunterladen kann, kann das Ausmaß der möglichen Schäden nicht verlässlich bestimmt werden. Sie könnte beispielsweise auf dem infizierten Computer Spyware installieren, um persönliche Informationen oder Geschäftsdokumente abzugreifen. Sie könnte aber auch Banking-Trojaner installieren, um Geld zu stehlen, oder es könnte Schadsoftware anderer Art installiert werden, die den Angreifern von Nutzen ist. Expertenkollegen haben die Vermutung geäußert, dass Poweliks in Botnet-Strukturen verwendet wird, und dass damit durch Werbebetrug immense Einnahmen erzielt werden.

Fazit

Die Analyse dieses Schadcodes war ungewöhnlich und ziemlich zeitaufwändig. Mehrschichtiger Code wurden erstellt, um den Analysten die Arbeit zu erschweren, und sicherlich auch, um die Malware zu verbergen und sie in die normale Systemnutzung einzustreuen, ohne dass der Benutzer die Infektion überhaupt bemerkt.

Poweliks ist Malware, die funktioniert, ohne dass irgendeine Datei erstellt wird. Dies ist eine ziemlich seltene, neue Malware-Spielart, die bisher kaum beachtet wird. Alles wird im Speicher ausgeführt. Sie befindet sich nur in der Registry und führt von dort aus Programme aus. Zudem verbargen die Entwickler den Autostart-Registry-Schlüssel, indem sie für den Schlüsselnamen ein Zeichen nutzten, das kein ASCII-Zeichen ist. Dieser Trick verhindert, dass viele Tools diesen bösartigen Eintrag überhaupt verarbeiten können. Er könnte Notfallteams eine Menge Ärger bei der Analyse bereiten. Mit dem Mechanismus können beliebige Programme auf dem infizierten System gestartet werden, und das macht ihn sehr gefährlich!

Für Forscherkollegen:

Office-Dokumente mit CVE-2012-0158:
74e0d21fe9edf7baf489e29697fff8bc4a6af811e6fe3027842fe96f6a00a2d9
88bc64e5717a856b01a04684c7e69114d309d52a885de9fc759e5a99ac20afd5

Das Poweliks-Installationsprogramm (erstellt die Registry-Schlüssel):
4727b7ea70d0fc00f96a28de7fa3d97fa9d0b253bd63ae54fbbf0bd0c8b766bb
e8d6943742663401e5c44a5fa9cfdd8fad6a9a0dc0f886dc77c065a86c0e10aa

Wichtige IT-Security-News per E-Mail

  • Aktuelle IT-Gefahren
  • Schutz-Tipps für Privatkunden
  • 15 % Willkommensgutschein