{"id":25688,"date":"2022-02-25T09:24:59","date_gmt":"2022-02-25T08:24:59","guid":{"rendered":"https:\/\/www.secuinfra.com\/?p=25688"},"modified":"2022-03-31T10:26:04","modified_gmt":"2022-03-31T08:26:04","slug":"n-w0rm-analyse-teil-1","status":"publish","type":"post","link":"https:\/\/www.secuinfra.com\/de\/techtalk\/n-w0rm-analyse-teil-1\/","title":{"rendered":"N-W0rm Analyse (Teil 1)"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-flat ez-toc-counter ez-toc-white ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">[inhalt_uebersetzt]<\/p>\n<span class=\"ez-toc-title-toggle\"><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.secuinfra.com\/de\/techtalk\/n-w0rm-analyse-teil-1\/#Ueberblick\" >\u00dcberblick<\/a><\/li><li class='ez-toc-page-1'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.secuinfra.com\/de\/techtalk\/n-w0rm-analyse-teil-1\/#Stufe_1\" >Stufe 1<\/a><\/li><li class='ez-toc-page-1'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.secuinfra.com\/de\/techtalk\/n-w0rm-analyse-teil-1\/#Stufe_2_RILSXDKOPJHNTXT\" >Stufe 2 (RILSXDKOPJHN.TXT)<\/a><\/li><li class='ez-toc-page-1'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.secuinfra.com\/de\/techtalk\/n-w0rm-analyse-teil-1\/#Stufe_3\" >Stufe 3<\/a><\/li><li class='ez-toc-page-1'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.secuinfra.com\/de\/techtalk\/n-w0rm-analyse-teil-1\/#Serienuebersicht\" >Serien\u00fcbersicht<\/a><\/li><\/ul><\/nav><\/div>\n<p>Laut Malware Bazaar werden Samples seit ca. Mitte Januar verbreitet. Der finale Payload ist ein .NET RAT, welcher dem Angreifer die M\u00f6glichkeit gibt, Befehle an das infizierte System zu senden.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Ueberblick\"><\/span>\u00dcberblick<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Gegenstand dieses Artikels ist unsere Analyse einer N-W0rm-Sample. Dieses Modul wurde erst vor kurzem entdeckt. Laut Malware Bazaar wurde die erste Variante am 18. Januar 2022 entdeckt.<\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"size-large wp-image-25505 aligncenter\" src=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/N-Worm_1-1-1024x365.png\" alt=\"\" width=\"1024\" height=\"365\" srcset=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_1-1-1024x365.png 1024w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_1-1-300x107.png 300w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_1-1-768x273.png 768w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_1-1-24x9.png 24w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_1-1-36x13.png 36w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_1-1-48x17.png 48w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_1-1.png 1390w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>Wir haben diese N-W0rm Variante von Malware Bazaar erhalten und wissen daher nicht, wie diese verbreitet wird. Laut @executemalware wird N-W0rm jedoch per E-Mail zugestellt.<\/p>\n<p><img decoding=\"async\" class=\"wp-image-25514 size-full aligncenter\" src=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/N-W0rm.png\" alt=\"\" width=\"656\" height=\"754\" srcset=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-W0rm.png 656w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-W0rm-261x300.png 261w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-W0rm-21x24.png 21w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-W0rm-31x36.png 31w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-W0rm-42x48.png 42w\" sizes=\"(max-width: 656px) 100vw, 656px\" \/><\/p>\n<p>Das analysierte Sample kann hier heruntergeladen werden:<\/p>\n<p><a  href=\"https:\/\/bazaar.abuse.ch\/sample\/1b976a1fa26c4118d09cd6b1eaeceafccc783008c22da58d6f5b1b3019fa1ba4\/\"  dpc-external=\"true\"  target=\"_blank\"  rel=\"nofollow\" >https:\/\/bazaar.abuse.ch\/sample\/1b976a1fa26c4118d09cd6b1eaeceafccc783008c22da58d6f5b1b3019fa1ba4\/<\/a><\/p>\n<p>Bevor wir mit der Analyse der N-W0rm Variante beginnen, sollten wir uns die Architektur der Kompromittierung genauer ansehen. Die folgende Abbildung zeigt die komplette Infektionskette, von der initialen Kompromittierung bis hin zum finalen Payload:<\/p>\n<figure id=\"attachment_25488\" aria-describedby=\"caption-attachment-25488\" style=\"width: 1024px\" class=\"wp-caption aligncenter\"><img decoding=\"async\" class=\"wp-image-25488 size-large\" src=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/N-Worm_1-1024x528.png\" alt=\"\" width=\"1024\" height=\"528\" srcset=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_1-1024x528.png 1024w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_1-300x155.png 300w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_1-768x396.png 768w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_1-24x12.png 24w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_1-36x19.png 36w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_1-48x25.png 48w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_1.png 1451w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption id=\"caption-attachment-25488\" class=\"wp-caption-text\">Abb.1: Infektionsverlauf<\/figcaption><\/figure>\n<p>Wie in der obigen Abbildung ersichtlich, endet die Infektion mit zwei .NET-Bin\u00e4rdateien, die abgelegt werden. Im heutigen Artikel wird der gesamte Weg von der ersten Infektion bis zu diesem Punkt beschrieben. Die Analyse der beiden Bin\u00e4rdateien wird in unserem n\u00e4chsten Artikel behandelt.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Stufe_1\"><\/span>Stufe 1<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Diese Variante wird als VBS-Datei geliefert, die obfuskiert ist, um die statische Analyse zu erschweren und Signaturen zu umgehen. In unserem ersten Schritt werden wir den VBS-Code deobfuskieren und die zweite Stufe enth\u00fcllen. Nachfolgend finden Sie den vollst\u00e4ndigen Code der ersten Stufe. Zeile 3 enth\u00e4lt eine ziemlich lange Zeichenfolge, die obfuskierten PowerShell enth\u00e4lt. Da diese lange Zeile das Bild zerst\u00f6ren w\u00fcrde, haben wir sie aus \u00e4sthetischen Gr\u00fcnden ersetzt.<\/p>\n<figure id=\"attachment_25489\" aria-describedby=\"caption-attachment-25489\" style=\"width: 1024px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-25489 size-large\" src=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/N-Worm_2-1024x122.jpeg\" alt=\"\" width=\"1024\" height=\"122\" srcset=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_2-1024x122.jpeg 1024w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_2-300x36.jpeg 300w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_2-768x92.jpeg 768w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_2-24x3.jpeg 24w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_2-36x4.jpeg 36w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_2-48x6.jpeg 48w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_2.jpeg 1183w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption id=\"caption-attachment-25489\" class=\"wp-caption-text\">Abb. 2:Initialer VBS Code<\/figcaption><\/figure>\n<p>Da der urspr\u00fcngliche Quelltext nur 5 Zeilen umfasst, k\u00f6nnen wir den Code Zeile f\u00fcr Zeile durchgehen. Hier werden einige wichtige Zeichenketten verschleiert, indem einige Zeichen durch andere Zeichen ersetzt werden und dieser Vorgang dann bei Ausf\u00fchrung r\u00fcckg\u00e4ngig gemacht wird. Wir k\u00f6nnen diesen Vorgang mit Hilfe der Python REPL r\u00fcckg\u00e4ngig machen.<\/p>\n<figure id=\"attachment_25490\" aria-describedby=\"caption-attachment-25490\" style=\"width: 662px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-25490 size-full\" src=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/N-Worm_3.jpeg\" alt=\"\" width=\"662\" height=\"99\" srcset=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_3.jpeg 662w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_3-300x45.jpeg 300w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_3-24x4.jpeg 24w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_3-36x5.jpeg 36w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_3-48x7.jpeg 48w\" sizes=\"(max-width: 662px) 100vw, 662px\" \/><figcaption id=\"caption-attachment-25490\" class=\"wp-caption-text\">Abb. 3: Entschleierung der 1. Zeile<\/figcaption><\/figure>\n<p>Die Zeichenkette wird also zu <strong>Wscript.SheLL<\/strong> gewandelt. Das bedeutet, dass dieses Beispiel sp\u00e4ter einige Befehle an das Betriebssystem senden wird. In der n\u00e4chsten Zeile passiert nichts von Relevanz, es wird lediglich das<strong> Wscript.SheLL-Objekt<\/strong> erstellt. Zeile 3 ist nun der interessante Teil, denn diese Zeile enth\u00e4lt eine lange Zeichenkette mit obfuskiertem PowerShell-Code. Wie in Zeile 4 wird auch dieser Code ausgef\u00fchrt. Diesen analysieren wir vollst\u00e4ndig, um diese Malware in G\u00e4nze zu verstehen. Wie in Zeile 3 ersichtlich, befindet sich der vollst\u00e4ndige PowerShell-Code in einer Zeile. Normalerweise schreiben wir keinen derartigen Code. Um ihn besser lesbar zu machen, m\u00fcssen wir diesen Code \u00fcber mehrere Zeilen verteilen. Semikolons (;) werden verwendet, um Zeilenumbr\u00fcche anzuzeigen. Um diese zu unserem Vorteil zu nutzen, k\u00f6nnen wir diese lange Zeile in einen Texteditor einf\u00fcgen und alle Semikolons durch einen Zeilenumbruch (\\n) und ein Semikolon ersetzen, damit die Syntax erhalten bleibt.<\/p>\n<figure id=\"attachment_25491\" aria-describedby=\"caption-attachment-25491\" style=\"width: 1024px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-25491 size-large\" src=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/N-Worm_4-1024x253.jpeg\" alt=\"\" width=\"1024\" height=\"253\" srcset=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_4-1024x253.jpeg 1024w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_4-300x74.jpeg 300w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_4-768x190.jpeg 768w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_4-24x6.jpeg 24w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_4-36x9.jpeg 36w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_4-48x12.jpeg 48w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_4.jpeg 1082w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption id=\"caption-attachment-25491\" class=\"wp-caption-text\">Abb. 4: Optisch verbesserter PowerShell Code<\/figcaption><\/figure>\n<p>Das erste, was uns ins Auge sticht, ist die IP-Adresse ganz oben. Wir werden sp\u00e4ter darauf zur\u00fcckkommen, aber\u00a0 zun\u00e4chst haben wir einen wichtigen IOC gefunden.<\/p>\n<p>Dieses PowerShell-Snippet definiert in Zeile 2 eine Funktion namens CHGBGWUCPVSBXIVTHVKR. Diese Funktion wird in Zeile 10 aufgerufen und das Ergebnis wird mit IEX in Zeile 11 ausgef\u00fchrt. Anhand des Aufrufs von IEX k\u00f6nnen wir also davon ausgehen, dass die Funktion weiteren PowerShell Code dekodiert, der ausgef\u00fchrt wird. Die Zeichenkette, die deobfuskiert werden soll, befindet sich in Zeile 10, die wiederum eine sehr lange Zeichenkette ist, die wir erneut ersetzt haben. Um diese Zeichenkette zu deobfuskieren, ist es wahrscheinlich am einfachsten, den gesamten Codeschnipsel zu kopieren, das IEX in Zeile 11 durch echo zu ersetzen und ihn in einer PowerShell-Sitzung auszuf\u00fchren. Alternativ k\u00f6nnte man die Funktion z. B. in Python neu implementieren und sie dort ausf\u00fchren. Wir haben uns f\u00fcr die zweite Methode entschieden und die Logik in Python neu implementiert. Der nachfolgende Screenshot zeigt den Code.<\/p>\n<figure id=\"attachment_25492\" aria-describedby=\"caption-attachment-25492\" style=\"width: 603px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-25492\" src=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/N-Worm_5.jpeg\" alt=\"\" width=\"603\" height=\"309\" srcset=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_5.jpeg 603w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_5-300x154.jpeg 300w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_5-24x12.jpeg 24w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_5-36x18.jpeg 36w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_5-48x25.jpeg 48w\" sizes=\"(max-width: 603px) 100vw, 603px\" \/><figcaption id=\"caption-attachment-25492\" class=\"wp-caption-text\">Abb.5: Reimplementierung der entschl\u00fcsselten Zeichenkette<\/figcaption><\/figure>\n<p>Wenn wir unser Python-Skript ausf\u00fchren, um die lange Zeichenfolge zu deobfuskieren, erhalten wir erneut einen verschleierten PowerShell-Befehl.<\/p>\n<figure id=\"attachment_25493\" aria-describedby=\"caption-attachment-25493\" style=\"width: 1024px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-25493\" src=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/N-Worm_6-1024x76.jpeg\" alt=\"\" width=\"1024\" height=\"76\" srcset=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_6-1024x76.jpeg 1024w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_6-300x22.jpeg 300w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_6-768x57.jpeg 768w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_6-24x2.jpeg 24w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_6-36x3.jpeg 36w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_6-48x4.jpeg 48w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_6.jpeg 1335w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption id=\"caption-attachment-25493\" class=\"wp-caption-text\">Abb. 6: Output des obigen Python-Skripts<\/figcaption><\/figure>\n<p>Auch jetzt k\u00f6nnen wir diesen Code entweder in eine PowerShell-Sitzung eingeben oder das Skript z. B. in Python neu erstellen und es dort ausf\u00fchren. Auch hier entscheiden wir uns f\u00fcr eine Neuimplementierung in Python. Der Code ist untenstehend zu sehen:<\/p>\n<figure id=\"attachment_25494\" aria-describedby=\"caption-attachment-25494\" style=\"width: 704px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-25494\" src=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/N-Worm_7.jpeg\" alt=\"\" width=\"704\" height=\"330\" srcset=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_7.jpeg 704w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_7-300x141.jpeg 300w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_7-24x11.jpeg 24w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_7-36x17.jpeg 36w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_7-48x23.jpeg 48w\" sizes=\"(max-width: 704px) 100vw, 704px\" \/><figcaption id=\"caption-attachment-25494\" class=\"wp-caption-text\">Abb. 7: Entschl\u00fcsselung und Output<\/figcaption><\/figure>\n<p>Dieser letzte dekodierte Befehl bringt uns zur\u00fcck zum Anfang. Erinnern Sie sich an die IP-Adresse am Anfang? Das ist der Inhalt der Variablen $Hx. Die komplette Dekodierung dient also nur dazu, die Datei herunterzuladen und auszuf\u00fchren.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Stufe_2_RILSXDKOPJHNTXT\"><\/span>Stufe 2 (RILSXDKOPJHN.TXT)<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Nun, die zweite Stufe sieht ein bisschen umfangreicher aus als die erste. Dieses Beispiel ist vollgepackt mit obfuskierten Zeichenketten und die Verwendung der replace-Funktion ist hier recht dominierend. Da diese Phase etwas mehr Code enth\u00e4lt als die vorherige, werden wir hier nicht jede einzelne Zeile durchgehen. Wenn Sie wirklich verstehen wollen, was hier passiert, empfehlen wir Ihnen, die Variante selbst herunterzuladen und mitzuverfolgen.<\/p>\n<p>Wir beginnen mit der Dekodierung des ersten gro\u00dfen Blocks der obfuskierten Zeichenfolge gleich zu Beginn:<\/p>\n<figure id=\"attachment_25495\" aria-describedby=\"caption-attachment-25495\" style=\"width: 1024px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-25495\" src=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/N-Worm_8-1024x117.jpeg\" alt=\"\" width=\"1024\" height=\"117\" srcset=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_8-1024x117.jpeg 1024w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_8-300x34.jpeg 300w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_8-768x88.jpeg 768w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_8-24x3.jpeg 24w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_8-36x4.jpeg 36w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_8-48x5.jpeg 48w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_8.jpeg 1418w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption id=\"caption-attachment-25495\" class=\"wp-caption-text\">Abb. 8: Erster Block des verschleierten Codes der Stufe 2<\/figcaption><\/figure>\n<p>Die obfuskierte Zeichenfolge steht in der zweiten Zeile. Diese Zeichenfolge wird zun\u00e4chst durch zweimaligen Aufruf von replace() ge\u00e4ndert. Schlie\u00dflich wird die Zeichenkette durch die Schleife in Zeile 3 deobfuskiert. Diese Schleife mag auf den ersten Blick seltsam aussehen, aber sie ist recht einfach: Sie beginnt mit dem Aufruf von -split f\u00fcr die Zeichenkette aus Zeile 2, d. h. die Umwandlung der gro\u00dfen Zeichenkette in eine Liste auf der Grundlage einer Bedingung. Diese Regex-basierte Bedingung sucht nach Hex-Zeichen und teilt diese nach jedem zweiten Erscheinen. Das bedeutet, dass unsere Iterationsvariable immer zwei Hex-Zeichen enth\u00e4lt. Diese Zeichen werden dann in ASCII umgewandelt und schlie\u00dflich miteinander verkettet. Wenn wir all dies zusammenf\u00fcgen, k\u00f6nnen wir diese Logik in Python nachbilden.<\/p>\n<figure id=\"attachment_25496\" aria-describedby=\"caption-attachment-25496\" style=\"width: 754px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-25496\" src=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/N-Worm_9.jpeg\" alt=\"\" width=\"754\" height=\"288\" srcset=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_9.jpeg 754w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_9-300x115.jpeg 300w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_9-24x9.jpeg 24w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_9-36x14.jpeg 36w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_9-48x18.jpeg 48w\" sizes=\"(max-width: 754px) 100vw, 754px\" \/><figcaption id=\"caption-attachment-25496\" class=\"wp-caption-text\">Abb. 9: Python-basierte Entschleierung des ersten Blocks<\/figcaption><\/figure>\n<p>Wenn Sie dieses Skript ausf\u00fchren, erhalten Sie die folgende Ausgabe (der \u00dcbersichtlichkeit halber habe ich die Variable $A1 aus der ersten Zeile hinzugef\u00fcgt):<\/p>\n<figure id=\"attachment_25497\" aria-describedby=\"caption-attachment-25497\" style=\"width: 1024px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-25497\" src=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/N-Worm_10-1024x127.jpeg\" alt=\"\" width=\"1024\" height=\"127\" srcset=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_10-1024x127.jpeg 1024w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_10-300x37.jpeg 300w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_10-768x95.jpeg 768w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_10-24x3.jpeg 24w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_10-36x4.jpeg 36w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_10-48x6.jpeg 48w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_10.jpeg 1141w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption id=\"caption-attachment-25497\" class=\"wp-caption-text\">Abb. 10: Erster vollst\u00e4ndig entschleierter Block<\/figcaption><\/figure>\n<p>Auch hier erhalten wir einen interessanten IOC. Die zweite Stufe beginnt also mit der Erstellung des Verzeichnisses <strong>C:\\ProgramData\\YHWZHLCQJHGQRFRHWZLCKSEUZIHLSJYATIODFBQPXTUSLQUEHVXQJENITGNZ<\/strong> und schl\u00e4ft dann 3 Sekunden lang.<\/p>\n<p>Die n\u00e4chsten beiden Zeilen sind wichtig, weil wir hier unsere Persistenzindikatoren erhalten. Das neu erstellte Verzeichnis wird als StartUp festgelegt, d. h. es wird bei jedem Neustart des Systems ausgef\u00fchrt. Gehen wir zur\u00fcck zum Code und sehen wir uns den n\u00e4chsten Block an.<\/p>\n<p>Der n\u00e4chste Schritt ist interessant. Die Variable<strong> $ZEJOTRZCRVYEGGCGNZPLJDJROGPKEIGINPVGHOQXYSFSXBDOKJATKYHEPRNO<\/strong> enth\u00e4lt einen scheinbaren HTML-Inhalt, der mit einem Skriptblock beginnt, der VBScript-Code andeutet.<\/p>\n<figure id=\"attachment_25498\" aria-describedby=\"caption-attachment-25498\" style=\"width: 588px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-25498\" src=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/N-Worm_11.png\" alt=\"\" width=\"588\" height=\"89\" srcset=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_11.png 588w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_11-300x45.png 300w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_11-24x4.png 24w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_11-36x5.png 36w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_11-48x7.png 48w\" sizes=\"(max-width: 588px) 100vw, 588px\" \/><figcaption id=\"caption-attachment-25498\" class=\"wp-caption-text\">Abb. 11: Beginn des Skriptblocks<\/figcaption><\/figure>\n<p>Die Funktion <strong>var_func()<\/strong> ben\u00f6tigt keine Argumente und hat nur den Zweck, mehrere in ihr enthaltene Zeichenketten zu entschleiern.<\/p>\n<p>In Zeile 36 sehen wir, dass dies eine hta-Datei sein wird, die unter folgendem Pfad gespeichert wird: <strong>C:\\Programdata\\YHWZHLCQJHGQRFRHWZLCKSEUZIHLSJYATIODFBQPXTUSLQUEHVXQJENITGNZ\\YHWZHLCQJHGQRFRHWZLCKSEUZIHLSJYATIODFBQPXTUSLQUEHVXQJENITGNZ.HTA<\/strong><\/p>\n<figure id=\"attachment_25499\" aria-describedby=\"caption-attachment-25499\" style=\"width: 1024px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-25499\" src=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/N-Worm_12-1024x49.png\" alt=\"\" width=\"1024\" height=\"49\" srcset=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_12-1024x49.png 1024w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_12-300x14.png 300w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_12-768x37.png 768w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_12-24x1.png 24w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_12-36x2.png 36w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_12-48x2.png 48w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_12.png 1451w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption id=\"caption-attachment-25499\" class=\"wp-caption-text\">Abb. 12: Erstellung einer HTA Datei<\/figcaption><\/figure>\n<p>Da der Inhalt dieses hta nur durch die Verwendung von wiederholten Aufrufen von replace() obfuskiert wird, werden wir nicht alle Schritte zur Entschleierung zeigen, sondern nur das Endergebnis. Die Entschl\u00fcsselung endet damit, dass die Skripte die n\u00e4chste Stufe von http:\/\/15.188.246[.]78\/Q\/SSSSSSHSJSJSA.txt herunterladen und ausf\u00fchren.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Stufe_3\"><\/span>Stufe 3<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Dies wird die letzte Phase sein, das verspreche ich!<\/p>\n<p>Wieder werden wir mit einem Haufen obfuskiertem Codes begr\u00fc\u00dft. Diesmal gibt es zwei gro\u00dfe Bl\u00f6cke von obfuskiertem Code. Beide Strings beginnen mit 4D5A, d.h. dem MZ-Header.<\/p>\n<p>Danach folgt eine Funktion namens vip(). Sie sieht zwar etwas verwirrend aus, aber sie dekodiert nur die base64-Eingabe.<\/p>\n<p>Schlie\u00dflich enth\u00e4lt der Code einen gro\u00dfen Block obfuskiertem Codes, der als Eingabe an die Funktion vip() \u00fcbergeben wird. \u00dcbergeben wir diesen gro\u00dfen Codeblock an die vip()-Funktion und sehen wir uns an, was passiert. Um die Dinge vielleicht ein wenig leichter zu verstehen, habe ich den entschl\u00fcsselten Block unten eingef\u00fcgt.<\/p>\n<figure id=\"attachment_25500\" aria-describedby=\"caption-attachment-25500\" style=\"width: 1024px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-25500\" src=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/N-Worm_13-1024x704.jpeg\" alt=\"\" width=\"1024\" height=\"704\" srcset=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_13-1024x704.jpeg 1024w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_13-300x206.jpeg 300w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_13-768x528.jpeg 768w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_13-24x17.jpeg 24w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_13-36x25.jpeg 36w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_13-48x33.jpeg 48w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_13.jpeg 1335w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption id=\"caption-attachment-25500\" class=\"wp-caption-text\">Abb. 13: Letzter Codeblock der dritten Stufe<\/figcaption><\/figure>\n<p>Wir k\u00f6nnen eine neue Funktion namens HB sehen, die einen einzigen Parameter annimmt und anscheinend eine Dekodierung vornimmt. Diese Funktion wird in den Zeilen 17 und 18 aufgerufen. Weiter unten erkennen wir einige wichtige Strings. Sehen Sie sich z. B. Zeile 33 an, wo wir Teile von .NET-Code zum Laden von Bin\u00e4rdateien in den Speicher sehen. Ich nehme an, dass alle Zeilen ab 19 nur daf\u00fcr zust\u00e4ndig sind, die beiden Bin\u00e4rdateien zu laden, die in den Zeilen 17 und 18 dekodiert werden. Im Moment bin ich nicht wirklich daran interessiert, wie die Bin\u00e4rdateien geladen werden, sondern nur an den Bin\u00e4rdateien, die wir auf die Festplatte auslagern, indem wir sie deobfuskieren. Da wir nur die beiden Strings ben\u00f6tigen, die mit 4D5A beginnen &#8211; die Funktion, um sie zu entschl\u00fcsseln, und dann einen einzigen Aufruf der Funktion, k\u00f6nnen wir den folgenden Code schreiben.<\/p>\n<figure id=\"attachment_25501\" aria-describedby=\"caption-attachment-25501\" style=\"width: 1024px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-25501\" src=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/N-Worm_14-1024x359.jpeg\" alt=\"\" width=\"1024\" height=\"359\" srcset=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_14-1024x359.jpeg 1024w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_14-300x105.jpeg 300w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_14-768x269.jpeg 768w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_14-24x8.jpeg 24w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_14-36x13.jpeg 36w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_14-48x17.jpeg 48w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_14.jpeg 1300w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption id=\"caption-attachment-25501\" class=\"wp-caption-text\">Abb. 14: Entschleierung der zwei PEs<\/figcaption><\/figure>\n<p>Bei der Ausf\u00fchrung dieses Codes werden zwei .NET-Bin\u00e4rdateien ausgegeben, die im n\u00e4chsten Artikel analysiert werden.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-25518 size-large\" src=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/N-Worm_15-2-1024x77.png\" alt=\"\" width=\"1024\" height=\"77\" srcset=\"https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_15-2-1024x77.png 1024w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_15-2-300x23.png 300w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_15-2-768x58.png 768w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_15-2-24x2.png 24w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_15-2-36x3.png 36w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_15-2-48x4.png 48w, https:\/\/www.secuinfra.com\/wp-content\/uploads\/\/N-Worm_15-2.png 1332w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p><strong>Host-basierende Indikatoren:<\/strong><\/p>\n<ul>\n<li>C:\\ProgramData\\YHWZHLCQJHGQRFRHWZLCKSEUZIHLSJYATIODFBQPXTUSLQUEHVXQJENITGNZ\\YHWZHLCQJHGQRFRHWZLCKSEUZIHLSJYATIODFBQPXTUSLQUEHVXQJENITGNZ.HTA<\/li>\n<li>MD5 (RILSXDKOPJHN.TXT) = 3d8ff7f298f64d9150a11e61dcbfd87b<\/li>\n<li>MD5 (SSSSSSHSJSJSA.txt) = 9ce8d6f136b95fab140bc8904666003a<\/li>\n<li>MD5 (1b976a1fa26c4118d09cd6b1eaeceafccc783008c22da58d6f5b1b3019fa1ba4.vbs) = e04e4cb7e410b885babba54cd59d5ae9<\/li>\n<li>MD5 (first_pe.exe) = 83dc22a1493e609b8b16f732e909418f<\/li>\n<li>MD5 (second_pe.exe) = 08587e04a2196aa97a0f939812229d2d<\/li>\n<\/ul>\n<p><strong>Network-basierende Indikatoren:<\/strong><\/p>\n<ul>\n<li>http:\/\/15.188.246.78\/Q\/SSSSSSHSJSJSA.txt<\/li>\n<li>http:\/\/15.188.246.78\/Q\/RILSXDKOPJHN.TXT<\/li>\n<\/ul>\n<div class=\"fazit\"><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Serienuebersicht\"><\/span>Serien\u00fcbersicht<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><a href=\"https:\/\/www.secuinfra.com\/de\/techtalk\/n-w0rm-analyse-teil-2\/\">N-W0rm Analyse Teil 2<\/a><\/p>\n<p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Laut Malware Bazaar werden Samples seit ca. Mitte Januar verbreitet. Der finale Payload ist ein .NET RAT, welcher dem Angreifer die M\u00f6glichkeit gibt, Befehle an das infizierte System zu senden.<\/p>\n","protected":false},"author":6,"featured_media":26120,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[79,80,66],"tags":[],"dpc_coauthors":[],"class_list":["post-25688","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-digital-forensics","category-incident-response","category-techtalk"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.secuinfra.com\/de\/wp-json\/wp\/v2\/posts\/25688","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.secuinfra.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.secuinfra.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.secuinfra.com\/de\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.secuinfra.com\/de\/wp-json\/wp\/v2\/comments?post=25688"}],"version-history":[{"count":0,"href":"https:\/\/www.secuinfra.com\/de\/wp-json\/wp\/v2\/posts\/25688\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.secuinfra.com\/de\/wp-json\/wp\/v2\/media\/26120"}],"wp:attachment":[{"href":"https:\/\/www.secuinfra.com\/de\/wp-json\/wp\/v2\/media?parent=25688"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.secuinfra.com\/de\/wp-json\/wp\/v2\/categories?post=25688"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.secuinfra.com\/de\/wp-json\/wp\/v2\/tags?post=25688"},{"taxonomy":"dpc_coauthors","embeddable":true,"href":"https:\/\/www.secuinfra.com\/de\/wp-json\/wp\/v2\/dpc_coauthors?post=25688"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}