VirusHunter предупреждает всех пользователей ПК о распространении файлового вируса Win32.HLLP.HiDrag.mellissa (aka Win32.Assill.a, Jeefo), поражающего Win32-программы...


Детальное описание вируса Win32.HLLP.HiDrag.mellissa

1. Источники попадания в машину.

Основным источником распространения данного вируса являются, как обычно, файло-обменные сети. Вирус может попадать в каталоги установленных на машинах программ файло-обмена как под видом "полезных" программ, так и просто в зараженных дистрибутивах программного софта, переданных Вам друзьями или знакомыми. К сожалению, большинство пользователей упорно игнорируют антивирусные программы или просто не обновляют антивирусные базы, в результате чего "просыпают" попадание вируса в свои машины. Как результат, инфицированные компьютеры становятся рассадниками вирусов для десятков или даже сотен других компьютеров. Потенциальную опасность также могут представлять CD/DVD-диски, записанные на таких "чистых" машинах, т.к. очевидно, что среди записанных на них (дисках) файлов окажутся и инфицированные. Не исключается также и возможность подхватить данный вирус в том случае, если Вы пользуетесь для переноса/хранения информации флэшками (USB Flash Memory Storage) или дискетами.


2. Инсталляция в систему.

Win32.HLLP.HiDrag.mellissa представляет собой "полу"-резидентную (далее по тексту Вы поймете, почему я назвал ее резидентной только наполовину) Windows-программу (т.н. PE EXE-файл, содержащий в своем заголовке метку "PE"; к таковым относятся программы с 32-битным кодом, написанные на языках высокого уровня, таких как, например, C++ Builder, Borland Turbo Pascal (Delphi) и пр., создаваемые для работы в среде Windows). Дееспособен под всеми существующими на сегодняшний день ОС Windows. Написан на Borland Delphi v6.0.
Код программы Win32.HLLP.HiDrag.mellissa частично защищен крипт-кодом, который расшифровывается при запуске вируса с помощью специально встроенной процедуры расшифровки. Кроме того, программа сжата при помощи утилиты компрессии "UPX" версии 1.25, а поверх сжатия обработана какой-то утилитой-оптимизатором кода, в результате чего стандартным распаковочным методом декомпрессировать тело вируса от UPX-сжатия невозможно.
Схематически строение кода вируса выглядит следующим образом (ни на данной, ни на последующих схемах пропорции между участками кода в зависимости от их размеров не учитываются):


Процедура инсталляции вируса в систему зависит от версии ОС Windows, под которой происходит запуск зараженного файла. Первым при запуске инфицированной программы получает управление код вируса, который проверяет наличие следующего раздела ключей системного реестра:

[HKEY_CURRENT_USER\Software\Mellissa\]

Этот раздел может присутствовать в записях системного реестра только в том случае, если Windows уже заражена данным вирусом. Если же вирус запускается на машине впервые, то он создает данный раздел ключей и записывает в него следующие значения:

[HKEY_CURRENT_USER\Software\Mellissa\]
"its"="%name%.exe"
"LK"="Named Mellissa. Ukraine(Chernivtsi)"
"sts"="%letter%"


Здесь %name% - имя, взятое от запущенного зараженного файла (например, если зараженный файл назывался Program.exe, то и вирусный файл-компонент будет называться Program.exe), %latter% - малая или большая латинская буква.
Далее вирус проверяет версию Windows-системы и, в зависимости от этого, выделяет из запущенного зараженного файла свой код вместе с Дополнительной секцией (см. схему выше) и копирует его в 2 следующих файла:

для Windows 9X/ME:

C:\WINDOWS\SYSTEM\%name%.exe
C:\WINDOWS\SYSTEM\ls32.exe

для Windows 2K/XP:

C:\WINDOWS\System32\%name%.exe
C:\WINDOWS\System32\ls32.exe

