Kürzlich wurde gezeigt, dass Seqrite Im Labor wurde eine Phishing-Kampagne beobachtet, die Formbook-Diebstahl über E-Mail-Anhänge verbreitete. Formbook, das seit 2016 bekannt ist, hat sich in vielerlei Hinsicht weiterentwickelt, von Tarnfunktionen bis hin zu Ausweichtechniken. Da es in Hackerforen als Malware-as-a-Service angeboten wird, existieren zahlreiche Varianten. Die Ausweichtechnik bleibt zwar gleich, jedoch werden vor dem Ausführen der Schadsoftware mehrere Schutzebenen eingesetzt, die ausschließlich im Arbeitsspeicher geladen werden, um eine Erkennung zu vermeiden. Wie andere Varianten nutzt auch diese Steganografie, um schädliche Dateien in Bildern zu verstecken, diese zu entschlüsseln und anschließend im Arbeitsspeicher auszuführen.
Diese Variante umfasst drei Stufen vor der endgültigen Nutzlast
- Purchase Order.exe/XXXI.exe
- Arthur.dll
- Montero.dll
- MASM (Endgültige Nutzlast)

Technische Analyse:
Es beginnt mit einer Spear-Phishing-E-Mail, die eine Bestellung und eine ZIP-Datei im Anhang enthält. Nach dem Extrahieren enthält sie nur eine einzige PE-Datei namens PurchaseOrder.exe, eine kompilierte Binärdatei von dotnet.

Phase 1 (Purchase Order.exe):
Diese Variante verbirgt Malware der Stufen 2 und 3 in der Ressource von Purchase Order.exe. Ressourcenname „Hkyl„“ ist, wie in Abb. 2 gezeigt, die Stufe 3 binär.
Zunächst schläft die Malware neun Sekunden, bevor sie mit der Entschlüsselung der Nutzlast der Stufe 2 fortfährt. Wie in Abb. 3 gezeigt, ruft sie die verschlüsselten Daten der Stufe 2 ab von APP Ressource, die in der Ressource von Purchase Order.exe vorhanden ist und im Byte-Array gespeichert wird. Es speichert auch 16 Bytes Entschlüsselungsschlüssel für die Nutzlast der Stufe 2, die „AP7H9H5OI4478F8CH05FGA".


Vor der Entschlüsselung der Nutzlast der Stufe 2, wie in Abb. 4 gezeigt, werden 3rd Array mit einer Größe von 256 Bytes und initialisiert es mit einem Wert von 0 bis 255.

Danach richtet es Array3 ein, indem es 16 Byte Schlüssel an zufällige Positionen kopiert.

Sobald der Array3-Wert eingerichtet ist, führt es XORing der verschlüsselten Daten mit Array3 durch und speichert sie in Array2, das nun die Stage 2 PE-Datei arthur.dll enthält.
Um die DLL-Datei der Stufe 2 auszuführen, wird InvokeMember() verwendet, um die entschlüsselte Assembly (Arthur.dll) mit der Load-Methode in den Speicher zu laden. Wie in Abb. 5 gezeigt, wird die Load-Funktion nicht direkt verwendet, sondern der Wert wird von einem Objekt abgerufen, dem Wert von HJ is Belastung.

Stufe 2 (Arthur.dll):
Sobald es in den Speicher geladen ist, ruft es MainForm.Justy() aus der PE-Datei der Stufe 2 mit drei Argumenten. Es verwendet diese Argumente in der PE-Datei der Stufe 2, um die PE-Datei der Stufe 3 zu erhalten.


- WA = „486B796C“=Hkyl (Ressource in PurchaseOrder.exe, Abb. 2)
- WZ = „62616F“=bao (Entschlüsselungsschlüssel für Stufe 3)
- @namespace = „AssessExampleCombatForm“ [Projektname von PurchaseOrder.exe]
Zunächst schläft diese Stufe 2 vierzehn Sekunden lang, bevor sie mit der Entschlüsselung ihrer Stufe 3 fortfährt.
Diese Funktion entschlüsselt ein Bild mithilfe eines als Argument übergebenen Schlüssels. Anschließend extrahiert sie die Rot-, Grün- und Blauwerte aus jedem nicht transparenten Pixel in einem Bild und erstellt ein Array.

Dieses Array wird mit dem Wert [XOR-verknüpft.Bao] während Phase 2 übergeben, bringt Phase 3 montero.dll, die auch mit der Methode Assembly.Load in den Speicher geladen wird. Nach dem Abrufen der Hauptmethode gnWmyvSdDoAS8VNPBy.ukHjJHqoK1() des Moduls der Stufe 3 wird aufgerufen.

