▄▄ █ ▀▀▀ Virus Magazine █ Box 176, Kiev 210, Ukraine IV 1997 ▀██ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ █ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ▀ ▀▀▀▀▐▀▀▀ █▀▀▀▀▀▀█ ▐█ █▀▄ █▀▀ ▄▀▀ ▄▀▀ ▄█▄ ▄▀▀ █▀█ ▌ █ ▄▀█ █ ▄▀▀ █▄▄ █ █ █ █ █ █ █ █▀ █▀ █ █ █▀ █ █ █ █ █ █ █ █ █ █ █ █ █ █ ▐ ▐ ▐ ▐▄▄ ▐▄▄ ▐ ▐▄▄ ▐▄▀ ▀█ ▀▄█ ▐ ▐▄▄ ▐▄▄▄ █ █ █ █ ▐ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ █▄▄▄▄▄▄█ (C) Copyright, 1994-97, by STEALTH group WorldWide, unLtd. Итак, угроза, возможность которой уже не один год обсуждалась в вирусно-антивирусных кругах, уже стала реальностью. Игорю Данилову, ведущему вирусологу АО "ДиалогHаука", автору программы Doctor Web, один из пользователей (г.Владимир) прислал новый вирус. И хотя этот вирус и не опасен сам по себе, но к сожалению, показывает принципиальную возможность маскироваться от антивирусов на гораздо более серьезном уровне, чем было возможно до сих пор. Одно пока утешает, что воспользоваться таким приемом по силам только очень профессионально подготовленному программисту-вирусописателю. Кстати, очень высоким требованиям должен соответствовать и вирусолог, создающий антивирус против такого вируса. Борьба "вирус-антивирус" в очередной раз выходит на новый виток своего развития. В этих условиях еще более актуальной становится грамотность пользователей в вопросах компьютерной безопасности и в частности, регулярное использование профессиональных антивирусных средств, причем, что важно, свежих версий. Итак, слово Игорю Данилову, который первым проанализировал этот вирус и включил его обнаружение и лечение в очередное дополнение вирусной базы своего популярного антивируса Doctor Web. Это дополнение выпущено и разослано 21 апреля 1997 г. Более подробное описание вируса подготовлено И.Даниловым и в ближайшие дни будет опубликовано на web-сервере АО "ДиалогНаука" http://www.dials.ccas.ru. (Заметим сразу, что такая публикация нисколько не помогает писать подобные вирусы из-за исключительно высоких требований к квалификации программиста для реализации многочисленных описанных и неописанных в публикации технических деталей. А кто имеет такую квалификацию, тот и так знает, как это делается...) ======================================================== Компьютерный вирус - супервизор защищенного режима? Игорь Данилов Персональные компьтеры год от года становятся все сложнее и сложнее, используя все более высокие аппаратные и программные технологии. Компьютерные вирусы также становятся все сложнее и пытаются приспособиться к новым условиям обитания. Так, вирусы научились заражать загрузочные сектора дисков, файлы для операционных систем DOS, Windows, Windows'95, OS/2, Linux и даже документы для Word, Excel и MS-Office'97. Для сокрытия своего присутствия в системе они стали невидимками, или стелс-вирусами. Они научились быть полиморфными в загрузочных секторах, файлах и памяти для того, чтобы их детектирование стало еще более трудной задачей для разработчиков антивирусных средств. С появлением процессоров i386 вирусы стали использовать в своем коде 32-разрядные инструкции. В настоящее время полиморфные вирусы используют 32-разрядные расшифровывающие команды в своем декрипторе. Вирусами предпринимаются практически все попытки для создания сложноразрешимых задач по их поиску и лечению. Одним словом, вирусы хотят выжить и победить в данных условиях. Для этого они используют все предоставляющиеся им возможности, как программные, так и аппаратные. Но с появлением процессора i286, а затем и 32-разрядного процессора i386 стал возможен защищенный (или виртуальный) режим работы процессора, который до настоящего момента вирусам никак не удавалось "приручить" и привлечь его к себе на помощь. Вернее, вирусы пытались его освоить, но все эти попытки были как "проба пера" и реальной выгоды они вирусам не принесли. Загрузочный вирус PMBS, первым пытавшийся освоить защищенный режим (1994 г.), не мог ужиться ни с одной программой или драйвером (EMM386, Windows, OS/2,...), которые также использовали в своей работе защищенный режим. Вирусы Evolution.2761 и Evolution.2770 (тоже 1994 г.) использовали только часть мощного защищенного режима и то только тогда, когда процессор находился в реальном режиме работы. Данные вирусы подменяли реальную таблицу векторов прерываний на собственную. Но как вирусы Evolution могут этим воспользоваться в повседневной жизни? Покажите мне хоть одного пользователя PC, который сегодня работает в реальном режиме на процессорах i386-Pentium, т.е. в чистом DOS и без режима расширенной памяти... Так много лет уже прошло с момента появления процессора i386, (не будем даже вспоминать, что до него был i286), а вирусы до настоящего момента не могли покорить его самый мощный защищенный режим. Я думаю, вирусописатели только и мечтали об этом. Но, видимо, основной массе вирусописак такая задача явно не по плечу из-за отсутствия знаний и квалификации. Но вот все-таки такой человек-вирусописатель нашелся. В России, в "диком" виде обнаружен файловый вирус PM.Wanderer, использующий защищенный режим. Причем, он более-менее корректно и стабильно взаимодействует с другими программами и драйверами, также использующими защищенный режим. PM.Wanderer является резидентным полиморфным вирусом, использующим защищенный (виртуальный) режим процессоров i386-Pentium. Для установки своей резидентной копии в память и переключения в защищенный режим процессора (Protected Mode) используется документированный интерфейс VCPI (Virtual Control Program Interface) драйвера расширенной памяти EMS (EMM386). При старте инфицированной программы вирусный полиморфный декриптор расшифровывает основное тело вируса и передает ему управление. Далее основной вирусный код выделяет участок памяти в верхних адресах, копирует в него собственный код и передает ему управление. Затем он восстанавливает код инфицированного файла в программном сегменте (для EXE-файлов также производит настройку адресов перемещаемых элементов) и приступает к непосредственному внедрению в память своей резидентной копии. Первым делом вирус пытается выяснить, установлен ли в системе драйвер EMS. Если драйвер EMS не установлен в системе или вирусная резидентная копия уже находится в памяти, а также в дальнейшем - при отсутствии интерфейса VCPI, вирус освобождает ранее выделенную память и отдает управление программе-вирусоносителю, заканчивая тем самым свою "жизнедеятельность" в системе. Если же "условия среды обитания" благоприятствуют, то вирус выполняет ряд подготовительных операций для выделения памяти под свое тело и производит переключение процессора в защищенный режим работы с наивысшим уровнем привилегий - супервизора. В защищенном режиме вирус устанавливает две аппаратные контрольные точки на адреса входа в обработчик прерывания Int 21h (функции DOS) и перехода на процедуру перезагрузки компьютера. Кроме того, вирус корректирует дескрипторную таблицу прерываний таким образом, чтобы на прерывания Int 1 (особый случай отладки) и Int 9 (клавиатура) установить собственные дескрипторы обработчиков данных прерываний. После этих приготовлений вирус копирует свой код в страницу памяти, полученную им еще до входа в защищенный режим, и производит переключение процессора обратно в виртуальный режим работы на процедуру освобождения ранее выделенной памяти DOS в верхних адресах и возвращения управления инфицированной программы. С этого момента инфицированная программа начинает свою "полезную" работу, а в защищенном режиме оказываются установленными вирусные обработчики: ловушки на Int 1 и прерывания от клавиатуры на Int 9. С их помощью вирус контролирует, во-первых, все вызовы функций DOS, во-вторых, все нажатия клавиш на клавиатуре, и в-третьих, попытки мягкой перезагрузки компьютера. В свою очередь, такой контроль обеспечивает вирусу возможность как надежно реагировать на ряд интересующих его событий при работе программы, так и постоянно проверять состояние своих двух контрольных точек и при необходимости восстанавливать их. В частности, если вирус обнаруживает, что данный вызов исходит от его "собрата", то вирус просто возвращает некоторое условное значение, играющее роль отзыва "я - свой". Таким образом вирус, пытавшийся выяснить наличие своей копии в памяти, будет информирован о том, что память уже инфицирована. Если вирус обнаруживает попытку получения адреса прерывания Int 6 (обычно такой вызов существует во всех программах, написанных на языках высокого уровня, например C, Pascal,...), то вирус пытается найти в адресном пространстве некоторую последовательность байт, очевидно, принадлежащих программе ADinf, но какой-то старой версии (по информации от разработчика ADinf Дмитрия Мостового, за последний год в версиях ADinf не содержится такая последовательность!). Если данная последовательность будет вирусом найдена, то он определенным образом модифицирует найденный код, так чтобы управление не попадало на вызов межсегментной процедуры, которая демонстрирует пользователю изменения, найденные на диске или в файлах. Если же вирус обнаруживает запрос на запуск программы или открытие файла (только на чтение), то вирус считает, что наступило "время большой охоты". Вирус копирует свой код в старшие адреса виртуального процесса DOS-машины, переключает процессор в виртуальный режим и отдает управление своему коду (процедуре заражения). В виртуальном режиме вирус проверяет последние две буквы расширения имени файла (OM или XE) и производит создание своей полиморфной копии и заражение файлов размером более 4095 байт. Вирус не заражает файлы, содержащие в поле значения времени создания - 34 секунды, считая, что такие файлы уже инфицированы. Коррекцию атрибутов файлов вирус не производит, поэтому все файлы, помеченные как ReadOnly, заражены не будут. Также вирус не заражает программу, имя которой состоит из 7 букв. Мне не удалось выяснить имя данной программы, так как вирус не явно определяет ее имя, а подсчитывает CRC данного имени. Вирус не берет на себя обработку критических ошибок, поэтому при попытке записи на защищенный диск в процессе заражения появится стандартный вопрос DOS (...Retry, Ignore, Fail, Abort). При заражении файлов вирус использует прямой вызов ядра обработчика DOS Int 21h. Адрес этого ядра вирус выяснил при трассировке Int 21h во время своей установки в память. Вирус внедряет свой код в начало COM- или в середину EXE-файлов (сразу же за заголовком), запоминая оригинальный программный код в конце файлов. "Реальный рабочий код" вируса составляет 3684 байт, но на практике инфицированные файлы имеют приращение длины более 3940 байт. Вирус в своем теле содержит текст "WANDERER,(c) P.Demenuk". Обнаружить резидентную копию данного вируса, находящегося в нулевом кольце защищенного режима процессора, обычными способами невозможно. Для обнаружения вируса в памяти необходимо переключаться в защищенный режим с наивысшими привилегиями и производить его поиск. Hо попытаться обнаружить признаки вируса в системе можно и обычными способами. После обнаружения вируса рекомендуется, как и всегда в таких случаях, перезагрузиться с системной дискеты и выполнять лечение в заведомо стерильных условиях. Правда, данный вирус не является стелс-вирусом и его лечение допустимо даже при активном вирусе. Теперь немного о результатах тестирования. При заражении нескольких тысяч файлов-жертв вирус проявил себя, как "жилец" - все зараженные файлы оказались работоспособными. Здесь надо только сделать поправку - файлы могут оказаться неработоспособными в том случае, если их стек после заражения окажется в области вирусного кода. PM.Wanderer при заражении файлов не корректирует значения стартовых SS:SP в EXE-заголовке. Как уже отмечалось выше, вирус сохраняет способность к воспроизводству только в том случае, если в системе установлен драйвер EMS (EMM386). При установленном драйвере EMM386 с ключом NOEMS вирус перезагружает компьютер. Компьютер также может перезагрузиться, если в системе используется драйвер QEMM386. Самое интересное в том, что если в системе находился резидентный вирус, а потом произошла загрузка Windows 3.1x или Windows'95, то вирус не сможет размножаться в данных операционных средах, но при выходе в DOS, вирус опять получает управление и может "трудиться, не покладая рук". Если же вирус будет запущен в DOS-сессии Windows, то из-за отсутствия интерфейса VCPI вирус не сможет переключиться в защищенный режим. Под OS/2 вирус нежизнеспособен, также из-за отсутствия VCPI. В заключение стоит отметить, что это первый известный вирус (причем, российский), использующий защищенный (виртуальный) режим работы процессора и не конфликтующий с операционными системами "от Microsoft", работающими также в защищенном режиме. Возможно, что в недалеком будущем компьютерный вирус сможет полностью заменить своим кодом программу-супервизора, и сам будет поддерживать интерфейсы DPMI, EMS/VCPI, XMS, Int 15h. Кто знает?