Обратно-инженерный анализ Formbook, инфостилера, использующего манипуляции со сборками .NET и XOR-дешифрование. Полная полезная нагрузка извлечена через x32dbg, включая цикл XOR-дешифрования, инициализацию CLR, приманку SQLExpress и API кейлоггера/буфера обмена.
Дамп памяти x32dbg показывает, что Formbook расшифровывает данные своей конфигурации и выделяет для них память с помощью NtAllocateVirtualMemory.
NtAllocateVirtualMemory – выделяет память для расшифрованной полезной нагрузки.mov edx, dword ptr ds:[esi+1C] – извлекает размер зашифрованных данных из регистра ESI.push 0x1000 – использует MEM_COMMIT для выделения памяти.push 0 – указывает тип выделения или флаг защиты.mov edx, dword ptr ds:[esi+4] – извлекает другое значение конфигурации.lea ecx, [ebp-4] – загружает указатель на локальную переменную.test ecx, ecx – проверяет, является ли указатель допустимым.mov ecx, [esi+1C] – снова извлекает размер зашифрованных данных.push 0x1000 – повторяет флаг MEM_COMMIT.push 0 – повторяет флаг выделения.ConnectionStrings – ключ конфигурации .NET для адресов C2.system.data, DbProviderFactories – разделы конфигурации .NET (вероятно, приманка).system.serviceModel – раздел модели служб .NET.<DbProviderFactories /> – пустой XML-элемент (приманка).ConnectionStrings, вероятно, содержит URL-адреса C2.
Вид x32dbg, показывающий NtAllocateVirtualMemory и расшифровку ConnectionStrings.
Этот вид x32dbg показывает, что Formbook использует манипуляцию сборками .NET, XOR-расшифровку и инициализацию CLR (Common Language Runtime) для выполнения своей полезной нагрузки.
xor eax, eax – очищает EAX, что указывает на XOR-расшифровку.call 0x6C6E7F60 – вызывает функцию расшифровки или обработки.call 0x6C6EE8B0 – вызывает другую функцию обработки.DllCanUnloadNowInternal – управляет загрузкой/выгрузкой сборок .NET.PublicKeyToken=31bf3856ad364e35 – выдаёт себя за сборку Microsoft.system.serviceModel – конфигурация модели служб .NET (связь с C2).System.Web – веб-конфигурация .NET (C2 на основе HTTP).clr.NGenCreateNGenWorker – создаёт рабочий процесс .NET Native Image Generator.clr.GetCLRFunction – извлекает функции CLR.return to clr.Initialize – инициализирует среду выполнения .NET.xor eax, eax и последующие вызовы call подтверждают XOR-расшифровку.PublicKeyToken придаёт ему вид сборки Microsoft.system.serviceModel и System.Web хранят настройки C2.
Вид x32dbg, показывающий XOR-расшифровку, DllCanUnloadNowInternal и инициализацию CLR.
Этот вид x32dbg показывает, что Formbook использует строку, связанную с SQLExpress, в качестве приманки и инициализирует .NET CLR для выполнения своей полезной нагрузки.
L"ce=..\SQLEXPR" – строка-приманка, не связанная с кражей данных SQL. Она используется, чтобы вредоносное ПО выглядело как легитимный компонент SQL Server Expressclr.InitializeFusion – инициализирует загрузчик сборок .NET Fusion, который используется для загрузки полезной нагрузки .NET в память.clr.GetCLRFunction – извлекает функции CLR для выполнения управляемого кода.clr.NGenCreateNGenWorker – создаёт рабочий процесс .NET Native Image Generator, позволяя полезной нагрузке выполняться без JIT-компиляции.return to clr.InitializeFusion+1751 – возвращается к процедуре инициализации CLR.SQLEXPR — это приманка для уклонения от обнаружения средствами безопасности.
Вид x32dbg, показывающий L"ce=..\SQLEXPR", clr.InitializeFusion и функции CLR.
Этот вид x32dbg показывает начало полезной нагрузки Formbook, расположенное после стандартного сообщения заглушки PE DOS. Вредоносное ПО использует цикл XOR-расшифровки для расшифровки своей полезной нагрузки в памяти.
This program cannot be run in DOS mode – стандартное сообщение заглушки PE DOS.xor dword ptr ds:[edi], eax – выполняет XOR данных по адресу EDI с EAX (расшифровка).mov al, byte ptr ds:[edi+1] – загружает байт из EDI+1 в AL.xor al, byte ptr ds:[edx+1] – выполняет XOR AL с байтом по адресу EDX+1 (ключ расшифровки).mov byte ptr ds:[edi], al – записывает расшифрованный байт обратно в EDI.call ntdll.77DDE45C – вызывает RtlIsCurrentThreadAttachExempt (антиотладка).cmp dword ptr ds:[esi+4], 0 – проверяет, равен ли счётчик (ESI+4) нулю.sub dword ptr ds:[esi+4], eax – уменьшает счётчик.test edx, edx – проверяет EDX на ноль.jne ntdll.77DDF9F4 – выполняет переход назад, если не ноль (цикл расшифровки).RtlIsCurrentThreadAttachExempt для уклонения от отладчиков.
Вид x32dbg, показывающий цикл XOR-расшифровки после стандартного сообщения заглушки PE DOS.
Анализ извлечённой полезной нагрузки в Binary Ninja выявляет обширный список API, используемых Formbook для кейлоггинга, перехвата буфера обмена и повышения привилегий.