Reverse-Engineering-Analyse von Formbook, einem Info-Stealer, der .NET-Assembly-Manipulation und XOR-Entschlüsselung verwendet. Vollständige Payload extrahiert via x32dbg, einschließlich der XOR-Entschlüsselungsschleife, CLR-Initialisierung, SQLExpress-Köder sowie Keylogger-/Clipboard-APIs.
Der x32dbg-Speicherauszug zeigt, dass Formbook seine Konfigurationsdaten entschlüsselt und mit NtAllocateVirtualMemory Speicher dafür reserviert.
NtAllocateVirtualMemory – Reserviert Speicher für die entschlüsselte Nutzlast.mov edx, dword ptr ds:[esi+1C] – Ruft die Größe der verschlüsselten Daten aus dem ESI-Register ab.push 0x1000 – Verwendet MEM_COMMIT, um Speicher zu reservieren.push 0 – Gibt den Zuordnungstyp oder das Schutz-Flag an.mov edx, dword ptr ds:[esi+4] – Ruft einen weiteren Konfigurationswert ab.lea ecx, [ebp-4] – Lädt einen Zeiger auf eine lokale Variable.test ecx, ecx – Prüft, ob der Zeiger gültig ist.mov ecx, [esi+1C] – Ruft die Größe der verschlüsselten Daten erneut ab.push 0x1000 – Wiederholt das MEM_COMMIT-Flag.push 0 – Wiederholt das Zuordnungs-Flag.ConnectionStrings – .NET-Konfigurationsschlüssel für C2-Adressen.system.data, DbProviderFactories – .NET-Konfigurationsabschnitte (wahrscheinlich Köder).system.serviceModel – .NET-Dienstmodellabschnitt.<DbProviderFactories /> – Leeres XML-Element (Köder).ConnectionStrings enthält wahrscheinlich C2-URLs.
x32dbg-Ansicht mit NtAllocateVirtualMemory und ConnectionStrings-Entschlüsselung.
Diese x32dbg-Ansicht zeigt, dass Formbook .NET-Assembly-Manipulation, XOR-basierte Entschlüsselung und CLR-Initialisierung (Common Language Runtime) verwendet, um seine Nutzlast auszuführen.
xor eax, eax – Löscht EAX, was auf XOR-basierte Entschlüsselung hindeutet.call 0x6C6E7F60 – Ruft eine Entschlüsselungs- oder Verarbeitungsfunktion auf.call 0x6C6EE8B0 – Ruft eine weitere Verarbeitungsfunktion auf.DllCanUnloadNowInternal – Verwaltet das Laden/Entladen von .NET-Assemblies.PublicKeyToken=31bf3856ad364e35 – Gibt sich als Microsoft-Assembly aus.system.serviceModel – .NET-Dienstmodellkonfiguration (C2-Kommunikation).System.Web – .NET-Webkonfiguration (HTTP-basiertes C2).clr.NGenCreateNGenWorker – Erstellt einen .NET Native Image Generator-Worker.clr.GetCLRFunction – Ruft CLR-Funktionen ab.return to clr.Initialize – Initialisiert die .NET-Laufzeit.xor eax, eax und die nachfolgenden call-Funktionen bestätigen die XOR-basierte Entschlüsselung.PublicKeyToken lässt es wie eine Microsoft-Assembly aussehen.system.serviceModel und System.Web speichern C2-Einstellungen.
x32dbg-Ansicht mit XOR-Entschlüsselung, DllCanUnloadNowInternal und CLR-Initialisierung.
Diese x32dbg-Ansicht zeigt, dass Formbook eine SQLExpress-bezogene Zeichenkette als Köder verwendet und die .NET-CLR initialisiert, um seine Nutzlast auszuführen.
L"ce=..\SQLEXPR" – Eine Köder-Zeichenkette, die nichts mit SQL-Datendiebstahl zu tun hat. Sie wird verwendet, damit die Malware wie eine legitime SQL Server Express-Komponente aussiehtclr.InitializeFusion – Initialisiert den .NET Fusion-Assembly-Loader, der verwendet wird, um die .NET-Nutzlast in den Speicher zu laden.clr.GetCLRFunction – Ruft CLR-Funktionen ab, um verwalteten Code auszuführen.clr.NGenCreateNGenWorker – Erstellt einen .NET Native Image Generator-Worker, der es der Nutzlast ermöglicht, ohne JIT-Kompilierung ausgeführt zu werden.return to clr.InitializeFusion+1751 – Kehrt zur CLR-Initialisierungsroutine zurück.SQLEXPR-Zeichenkette ist ein Köder, um der Erkennung durch Sicherheitstools zu entgehen.
x32dbg-Ansicht mit L"ce=..\SQLEXPR", clr.InitializeFusion und CLR-Funktionen.
Diese x32dbg-Ansicht zeigt den Beginn der Formbook-Nutzlast, die sich nach der standardmäßigen PE-DOS-Stub-Meldung befindet. Die Malware verwendet eine XOR-Entschlüsselungsschleife, um ihre Nutzlast im Speicher zu entschlüsseln.
This program cannot be run in DOS mode – Standardmäßige PE-DOS-Stub-Meldung.xor dword ptr ds:[edi], eax – Führt eine XOR-Operation mit den Daten bei EDI und EAX durch (Entschlüsselung).mov al, byte ptr ds:[edi+1] – Lädt ein Byte von EDI+1 in AL.xor al, byte ptr ds:[edx+1] – Führt eine XOR-Operation mit AL und dem Byte bei EDX+1 durch (Entschlüsselungsschlüssel).mov byte ptr ds:[edi], al – Schreibt das entschlüsselte Byte zurück nach EDI.call ntdll.77DDE45C – Ruft RtlIsCurrentThreadAttachExempt auf (Anti-Debug).cmp dword ptr ds:[esi+4], 0 – Prüft, ob der Zähler (ESI+4) null ist.sub dword ptr ds:[esi+4], eax – Dekrementiert den Zähler.test edx, edx – Testet EDX auf null.jne ntdll.77DDF9F4 – Springt zurück, wenn nicht null (Entschlüsselungsschleife).RtlIsCurrentThreadAttachExempt auf, um Debugger zu umgehen.
x32dbg-Ansicht mit der XOR-Entschlüsselungsschleife nach der standardmäßigen PE-DOS-Stub-Meldung.
Die Binary-Ninja-Analyse der extrahierten Nutzlast zeigt eine umfassende Liste von APIs, die Formbook für Keylogging, Clipboard-Hijacking und Privilegieneskalation verwendet.