Tipps zur Automatisierung der IOC-Extraktion aus GootLoader, einer sich ändernden JavaScript-Malware

Die Bedrohungsakteure hinter GootLoader nehmen ständig Anpassungen an dieser Familie von JavaScript-Malware vor, die sich auf die Extraktion von Indikator für Kompromittierung (IOC) mit unserem Decoder-Skript auswirkt. Wann immer der GootLoader-Decoder kaputt geht, versuchen wir, ihn an die neue Version der Malware anzupassen, um der Sicherheitsgemeinschaft zu helfen. In diesem Beitrag teilen wir den Prozess des Debuggens und Korrigierens des Skripts und zeigen die üblichen Schritte, die wir normalerweise unternehmen.

Zuerst schauen wir uns alle Auszüge aus den regulären Ausdrücken (Regex) an, denn das ist meistens der Grund, warum der Decoder kaputt geht. Dazu fügen wir Druckanweisungen vor und nach jeder Regex-Auswertung ein, beginnend am Ende des Skripts. Das folgende Bild zeigt unseren ersten Check.

Abbildung 1 – Druckanweisungen um Auswertungen regulärer Ausdrücke herum.

Basierend auf der Ausgabe versuchen wir herauszufinden, an welcher Stelle das Skript die neue GootLoader-Version nicht dekodieren kann. In diesem Fall erhalten wir eine leere Inhaltsausgabe und daher ist das Skript früher im Prozess fehlgeschlagen. In Abbildung 2 sehen Sie über der Regex-Auswertung eine zusätzliche print-Anweisung zum Debuggen des Skripts:

Abbildung 2 – Drucken des Inhalts und der längsten Übereinstimmung der Regex.

Das erneute Ausführen des Skripts führt zu einer weiteren leeren Ausgabe. Daher ist weiteres Debuggen erforderlich. Auch hier fügen wir zwei print-Anweisungen um die nächste Regex-Auswertung herum ein, die wie folgt aussieht:

Abbildung 3 – Debug-Ausdrucke, um zu überprüfen, ob die Regex noch funktioniert.

An diesem Punkt erhalten wir endlich eine Ausgabe unserer Debug-Print-Anweisungen. Dies sagt uns, dass wir die Position gefunden haben, an der das Skript die neue Version der Malware nicht entschlüsseln kann.

Abbildung 4 – Gedruckter Skriptinhalt der neuen GootLoader-Version.

Um zu verstehen, warum diese spezielle Regex nicht mehr funktioniert, vergleichen wir unsere Debug-Ausgaben mit den Ausgaben einer älteren GootLoader-Version, in der der Decoder funktionierte. Anhand der Ausgabe des funktionierenden können wir sehen, wie es aussehen sollte (Abbildung 5).

Abbildung 5 – Gedruckter Skriptinhalt einer älteren GootLoader-Version.

Das Regex-Ergebnis für diese Auswertung sollte zu einer Liste von Variablen führen, die mit Pluszeichen verkettet sind. Diese Liste wird von GootLoader verwendet, um den Code in die richtige Reihenfolge zu bringen und ihn später mit der eval-Funktion auszuführen. Um das Skript zu entschlüsseln und die Domains und URLs zu extrahieren, müssen wir dasselbe tun und den Code in die richtige Reihenfolge bringen. Mit dieser Versionsanpassung verwendet GootLoader nicht mehr nur eine Anweisung, um den Code neu anzuordnen, sondern mehrere voneinander abhängige. Um das Skript zu reparieren, müssen wir zwei Änderungen vornehmen. Zuerst müssen wir das Regex-Muster anpassen, damit es zu den neuen Anweisungen passt. Zweitens müssen wir Logik hinzufügen, um den Code zusammenzuführen. Mit Hilfe von regex101.com können wir das Regex-Muster anpassen und korrigieren.


Abbildung 6 – Extrahieren der Anweisungen mit Regex.

Die Idee ist, alle Anweisungen zu extrahieren, die für die Codeanordnung verwendet werden.

Abbildung 7 – Definition des Regex-Musters zum Extrahieren der Anweisungen.

Jede Anweisung kann in die Variable und den Ausdruck aufgeteilt werden. Um den Überblick über die Variablen zu behalten, erstellen wir ein Wörterbuch, das die Variablen als Schlüssel und die Ausdrücke als Werte verwendet. Die letzte Anweisung ist die Hauptanweisung, die zum Verbinden des Codes verwendet wird. Für diese Anweisung ersetzen wir den Ausdruck basierend auf den Werten in unserem Wörterbuch und erhalten den endgültigen Ausdruck, der aus Variablen besteht, die sich auf Codefragmente beziehen. Die angepasste Codesequenz sieht so aus:

Abbildung 8 – Modifizierte Codesequenz zum Dekodieren der neuen GootLoader-Version.

Damit das Skript auch für ältere GootLoader-Versionen kompatibel bleibt, fügen wir eine If-Anweisung hinzu. Wenn wir keine Regex-Übereinstimmungen für die einfache Anweisung erhalten, verwenden wir den Code, der zusammengesetzte Anweisungen auswertet. Schließlich entfernen wir die Druckanweisungen, die wir zum Debuggen eingefügt haben, und führen das reparierte Skript aus, um die folgende Ausgabe zu erhalten:

Abbildung 9 – Ausgabe des GootLoader-Decodierungsskripts.

Dies ist der typische Prozess, den wir durchlaufen, um das Dekodierungsskript an neue GootLoader-Versionen anzupassen. Da die Bedrohungsakteure hinter GootLoader in letzter Zeit häufiger Versionsänderungen vorgenommen haben, mussten wir auch häufiger Änderungen an unserem Skript vornehmen. Wir hoffen, dass diese Erklärung hilfreich ist, um GootLoader zu analysieren und Anpassungen an unserem Decoder-Skript vorzunehmen.

Werkzeug

Sie können das neueste GootLoader-Decoder-Skript hier herunterladen:
https://github.com/hpthreatresearch/tools/blob/main/gootloader/decode.py

IOCs

Neue GootLoader-Version:
0a7c07fc84fd9f5b91bde6822b865f9647ca4ece67e8a4a646ce8d405187dc8b
hxxps://lakeside-fishandchips[.]com/test.php?sgjngbizjfwgs=
hxxps://learn.openschool[.]ua/test.php?sgjngbizjfwgs=
hxxps://kristinee[.]com/test.php?sgjngbizjfwgs=

Ältere GootLoader-Version:
765fbca3b6b1a922b442bc7304454e752e8bf231e2abe5060ace55db72c78d68
hxxps://kristinee[.]com/test.php?zemyrwgzcsnjur=
hxxps://kepw[.]org/test.php?zemyrwgzcsnjur=
hxxps://korsakovmusic[.]com/test.php?zemyrwgzcsnjur=

Author: admin

Leave a Reply

Your email address will not be published.