LokiBot остаётся одним из старейших активных похитителей учётных данных, несмотря на снижение активности в последние годы. Этот инфостилер впервые появился на подпольном форуме в мае 2015 года, а после утечки исходного кода в 2018 году породил множество модификаций, включая версии под Android и расширенные функции удалённого доступа и кейлоггинга. Сегодня объектом атаки становятся учётные данные более чем из сотни программных продуктов: браузеров, криптовалютных кошельков, менеджеров паролей, почтовых и FTP-клиентов. Благодаря низкой цене и доступности для малоквалифицированных киберпреступников, LokiBot входил в число наиболее заметных похитителей в мире с 2019 по 2022 год.
Описание
Недавно специалисты проанализировали образец LokiBot, распространявшийся в рамках фишинговой кампании. Вектор заражения стандартный для этого вредоносного ПО - вложение в электронное письмо. Файл представляет собой скрипт на языке JScript. При двойном щелчке он выполняется программой Windows Script Host. Детальный разбор этого образца позволяет проследить всю цепочку заражения и понять, как злоумышленники обходят защиту.
Первый этап - обфусцированный JScript-вложение. Код намеренно запутан с использованием чередования подпрограмм дешифровки и ложных функций, имена которых представляют собой шестнадцатеричные числа. После деобфускации основная функция скрипта оказывается довольно простой: она декодирует длинную строку в формате Base64, которая оказывается PowerShell-скриптом, сохраняет его в папку C:\Temp с именем, содержащим штамп времени, и запускает через powershell.exe. Все действия выполняются через библиотеку ActiveX, дающую скрипту прямой доступ к системным функциям. Примечательно, что через заданный тайм-аут (например, 50 секунд) скрипт завершает связанные процессы и удаляет файлы - это часть механизма заметания следов.
Второй этап - PowerShell-загрузчик. Он выполняет XOR-дешифровку длинной символьной строки с жёстко заданным ключом, в результате чего получается .NET-сборка в формате Base64. Затем сборка загружается рефлексивно с помощью функции [System.Reflection.Assembly]::Load, и управление передаётся методу MEN.EXECUTE.LAUNCH. В качестве аргументов этому методу передаются два параметра: полный путь к компилятору ASP.NET (aspnet_compiler.exe) и большой массив байт. Путь к легитимному системному инструменту используется для сокрытия последующих действий.
Третий этап - .NET-инжектор. Загруженная сборка защищена обфускатором ConfuserEx, для которого существуют инструменты снятия защиты. После восстановления кода видно, что статический конструктор класса присваивает делегатам адреса функций из kernel32.dll, типичных для процесса внедрения: CreateProcessA, VirtualAllocEx, WriteProcessMemory, SetThreadContext, ResumeThread. Анализ показывает, что инжектор запускает новый процесс aspnet_compiler.exe, выделяет в нём память и записывает туда содержимое переданного байтового массива. Этот массив оказывается PE-файлом - финальной нагрузкой LokiBot.
Финальная стадия - 32-битный PE-исполняемый файл, скомпилированный старой версией MSVC. Он содержит секцию "x", где 3DES-алгоритмом зашифрованы адреса командных серверов C2. Статический анализ показывает необычно маленькую таблицу импорта. Вместо прямого импорта API-функций malware использует технику хэширования имен функций. Сначала ищется целевая DLL (либо загрузкой LoadLibraryW, либо обходом PEB), затем перебираются экспортируемые функции, для каждой вычисляется хэш, пока не будет найдено совпадение с предвычисленным значением. Хэш-функция LokiBot - простая, основанная на циклическом сдвиге байта вправо и XOR с фиксированным числом. Благодаря тому, что алгоритм давно документирован, хэши известных API-имен собраны в открытой базе HashDB, что позволяет быстро разрешить любые вызовы.
Перед выполнением основной работы образец создаёт мьютекс: он вычисляет MD5-хэш от значения MachineGuid из реестра, чтобы гарантировать, что на системе работает только одна копия вредоносного ПО. Затем начинается главная фаза: сбор учётных данных, их эксфильтрация, закрепление и периодическая связь с C2 для получения новых команд.
Механизм закрепления реализован копированием себя в папку %AppData% с именем файла, сгенерированным так же, как для мьютекса. После этого в реестре создаётся ключ с именем, совпадающим с адресом C2, а значение указывает на скопированный исполняемый файл. Однако эта реализация содержит ошибку: как отметили исследователи, в новых сборках, созданных через кастомные билдеры, подпрограмма дешифровки C2-адресов всегда возвращает настроенный адрес, но при попытке записи в реестр вызывается функция, возвращающая неверный результат вместо ожидаемого раздела Software\Microsoft\Windows\CurrentVersion\Run. В итоге механизм персистенса не работает - это подтверждается на практике.
Для кражи учётных данных LokiBot использует массив указателей на отдельные функции, каждая из которых предназначена для конкретного программного продукта. Цикл последовательно вызывает все эти функции, собирая добытую информацию в локальный буфер. После завершения сбора буфер сжимается с помощью алгоритма aPLib и отправляется на C2-сервер.
После отправки данных вредоносное ПО входит в бесконечный цикл, каждую минуту отправляя HTTP-запрос с информацией о заражённой системе и запуская отдельный поток для обработки ответа сервера. Полученные команды исполняются немедленно. Таким образом, злоумышленники могут выполнять на скомпрометированном устройстве произвольные действия - от кражи новых данных до развёртывания дополнительных нагрузок.
Несмотря на давнюю историю и снижение популярности, LokiBot продолжает представлять угрозу, особенно для организаций, не обновляющих системы защиты от фишинговых атак. Многоступенчатая архитектура с обфускацией, использованием легитимных системных утилит и рефлексивной загрузкой .NET-сборок затрудняет обнаружение традиционными сигнатурными методами. Рекомендуется усилить фильтрацию вложений на почтовых шлюзах, обучать сотрудников распознавать подозрительные письма и внедрять поведенческий анализ на конечных точках, способный выявить аномальные запуски скриптов и внедрение кода в доверенные процессы.
Индикаторы компрометации
IPv4
- 158.94.211.95
Domain
- alphastand.top
- alphastand.trade
- alphastand.win
- kbfvzoboss.bid
URL
- http://158.94.211.95/kelly/five/fre.php
- http://alphastand.top/alien/fre.php
- http://alphastand.trade/alien/fre.php
- http://alphastand.win/alien/fre.php
- http://kbfvzoboss.bid/alien/fre.php
SHA256
- 4c9f271242f61f1a31b8146305e9a7ed512c521445d4f7a7a901e301307add3d
- 5864a697bd7b339f56b05405f29a097cd027cafdcc4e63c2aaeccccbf930605f
- 64c7dd0a3a3ae49977ac05913d3878000cce14e5d8c1ee05b782bdfd648bde91
- ad10ff9043d6f327045943635fcbd0c5918acb79dc998db92ee4c7dee5224710
- c099f965144bccd0b590f946659fc3c0747c54aef505b6caaca9078712f455fb