Virus.Win9x.Sk

Дата обнаружения 11/01/2002
Класс Virus
Платформа Win9x
Описание

Technical Details

Резидентный Windows-вирус. Размножается под Windows95/98: инсталлирует себя
в системную память, перехватывает файловые функции Windows и заражает
выполняемые файлы Windows (PE-файлы — Portable Executable). Помимо
PE-файлов вирус также заражает HLP-файлы Windows — вирус записывает в них
скрипт-программу, которая при активизации HLP-файла (т.е. при вызове
подсказки Windows) записывает «дроппер» вируса на диск и запускает его на
выполнение. Вирус также записывает свои файлы-дропперы в архивы четырех
типов: RAR, ZIP, ARJ и HA. Вирусные дропперы в архивах и HLP-файлах имеют
формат выполняемых COM-файлов DOS и запускаются на выполнение в DOS-окне,
однако они так же, как и PE EXE-файлы в состоянии инсталлировать копию
вируса в системную память Windows.

Код вируса в PE-файлах и DOS-дропперах зашифрован полиморфик-кодом. В
случае PE-файлов вирус использует технологию «без точки входа»
(EPO — «Entry Point Obscuring»): вирус не модифицирует
стартовый адрес программы и не записывает процедуру JMP_Virus перехода на
свой код по стартовому адресу, но помещает ее по случайно выбранному адресу
в теле заражаемой программы. В результате основная процедура вируса
получает управление не в момент запуска зараженной программы, а только в
том случае, если управление получает соответствующая подпрограмма
файла-носителя, которая содержит в своем теле процедуру JMP_Virus.

Вирус является «медленным»: при заражении файлов он проверяет различные
условия и в результате заражает лишь очень незначительное количество
файлов. В стандартной поставке Windows95/98 зараженными могут оказаться
всего около 10 EXE-файлов, да и то только в том случае, если совпадут
прочие условия, проверяемые вирусом при заражении. То же относится и к
архивам и HLP-файлам: вирус заражает далеко не все из них и делает это
крайне редко: только если за предыдущие две минуты не было ни одного
обращения ни к EXE-файлам, ни к архивам, ни к HLP-файлам.

Вирус крайне опасен: при запуске или открытии антивирусов ADINF, AVPI, AVP,
VBA или DRWEB вирус уничтожает все файлы на всех доступных дисках с C: до
Z: включительно и затем завешивает компьютер. Вирус также в любом
случае удаляет файл COMMAND.PIF.

Вирус содержит ошибки, которые под некоторыми конфигурациями Windows
являются летальными: Windows выдает стандартное сообщение об ошибке и
дальнейшая работа Windows становится нестабильной.

При заражении системной памяти вирус в зависимости от своего случайного
счетчика выводит текст:

1997 VBA Ltd. E-mail:support@vba.minsk.by

Заражение системной памяти

Резидентная копия вируса работает как часть ядра Windows на уровне
VxD-драйверов (Ring0). DOS-программы и приложения Windows не в состоянии
стандартными методами получить доступ к ядру Windows, поэтому вирус для
инсталляции своего кода как VxD-драйвер предпринимает ряд нетривиальных
приемов.

При запуске COM-дроппера в DOS-окне Windows вирус DMPI-вызовами получает
доступ к таблице распределения памяти защищенного режима (Local Description
Table), правит ее и переключает свой 16-битный код в 32-битный защищенный
режим. Вирус после этого работает как часть ядра Windows и получает доступ
к VxD-функциям, которыми и пользуется для последующей регистрации своего
кода в системе.

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

Вирусные перехватчики

Вирус перехватывает три функции Windows. Первая является обработчиком порта
534Bh («SK» в ASCII) и используется вирусом для детектирования своего
резидентного кода: при чтении из этого порта вирус возвращает 21h («!»
ASCII) в регистре AL. Данный метод проверки резидентной копии является
универсальным для DOS- и PE-программ, и вирус использует его в обоих
случаях: в DOS-дропперах и в зараженных PE-программах.

Второй перехватчик является «стандартным» для резидентных Windows-вирусов —
IFS API Hook. Вирус перехватывает обращения к файлам и при их открытии
(включая запуск), переименовании и чтении/изменении атрибутов файлов
вызывает процедуру заражения.

Третий перехватчик обрабатывает функцию «Install FileSystemApiHook», т.е.
непосредственно функцию, которая используется для регистрации в
системе предыдущего перехвата (IFS API). При помощи этого перехвата вирус
организует «всплытие» своего обработчика IFS API: при регистрации в системе
нового обработчика вирус временно удаляет свой IFS API Hook и затем снова
устанавливает его. В результате вирусный перехватчих всегда является первым
в списке обработчиков IFS API и получает управление непосредственно при
вызове файловых функций Windows.

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

Когда управление впервые передается на процедуру заражения файлов вирус
ищет в системе и заражает программу-оболочку Windows (ей обычно является
EXPLORER.EXE), указанную командой «shell=» в файле SYSTEM.INI. Поскольку
оболочка Windows является всегда активной, то вирус не может открыть файл
на запись. Эту проблему вирус решает при помощи стандартных возможностей
Windows — «апгрейдом» оболочки при перезапуске Windows.