Файл-компонент %name%.exe используется вирусом для процедуры поиска и заражения файлов, а ls32.exe - для восстановления запускаемых зараженных программ.
При обычных условиях, сразу же после инсталляции управление получает вирусный компонент %name%.exe, который приступает к поиску и заражению файлов. Он остается в памяти системы до первого перезапуска системы. При последующих загрузках Windows вирус не может автоматически запускаться и получает управление только в том случае, если система или пользователь обратятся к одному из зараженных файлов.
Принцип распределения "обязанностей" между вирусными компонентами %name%.exe и ls32.exe заключается в следующем:

%name%.exe - получает управление от ls32.exe при запуске любого из зараженных файлов. Для работы %name%.exe должны выполняться такие условия:

 - он расположен в системном подкаталоге \SYSTEM\ (для Windows 9X/ME) или \System32\ (для Windows 2K/XP);

 - его имя соответствует значению %name%, записанному в созданном вирусом ключе реестра;

 - в системе должно присутствовать программное окно с заголовком

Mellissa

(это окно невидимо для пользователя; создается компонентом ls32.exe при обращении к %name%.exe);

Только при выполнении данных условий %name%.exe будет загружен на выполнение. По окончании его работы указанное программное окно закрывается.

ls32.exe - получает управление при запуске любого из зараженных файлов. Для работы данного компонента должны выполняться такие условия:

 - он расположен в системном подкаталоге \SYSTEM\ (для Windows 9X/ME) или \System32\ (для Windows 2K/XP);

 - его название ls32.exe;

 - в системе должно присутствовать программное окно (также невидимо для пользователя) с заголовком

HIDRAG MUST DIE

Только тогда ls32.exe запускает процедуру восстановления и запуска зараженного файла, после чего закрывает окно с заголовком "HIDRAG MUST DIE", создает окно с заголовком "Mellissa" и запускает на выполнение компонент %name%.exe (также считывает его имя из значения %name%, записанного в созданном ключе реестра). После этого завершает свою работу.


3. Размножение вируса.

3.1. Заражение файлов.

В отличии от варианта Win32.HLLP.HiDrag, "HiDrag.mellissa" заражает только файлы с расширением "EXE", которые являются Win32-программами, программными инсталляторами (дистрибутивы программ - ProgramInstaller) или самораспаковывающимися архивами (SFX - Self Extraction program). При поиске файлов для заражения вирус начинает обход с диска C:. По этой причине системный каталог может довольно долгое время оставаться чистым в том случае, если ОС Windows установлена на др. диск - например, D: или E:. Однако такой вариант довольно редкое явление и поэтому я буду рассматривать общий вариант, когда система установлена на диск C:.
Заражению подлежат не все файлы, а лишь те, которые удовлетворяют следующим условиям:

 - файл имеет расширение "EXE";

 - размер файла составляет 110 кб или более (предельный размер, удовлетворяющий данному вирусному условию, мне не удалось точно установить, но 5-7 Мб файлы тоже заражаются);

 - файл должен быть Win32-приложением ( PE-файл - проверяется по внутреннему формату, при этом вирус сразу откидывает DOS-программы, а также Win16-приложения, т.е. NewEXE-файлы);

 - в заголовке файла должна присутствовать сигнатура, которая при визуальном просмотре кода файла выглядит как текст

.rsrc

(он имеет место практически во всех Win32-приложениях, что связано с особенностями структуры их заголовка; исключением являются только те файлы, которые сжаты специфическими утилитами компрессии - например, "FSG", установочные пакеты некоторых производителей, а также некоторые Win32-приложения, разработанные компанией Microsoft).

Под Windows 9X/ME вирус старается заразить на диске C: все или, по крайней мере, большую часть таких EXE-файлов. Что же касается Windows 2K/XP, то здесь вирус учитывает тот факт, что файлы в некоторых системных подкаталогах проверяются на оригинальность и, в случае их заражения, система сразу предупреждает пользователя о том, что "Некоторые системные файлы были изменены. Хотите оставить эти нераспознанные файлы?". Поэтому вирус заражает в системном каталоге только те EXE-файлы, которые расположены на 4-м уровне вложенности или глубже (5-м, 6-м и т.д.), т.е.:

C:\WINDOWS [соответствует 1-му уровню вложенности]\[подкаталоги 2-го уровня]\[подкаталоги 3-го уровня]\[подкаталоги 4-го уровня]\[подкаталоги 5-го уровня]\ и т.д.

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