Stufe 3 (Montero.dll):
In dieser Phase 3 PE-Datei, vor dem Aufruf der Hauptmethode ukHjJHqoK1(), Der Konstruktor entschlüsselt die erforderlichen Konfigurationseinstellungen. Diese Einstellungen enthalten den Entschlüsselungsschlüssel der endgültigen Nutzlast, den Mutex-Namen und das aktivierte oder deaktivierte Mutex-Flag, den Dateiablageort, das aktivierte oder deaktivierte Dateidownload-Verhalten, den Dateidownloadort usw. Diese Konfigurationseinstellungen werden im Array [gnWmyvSdDoAS8VNPBy.YiEuqBAod0] gespeichert.

Nach der Entschlüsselung der Konfigurationseinstellungen wird geprüft, ob das Mutex-Flag in 29 aktiviert ist.th Speicherort des Arrays YiEuqBAod0, wenn wahr, erstellt es einen Mutex mit dem Namen „zpkpGXyWHvBpdzNULuLRtAzq„Wenn der Mutex bereits vorhanden ist, beendet er sich selbst. Dieses Verhalten wird häufig implementiert, um der Erkennung durch Sicherheitsanbieter zu entgehen und die Ausführung einer zweiten Instanz derselben Malware zu vermeiden. Anschließend wird das Sleep-Flag überprüft. Ist es aktiviert, wird die Ausführung verzögert, damit Sandboxen das schädliche Verhalten nicht erfassen können.

Anschließend wird geprüft, ob das Flag zur Anzeige des Meldungsfelds in 30 aktiviert ist.th Speicherort des Arrays YiEuqBAod0. Wenn aktiviert, wird das Meldungsfeld angezeigt, um den Benutzer zu täuschen.

Danach überprüft es 10th Speicherort des Arrays YiEuqBAod0, das als Ausschlusspfad verwendet wird. Wenn aktiviert, wird der Malware-Pfad zu den Ausschlüssen hinzugefügt und dieses Cmdlet per LOL-Binärdatei [powershel.exe] in versteckten Fensterattributen ausgeführt, um die Erkennung durch den AV-Anbieter zu umgehen und dessen Verhalten vor dem Opfer zu verbergen.

5th Speicherort des Arrays YiEuqBAod0. Dieser Speicherort wird entweder zum Herunterladen einer weiteren Nutzlast oder zum Aktualisieren der Aufgabenfunktion verwendet. Wenn dieses Flag aktiviert ist, lädt es eine andere Malware-Familie herunter oder empfängt einen Befehl vom Bedrohungsakteur C2, fügt diesen Befehl in eine XML-Datei am Speicherort %temp% ein und führt diese Datei vom Speicherort %temp% aus. Diese XML-Datei wird als Import in der geplanten Aufgabe angegeben.

2nd Speicherort des Arrays YiEuqBAod0. Der Angreifer nutzte diesen Speicherort zum Ablegen von Dateien. Ist dieses Flag aktiviert, prüft die Malware zunächst „qwwnzxGmN.exe“, ob die Datei bereits unter „C:\Benutzer\Benutzername\AppData\Roaming“ auf dem Host des Opfers vorhanden ist. Ist die Datei dort nicht vorhanden, wird sie mit versteckten Attributen erstellt, also als Kopie der übergeordneten Datei. Diese Eigenschaft kann von Angreifern genutzt werden, um die Präsenz der Malware zu verschleiern und so zu verhindern, dass Administratoren und Benutzer sie finden.

Sobald die übergeordnete Datei wie in Abb. 14 beschrieben an den Speicherort „%appdata%Roaming“ kopiert wurde, wird diese Datei dem Ausschlusspfad hinzugefügt. Anschließend werden die base64-kodierten Daten, die im Konstruktor der Hauptmethode in Phase 3 entschlüsselt wurden, in eine Zeichenfolge dekodiert, die eine XML-Datei darstellt. Diese XML-Datei enthält einen Wert, der eine Aufgabe generiert. Diese Werte sind Malware Datei-Versteckattribut, Persistenz, aktivierte Funktion, Befehlsausführung des Dateipfads usw.


Diese XML-Datei wird am Speicherort %temp% als „*.tmp“ erstellt. Anschließend werden die erforderlichen Werte in der XML-Datei aktualisiert, z. B. „Standort“ und „USERID“ usw. Anschließend wird eine geplante Aufgabe mit dem Attribut „Hidden Widow“ erstellt, um das Verhalten vor dem Opfer zu verbergen und dauerhaft zu speichern, z. B. „updates\qwwnzxGmN“, und diese XML-Datei importiert. Der Angreifer hat die temporäre Datei gelöscht, um Spuren für Sicherheitsanalysten zu vermeiden.

Abb. 18 zeigt 3rd Stage-Modul, das die endgültige Nutzlast entschlüsselt. Die Variable gnWmyvSdDoAS8VNPBy.AtOuOF5iCk = “4kQLt8DIME” ist der Name der Ressource (in motero.dll). gnWmyvSdDoAS8VNPBy.NJMuDv6Sv6 = “pqDVZxpXC„“ ist der Schlüssel. Es lädt die Ressource und übergibt sie zusammen mit dem SCHLÜSSEL an die Entschlüsselungsmethode Pp62t2mj9p.
Die Entschlüsselungsmethode speichert die endgültige Nutzlast in gnWmyvSdDoAS8VNPBy.w9Yu0dnomp.