Для этого вирус копирует заражаемый файл с новым именем (у нового файла
отличается лишь последний символ расширения имени: .EXE -> .EXF, например).
Затем вирус заражает новый файл и записывает в файл WININIT.INI команды
замены старого файла-оболочки на зараженный. Файл WININIT.INI автоматически
обрабатывается Windows при очередном старте, и зараженный файл замещает
первоначальный.

Если оболочка Windows уже заражена, вирус проверяет расширение имени файла,
к которому идет обращение, и заражает его. При открытии файлов .EXE, .SCR и
.DLL управление передается на процедуру заражения PE-Файлов, при обращениях
к .HLP-файлам вирус добавляет к ним свой дроппер, в случае файлов .RAR,
.ZIP, .ARJ и .HA вирус вставляет в них свой DOS-дроппер.

Заражение PE-файлов

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

Затем вирус записывает в файл процедуру JMP_Virus, которая при активации
расшифровывает основной код вируса и передает на него управление. Данная
процедура является полиморфик-циклом размером до 168 байт. Она записывается
в секцию кода заражаемого файла по случайно выбранному адресу. При выборе
этого адреса вирус сканирует секцию кода заражаемого файла и ищет в нем
заголовок подпрограммы — вирус использует тот факт, что большинство
компиляторов C/Pascal записывают в начало подпрограмм стандартный код.
Затем вирус проверяет еще некоторые условия, чтобы не испортить код
следующей подпрограммы, генерирует полиморфик-код продедуры JMP_Virus и
записывает его в файл.

В некоторых случаях, например, при заражении оболочки Windows, или если в
файле не обнаружены C/Pascal-подпрограммы, вирус записывает процедуру
JMP_Virus вместо стартовой процедуры файла. В этом случае вирус
активизируется непосредственно в момент старта зараженной программы.

Заражение архивов

При заражении архивов вирус достаточно аккуратно разбирает их внутренний
формат и добавляет в архив свой DOS-дроппер. При этом вирус заражает архивы
только в том случае, если они содержат не менее 10 файлов, и хотя бы один
из них является .COM- или .EXE-файлом. Имя вирусного дроппера в архивах
является случайным и имеет расширение .COM или .EXE.

В случае RAR-архивов процедура их обработки содержит дополнительный код.
Если вирус обнаруживает в архиве файл, упакованный методом «stored» и
имеющий специфическую дату и время создания, то вирус считывает код данного
файла из архива и выполняет его. Данная процедура, таким образом, способна
запускать программы на компьютере без какого-либо вмешательства пользователя
— достаточно лишь «подсунуть» специальным образом изготовленный RAR-архив.

Заражение HLP-файлов

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

При заражении HLP-файлов вирус записывает свой DOS-дроппер в их конец и
создает в SYSTEM-секции файла новый макрос, который содержит 10 команд.
Этот макрос при активизации создает на диске C: короткую программу
(загрузчик DOS-дроппера) и выполняет ее. Программа-загрузчик определяет имя
HLP-файла, считывает из него DOS-дроппер вируса, записывает его вместо
своего файла и запускает его на выполнение. Управление передается на
полиморфик-цикл, который расшифровывает основной код вируса и передает
управление на процедуру инсталляции вируса в память Windows. Затем
DOS-дроппер удаляется вирусом с диска. Таким образом вирус заражает систему
при открытии инфицированного HLP-файла.

Перед «выбросом» своего кода из HLP-файлов вирус проверяет наличие в
системе файла C:NTLDR (загрузчик WindowsNT). Если такой файл присутствует,
то вирус не заражает систему.

Следут также отметить, что код вирусного загрузчика в HLP-файлах достаточно
специфичен. Практически полностью он состоит из латинских букв от ‘A’ до
‘Z’ (это вызвано тем, что скрипт-команды в HLP-файлах являются текстовыми
строками). Заголовок загрузчика содержит процедуру, которая конвертирует
символьные строки в двоичный формат выполняемых файлов (два символьных
байта в один), и «текстовая» программа в результате становится «нормальной»
программой на языке ассемблера. Однако некоторые команды конвертации текста
в код содержат небуквенные символы, которые при записи из Windows HLP-файла
в DOS-файл конвертируются в зависимости от установленной национальной
кодировки. В результате код загрузчика в случае «неправильной» кодировки
оказывается испорченным и вирусный загрузчик «зависает». В случае же
русской кодировки вирус работает без проблем, т.е. вирус способен заражать
систему из HLP-файлов только в том случае, если в системе установлена
поддержка русского языка.

Win95.SK.8699

«Доработанная» версия вируса. Усилены процедуры шифрования и
полиморфик-генератор. Исправлена ошибка заражения HLP-файлов Windows — эта
версия вируса в состоянии размножаться из HLP-файлов под любой национальной
кодировкой (не только под русской). Отключает резидентную компоненту
(монитор) антивирусов AVP и F-SECURE — ищет и правит код антивирусного
драйвера GK95.VXD.