Принцип заражения файлов, примененный в данном варианте вируса, весьма сложный. При обнаружении подходящего файла вирус (компонент %name%.exe) запоминает его атрибуты, дату и время модификации, а также оригинальный размер и CRC-значение (контрольную сумму определенных байтов участков кода), после чего открывает заражаемый файл на редактирование (даже если он содержит атрибут "read only" - только для чтения). Затем записывает в его начало свой оригинальный код (т.е. первые 8179 байт тела вируса, смещая на эту величину код оригинальной программы вниз), после чего приступает к реконструкции кода заражаемой программы. Описывать данную процедуру словами бессмысленно, поэтому я нарисовал миниатюрную схему - надеюсь, что она поможет понять суть принципа заражения людям, хоть немного разбирающимся в программировании (как я уже оговорил выше, размерные пропорции на схеме не учитываются):


Код вируса (8719 байт) является как бы неоконченным, т.е. в нем предусмотрена возможность удлинения последней секции (на схеме - Дополнительная секция вируса) с последующим размещением в ней данных, которые считываются вирусом как свои собственные. Вот почему, перетаскивая в себе часть ресурсов кода зараженной программы, компоненты вируса ls32.exe и %name%.exe получают возможность использовать иконки и информационные строки от др. программ. Способ весьма оригинальный, если учесть и тот факт, что вирусу не нужно изменять эту часть данных, чтобы они корректно читались из его кода, - данная последовательность ресурсов одинакова для всех Win32-программ (даже обработанных такими утилитами, как, например, "UPX"). Как результат, вирусные компоненты %name%.exe и ls32.exe будут выглядеть среди прочих системных файлов совершенно безобидными программами - например:


или


и т.п.

Как видно из схемы, вирус переставляет местами секции заражаемой им программы, часть из которых шифрует. Поскольку программная схема о произведенных изменениях довольно сложна, а ее объем зависит, в первую очередь, от размера заражаемой программы, вирус сразу резервирует под нее примерно до 5 кб пространства в Дополнительной секции. Анализ зараженных файлов показал, что данного объема более чем достаточно для всех необходимых записей при размерах заражаемого объекта в 5-7 Мб.
Произведя первичную реконструкцию файла, вирус проверяет прирост его (файла) размера относительно исходного (т.е. до заражения). Если разница превышает 9004 байта (почему выбрано именно это значение - сложно сказать), что является очевидным практически для всех файлов, вирус производит вторичную реконструкцию, которая заключается в сжатии неиспользуемого пространства между логическими секциями кода заражаемого файла. Пояснение: при компиляции любой программы между логическими секциями в ее коде присутствует некоторое количество свободного пространства т.н. "неиспользуемые байты кода". Эти байты не содержат никакого кода (пустые) и ассоциируются с "дырками" - представьте себе, что у Вас есть коробка (это наш файл), в которую складываются книги (это логические секции программы), после чего в коробке остаются промежутки между книжками и стенками коробки (это и есть "дырки"):

Вид "дырок" между секциями программы
до заражения (слева) и после заражения (справа)


Так вот, вирус удаляет часть байт этих "дырок" или, если необходимо, то некоторые "дырки" целиком, чтобы добиться требуемой разницы в 9004 байта. Минимальный размер заражаемых программ (110 кб), был, очевидно, выбран не случайно - количество "дырочного" пространства в таких файлах гарантирует вирусу возможность заражения с последующей реконструкцией кода в рамках допустимого прироста в 9004 байта.
Затем в заражаемом файле производится финальная запись программной схемы его реконструкции, после чего эта схема шифруется, и вирус сохраняет зараженный файл вместо оригинального и присваивает ему исходные атрибуты, дату и время модификации, тем самым маскируя произведенные в файле изменения.


3.2. Восстановление вирусом зараженных файлов.

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

HIDRAG MUST DIE