Bei dieser endgültigen Nutzlast handelt es sich um eine 32-Bit-Binärdatei mit MASM-Kompilierung, die nur den Abschnitt „.text“ enthält. Der stark verschleierte Code entschlüsselt und verschlüsselt die Datei je nach Bedarf.

Sobald die endgültige Nutzlast im Puffer entschlüsselt ist, prüft es die 1st Speicherort des Arrays YiEuqBAod0. Basierend auf diesem Wert wählt es den Zielprozess für das Process Hollowing aus. Der Bedrohungsakteur hat den Wert 0 bis 4 angegeben. Wenn der Wert 4 ist, lädt er die endgültige Nutzlast mit der Assembly-Lademethode in den Speicher und führt den Einstiegspunkt der endgültigen Nutzlast aus.

wenn der Wert „1” wählt es den Zielprozessnamen als MSBuild.exe für die Prozessaushöhlung aus, wenn der Wert „2” ist der Zielprozessname vbc.exe, wenn der Wert „3„Der Zielprozessname lautet RegSvcs.exe. Wenn keiner der oben genannten Werte angegeben ist, wird der Zielprozess als übergeordnete Datei ausgewählt.

Im Konstruktor der Stufe 3 entschlüsselte es die API-Sequenz für Process Hollowing in der Methode bLmuzQDIA5(), die in CreateProcessA gespeichert ist. Diese Malware erstellt den Zielprozess basierend auf dem obigen Wert (Abb. 17) und versetzt diesen Prozess in den angehaltenen Modus.
![]()

Die Methode je3uFjEe5y() hat den WriteProcessMemory gespeichert und den endgültigen Nutzlastabschnitt „.text“ im Zielprozessspeicher entschlüsselt.

IOCS:
6A9F890C529C410FA32793F496E7F200
0DA34A44EE4876DD5E35939AF02F1D32
D751816C3673935BF989716ABD0DAB21
F8EC1BE3F2BD8269DB033375ED1A841E
Erkennungen:
Trojan.Formbook.S34651912
Yara-Regel:
importiere „pe“
rule Formbook_varainat
{
Saiten:
$s1=”AP7H9H5OI4478F8CH05FGA” wide ascii
$s2 ={67 B7 76 87 0A C8 C4 5E 29 AC 76 8F 70 E8 6E 09 91 40 4A AE 28 D5 7F CE AB 90 4B D3 07 C1 A8 B2 A0 B3 88 B9 58 F3 CA A9 43 9D C5 C1}
$s3 ={78 33 66 C6 4D CD 82 2F B8 D6 10 8A B7 E9 D5 65 8B 45 1A B7 ED 08 2E B3 89 2F 0B 89 75 F5 08 5D}
Bedingung:
alle von ihnen
}
MITRE-ANGRIFF-TTPs:
| Taktik | Technik / Vorgehensweise |
| Erster Zugriff | T1566.001: Spear-Phishing-Anhang |
| Ausführung | T1059.001:Befehls- und Skriptinterpreter: PowerShell |
| T1053.005:Geplante Aufgabe/Job:Geplante Aufgabe | |
| Beharrlichkeit | T1053.005:Geplante Aufgabe/Job:Geplante Aufgabe |
| Verteidigungsflucht | T1027.003:Verschleierte Dateien oder Informationen: Steganographie |
| T1036:Maskieren | |
| T1497:Virtualisierung/Sandbox-Umgehung | |
| T1055.012:Prozessinjektion:Prozessaushöhlung | |
| Bewertung | T1082:Systeminformationserkennung |
| T1083:Datei- und Verzeichniserkennung | |
| T1057:Prozesserkennung |
Fazit:
Bei Malware als Service können wir mehrere Versionen von Formbooks sehen. Oft ändert sich der Wrapper ständig, die endgültige Nutzlast bleibt jedoch gleich, um eine Erkennung durch Antivirusprogramme zu vermeiden. Angreifer verbreiten diese Malware über Spear-Phishing-Mails, an die schädliche Dokumente oder ausführbare Binärdateien angehängt sind. Benutzern wird empfohlen, das Öffnen verdächtiger E-Mails mit Anhängen zu vermeiden. Diese Variante implementiert Umgehungstechniken, um die Persistenz aufrechtzuerhalten. Durch das Ausblenden von Dateiattributen wird vermieden, vom Systemadministrator oder Benutzer entdeckt zu werden. Durch die Erstellung von Mutex wird sichergestellt, dass nur eine Instanz der Malware im System ausgeführt wird.
Autor: Rumana Siddiqui und Manoj Kumar Neelamegam



