Иногда недостаточно знать, является исполняемый файл вредоносным или безвредным. Нужно понимать, что делает этот файл, и почему он признан вредоносным.
Логично подумать в сторону песочницы, но, как показывает практика, в песочницах запускается и выполняется далеко не всё. По факту, песочницы являются вспомогательными инструментами, требующими ручной настройки чуть ли не для каждого образца. Остаётся реверс-инжиниринг файла с использованием разного рода инструментов, включая, при необходимости, динамический анализ либо в песочнице, либо под отладчиком.
Раньше реверс-инжиниринг был ручным и, порой, весьма небыстрым процессом. Но появились LLM, которые при правильном использовании и настройке позволяют его автоматизировать. Есть LLM проприетарные, есть — с открытыми весами. С проприетарными всё понятно: бери harness, покупай токены, запускай, жди результата. Однако тут есть нюансы: цена, утечка данных (как правило, за рубеж), санкционные риски.
Если реверс-инжиринг — это постоянный процесс, как у нас в Рекрипте, то проприетарная облачная LLM, да ещё и вне нашей юрисдикиции, — не вариант. Гораздо интереснее модели с открытыми весами, которые можно запустить в доверенном контуре и адаптировать под свои задачи. Здесь в числе прочего встаёт вопрос цены железа. Значит, нужна не самая требовательная к аппаратным ресурсам модель. Другими факторами являются время работы и контекст. Размер дизассемблированного кода практически всегда превышает размер контекстного окна, а время анализа может занимать многие и многие часы. Всегда хочется побыстрее и подешевле, но без потери качества.
Так родился наш внутренний проект «Автореверсер», который мы используем для анализа бинарных исполняемых файлов. Взяв за основу LLM с весьма демократичными требованиями к ресурсам, усилив её нашими алгоритмами и инструментами для реверс-инжиниринга мы смогли добиться неплохих результатов. При этом мы применили ряд подходов, позволяющих существенно сократить время анализа исследуемого образца.
Вот так выглядит вердикт по одному обработанному технологиями обфускации вредоносу (приводим частично, полный технический отчёт гораздо больше):
The binary shows clear signs of being a packed malware with privilege escalation capabilities, anti-analysis techniques, and potential process injection capabilities.
Let me write the final analysis report:
## VERDICT
MALICIOUS
Risk Score: 88
Confidence: 0.85
## Executive Summary
The analyzed binary /samples/1543b9b955e4de15261dff926dbcb21ba40e22fc3be7d2fbad2b3af95b3c93d9.exe is a highly suspicious packed Windows executable exhibiting multiple indicators of malicious behavior. The binary is obfuscated, contains critical privilege escalation APIs, implements sophisticated anti-analysis techniques, and shows signs of runtime unpacking. While the CFG analysis was incomplete due to technical limitations, the static analysis reveals a clear threat profile consistent with malware designed for persistence, privilege escalation, and potential process injection.
## Suspicious Functions
The following functions were identified as high-risk based on API usage and behavior patterns:
| Function | APIs Used | Risk |
|----------|-----------|------|
| sub_1400052d0 | GetLastError, GetProcAddress, LoadLibraryExW, SuspendThread | HIGH |
| sub_14000c350 | GetThreadContext, SetXStateFeaturesMask | HIGH |
| sub_14000c710 | SetThreadContext | HIGH |
| sub_140012550 | AdjustTokenPrivileges, LookupPrivilegeValueW, GetCurrentProcess | CRITICAL |
| sub_14000c0b0 | GetEnabledXStateFeatures, GetModuleHandleW, GetProcAddress | HIGH |
| sub_140012400 | VirtualAllocExNuma, GetCurrentProcess | CRITICAL |
| sub_140060d9e | OpenProcessToken | CRITICAL |
| sub_140060eac | QueryPerformanceCounter | HIGH |
| sub_1400619c0 | IsDebuggerPresent, IsProcessorFeaturePresent, RtlCaptureContext | HIGH |
| sub_140064ed0 | FreeLibrary, GetProcAddress, LoadLibraryExW | HIGH |
| sub_14000c680 | GetStdHandle, WriteFile | MEDIUM |
## Detected Chains
1. Privilege Escalation Chain:
- OpenProcess OpenProcessToken AdjustTokenPrivileges
- Enables elevation to SYSTEM or other high privileges
2. Process Injection Chain:
- OpenProcess VirtualAllocExNuma
- Enables memory allocation in remote processes
3. Anti-Analysis Chain:
- IsDebuggerPresent QueryPerformanceCounter CPUID/RDTSC
- Multiple timing-based and presence checks
4. Dynamic Loading Chain:
- LoadLibraryExW GetProcAddress VirtualAllocExNuma
- Enables dynamic API resolution and injection
Даже в обфусцированном коде примерно за 5 минут работы в статике наш «Автореверсер» смог увидеть цепочки вызовов, на которые следует обратить внимание аналитику, и сделать вывод о высоком риске вредоносности образца. Но не только это. «Автореверсер» умеет понимать логику работы файла, вытаскивать из него индикаторы компрометации (IoC), оркестрировать работу целого ряда инструментов для реверс-инжиниринга и, при необходимости, погружаться гораздо глубже в код исследуемого образца. Всё это на базе локальной LLM и открытых или наших внутренних инструментов.
Кстати, этот наукоёмкий проект является одним из плодов нашей дружбы с КФ МГТУ имени Н.Э. Баумана и разрабатывается в том числе в нашей лаборатории в кампусе Университета.
Скоро обязательно расскажем больше об этом проекте.