Всем привет!

Меня немного воодушевила реакция общества на мою статью об онлайн-песочницах, а также интересный пост от hormold, где стало возможным проанализировать существующие варианты заражения компьютеров в онлайн. И на почве этого я решил, что, возможно, интерес представит материал о некоторых современных механизмах работы вредоносных программ.

Думаю, большинству не будет секретом механизм работы существующих файловых инфекторов типа Sality и Virut. Безусловно, суть работы таких инфекторов хорошо описана, а потому разработать новую версию легко, отладка её не вызывает проблем. Куда более интересным будет описание нового механизма — заражения файла из загрузчика в MBR. Во-первых, такой вредонос должен быть более сложным, имеется ограничение по длине кода — 62 сектора (7C00H), а кроме того предъявляются особые требования к отсутствию багов — малейшая ошибка может привести к сбою загрузки системы.

Единственным уникальным на данный момент примером такого вредоноса является Trojan:W32/Smitnyl.A, распространяемый по некоторым файлообменым сетям. Его мы и рассмотрим сегодня.

Инфектор Smitnyl.A при запуске заражает MBR через прямой доступ к диску. Он заменяет оригинальную MBR вредоносным вариантом, содержащим в секторе 32 процедуру файлового инфектора.

Рисунки 1 и 2: Перезапись оригинальной MBR, Часть 1 (верх) и 2 (низ)




Почему же автор выбрал такой непростой способ инфицирования исполняемого файла? Вероятно потому, что такой ��пособ позволяет обойти систему защиты файлов Windows (WFP), что позволяет эффективно заражать системные файлы без опасности, что они будут впоследствии восстановлены WFP.

Оригинальная MBR сохраняется в секторе 5, в то время как процедура инфектора размером A00H располагается в секторе 39. Цель инфектора — критичный системный файл userinit.exe.

Рисунки 3: Код вредоносной MBR


Рисунки 4: Код оригинальной MBR


Рисунок 5: Код инфектора в MBR


Рисунок 6: Вредоносный код, внедряемый в userinit.exe


Почему же целью заражения выбран userinit.exe? Вероятно, это сделано по той причине, что userinit.exe — один из первых процессов, стартующих при загрузке системы, что позволяет вредоносу запускаться на ранней стадии, до загрузки ряда файерволов и антивирусов, эффективно выполняя свой функционал. Специалисты могут возразить, что ещё более ранними являются smss.exe, csrss.exe. Что же, возможно столь ранняя загрузка неудобна по причине отсутствия каких-то критичных процессов для вредоноса.

Smitnyl заражает userinit.exe на этапе ранней загрузки системы, когда выполнение кода MBR доходит до 0x7C00, определяется активный раздел из таблицы разделов и смещение стартовой области загрузочного сектора.

Затем производится проверка типа файловой системы.

Рисунок 7: Определение типа загрузочного сектора


В случае, если обнаружена система NTFS, код парсит Master File Table (MFT) и считывает аттрибуты файловой записи $ROOT (.) для нахождения аттрибута $INDEX_ALLOCATION. Эта процедура позволяет найти размещение userint.exe на диске(при условии корректного парсинга MFT). Smitnyl проверяет все пути, начиная от $ROOT до папки System32, где располагается userinit.exe.

Рисунок 8: Обнаружение Userinit.exe, часть 1


Рисунок 9: Обнаружение Userinit.exe, часть 1


Вредонос использует процедуру get_userinit_data_content_addr для нахождения файла userinit.exe, которая затем использует Extended Write Function (номер функции ah = 43H) для записи вредоносного содержимого, исходно размещённого в секторе 39. В ходе заражения userinit.exe вредонос также проверят наличие маркера в файле по смещению 0x28. зачем это нужно — будет разъяснено ниже.

Рисунок 10: Обнаружение Userinit.exe, часть 2


Рисунок 11: Обнаружение Userinit.exe, часть 2


В результате загрузки инфицированной машины userinit.exe заражается и затем запускается (уже непосредственно ОС). Одним из способов обнаружения заражения userinit.exe является элементарный просмотр свойств файла.

Рисунки 12 и 13: Свойства userinit.exe, оригинального (выше) и инфицированного (ниже)




К счастью, разницы весьма очевидна.

Давайте теперь посмотрим код заражённого файла.

Рисунок 14: Заражённый Userinit.exe


Тут становится понятным, почему инфектор при заражении искал маркер 0x55AA перед осуществлением инфицирования — это предотвращение повторного заражения. Так что же происходит при запуске заражённого файла? Основная цель — запуск криптованного вредоносного кода, расположенного в секторе 45.

Рисунок 15: Криптованный исполняемый код в секторе 45


Код имеет ряд предварительных процедур, предшествующих декодированию и старту основного функционала.

• Проверка наличия системы защиты интернет 360safe. Если таковая находится — то её отключают.

Рисунок 16: Проверка наличия системы 360safe


• Создание подменного explorer.exe во временной папке — это декодированный исполняемый код.

Рисунок 17: Подменный Explorer.exe


Рисунок 18: Подменный Explorer.exe


• После декодирования, производится запуск %temp%\explorer.exe посредством ShellExecute — userinit.exe выполняет абсолютно аналогичную операцию с оригинальным explorer.exe! Одновременно, производится запуск оригинального explorer.exe посредством Winexec.

Рисунок 19: Выполнение подменного explorer.exe и оригинального explorer.exe


После этого выполняется основной функционал вредоноса — это классический даунлодер, загружающий и выполняющий файлы.

Рисунок 20: Функционал даунлоадера


В итого, благодаря отключению защиты 360safe становится возможным эффективная загрузка и выполнение файлов с удалённого сервера http://[...].perfectexe.com/ и др.

Перевод блога F-Secure.

P.S. Обещанное читателям описание удаления зловреда вручную здесь.