Если такое окно не обнаружено, то это воспринимается как простой запуск программы; тогда данная копия вируса создает это окно, а затем передает компоненту ls32.exe данные о своем месторасположении, после чего завершает свою работу и, соответственно, работу зараженной программы. В свою очередь, ls32.exe, получив вызов от зараженного файла и обнаружив в системе программное окно с заголовком "HIDRAG MUST DIE", считывает местоположение данного файла и далее производит следующие действия:

 - находит зараженный файл, считывает его его атрибуты, дату и время модификации, сохраняя эти данные в системной памяти как переменную A;

 - открывает файл на редактирование и удаляет из него первые 8179 байт (т.е. вирусный код - лечит файл);

 - расшифровывает и считывает из вылеченного файла программную схему его реконструкции, сохраняя эти данные в системной памяти как переменную В, после чего удаляет из файла секцию со схемой реконструкции (она ему больше не нужна);

 - считывая данные из переменной B, вирус расшифровывает и расставляет в нужном порядке секции зараженного файла (восстанавливает файл в исходное рабочее состояние), после чего пересохраняет восстановленный файл и присваивает ему исходные атрибуты, дату и время модификации, считывая эти данные из переменной A;

 - проверяет CRC-сумму восстановленного файла, сравнивая ее со значением CRC, которое было замерено до заражения файла (это значение также считывается из переменной B). Если значения совпадают, то вирус запускает восстановленную программу на выполнение. Если же CRC-значения не совпадают (например, файл после заражения данным вирусом был еще раз заражен каким-либо др. файловым вирусом, или же восстанавливаемый файл просто является оригинальной вирусной программой - подобие файлам ls32.exe и %name%.exe), то вирус только восстанавливает оригинальный размер зараженного файла, присваивает ему исходные атрибуты, дату и время модификации, но не запускает на выполнение - код такого файла, как Вы сами понимаете, является нерабочим, и вирус не загружает его на выполнение, чтобы избежать ошибок системы при обработке такого некорректного файла.
По окончании восстановления и запуске вылеченного файла вирус закрывает окно с заголовком "HIDRAG MUST DIE".
Следует отметить, что зараженные вирусом файлы не могут быть восстановлены и запущены на выполнение с носителей информации, которые недоступны для записи - например, с CD- или DVD-диска, а также с дискеты/USB-флэшки, у которой джампер блокировки записи переключен в положение "блокировка записи".


3.3. Внештатные ситуации и ошибки в работе вируса.

Алгоритм работы "HiDrag.mellissa" предусматривает заражение, а также лечение и восстановление программ не только при обычных условиях, но и в тех случаях, когда происходят нарушения в его работе. Нестандартных ситуаций может быть 2:

Нестандартная ситуация 1 - после инсталляции в систему вирусные компоненты %name.exe% и ls32.exe% были удалены (например, в результате попыток пользователя удалить вирус из машины). В этом случае, при запуске зараженного файла вирусный код, находящийся внутри этого файла, создает свои компоненты %name.exe% и ls32.exe%, после чего правит значение %name.exe% в вирусном ключе (и, соответственно, у компонента %name.exe%) на имя запущенной зараженной программы. Далее все вирусные процедуры производятся по стандартной схеме.

Нестандартная ситуация 2 - оба вирусных компонента (%name.exe% и ls32.exe%) были испорчены либо в результате попыток пользователя запустить их (см. последние абзацы раздела 3.2), либо в результате повреждений, полученных при заражении каким-либо др. файловым вирусом. Такой оборот событий весьма проблематичен для "HiDrag.mellissa", поскольку при запуске зараженных файлов некому передавать управление (ls32.exe% испорчен, а в алгоритме вируса не предусмотрена перезапись данного компонента в случае повреждения). Тогда копия вируса из запущенного зараженного файла пытается использовать какой-то непонятный механизм поиска др. зараженного файла, который будет использовать на короткое время в роли компонентов ls32.exe% и %name%.exe одновременно. При этом из найденного зараженного файла производится только временный запуск копии вируса, но не самой зараженной программы. Запущенная пользователем зараженная программа лечится и запускается на выполнение, хотя и с некоторой задержкой, как если бы машина просто "задумалась" при ее (программы) открытии.
Однако указанный механизм не всегда срабатывает и вирус из зараженного файла может просто-напросто завершить свою работу, не пытаясь найти способ восстановить и запустить зараженную программу. Тогда запуск зараженного файла может получиться либо с энной попытки обращения к нему, либо вообще невозможен до тех пор, пока пользователь вручную не удалит испорченный файл ls32.exe (почему в некоторых ситуациях так происходит - непонятно). Также при отказе работы данного механизма копия вируса из зараженного файла тупо пытается вызывать на выполнение нерабочий компонент ls32.exe, вследствие чего на экране зависает окно системного интерпретатора командной строки (вирус обращается к своим компонентам через командную строку Windows, но при его обычной работе данное окно едва можно увидеть по быстрому мельканию, т.к. оно практически моментально закрывается):


