Vidar усложняет расшифровку строк виртуальной машиной и шифрами
Vidar, семейство вредоносного ПО для кражи информации, меняло механизм обфускации строк от простого однобайтового шифрования XOR до механизмов, специфичных для отдельных сборок. В ранних версиях применялось шифрование XOR, во внутренней версии 1.5 появился механизм на основе ChaCha20, а начиная с версии 1.8 ChaCha20 модифицировали для усложнения обнаружения и расшифровки.
Начиная с внутренней версии 2.0 Vidar объединяет легковесную виртуальную машину с собственными потоковыми шифрами. Такая архитектура сохраняется в версиях 2.x и 3.x. Виртуальная машина использует интерпретатор байткода с циклом «получение, декодирование, выполнение». Каждое значение байткода индексирует разреженную таблицу диспетчеризации из 256 записей. При инициализации таблица содержит 14 обработчиков операций, а неопределённые записи приводят к завершению выполнения.
Интерпретатор не использует стек и в основном работает с однобайтовым аккумулятором. Обработчики операций выполняют базовые действия:
- операцию XOR;
- сложение;
- вычитание;
- побитовые циклические сдвиги;
- побитовое отрицание;
- умножение;
- подстановку по таблице.
Виртуальная машина может напрямую генерировать расшифрованные строки или выводить криптографический материал для отдельного потокового шифра. В версиях 2.0 и 2.1 первые девять байтов, сгенерированных виртуальной машиной, образуют ключ потокового шифра. В версиях 2.2 и более поздних для этого используются первые восемь байтов. Во всех версиях последние четыре байта служат одноразовым значением. Полученные ключ и одноразовое значение применяются для расшифровки отдельного массива байтов с зашифрованной строкой.
Vidar использует два широких класса собственных потоковых шифров. Версии 2.0 и 2.1 реализуют модифицированный шифр на основе ChaCha с собственным начальным состоянием размером 128 бит, ключом длиной восемь байт, одноразовым значением длиной четыре байта и поворотами в четвертных раундах, специфичными для образца. Версия 2.2 и более поздние используют шифр ARX, основанный на операциях сложения, циклического сдвига и XOR.
Каждая сборка изменяет операции ARX, а также константы для инициализации состояния и генерации ключевого потока. Полученные байты ключевого потока складываются по модулю два, то есть с использованием XOR, с шифротекстом для восстановления строк. Эти методы сохраняют стабильный интерфейс расшифровки и одновременно меняют поведение операционных кодов, криптографические операции, константы и преобразования между сборками. Это затрудняет создание статических сигнатур, автоматизированный анализ и реверс-инжиниринг.
Отчет получен из сервиса CTT Report Hub. Права на отчет принадлежат его владельцу.
Ознакомиться подробнее с отчетом можно по ссылке.



