{"id":64678,"date":"2026-05-19T17:39:47","date_gmt":"2026-05-19T15:39:47","guid":{"rendered":"https:\/\/www.secuinfra.com\/?p=64678"},"modified":"2026-05-20T11:11:55","modified_gmt":"2026-05-20T09:11:55","slug":"commieloader-nutzung-von-sumatra-pdf-fuer-das-forward-sideloading-von-dlls","status":"publish","type":"post","link":"https:\/\/testing.secuinfra.com\/de\/techtalk\/commieloader-nutzung-von-sumatra-pdf-fuer-das-forward-sideloading-von-dlls\/","title":{"rendered":"CommieLoader: Nutzung von SUMATRA PDF f\u00fcr das Forward-Sideloading von DLLs"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_83 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:\/\/testing.secuinfra.com\/de\/techtalk\/commieloader-nutzung-von-sumatra-pdf-fuer-das-forward-sideloading-von-dlls\/#Wichtigste_Erkenntnisse\" >Wichtigste Erkenntnisse<\/a><\/li><li class='ez-toc-page-1'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/testing.secuinfra.com\/de\/techtalk\/commieloader-nutzung-von-sumatra-pdf-fuer-das-forward-sideloading-von-dlls\/#Ueberblick\" >\u00dcberblick<\/a><\/li><li class='ez-toc-page-1'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/testing.secuinfra.com\/de\/techtalk\/commieloader-nutzung-von-sumatra-pdf-fuer-das-forward-sideloading-von-dlls\/#Zeitrahmen\" >Zeitrahmen<\/a><\/li><li class='ez-toc-page-1'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/testing.secuinfra.com\/de\/techtalk\/commieloader-nutzung-von-sumatra-pdf-fuer-das-forward-sideloading-von-dlls\/#Analyse_der_Schadsoftware\" >Analyse der Schadsoftware<\/a><\/li><\/ul><\/nav><\/div>\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Wichtigste_Erkenntnisse\"><\/span>Wichtigste Erkenntnisse<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Im Rahmen eines Einsatzes zur Incident Response identifizierte das SECUINFRA Falcon Team eine interessante Malware-Probe mit dem Codenamen \u201eCommieLoader\u201c, die sich als Bewerbungsformular tarnt.<\/li>\n\n\n\n<li>CommieLoader installierte einen Cobalt Strike Beacon, der vom Angreifer f\u00fcr die Command-and-Control-Kommunikation genutzt wurde<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Ueberblick\"><\/span>\u00dcberblick<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Unserem Kunden wurde per E-Mail ein ZIP-Archiv zugespielt, welche drei Dateien enthielt. Diese enthielt eine bisher unbekannte Malware, die wir aufgrund gewisser Artefakte \u201cCommieLoader\u201d nennen, welche schlussendlich zu einer Datenexfiltration f\u00fchrte. Im folgenden untersuchen wir die komplette Angriffskette dieser Malware.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Zeitrahmen\"><\/span>Zeitrahmen<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Die initiale Infektion erfolgte in dem Download-Verzeichnis des Nutzers. Durch die Ausf\u00fchrung des Sumatra Installers, welche in dem ZIP-Archiv enthalten war, wurde die malizi\u00f6se dbgcore.dll des selben Verzeichnisses mithilfe DLL-ForwardSideloadings geladen und Schadroutinen ausgef\u00fchrt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Im Folgenden sehen wir uns gemeinsam die schadhafte Datei dbgcore.dll an.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Analyse_der_Schadsoftware\"><\/span>Analyse der Schadsoftware<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Dbgcore.dll : a9121e70c39de2c10e6790da4aa3a22079242a201da2c1aeeb4ed65070e68e93<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">SumatraPDF installer (\u201cVersion_Bewerbung_2.0_202566_Bewerbungsnummer_0234521870_Datum_0000000200.exe&#8220;):<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">cb1d73323d3d80004ada185844b0d461abd9ded736d5dc690607f935b4f2b58a<strong><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Settings.txt :<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">b9fac5fd68f333b9459fa4b0111da8fba64a20022df8ea8595eae6a2fc4b9d9d<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Im Rahmen unserer Untersuchungen fanden wir auf einer der Systeme unserer Kunden ein ZIP-Archiv das vermeintlich Bewerbungsunterlagen beinhalten sollte, stattdessen aber ein Installationsprogramm des SumatraPDF Viewers, eine Textdatei mit dem Namen \u201cSettings.txt\u201d und eine Dymanic-Linked-Library (DLL) namens \u201cdbgcore.dll\u201d enthielt. Bei dem Installationsprogramm handelt es sich um eine legitime PE, welche eine Signatur von Krzysztof Kowalczyk (dem Entwickler von SumatraPDF) enth\u00e4lt und deren Hash mit dem offiziellen Installer von SumatraPDF Version 3.3.3 \u00fcbereinstimmt, weshalb unser Fokus vorerst auf die dbgcore.dll fiel.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">dbgcore.dll w\u00e4re, insofern legitim, eine Windows-Systemdatei f\u00fcr Diagnosefunktionen und Speicherabbilder, welche direkt von Microsoft als Teil der Entwicklertools bereitgestellt wird. Sie h\u00e4lt sich in der Regel allerdings nicht in Dokumentenverzeichnissen auf. Unsere DLL war zudem mit zwei ung\u00fcltigen Zertifikaten ausgestattet, welche im folgenden gezeigt werden:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img fetchpriority=\"high\" decoding=\"async\" width=\"812\" height=\"964\" src=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb1.png\" alt=\"\" class=\"wp-image-64947\" srcset=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb1.png 812w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb1-674x800.png 674w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb1-768x912.png 768w\" sizes=\"(max-width: 812px) 100vw, 812px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"812\" height=\"964\" src=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb2.png\" alt=\"\" class=\"wp-image-64948\" srcset=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb2.png 812w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb2-674x800.png 674w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb2-768x912.png 768w\" sizes=\"(max-width: 812px) 100vw, 812px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Abbildung 1 &amp; 2: Ung\u00fcltige Zertifikate von \u201eESET, spol. s.r.o.\u201c<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn man sich die Tabelle der importierten DLLs des Sumatra-Installers ansieht, f\u00e4llt auf, dass dbgcore.dll gar nicht direkt importiert wird. <strong>Unsere Hauptaufgabe in diesem Schritt der Analyse ist also zu kl\u00e4ren, wie ein Aufruf des Sumatra-Installationsprogramms (des \u201eBewerbungsschreibens\u201c) zur Ausf\u00fchrung der potenziell schadhaften dbgcore.dll f\u00fchrt.<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"400\" height=\"348\" src=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb3.png\" alt=\"\" class=\"wp-image-64949\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Abbildung 3: Importierte DLLs des Sumatra Installers<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn wir jedoch den Installer in einem Disassembler \u00f6ffnen, sehen wir, wie der Installer versucht, eine DLL namens \u201cdbghelp.dll\u201d in den Prozess zu laden.<br><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1276\" height=\"582\" src=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb4.png\" alt=\"\" class=\"wp-image-64950\" srcset=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb4.png 1276w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb4-800x365.png 800w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb4-768x350.png 768w\" sizes=\"(max-width: 1276px) 100vw, 1276px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Abbildung 4: Importierung der legitimen dbghelp.dll<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Auf dem ersten Blick scheint der Installer die DLL dbghelp.dll sauber zu laden: der absolute Pfad der DLL wird mithilfe von PathAppendW() aus dem R\u00fcckgabewert von GetSystemDirectoryW() und \u201ddbghelp.dll\u201d zusammengebaut und erst dann wird die DLL mithilfe von LoadLibraryW() importiert.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn wir uns jedoch anschauen, wozu der Handle der importierten DLL verwendet wird, sehen wir einen Aufruf zu GetProcAddress() mit MiniDumpWriteDump als zweiten Parameter:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1372\" height=\"258\" src=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb5.png\" alt=\"\" class=\"wp-image-64951\" srcset=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb5.png 1372w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb5-800x150.png 800w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb5-768x144.png 768w\" sizes=\"(max-width: 1372px) 100vw, 1372px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Abbildung 5: Aufl\u00f6sung der Adresse zu MiniDumpWriteDump<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn man nun einen Blick in die Export-Tabelle der dbghelp.dll wirft, sieht man, dass die Funktion MiniDumpWriteDump zu \u201edbgcore.dll\u201c geforwarded wird:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1582\" height=\"44\" src=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb6.png\" alt=\"\" class=\"wp-image-64952\" srcset=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb6.png 1582w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb6-800x22.png 800w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb6-768x21.png 768w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb6-1536x43.png 1536w\" sizes=\"(max-width: 1582px) 100vw, 1582px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Abbildung 6: MiniDumpWriteDump als forwarded function, welche in der dbgcore.dll implementiert ist<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Um herauszufinden, wie der Einstiegspunkt der dbgcore.dll aufgerufen wird, haben den Sumatra Installer mit einer legitimen dbgcore.dll im selben Verzeichnis, in einem Debugger ge\u00f6ffnet. Dabei haben wir einen Breakpoint auf GetProcAddress()gesetzt und nach einer Weile single stepping stellten wir fest, dass LdrpCallInitRoutine() mit dem Einstiegspunkt der aufzurufenden DLL aufgerufen wird.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"224\" src=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb7-1600x224.png\" alt=\"\" class=\"wp-image-64953\" srcset=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb7-1600x224.png 1600w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb7-800x112.png 800w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb7-768x108.png 768w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb7-1536x215.png 1536w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb7.png 1798w\" sizes=\"(max-width: 1600px) 100vw, 1600px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Abbildung 7: Callstack von GetProcAddress zu LdrpCallInitRoutine<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wie man hier im Screenshot erkennen kann, wird hier LdrpCallInitRoutine() mit der Addresse des Einstiegspunktes im RCX Register (1. Parameter) aufgerufen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"445\" src=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb8-1600x445.png\" alt=\"\" class=\"wp-image-64954\" srcset=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb8-1600x445.png 1600w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb8-800x222.png 800w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb8-768x213.png 768w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb8-1536x427.png 1536w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb8-2048x569.png 2048w\" sizes=\"(max-width: 1600px) 100vw, 1600px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Abbildung 8: Aufruf zu LdrpCallInitRoutine mit dem Einstiegspunkt der dbgcore.dll im RCX register (Erster Parameter bei __fastcall)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dies bekr\u00e4ftigt unsere Vermutung, &nbsp;dass sich der Schadcode im Einstiegspunkt der malizi\u00f6sen dbgcore.dll befindet. Im Vergleich zu normalem DLL-Search-Order-Hijacking, wird in diesem das Laden, der malizi\u00f6sen DLL von einer weiteren DLL \u00fcbernommen, welche in diesem Fall die dbghelp.dll ist.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Exports<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn wir einen Blick in die Export-Tabelle unserer DLL werfen, erkennen wir, dass die vorliegende Datei dbgcore.dll insgesamt 38 Funktionen exportiert. <a  href=\"https:\/\/strontic.github.io\/xcyclopedia\/library\/dbgcore.dll-4A77035E26FA131A2F639CEA80E89773.html\"  dpc-external=\"true\"  target=\"_blank\"  rel=\"nofollow\" >Die echte dbgcore.dll Datei<\/a><a><\/a><a><\/a>, welche von Microsoft herausgegeben wird, exportiert hingegen nur zwei Funktionen (MiniDumpReadDumpStream und MiniDumpWriteDump). Zudem sind aktuelle, von Microsoft bereitgestellte Versionen der DLL \u00fcblicherweise signiert, was hier nicht der Fall ist. Die folgenden exportierten Funktionsnamen in unserem dbgcore.dll Sample stechen besonders hervor:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>ladeComm<br>antifa<br>kommEncoding<br>helloFriendssscommIsCom<br>stalin<br>SW3_HashSyscall<br>SC_Address<br>GetStalinNumber<br>GetStalin<br>AAAWriteaaaaaVirtualComm<br>ResumeComm<br>ProtectComm<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wir erkennen, dass die zwei originalen dbgcore.dll-Funktionen MiniDumpWriteDump und MiniDumpReadDumpStream nicht in dieser Liste vorzufinden sind. Stattdessen gibt es Verweise auf \u201cstalin\u201d, \u201cgetStalinNumber\u201d, \u201cSW3_HashSyscall\u201d, welche eher un\u00fcbliche Verweise f\u00fcr eine DLL sind. Somit kommen wir zu dem Schluss, dass es sich um eine schadhafte DLL ohne Bezug zur der legitimen dbgcore.dll von Microsoft handelt.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Deep Dive<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn wir die dbgcore.dll in einem Disassembler \u00f6ffnen, und zur Hauptfunktion (DllMain) springen, sehen wir folgendes:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1198\" height=\"506\" src=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb9.png\" alt=\"\" class=\"wp-image-64955\" srcset=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb9.png 1198w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb9-800x338.png 800w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb9-768x324.png 768w\" sizes=\"(max-width: 1198px) 100vw, 1198px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Abbildung 9: DllMain<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der Schadcode in der mw_Entrypoint() Funktion wird also nur ausgef\u00fchrt, wenn die DLL mithilfe von LoadLibrary() oder einer \u00e4hnlichen API geladen wird und somit fdwReason auf DLL_PROCESS_ATTACH gesetzt wird.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In der mw_Entrypoint() Funktion, k\u00f6nnen wir einen groben \u00dcberblick \u00fcber die Schadsoftware bekommen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1498\" height=\"1600\" src=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb10-1498x1600.png\" alt=\"\" class=\"wp-image-64956\" srcset=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb10-1498x1600.png 1498w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb10-749x800.png 749w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb10-768x820.png 768w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb10-1438x1536.png 1438w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb10.png 1708w\" sizes=\"(max-width: 1498px) 100vw, 1498px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Abbildung 10: Einstiegspunkt der Dll (Schadcode)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hier erkennt man drei Funktionsaufrufe welche \u00fcberpr\u00fcfen, ob das Programm innerhalb einer Sandbox oder Analyseumgebung ausgef\u00fchrt wird, gefolgt von zwei weiteren Funktionsaufrufen, welche dar\u00fcber entscheiden, ob der Schadcode ausgef\u00fchrt wird oder nicht.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Anti-Sandbox Mechanismen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Die erste Funktion, mw_ramCheck(), fragt die Gr\u00f6\u00dfe des Arbeitsspeichers ab. Nur wenn mehr als ~4.19 GB auf dem System installiert ist wird die Ausf\u00fchrung an den Aufrufer zur\u00fcckgegeben. Falls dies nicht der Fall ist wird tooLittleRam() aufgerufen, welches das Programm stoppt. Ein m\u00f6gliches Szenario, welches zum Abbruch f\u00fchren w\u00fcrde, w\u00e4re zum Bespiel die Ausf\u00fchrung in einer Sandbox oder virtuellen Maschine, welche weniger als 4GB RAM hat.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1070\" height=\"518\" src=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb11.png\" alt=\"\" class=\"wp-image-64957\" srcset=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb11.png 1070w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb11-800x387.png 800w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb11-768x372.png 768w\" sizes=\"(max-width: 1070px) 100vw, 1070px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Abbildung 11: Sandbox-Check via Abfrage des physischen Arbeitsspeichers<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die n\u00e4chste Funktion mw_detectResolution() \u00fcberpr\u00fcft, ob die Position des rechten, unteren Pixels des Desktopfensters gr\u00f6\u00dfer als 1023 ist. Falls dies nicht der Fall sein sollte, nimmt das Programm an, dass es unter einer kontrollierten Umgebung, welche oftmals Aufl\u00f6sungen unter 1280&#215;1024 Pixeln verwenden, ausgef\u00fchrt wird und stoppt die weitere Ausf\u00fchrung. Andernfalls wird die Ausf\u00fchrung an den Aufrufer zur\u00fcckgegeben.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1240\" height=\"534\" src=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb12.png\" alt=\"\" class=\"wp-image-64958\" srcset=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb12.png 1240w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb12-800x345.png 800w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb12-768x331.png 768w\" sizes=\"(max-width: 1240px) 100vw, 1240px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Abbildung 12: Sandbox-Check via Abfrage der Bildschirmaufl\u00f6sung des Desktops<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der dritte Sandbox-Check mw_cpuCount() bricht das Programm ab, falls die Anzahl der Prozessorkerne des Systems weniger als 2 ist.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1232\" height=\"318\" src=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb13.png\" alt=\"\" class=\"wp-image-64959\" srcset=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb13.png 1232w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb13-800x206.png 800w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb13-768x198.png 768w\" sizes=\"(max-width: 1232px) 100vw, 1232px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Abbildung 13: Sandbox Check via Abfrage der Prozessorkerne<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der vierte Sandbox-Check &nbsp;mw_timeDetect() \u00fcberpr\u00fcft, ob die Sleep API gehooked wird. Sandboxen, Analyse-Tools oder Endpoint Detection and Response L\u00f6sungen bedienen zum Teil diesem Trick, um l\u00e4ngere Wartezeiten eines schadhaften Programms zu verk\u00fcrzen. Es wird zuerst GetTickCount aufgerufen, gefolgt von einem Aufruf von Sleep() mit einer Sekunde. Danach wird GetTickCount() ein weiteres mal aufgerufen und die Differenz zwischen dem zweiten Tickcount mit dem initialen Tickcount gegen 0.9 Sekunden verglichen. Falls das Ergebnis niedriger ist als 0.9 Sekunden, wird die Sleep-Funktion gehooked und der Wert 1 zur\u00fcckgegeben, wodurch das Programm dann abbricht.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"882\" height=\"382\" src=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb14.png\" alt=\"\" class=\"wp-image-64960\" srcset=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb14.png 882w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb14-800x346.png 800w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb14-768x333.png 768w\" sizes=\"(max-width: 882px) 100vw, 882px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Abbildung 14: Timing check ob Sleep gehooked wird<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der letzte Sandbox-Check, mw_hostnameCheck(), ist trivialer und vergleicht den Namen des Hosts gegen die Namen von popul\u00e4ren Sandboxen. Nur wenn dabei kein Treffer erzielt wird, wird 0 zur\u00fcckgegeben und die Ausf\u00fchrung des tats\u00e4chlichen Schadcodes beginnt, vorausgesetzt, nicht einer der vorherigen Checks hat angeschlagen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1386\" height=\"820\" src=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb15.png\" alt=\"\" class=\"wp-image-64961\" srcset=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb15.png 1386w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb15-800x473.png 800w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb15-768x454.png 768w\" sizes=\"(max-width: 1386px) 100vw, 1386px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Abbildung 15: Sandbox Check via Abfrage des Hostnames<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nur wenn alle f\u00fcnf Sandbox Checks \u00fcberstanden wurden, wird der restliche Code ausgef\u00fchrt. Zuerst wird die globale Variable CmdLine mit der Zeichenkette \u201cWmiPrvSE.exe\u201d, d.h. der Executable des Windows Management Instrumentation (WMI) Provider Services, gef\u00fcllt. Danach wird die Funktion mw_read_settings() aufgerufen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1520\" height=\"1512\" src=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb16.png\" alt=\"\" class=\"wp-image-64962\" srcset=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb16.png 1520w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb16-800x796.png 800w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb16-768x764.png 768w\" sizes=\"(max-width: 1520px) 100vw, 1520px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Abbildung 16: CommieLoaders\u2019 Kernfunktionalit\u00e4ten<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">mw_read_settings() setzt das aktuelle Verzeichnis auf das Verzeichnis, in dem sich der Installer befindet und liest den Inhalt der \u201eSettings.txt\u201c Datei in die globale Variable my_payload.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1488\" height=\"1070\" src=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb17.png\" alt=\"\" class=\"wp-image-64963\" srcset=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb17.png 1488w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb17-800x575.png 800w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb17-768x552.png 768w\" sizes=\"(max-width: 1488px) 100vw, 1488px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Abbildung 17: Funktion, welche den Inhalt der Settings.txt in den my_payload buffer liest<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn wir die Datei \u201eSettings.txt\u201c \u00f6ffnen, erkennen wir unter anderem verschiedene Namen von Kommunisten, vielf\u00e4ltige MAC-Adressen und Ausschnitte aus dem komministischem Manifest (viele davon enthalten Schreibfehler). Demnach der Name \u201cCommieLoader\u201d. Bei genauerer Betrachtung scheint sich ein Muster zu ergeben, nach dem die H\u00e4ufung der \u201etrotzki\u201c Strings jeweils f\u00fcr ein Null-Byte (0x00) stehen k\u00f6nnte. Daher stellen wir die These auf, dass Settings.txt einen enkodierten Payload, ggf. die n\u00e4chste Ausf\u00fchrungsstufe der Schadsoftware enth\u00e4lt. Das Enkodierungsverfahren w\u00e4re demnach eine W\u00f6rterbuch-Ersetzung, bei welcher f\u00fcr jeden Hexadezimalwert 0x00 bis 0xFF ein entsprechendes Wort als \u00dcbersetzung verwendet wird.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"1034\" src=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb18-1600x1034.png\" alt=\"\" class=\"wp-image-64964\" srcset=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb18-1600x1034.png 1600w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb18-800x517.png 800w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb18-768x496.png 768w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb18-1536x993.png 1536w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb18-2048x1323.png 2048w\" sizes=\"(max-width: 1600px) 100vw, 1600px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Abbildung 18: Ausschnitt des Inhalts der Settings.txt<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bei genauerer Betrachtung der Datei dbgcore.dll f\u00e4llt auf, dass die Datei eine passende Datenstruktur mit 256 Eintr\u00e4gen enth\u00e4lt, welche sich als W\u00f6rterbuch eignet und wie vermutet auch mit \u201etrotzki\u201c als Wert f\u00fcr 0x00 beginnt.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"908\" height=\"432\" src=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/bild-18.png\" alt=\"\" class=\"wp-image-64972\" srcset=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/bild-18.png 908w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/bild-18-800x381.png 800w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/bild-18-768x365.png 768w\" sizes=\"(max-width: 908px) 100vw, 908px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Abbildung 18: Ausschnitt des W\u00f6rterbuchs aus dbgcore.dll<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Um das W\u00f6rtbuch aus dbgcore.dll zu exportieren, haben wir ein Python Skript entwickelt, welches die Datei Settings.txt dekodieren kann.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#8222;`<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">#!\/usr\/bin\/env python3<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#8222;&#8220;&#8220;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Decoder for commieLoader Settings.txt payload.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">dbgcore.dll contains a 256-entry wordlist stored as fixed-width (5000-byte) slots<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">starting at offset 0x8B40. Each word in Settings.txt maps to one byte of the<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">original binary payload.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#8222;&#8220;&#8220;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">import sys<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">import argparse<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">DLL_PATH = &#8222;dbgcore.dll&#8220;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">SETTINGS_PATH = &#8222;Settings.txt&#8220;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">OUTPUT_PATH = &#8222;decoded_payload.bin&#8220;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">WORDLIST_OFFSET = 0x8B40&nbsp;&nbsp; # offset of first entry (&#8222;trotzki&#8220; = 0x00) in dbgcore.dll<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">WORDLIST_STRIDE = 5000&nbsp;&nbsp;&nbsp;&nbsp; # each entry occupies a fixed 5000-byte slot<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">def load_wordlist(dll_path: str) -&gt; dict[str, int]:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; with open(dll_path, &#8222;rb&#8220;) as f:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; data = f.read()<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; word_to_byte: dict[str, int] = {}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; for i in range(256):<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; offset = WORDLIST_OFFSET + i * WORDLIST_STRIDE<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chunk = data[offset:offset + WORDLIST_STRIDE]<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end = chunk.find(b&#8220;\\x00&#8243;)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; word_bytes = chunk[:end] if end != -1 else chunk<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; word = word_bytes.decode(&#8222;utf-8&#8220;)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; word_to_byte[word] = i<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; return word_to_byte<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">def decode(settings_path: str, word_to_byte: dict[str, int]) -&gt; bytearray:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; with open(settings_path, &#8222;r&#8220;, encoding=&#8220;utf-8&#8243;) as f:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; content = f.read()<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; # Tokens are separated by &#8222;, &#8220; strip only leading space to preserve<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; # trailing spaces that are part of some token names (e.g. &#8222;Ricardo &#8222;).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; tokens = [t.lstrip(&#8220; &#8222;) for t in content.split(&#8222;,&#8220;)]<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; unknown = {t for t in tokens if t and t not in word_to_byte}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; if unknown:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print(f&#8220;[!] Warning: {len(unknown)} unknown token(s): {unknown}&#8220;, file=sys.stderr)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; out = bytearray()<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; for t in tokens:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if t:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.append(word_to_byte.get(t, 0))<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; return out<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">def main() -&gt; None:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; parser = argparse.ArgumentParser(description=&#8220;Decode commieLoader Settings.txt payload&#8220;)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; parser.add_argument(&#8222;&#8211;dll&#8220;,&nbsp;&nbsp;&nbsp; default=DLL_PATH,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; help=f&#8220;Path to dbgcore.dll (default: {DLL_PATH})&#8220;)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; parser.add_argument(&#8222;&#8211;input&#8220;,&nbsp; default=SETTINGS_PATH, help=f&#8220;Path to Settings.txt (default: {SETTINGS_PATH})&#8220;)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; parser.add_argument(&#8222;&#8211;output&#8220;, default=OUTPUT_PATH,&nbsp;&nbsp; help=f&#8220;Output path for decoded binary (default: {OUTPUT_PATH})&#8220;)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; args = parser.parse_args()<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; print(f&#8220;[*] Loading wordlist from {args.dll} &#8230;&#8220;)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; word_to_byte = load_wordlist(args.dll)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; print(f&#8220;[+] Loaded {len(word_to_byte)} wordlist entries&#8220;)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; print(f&#8220;[*] Decoding {args.input} &#8230;&#8220;)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; payload = decode(args.input, word_to_byte)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; print(f&#8220;[+] Decoded {len(payload)} bytes&#8220;)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; with open(args.output, &#8222;wb&#8220;) as f:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f.write(payload)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; print(f&#8220;[+] Written to {args.output}&#8220;)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">if __name__ == &#8222;__main__&#8220;:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; main()<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#8222;`<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die dekodierte Datei konnten wir durch YARA Regel-Treffer und manuelle Analyse als CobaltStrike Beacon Shellcode identifizieren. CobaltStrike ist ein f\u00fcr Red-Teaming konzipiertes Adversary Emulation Framework, welches sowohl f\u00fcr legitime Sicherheitstests, als auch f\u00fcr Command&amp;Control Zwecke von Angreifern mit malizi\u00f6sen Motiven eingesetzt wird. Um eine Einordnung zu treffen und n\u00e4heres \u00fcber die Funktionalit\u00e4t des CobaltStrike Beacons herauszufinden, haben wir die Konfiguration dessen extrahiert.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der Cobalt Strike Payload enth\u00e4lt die folgende Konfiguration, welche die Funktionalit\u00e4t und das Verhalten bzw. die Tarnung der Schadsoftware festlegt. Kommuniziert wird \u00fcber das HTTPS Protokoll auf Port 443\/tcp. Der Teamserver (die Command&amp;Control Infrastruktur des Angreifers) wird unter der Domain refugee-help[.]com erreicht und ist als Kontaktformular getarnt, damit der Web-Traffic in einer Analyse nicht allzu sehr heraussticht. Der Beacon tarnt sich als das Windows Systemprogramm wmiprvse.exe, um im Prozessbaum nicht aufzufallen. Die letzte, f\u00fcr uns besonders relevante Information, ist der Watermark-Wert \u201e987654321\u201c, welcher normalerweise pseudonym den Lizenznehmer der Software identifiziert. Die absteigende Zahlenfolge ist jedoch an Anzeichen daf\u00fcr, dass es sich um eine unlizensierte Kopie von CobaltStrike handeln muss, welche gerne unter Cyberkriminellen in Online-Foren zum Tausch oder Verkauf angeboten werden.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">BeaconType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; HTTPS<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Port&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; 443<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">SleepTime&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; 30000<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">MaxGetSize&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; 16798776<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Jitter&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; 50<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">MaxDNS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; Not Found<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">PublicKey_MD5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; 1089d58afc804cfab88e6e2aca60e3f3<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">C2Server&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; refugee-help.com,\/dpixel<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">UserAgent&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.3600 (KHTML, like Gecko) Chrome\/135.50.90.0 Safari\/537.3600<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">HttpPostUri&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; \/contact.php<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Malleable_C2_Instructions&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; Base64 decode<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">HttpGet_Metadata&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; Metadata<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \u2003\u2003base64<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \u2003\u2003header &#8222;Cookie&#8220;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">HttpPost_Metadata&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; ConstHeaders<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \u2003\u2003Content-Type: application\/x-www-form-urlencoded<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ConstParams<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \u2003\u2003name=OSF<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \u2003\u2003email=media@opensocietyfoundations.org<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \u2003\u2003subject=Resource support<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SessionId<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \u2003\u2003header &#8222;Cookie&#8220;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Output<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \u2003\u2003base64url<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \u2003\u2003prepend &#8222;message=&#8220;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \u2003\u2003print<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">PipeName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; Not Found<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">DNS_Idle&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; Not Found<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">DNS_Sleep&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; Not Found<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">SSH_Host&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; Not Found<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">SSH_Port&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; Not Found<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">SSH_Username&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; Not Found<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">SSH_Password_Plaintext&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; Not Found<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">SSH_Password_Pubkey&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; Not Found<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">SSH_Banner&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">HttpGet_Verb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; GET<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">HttpPost_Verb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; POST<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">HttpPostChunk&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; 0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Spawnto_x86&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; %windir%\\syswow64\\wbem\\wmiprvse.exe -Embedding<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Spawnto_x64&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; %windir%\\sysnative\\wbem\\wmiprvse.exe -Embedding<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">CryptoScheme&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; 0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Proxy_Config&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; Not Found<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Proxy_User&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; Not Found<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Proxy_Password&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; Not Found<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Proxy_Behavior&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; Use IE settings<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Watermark_Hash&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; NtZOV6JzDr9QkEnX6bobPg==<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Watermark&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; 987654321<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">bStageCleanup&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; True<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">bCFGCaution&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; True<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">KillDate&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; 0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">bProcInject_StartRWX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; False<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">bProcInject_UseRWX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; False<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">bProcInject_MinAllocSize&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; 24576<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">ProcInject_PrependAppend_x86&nbsp;&nbsp;&nbsp;&nbsp; &#8211; b&#8217;D@KCLH\\x90f\\x90\\x0f\\x1f\\x00f\\x0f\\x1f\\x04\\x00\\x0f\\x1f\\x04\\x00\\x0f\\x1f\\x00\\x0f\\x1f\\x00&#8242;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Empty<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">ProcInject_PrependAppend_x64&nbsp;&nbsp;&nbsp;&nbsp; &#8211; b&#8217;D@KCLH\\x90f\\x90\\x0f\\x1f\\x00f\\x0f\\x1f\\x04\\x00\\x0f\\x1f\\x04\\x00\\x0f\\x1f\\x00\\x0f\\x1f\\x00&#8242;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Empty<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">ProcInject_Execute&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; kernel32.dll:BaseThreadInitThunk<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NtQueueApcThread-s<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; kernel32.dll:LoadLibraryA<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CreateRemoteThread<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RtlCreateUserThread<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetThreadContext<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">ProcInject_AllocationMethod&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; NtMapViewOfSection<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">bUsesCookies&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; True<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">HostHeader&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">headersToRemove&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; Not Found<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">DNS_Beaconing&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; Not Found<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">DNS_get_TypeA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; Not Found<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">DNS_get_TypeAAAA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; Not Found<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">DNS_get_TypeTXT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; Not Found<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">DNS_put_metadata&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; Not Found<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">DNS_put_output&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; Not Found<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">DNS_resolver&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; Not Found<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">DNS_strategy&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; round-robin<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">DNS_strategy_rotate_seconds&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; -1<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">DNS_strategy_fail_x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; -1<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">DNS_strategy_fail_seconds&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; -1<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Retry_Max_Attempts&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; 0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Retry_Increase_Attempts&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; 0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Retry_Duration&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; 0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sobald der Shellcode dekodiert ist, wird ein neuer Prozess erstellt. Wie oben erw\u00e4hnt, wurde zuvor die Zeichenkette \u201cWmiPrvSE.exe\u201d in die globale Variable CmdLine kopiert. Und mit dem Aufruf zu CreateProcessA() wird ein Prozess davon im suspendierten Zustand erstellt.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1122\" height=\"410\" src=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb19.png\" alt=\"\" class=\"wp-image-64965\" srcset=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb19.png 1122w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb19-800x292.png 800w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb19-768x281.png 768w\" sizes=\"(max-width: 1122px) 100vw, 1122px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Abbildung 19: Erstellung des suspendierten WmiPrvSE Prozesses<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sobald der Prozess erstellt ist, erkennen wir mehrere Syscall-Aufrufe, die auf klassische Process-Injection hindeuten. Der Aufruf ZwAllocateVirtualMemory() allokiert einen Buffer im neuerstellten Prozess, welche als Speicher f\u00fcr den Shellcode dient. Dieser wird mittels ZwWriteVirtualMemory() in den Addressspeicher des Prozesses geschrieben, welcher mit ZwProtectVirtualMemory() ausf\u00fchrbar gemacht wird.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Danach wird mithilfe von ZwQueueApcThread() der Shellcode an die APC Queue des Prozesses angehangen und mittels ZwResumeThread() wird der Shellcode schlie\u00dflich auf dem Hauptthread ausgef\u00fchrt.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1186\" height=\"874\" src=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb20.png\" alt=\"\" class=\"wp-image-64966\" srcset=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb20.png 1186w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb20-800x590.png 800w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb20-768x566.png 768w\" sizes=\"(max-width: 1186px) 100vw, 1186px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Abbildung 20: \u00dcbertragung des Shellcodes in den Speicherbereich des WmiPrvSE Prozesses, gefolgt von der der Ausf\u00fchrung des Shellcodes<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nachdem der Shellcode in den Prozess geschrieben und ausgef\u00fchrt wurde, beginnt das Programm Persistenz-Mechanismen durchzuf\u00fchren. Diese finden sich in der Funktion copyfiles().<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Es wird zuerst der Nutzername des aktuellen Nutzers abgefragt, um dessen Dokumenten-Verzeichnis zu finden. Nachdem die Zeichenkette des Pfads zum Dokumenten-Verzeichnis zusammengebaut wurde, werden alle drei Dateien \u201eSettings.txt\u201c, dbgcore.dll und der Sumatra Installer in das Verzeichnis kopiert.<br><br><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"780\" src=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb21-1600x780.png\" alt=\"\" class=\"wp-image-64967\" srcset=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb21-1600x780.png 1600w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb21-800x390.png 800w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb21-768x374.png 768w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb21-1536x749.png 1536w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb21.png 1678w\" sizes=\"(max-width: 1600px) 100vw, 1600px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Abbildung 21: Kopierung des Sumatra-Installers, dbgcore.dll und der Settings.txt in den Documents Ordner des Nutzers<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Zuletzt wird die write_auto-Funktion aufgerufen, welche einen Autorun Registry Key getarnt als \u201eFirefox_Updater_Version_2.3.1000\u201c f\u00fcr den Installer erstellt. Dieser f\u00fchrt dazu, dass der Installer bei jedem Systemstart ausgef\u00fchrt wird, sodass der Angreifer den Zugang auf das System nicht nach einem Neustart verliert.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"949\" src=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb22-1600x949.png\" alt=\"\" class=\"wp-image-64968\" srcset=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb22-1600x949.png 1600w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb22-800x475.png 800w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb22-768x456.png 768w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb22-1536x911.png 1536w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb22.png 1810w\" sizes=\"(max-width: 1600px) 100vw, 1600px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Abbildung 22: Eintragung des Autorun-Keys im Registry<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"549\" src=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb23-1600x549.png\" alt=\"\" class=\"wp-image-64969\" srcset=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb23-1600x549.png 1600w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb23-800x274.png 800w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb23-768x263.png 768w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb23-1536x527.png 1536w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb23-2048x702.png 2048w\" sizes=\"(max-width: 1600px) 100vw, 1600px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Abbildung 23: Registry Eintrag nach Ausf\u00fchrung der Schadsoftware<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Kleiner Bonus: Wir konnten Artefakte eines Vectored-Exception-Handlers in der DLL finden, welche einen Hook auf die EtwEventWrite-Funktion setzen. Jedoch konnten wir keine Anzeichen dazu finden, dass dieser Handler registriert wird.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1526\" height=\"1014\" src=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb24.png\" alt=\"\" class=\"wp-image-64970\" srcset=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb24.png 1526w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb24-800x532.png 800w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb24-768x510.png 768w\" sizes=\"(max-width: 1526px) 100vw, 1526px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Abbildung 24: Ein Vectored-Exception-Handler, welches EtwEventWrite mit einer ret Instruktion \u00fcberschreibt (Jedoch wird er nie registriert)<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Noteworthy<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Zu bemerken ist vielleicht noch, dass unser Sample nur bedingt Anti-AV Ma\u00dfnahmen ergriffen hat. Auf dem System unseres Kunden lief Microsoft Defender, der, soweit wir sehen konnten, w\u00e4hrend des gesamten Infektionszeitraumes aktiv war und das Sample mehrfach scannte. Zu bem\u00e4ngel hatte er am Ende nichts, auch wenn er an der dbgcore.dll durchschnittlich am l\u00e4ngsten scannte.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In zwei F\u00e4llen identifizierte er jedoch malizi\u00f6se Aktivit\u00e4ten (\u201eVirTool:MSIL\/Deimos.A!MTB\u201c und \u201eTrojan:Win32\/Sabsik.EN.B!ml\u201c) im Zusammenhang mit WmiPrvSE.exe:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"555\" src=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb25-1600x555.png\" alt=\"\" class=\"wp-image-64971\" srcset=\"https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb25-1600x555.png 1600w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb25-800x277.png 800w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb25-768x266.png 768w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb25-1536x533.png 1536w, https:\/\/testing.secuinfra.com\/wp-content\/uploads\/abb25.png 1739w\" sizes=\"(max-width: 1600px) 100vw, 1600px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Abbildung 25: Detektionen des Windows Defenders<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In beiden F\u00e4llen wurde die WmiPrvSE.exe vom Windows Defender in die Quarant\u00e4ne gesteckt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wir konnten den \u201eCommieLoader\u201c keiner bereits bekannten Malware-Familie zuordnen. Bei der Suche danach in Plattformen zur Analyse und zum Austausch von Malware-Samplen konnten wir durch eine YARA-Regel ein weiteres Sample (SHA256: 127c525b0107045c39d4c956d51a16aba6b28e8a08cb1687e3fe7fc1f16e0de5)finden, das sich ebenfalls in einem ZIP-Archiv (\u201ebewerbung_gesamt.zip\u201c) mit einer Settings.txt und dem SumatraPDF Installers befand. Der Payload dieses Samples ist nahezu identisch mit unserem Sample bis darauf, dass statt ein WmiPrvSE.exe ein msedge.exe-Prozess f\u00fcr die APC-Injection genutzt wird. Dies deutet darauf hin, dass es sich bei diesem Sample um ein Testsample handeln k\u00f6nnte, um die Detektion durch AVs und EDRs zu testen. Nach Angaben des vermeintlichen Angreifers h\u00e4tte wohl auch der Elastic EDR sein Sample detektiert. Ob es sich bei unseren Angriff um einen gezielten Angriff gegen unseren Kunden handelt, oder das Sample in Zukunft noch \u00f6fter auftauchen wird, wird die Zukunft sagen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Anhang<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Host-based Indicators<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>Filename<strong><\/strong><\/td><td>SHA256<\/td><td>Description<\/td><\/tr><tr><td>dbgcore.dll<\/td><td>a9121e70c39de2c10e6790da4aa3a22079242a201da2c1aeeb4ed65070e68e93<em><\/em><\/td><td><em>Malicious dll loaded by the SumatraPDF installer via Dll ForwardSideloading<\/em><\/td><\/tr><tr><td>Version_Bewerbung_2.0_202566_Bewerbungsnummer_0234521870_Datum_0000000200<\/td><td><em>cb1d73323d3d80004ada185844b0d461abd9ded736d5dc690607f935b4f2b58a<\/em><\/td><td><em>Legitimate SumatraPDF installer<\/em><\/td><\/tr><tr><td>Settings.txt<\/td><td><em>b9fac5fd68f333b9459fa4b0111da8fba64a20022df8ea8595eae6a2fc4b9d9d<\/em><em><\/em><\/td><td><em>Text file containing an encoded Cobalt Strike beacon<\/em><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Zus\u00e4tzliche Host-Based IoC\u2019s:<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Software\\Microsoft\\Windows\\CurrentVersion\\Run\\Firefox_Updater_Version_2.3.1000:<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&#8222;C:\\Users\\[Username]\\Documents\\Version_Bewerbung_2.0_202566_Bewerbungsnummer_0234521870_Datum_0000000200.exe<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Network-based Indicators<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>Type<\/td><td>Indicator<\/td><\/tr><tr><td>C2<\/td><td>refugee-help[.]com<em><\/em><\/td><\/tr><tr><td><strong>URIs<\/strong><\/td><td>\/dpixel, \/contact.php<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Detection Rule<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><em>rule SI_MAL_LDR_CommieLoader_Apr13 {<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp;meta:<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp; version = &#8222;1.0&#8220;<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp; date = &#8222;2026-04-13&#8220;<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp; modified = &#8222;2026-04-14&#8220;<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp; status = &#8222;RELEASED&#8220;<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp; sharing = &#8222;TLP:CLEAR&#8220;<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp; source = &#8222;SECUINFRA Falcon Team&#8220;<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp; description = &#8222;Detects the dbgcore.dll used in the CommieLoader campaign&#8220;<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp; category = &#8222;malware&#8220;<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp; mitre_att = &#8222;T1129, T1055, T1112&#8220;<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp; \/\/ SHA-256 hashes of our observed samples<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp; <\/em><em>hash1 = &#8222;a9121e70c39de2c10e6790da4aa3a22079242a201da2c1aeeb4ed65070e68e93&#8220;<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp; hash2 = &#8222;127c525b0107045c39d4c956d51a16aba6b28e8a08cb1687e3fe7fc1f16e0de5&#8220;<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp;strings:<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp; <\/em><em>$mz = { 4d 5a }<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp; \/\/ Below are code snippets used in CommieLoaders Sandbox\/VM check.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp; $a1 =<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp; {<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp;&nbsp;&nbsp; \/\/ Stub for retrieving the computer name.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp;&nbsp; 48 81 ec 30 01 00 00&nbsp;&nbsp; \/\/ sub rsp, 0x130<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp;&nbsp; 48 8d ac 24 80 00 00 00&nbsp; \/\/ lea rbp, [rsp+0x80]<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp;&nbsp; c7 45 ac 00 01 00 00&nbsp;&nbsp; \/\/ mov dword [rbp-0x54], 0x100<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp;&nbsp; 48 8d 55 ac&nbsp;&nbsp;&nbsp;&nbsp; \/\/ lea rdx, [rbp-0x54]<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp;&nbsp; 48 8d 45 b0&nbsp;&nbsp;&nbsp;&nbsp; \/\/ lea rax, [rbp-0x50]<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp;&nbsp; 48 89 c1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ mov rcx, rax<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp;&nbsp; 48 ?? ?? ?? ?? ?? ??&nbsp;&nbsp; \/\/ mov rax, ?<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp;&nbsp; ff d0 85 c0&nbsp;&nbsp;&nbsp;&nbsp; \/\/ call rax<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp; }<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp;&nbsp; $a2 =<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp;&nbsp; {<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp;&nbsp; \/\/ Stub for comparing the computer name against common sandbox hostnames.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp;&nbsp;&nbsp; 48 8d 45 b0&nbsp;&nbsp;&nbsp;&nbsp; \/\/ lea rax, [rbp-0x50]<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp;&nbsp;&nbsp; 48 ?? ?? ?? ?? ?? ??&nbsp;&nbsp; \/\/ lea rdx, ?<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp;&nbsp;&nbsp; 48 89 c1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ mov rcx, rax<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp;&nbsp;&nbsp; e8 ?? ?? ?? ??&nbsp;&nbsp;&nbsp;&nbsp; \/\/ call ?<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp;&nbsp;&nbsp; 85 c0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ test eax, eax<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp;&nbsp; }<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp;&nbsp; \/\/ SysWhispers3 function names that are observed in the samples.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp;&nbsp; $b1 = &#8222;SW3_GetSyscallAddress&#8220; ascii<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp;&nbsp; $b2 = &#8222;SW3_HashSyscall&#8220; ascii<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp;&nbsp; $b3 = &#8222;SW3_PopulateSyscallList&#8220; ascii<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp;&nbsp; \/\/ Strings related to the Autorun key, CommieLoader sets for purpose of persistence.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp;&nbsp; $c1 = &#8222;Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run&#8220; ascii<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp;&nbsp; $c2 = &#8222;Firefox_Updater_Version_2.3.1000&#8220; ascii<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp;condition:<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp; $mz at 0 and<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp; filesize &lt; 3MB and<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp; all of ($a*) and<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp; all of ($b*) and<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>&nbsp; all of ($c*)<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>}<\/em><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">References:<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><a  href=\"https:\/\/www.hexacorn.com\/blog\/2025\/08\/19\/dll-forwardsideloading\/\"  target=\"_blank\" rel=\"noreferrer noopener\" dpc-external=\"true\"  target=\"_blank\"  rel=\"nofollow\" >hexacorn<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a  href=\"https:\/\/github.com\/Sentinel-One\/CobaltStrikeParser\"  target=\"_blank\" rel=\"noreferrer noopener\" dpc-external=\"true\"  target=\"_blank\"  rel=\"nofollow\" >github<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im Rahmen eines Einsatzes zur Incident Response identifizierte das SECUINFRA Falcon Team eine interessante Malware-Probe mit dem Codenamen \u201eCommieLoader\u201c, die sich als Bewerbungsformular tarnt.<\/p>\n<p>CommieLoader installierte einen Cobalt Strike Beacon, der vom Angreifer f\u00fcr die Command-and-Control-Kommunikation genutzt wurde<\/p>\n","protected":false},"author":6,"featured_media":64973,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[79,66],"tags":[],"dpc_coauthors":[834],"class_list":["post-64678","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-digital-forensics","category-techtalk","dpc_coauthors-si_falcon_tm"],"acf":[],"_links":{"self":[{"href":"https:\/\/testing.secuinfra.com\/de\/wp-json\/wp\/v2\/posts\/64678","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/testing.secuinfra.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/testing.secuinfra.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/testing.secuinfra.com\/de\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/testing.secuinfra.com\/de\/wp-json\/wp\/v2\/comments?post=64678"}],"version-history":[{"count":8,"href":"https:\/\/testing.secuinfra.com\/de\/wp-json\/wp\/v2\/posts\/64678\/revisions"}],"predecessor-version":[{"id":65053,"href":"https:\/\/testing.secuinfra.com\/de\/wp-json\/wp\/v2\/posts\/64678\/revisions\/65053"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/testing.secuinfra.com\/de\/wp-json\/wp\/v2\/media\/64973"}],"wp:attachment":[{"href":"https:\/\/testing.secuinfra.com\/de\/wp-json\/wp\/v2\/media?parent=64678"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/testing.secuinfra.com\/de\/wp-json\/wp\/v2\/categories?post=64678"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/testing.secuinfra.com\/de\/wp-json\/wp\/v2\/tags?post=64678"},{"taxonomy":"dpc_coauthors","embeddable":true,"href":"https:\/\/testing.secuinfra.com\/de\/wp-json\/wp\/v2\/dpc_coauthors?post=64678"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}