При этом система выдает стандартное сообщение об ошибке (ниже приведен пример такого сообщения в Windows 2K/XP):


Запуск зараженной программы снова невозможен до тех пор, пока пользователь вручную не удалит испорченный файла ls32.exe (почему тут не срабатывает механизм поиска др. зараженного файла - тоже непонятно).
Если же был испорчен только компонент %name%.exe, то либо компонент ls32.exe будет выполнять функции обоих компонентов одновременно, либо роль %name%.exe будет временно возложена на запущенный зараженный файл (эта же ситуация может быть и в вышеописанном случае с обоими нерабочими компонентами), в результате чего запуск вызванной программы может отложиться на довольно длительное время.

Кроме перечисленных ошибок, связанных с нарушением работы вируса путем непосредственного стороннего вмешательства в его работу, имеют место и несколько внутренних ошибок, которые проявляются и при обычном режиме работы "вредоносца". Вот те из них, которые были выявлены в ходе изучения вируса:

 - при поиске файлов для заражения вирус должен с одинаковой вероятностью заражать файлы как на диске C:, так и на прочих дисках компьютера, однако по причине какой-то ошибки предпочтение в большинстве случаев отдается диску C:. В результате этого программы, расположенные на остальных дисках машины, могут довольно долгое время оставаться чистыми;

 - иногда при запуске зараженного файла вирус забывает запустить компонент %name%.exe, в результате чего процедура поиска и заражения файлов перекладывается на компонент ls32.exe, либо просто не выполняется;

 - если зараженный файл запускается на выполнение в тот момент, когда компонент %name%.exe уже загружен на выполнение, то это может ошибочно вызвать завершение работы данного компонента и даже его последующее удаление с диска;

 - иногда вирус забывает при обходе каталогов заразить подходящий по параметрам файл и тот остается чистым до следующего цикла заражения файлов. При тестах количество таких пропущенных вирусом файлов составило примерно 1-2 на несколько десятков зараженных файлов;

 - также в одном из тестов вирус некорректно проверил EXE-файл на наличие в его (файла) заголовке сигнатуры .rsrc и заразил его, хотя этого не должно было произойти (данная сигнатура отсутствовала). При этом размер зараженного файла увеличился не на 9004 байта, а примерно в 5 раз. Но самым интересным оказалось то, что при запуске данного файла вирус абсолютно нормально восстановил его и запустил на выполнение - файл остался полностью работоспособным.

Несмотря на все выявленные недоработки и ошибки, в ходе проведения тестов я не выявил ни одного файла, который бы потерял после заражения работоспособность.


4. Прочие вещи.

Загружаясь на выполнение, вирус ищет в ключах реестра следующий раздел:

Control Panel\Cursors

При обнаружении данного раздела он ищет в этом разделе параметр, в значении которого присутствует следующий фрагмент:

Cursors\appstart.ani

Файл appstart.ani является системным анимационным файлом курсора мыши и располагается, согласно указанной записи, в системном подкаталоге системы C:\WINDOWS\Cursors\. Наличие данного файла характерно для большинства версий Windows. Но, тем не менее, вирус проверяет наличие данного файла, но не более того. Ничего с ним не делает и никак не влияет на работу мышки или изменение анимационного вида ее курсора.
Кроме того, в зависимости от каких-то неопределенных условий, вирус может изменять значение %letter% в своем ключе на большую или малую латинские буквы, а может и не менять - присвоить, например, данной переменной значение "q" или "R" в начале инсталляции в систему и более не менять данного значения.
Для чего вирус проверяет/осуществляет вышеуказанные вещи - непонятно.
В некоторых случаях при завершении работы системы вирус не успевает корректно закрыть программное окно с заголовком "Mellissa" и оно становится доступным для визуального просмотра.

