Анализ VBR-буткита Trojan.Mayachok.2


Trojan.Mayachok.2 - троян инфицирующий Volume Boot Record и нарушающий работу популярных браузеров.


Заражение системы
Перед началом атаки на инфицируемый компьютер дроппер вредоносной программы проверяет зараженность системы. Для этого на основе серийного номера системного раздела генерируется CLSID и проверяется его наличие в системном реестре: если в ветке

  • HKLM\Software\Classes\CLSID

отсутствует соответствующий раздел, то заражение продолжается.

В операционных системах Windows Vista и Windows 7 троян пытается повысить собственные права, т.е. постоянно перезапускает самого себя с запросом на повышение привилегий. Однако такой процесс можно завершить в "Диспетчере задач".


Завершение троянского процесса через "Диспетчер задач"

Дроппер несет в себе 32-х и 64-битный драйвер, способный обеспечить загрузку основного функционала данной вредоносной программы. В зависимости от разрядности пользовательской ОС, на диске сохраняется соответствующий драйвер, который может быть записан как в начало диска (до первого активного раздела), если там достаточно места, так и в его конец. Однако, если загрузочным разделом окажется не первый, то троянский драйвер может перезаписать случайные данные любого раздела до загрузочного, т. к. позиция для записи выбирается случайно в пределах свободных секторов.

Только после этого начинается заражение VBR (Volume Boot Record). Еще одно обязательное условие для заражения - файловая система раздела должна иметь формат NTFS. Анализируя загрузочную запись, троян находит удобное место для своего размещения и перезаписывает имеющийся там код. Оригинальный код упаковывается при помощи библиотеки aplib и дописывается следом за вирусным. Номер начального сектора размещенного ранее на диске драйвера и его размер также "прошиваются" в тело зараженной VBR.

Обратим внимание, что рассматриваемый нами BOOT-сектор является первым сектором VBR, занимающий, например, для раздела NTFS 16 секторов. Таким образом, классическая проверка только загрузочного сектора не может обнаружить вредоносный объект, т. к. он располагается дальше — внутри VBR.

После заражения системы Trojan.Mayachok.2 сбрасывает на диск небольшое приложение, предназначенное для автоматической перезагрузки системы. Аналогичным образом ведет себя и другой буткит — Trojan.Hashish. В завершение своей работы троян пытается "замести следы" и удалить себя.


Запуск из VBR


Сравнение первых секторов VBR чистой и зараженной системы, красным показаны различия — код вирусного загрузчика

Получив управление, вирусный загрузчик действует по классической для MBR/BOOT-вирусов схеме. "Откусывает" себе небольшой кусок системной памяти, переносит себя туда и перехватывает прерывание int 13h для просмотра содержимого считываемых с диска секторов. Затем он целиком загружает с диска свой драйвер и распаковывает на прежнее место оригинальный код VBR. Управление возвращается системному загрузчику.

Далее идет череда снятий/установок перехватов в загружаемых модулях, таких как ntldr, bootmgr, osloader.exe, winload.exe и т. д., в зависимости от используемого операционной системой загрузчика. Следует отметить, что помимо обычных перехватов (сплайсинга) в ключевых мостах используются аппаратные отладочные регистры (dr0-dr7) и трассировка (пошаговое исполнение) кода. Это придает универсальность трояну и одновременно является естественным способом обхода защиты целостности некоторых загрузочных модулей. В итоге в области памяти режима ядра (kernelmode memory) оказывается загруженный и готовый к работе вирусный драйвер.


Драйвер загрузчика

Точка выхода вирусного драйвера вызывается дважды, что связано с тесной работой зараженного VBR и драйвера. Поскольку код вирусного VBR составляет всего 2078 байт, часть функционала авторы решили перенести в тело драйвера. При первом вызове он добавляет себя в списки из LOADER_PARAMETER_BLOCK в:

  • LoadOrderList, как копия первого модуля в списке (а это ядро ОС);
  • BootDriverList, как загрузочный драйвер, якобы прописанный в \Registry\Machine\System\CurrentControlSet\Services\null.

Таким образом, вредоносная программа имитирует свою загрузку в качестве обычного boot-драйвера.

Второй раз драйвер вызывается операционной системой, которая уверена, что сама загрузила его. Данные манипуляции приводят к некоторым побочным эффектам.

Например, в системе появляется драйвер Null, но при более внимательном рассмотрении оказывается, что он был создан ядром (ntoskrnl.exe).

В то же время среди загруженных модулей есть еще одно "ядро", с параметрами DllBase и SizeOfImage принадлежащими вредоносному драйверу.

Проверить систему на наличие или отсутствие заражения можно использовать простую команду "echo hello >nul", которая на неинфицированной системе успешно выполняется, а на зараженной выдает сообщение об ошибке.

Задачей драйвера является инжект (внедерение) своего кода в запущенные процессы.


64-битный драйвер, красным выделены динамические библиотеки, которые упакованы aplib

Внедрение кода осуществляется обычной установкой нотификаций через функции PsCreateProcessNotifyRoutine и PsCreateProcessNotifyRoutine с последующим вызовом асинхронной функции через механизм APC. В процессе исследования выяснилось, что 64-битный драйвер несет "на борту" две библиотеки. При этом полезная нагрузка находится только в одной из них, а вторая, по всей видимости, является "заделом на будущее".


32-битный драйвер, который осуществляет заброс шелл-кода в процессы

В остальном же драйвер не представляет особого интереса. На сегодняшний день используемый Trojan.Mayachok.2 механизм заражения является уникальным среди известных угроз. Предполагается, что в недалеком будущем стоит ожидать использования подобной техники заражения другими вредоносными программами.