Фрагмент записи, присутствующий в вирусном ключе

Ukraine(Chernivtsi)

, указывает на тот печально-неприятный факт, что некоторые талантливые Черновицкие программисты не могут найти иного применения своим знаниям (или просто не хотят?), кроме, как создавая вредоносные программы. Увы, в последнее время такие случаи наблюдаются все чаще, что может повлечь весьма плачевные последствия...


5. Детектирование и удаление вируса из машины.

Очевидно, вирус уже успел массово распространиться за пределы не только Черновцов, но и Украины, поскольку на момент обнаружения не детектировался только румынским антивирусом BitDefender Professional, куда и был отослан для изучения.
На данный момент Win32.HLLP.HiDrag.mellissa обнаруживается под следующими номенклатурными названиями:

Антивирус Kaspersky AntiVirus: Virus.Win32.Assill.a (с 14.10.2006 уже корректно восстанавливает файлы после их лечения)

Антивирус BitDefender Professional: Win32.Assill.A (включен в антивирусную базу 05.10.2006; НЕ лечит зараженные файлы, а только удаляет)

Антивирус DrWeb: Win32.HLLP.Jeefo.13200 (лечит файлы, но не совсем корректно восстанавливает их)

Антивирус Касперского, начиная с 14.10.2006, уже корректно лечит и восстанавливает все файлы - отдельные образцы зараженных файлов, которые антивирус портил при восстановлении (таковыми являлись компрессированные программные файлы; в частности, обработанные утилитой компрессии "UPX"), были отосланы в Антивирусную Лабораторию Евгения Касперского и ошибка в процедуре восстановления файлов после их лечения была исправлена.
После лечения машины антивирусом DrWeb некоторые программы остаются неработоспособными и их необходимо переустанавливать. Этот факт не связан с какими-либо повреждениями кода, вызванными вирусом. Причиной является встроенная в такие программы процедура проверки оригинальности их кода, которая заключается в подсчете CRC-значения определенных участков кода файлов и сопоставлении полученных значений с оригинальными. К таким программам относятся, например, Nero Burning ROM (программа для записи СD- и DVD-дисков), фаерволл ZoneAlarm Pro (программа-защитник Интернет-трафика) и некоторые др. Учитывая тот факт, что код вылеченных DrWeb'ом файлов немного отличается от исходного (до заражения), то вышеуказанные программы при своем запуске сразу же выдают соответствующее сообщение о расхождении значений контрольных сумм с оригинальными и завершают свою работу.
Инженеры антивируса BitDefender Professional вообще не удосужились включить в процедуры лечения информацию о данном вирусе, поэтому антивирус может только удалять зараженные файлы.
Для удаления вируса из машины рекомендуется действовать следующим образом: запустить установленный на зараженном компьютере антивирус (если он заражен, то вирус вылечит его), после чего поочередно удалить из памяти процессы %name%.exe и ls32.exe, если они активны. Для этой цели можно воспользоваться Диспетчером задач. Затем необходимо удалить и сами компоненты вируса. После этого закройте все открытые программы (новых ни в коем случае не запускайте, т.к. это может повлечь повторное заражение системы) и запустите антивирусный сканер в режиме лечения.
Следует отметить, что некоторое количество вирусных копий может присутствовать в файлах с расширениями "CHK" (последние являются файлами, резервируемыми некоторыми версиями ОС Windows в случаях обнаружения сбойных кластеров на жестком диске системным приложением Scandisk).


Исследование вредоносного кода и разработка описания: Бройде Герман (aka VirusHunter)
Дата создания: 09.10.2006
Дата внесения последних изменений: 15.12.2006
Автор описания: Бройде Герман (aka VirusHunter)


Rambler's Top100

0.00227808952332