Продолжается подписка на наши издания! Вы не забыли подписаться?

ЗАО “ДиалогНаука”

Компьютерные вирусы


Сергей Островский

Введение

Эта статья задумывалась как популярное введение в современную компьютерную вирусологию для DOS, рассчитанное на пользователей-непрофессионалов, которые хотели бы получить общее представление о том, что такое компьютерные вирусы. Она НЕ подменяет фирменной документации к антивирусному комплекту ЗАО “ДиалогНаука” и не может использоваться вместо нее. Однако в ней содержатся некоторые сведения из документации. Чаще всего это принципиально новые и/или качественно важные возможности антивирусов. Мы надеемся, что, ознакомившись с этим материалом, вы лучше поймете некоторые рекомендации авторов антивирусных программ.

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

Складывается впечатление, что сегодня пользователи нуждаются не в простом перечислении того, что можно, а чего нельзя (тем более что очень часто совершенно непонятно, почему что-то можно, а чего-то нельзя), а в понимании сути проблем, даже если она продемонстрирована на очень “грубых” моделях. О моделях особо... В тексте многократно оговаривается, но и здесь нелишне будет отметить, что речь идет именно о моделях. На них демонстрируются общие схемы, однако они (модели) ни в коем случае не претендуют на общность и полноту.

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

И последнее. Новые технологии зачастую меняют наши взгляды на давно известные вещи. Кто бы мог подумать, что искусство письма, известное уже не одно тысячелетие, может вдруг усовершенствоваться в двадцатом веке. Телеграф и телефон уже оказали свое влияние на принятые сегодня нормы общения. Теперь очередь за компьютерной коммуникацией. В компьютерной сети сегодня часто пользуются специальными знаками, которые помогают выразить отношение автора к тексту. Эти знаки широко применяются и постоянно совершенствуются. Мы попробовали в печатном издании использовать практику электронной переписки. Нам показалось, что в ряде случаев это позволило уточнить смысл некоторых фраз. Судя по отзывам читателей, это действительно несколько оживляет текст, и мы решили сохранить рожицы и в этой публикации. Итак, увидев:—), улыбнитесь, а увидев:—(, нахмурьтесь [но не сохраняйте такое выражение лица долго, это уже:—((, потом:—(((... продолжите этот ряд:—)]

Компьютерные вирусы сегодня

Что такое компьютерный вирус? Формального определения этого понятия до сих пор не придумано, и есть серьезные сомнения в том, что оно вообще может быть дано. “Авторское” определение, данное Ф. Коэном в терминах машины Тьюринга, хоть и является формально верным, не может дать обычным пользователям сколь-нибудь ясное представление о предмете. Многочисленные попытки дать “современное” определение вируса также не привели к успеху. Чтобы почувствовать всю сложность проблемы, попробуйте, к примеру, дать определение понятия “редактор”. Вы либо придумаете нечто очень общее (при этом из вашего определения скорее всего будет абсолютно неясно, о чем же идет речь), либо начнете перечислять все известные (вам) типы редакторов. И то и другое вряд ли можно считать приемлемым. Поэтому мы ограничимся рассмотрением некоторых свойств компьютерных вирусов, которые позволяют говорить о них как о определенном классе программ.

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

Вирус — это программа, обладающая способностью к самовоспроизведению. Такая способность является единственным свойством, присущим всем типам вирусов (но не только им). Заметим здесь, что примером “нормальной” программы, способной “самовоспроизводиться”, является сама операционная система. По осторожному замечанию известного специалиста по компьютерным вирусам д.т.н. Н.Н. Безрукова, “операционная система при этом вирусом, вероятно, не является”. Можно привести множество других примеров программ, способных создавать собственные копии. Копии вируса не только не обязаны полностью совпадать с оригиналом, что было отмечено еще в первом определении Ф. Коэна, но и могут вообще с ним не совпадать (ни в одном бите!), что еще несколько лет назад казалось невероятным.

Вирус не может существовать в “полной изоляции”. Это означает, что сегодня нельзя представить себе вирус, который бы так или иначе не использовал код других программ, информацию о файловой структуре (вирусы Dir-II) или даже просто имена других программ (вирусы-спутники). Причина этого тоже довольно понятна: вирус должен каким-нибудь способом обеспечить передачу себе управления. Но не станем же мы специально запускать его! Поэтому вирусы используют самые разные способы, чтобы активизироваться при запуске обычных программ (как мы скоро увидим, термин “обычная программа” допускает весьма широкое толкование). Самое простое, конечно, внедриться в код этих программ, но способ этот далеко не единственный.

История компьютерной вирусологии представляется сегодня постоянной “гонкой за лидером”, причем, несмотря на всю мощь современных антивирусных средств, лидерами являются именно вирусы. Среди тысяч  вирусов лишь несколько десятков являются оригинальными разработками, использующими действительно принципиально новые идеи. Все остальные — “вариации на тему”. Но каждая оригинальная разработка заставляет создателей антивирусов приспосабливаться к новым условиям, догонять вирусную технологию. Последнее утверждение, впрочем, можно оспорить. Характерный пример — эпидемия известного вируса Dir-II, разразившаяся в 1991 г. Вирус использовал действительно оригинальную, принципиально новую технологию и на первых порах сумел широко распространиться за счет несовершенства традиционных антивирусных средств. Однако он был сразу обнаружен пользователями ревизора ADinf (одной из первых версий). Таким образом, даже этот “неожиданный” вирус не оказался абсолютным хозяином положения.

Некоторые свойства вирусов в первый момент озадачивают даже специалистов. Еще совсем недавно было трудно себе представить, что вирус может пережить холодную перезагрузку или распространяться через файлы документов (см. ниже). В таких условиях нельзя не придавать значение хотя бы начальному антивирусному образованию пользователей. При всей серьезности проблемы ни один вирус не способен принести столько вреда, сколько побелевший пользователь с дрожащими руками. Здоровье ваших компьютеров, сохранность ваших данных — в ваших руках. Антивирусные программы помогут вам, но они — всего лишь программы!

Основные типы компьютерных вирусов

Существует совершенно формальная система, позволяющая классифицировать компьютерные вирусы и называть их таким образом, чтобы избежать ситуации, когда один и тот же вирус имеет неузнаваемо разные имена в классификации разных разработчиков антивирусных программ. Несмотря на это, все еще нельзя сказать о полной унификации имен и характеристик вирусов. В значительной степени это определяется тем, что к моменту, когда были сформулированы некоторые “правила игры”, уже существовали антивирусные средства, работающие в собственной системе обозначений. Всеобщая унификация потребовала бы приложить значительные усилия и модифицировать программы и документацию. В ряде случаев это было сделано. Мы станем исходить из того, что обычному пользователю нет необходимости вникать во все тонкости функционирования вируса: объекты атаки, способы заражения, особенности проявления и пр. Но желательно знать, какими бывают вирусы, понимать общую схему их работы.

Среди всего разнообразия вирусов можно выделить следующие основные группы:

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

Загрузочные вирусы

Рассмотрим схему функционирования очень простого загрузочного вируса, заражающего дискеты. Мы сознательно обойдем все многочисленные тонкости, которые неизбежно встретились бы при строгом разборе алгоритма его функционирования. Нам кажется, что, поняв суть дела на простой модели, вы гораздо легче в дальнейшем воспримете более сложные вещи. Итак, МЫ НЕ СТАНЕМ ОТВЛЕКАТЬСЯ НА МЕЛОЧИ И ПОСТОЯННО ОГОВАРИВАТЬ, ЧТО “НА САМОМ ДЕЛЕ...”.

Что происходит, когда вы включаете свой компьютер? Первым делом управление передается программе начальной загрузки, которая хранится в ПЗУ (ПНЗ ПЗУ).

Эта программа тестирует оборудование и при успешном завершении проверок пытается найти дискету в дисководе А:

Всякая дискета размечена на так называемые секторы и дорожки. Секторы объединяются в кластеры, но для нас это несущественно.

Среди секторов есть несколько служебных, используемых операционной системой для собственных нужд (в этих секторах не могут размещаться ваши данные). Среди служебных секторов нас пока интересует один — так называемый сектор начальной загрузки (boot sector).

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

Таким образом, нормальная схема начальной загрузки (мы еще раз отмечаем, что намеренно не отвлекаемся на детали) следующая:

ПНЗ(ПЗУ) — ПНЗ(диск) — СИСТЕМА

Теперь рассмотрим вирус. В загрузочных вирусах выделяют две части — голову и хвост. Хвост, вообще говоря, может быть пустым.

Пусть теперь у вас имеются чистая дискета и зараженный компьютер, под которым мы понимаем компьютер с активным резидентным вирусом. Как только этот вирус обнаружит, что в дисководе появилась подходящая жертва — в нашем случае не защищенная от записи и еще не зараженная дискета, он приступает к заражению. Заражая дискету, вирус производит следующие действия:

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

ПНЗ(ПЗУ) — ПНЗ(диск) — СИСТЕМА

появляется новое звено:

ПНЗ(ПЗУ) — ВИРУС — ПНЗ(диск) — СИСТЕМА

Теперь вас не должно удивлять то, что вирус способен резидентно установиться в память даже с несистемной дискеты. При попытке загрузки с такой дискеты вирус все равно получает управление, устанавливается в память, и только потом вы получите сообщение Non system disk or disk error, которое выдает программа начальной загрузки. Если вы соглашаетесь продолжить загрузку с винчестера, вирус останется в памяти, а дальше уж по обстоятельствам (находясь в памяти, загрузочный вирус, как правило, пытается заразить дискеты, которые вы используете; он также может выполнять некоторые другие любопытные действия). Даже если вы сразу выполните холодную перезагрузку, вирус может уже успеть заразить винчестер. Мораль очень проста: никогда не оставляйте (случайно) дискет в дисководе A.

Мы рассмотрели схему функционирования простого бутового вируса, живущего в загрузочных секторах дискет. Как правило, вирусы способны заражать не только загрузочные секторы дискет, но и загрузочные секторы винчестеров. При этом в отличие от дискет на винчестере имеются два типа загрузочных секторов, содержащих программы начальной загрузки, которые получают управление. При загрузке компьютера с винчестера первой берет на себя управление программа начальной загрузки в MBR (Master Boot Record — главная загрузочная запись). Если ваш жесткий диск разбит на несколько разделов (в простейшем случае разметка винчестера выполняется программой FDISK), то лишь один из них помечен как загрузочный (boot). Программа начальной загрузки в MBR находит загрузочный раздел винчестера и передает управление на программу начальной загрузки этого раздела. Код последней совпадает с кодом программы начальной загрузки, содержащейся на обычных дискетах, а соответствующие загрузочные секторы отличаются только таблицами параметров. Таким образом, на винчестере имеются два объекта атаки загрузочных вирусов — программа начальной загрузки в MBR и программа начальной загрузки в бут-секторе загрузочного диска.

В заключение разговора о загрузочных вирусах расскажем об одном необычном механизме заражения винчестеров, который уже довольно давно был реализован в вирусе StarShip и позднее в ряде других вирусов. Формально вирус StarShip заражает загрузочный сектор активного логического раздела винчестера. При этом любопытно, что сам этот загрузочный сектор остается в целости и сохранности. Он не меняется!

Рассмотрим подробнее схему загрузки компьютера с винчестера. После того как программа начальной загрузки в ПЗУ “решила”, что компьютер будет загружаться с винчестера, она передает управление программе начальной загрузки в MBR. Эта небольшая программа анализирует Partition table, находит активный логический раздел и передает управление загрузочному сектору этого раздела. Как она находит активный раздел? Он помечен как активный в Partition table. Куда она передает управление? Положение загрузочного сектора также указано в Partition table.

Вирус записывается на диск (в последние секторы активного раздела, но это не очень существенно) и переставляет на себя указатель загрузочного сектора активного раздела. Таким образом, программа в MBR “своими руками” запустит вирус, который резидентно устанавливается в память и передает управление оригинальному загрузочному сектору (сохранить адрес оригинального сектора, понятное дело, не проблема). При рассмотрении файловых вирусов мы увидим, что пример, когда заражаемый объект не меняется, к сожалению, не единственный.

Файловые вирусы

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

Какие же действия выполняет вирус? Он ищет новый объект для заражения — подходящий (по типу) файл, который еще не заражен (в том случае, если вирус “приличный”, а то попадаются такие, что заражают сразу, ничего не проверяя). Заражая файл, вирус внедряется в его код таким образом, чтобы, как и в случае с файлом-вирусоносителем, получить управление при запуске этого файла. Кроме своей основной функции — размножения, вирус вполне может сделать что-нибудь замысловатое (сказать, спросить, сыграть и т.д.) — это уже зависит от фантазии автора вируса. Если файловый вирус резидентный, то он установится в память и получит возможность заражать файлы и проявлять прочие свои способности не только во время работы зараженного файла. Механизмы заражения файлов различных типов (COM, EXE, SYS, OVL) достаточно подробно описаны в специальной литературе. Мы рассмотрим лишь некоторые часто задаваемые вопросы, касающиеся файловых вирусов. Заражая исполняемый файл, вирус всегда изменяет его код — следовательно, заражение исполняемого файла вирусом всегда можно обнаружить. Но, изменяя код файла, вирус не обязательно вносит другие изменения:

Наконец, к файловым часто относят вирусы, которые “имеют некоторое отношение к файлам”, но совсем не обязаны внедряться в их код. Рассмотрим в качестве примера схему функционирования вирусов известного семейства Dir-II. Нельзя не признать, что, появившись в 1991 г., эти вирусы стали причиной настоящей вирусной эпидемии в России, которая, впрочем, была довольно скоро ликвидирована усилиями сотрудников ДиалогНауки, выпустивших программу Anti-Dir, не позволившую эпидемии развиться, пока обработка этого вируса (теперь уже вирусов) не была включена в Aidstest. Мы снова рассмотрим крайне упрощенную модель, на которой, однако, ясно видна основная идея вируса. Информация о файлах хранится в каталогах. Каждая запись каталога включает в себя имя файла, дату и время создания, некоторую дополнительную информацию, НОМЕР ПЕРВОГО КЛАСТЕРА ФАЙЛА и РЕЗЕРВНЫЕ БАЙТЫ. Последние оставлены “про запас” и самой MS DOS не используются.

При запуске исполняемых файлов (речь сейчас именно о них) система считывает из записи в каталоге первый кластер файла и далее все остальные кластеры. (Они хранятся в FAT — таблице распределения файлов.) Вирусы семейства Dir-II производят следующую “реорганизацию” файловой системы: сам вирус записывается в некоторые свободные секторы диска (обычно последние), которые он, как правило, помечает как сбойные. Кроме того, он сохраняет информацию о первых кластерах исполняемых файлов в резервных байтах, а на место этой информации записывает ссылки на себя.

Таким образом, при запуске любого файла вирус получает управление (операционная система запускает его “собственными руками”), резидентно устанавливается в память и передает управление вызванному файлу.

Диск, зараженный вирусом Dir-II, в стерильной системе производит странное впечатление. Исполняемые файлы кажутся безнадежно испорченными, при копировании таких файлов всегда копируется ровно один кластер, причем никакого отношения к файлу не имеющий,— это и есть тело вируса. Все прочие проявления вы легко можете предположить сами, тем более что большинство из нас имели “удовольствие” наблюдать все это на своих компьютерах.

Мы рассказали здесь о вирусе Dir-II не только затем, чтобы продемонстрировать, что файловые вирусы уже давно не укладываются в классическое определение, но и для того, чтобы лишний раз обратить ваше внимание на вредность поспешных и необдуманных действий при признаках “странного” поведения компьютера. Сколько дисков, которые вполне можно было бы восстановить, были безнадежно испорчены неосторожным “лечением” chkdsk /f или просто отформатированы.

И в заключение разговора о файловых вирусах рассмотрим еще один любопытный класс вирусов, которые также, формально являясь файловыми, не внедряются в исполняемые программы, но и не изменяют файловую систему так кардинально, как это делают вирусы семейства Dir-II. Речь пойдет о вирусах-спутниках. Как и ранее, мы рассмотрим предельно упрощенную модель такого вируса. Попробуйте ответить на странный вопрос: могут ли находиться в одном каталоге два исполняемых файла с одним именем, но разными расширениями — COM и EXE?

Ну, то, что могут просто находиться,— сомнений никаких, а вот что произойдет при запуске файла с указанным именем? Какой из них будет запущен? На эту тему в DOS есть правило, по которому раньше будет запущен файл с расширением COM. Указанное правило позволяет очень просто реализовать вирус, который станет находить файлы с расширением EXE и создавать файлы с теми же именами, но расширениями COM. В эти файлы станет записываться сам вирус, который будет вызываться всякий раз, когда мы будем запускать на выполнение какой-нибудь “зараженный” файл (а ведь самого файла-то никто не трогал!). Такие вирусы тоже могут быть резидентными; будучи установленными в памяти, они способны маскировать файлы-двойники, но это все уже тонкости. Сам механизм на удивление прост.

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

Загрузочно-файловые вирусы

Мы не станем рассматривать модель загрузочно-файлового вируса, ибо никакой новой информации вы при этом не узнаете. Но здесь представляется удобный случай кратко обсудить крайне “популярный” в последнее время загрузочно-файловый вирус OneHalf, заражающий главный загрузочный сектор (MBR) и исполняемые файлы. Основное разрушительное его действие — шифрование секторов винчестера. При каждом запуске вирус шифрует очередную порцию секторов, а зашифровав половину жесткого диска, радостно сообщает об этом. Основная проблема при лечении данного вируса состоит в том, что недостаточно просто удалить вирус из MBR и файлов (что само по себе сложно, вирус, ко всему прочему, еще и полиморфен (см. ниже),— надо еще расшифровать зашифрованную им информацию. Наиболее “смертельное” действие, которое, к сожалению, не редкость,— просто переписать новый здоровый MBR (например, средствами FDISK или NU). В этом случае код вируса в MBR действительно уничтожается (причем только в MBR), но зашифрованная информация становится недоступна (активный вирус “заботливо” расшифровывает ее при каждом обращении к зашифрованным секторам). Возможно, это покажется вам навязчивым, но нельзя и в этом месте еще раз не напомнить: не предпринимайте необдуманных, опрометчивых шагов. Взвесьте все спокойно, посоветуйтесь со специалистами: очень часто ситуация, которая кажется вам безвыходной, таковой не является (так, Doctor Web, о котором рассказывается ниже, успешно борется с этим вирусом, спасая информацию на диске).

Кстати, на тему “посоветуйтесь со специалистами”... ЗАО “ДиалогНаука” предлагает услугу — специальную скорую&127; компьютерную помощь. Конечно, все мы имеем дома аптечку. Анальгин, аспирин, интерферон [очень хорошее антивирусное средство! Дискеты, зараженные бутовым вирусом, надо замочить в интерфероне на два часа. Если после этого в течение недели три раза в день капать по три капли в дисковод 5.25” и по две в дисковод 3.5”, ваше выздоровление обеспечено:—)]. Но случись что-то серьезное, мы предпочтем обратиться к специалистам. По статистике каждую минуту в московскую службу 03 обращаются несколько десятков человек. Всем, кто полностью зависит от надежной работы своего электронного друга, совершенно необходимо помнить и другие телефоны — 137–0150, 135–6253. По этим телефонам вы всегда сможете обратиться к специалистам скорой компьютерной помощи ЗАО “ДиалогНаука”. На самом деле услуги новой службы выходят далеко за “вирусные сферы”. Это и консультации по выбору и установке аппаратного и программного обеспечения, и работы по установке локальных сетей, и многое другое.

Однако вернемся к вирусам. Какими бы мощными ни были современные антивирусные средства, они, как это уже неоднократно отмечалось выше, не обеспечивают и принципиально не могут обеспечить стопроцентную безопасность. В конце концов вы всегда можете столкнуться с совсем новым вирусом, даже при уничтожении вируса далеко не всегда можно полностью устранить все его последствия. Но это в общем случае. Ситуация здесь знакома математикам из алгебры — вспомним, как обстоят дела с решением уравнений пятой степени. Общих формул нет и, как известно, быть не может. Однако для некоторых уравнений точные формулы все-таки имеются, другие можно решить приближенно, а корни некоторых можно просто угадать. Но для этого требуется определенная математическая квалификация. В каждом конкретном случае опытный специалист может сделать существенно больше, чем антивирусная программа. Ведь даже если ваш винчестер был отформатирован или зашифрован, “руками” можно попробовать спасти данные. Но это уже задача для профессионалов очень высокого класса. Именно такие специалисты работают в “скорой помощи”. Важно то, что, вызывая сотрудника “скорой помощи”, вы можете не гадать, кто к вам приедет — студент или школьник. К вам приедет автор Sheriff Ю.Н. Фомин или кто-то из специалистов такого уровня.

Как обнаружить вирус? Традиционный подход

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

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

Для построения сигнатуры обычно берутся наиболее важные и характерные участки кода вируса. Одновременно становятся ясны механизмы работы вируса, например, в случае загрузочного вируса важно знать, где он прячет свой хвост, где находится оригинальный загрузочный сектор, а в случае файлового — способ заражения файла. Полученная информация позволяет выяснить:

Основные антивирусные средства

Антивирусный комплект ЗАО “ДиалогНаука” достаточно подробно описывается ниже. Здесь же мы попробуем дать краткое описание всех основных антивирусных средств.

Детекторы (scanner). Назначение детектора — обнаружить вирус. Бороться с ним предстоит либо другой антивирусной программе, либо системному программисту. Любопытно, что программы этого класса вновь возвращаются на компьютерный рынок по мере его развития. Если вы используете лицензионное программное обеспечение, то для вас может быть даже проще восстановить зараженную программу с дистрибутива (вот он, на полке, руку протянул — и все), чем тратить время на лечение файлов. У нас другие традиции, и чистые детекторы (сканеры) еще не скоро будут в состоянии конкурировать с фагами (см. ниже).

Фаги (полифаги) (scanner/cleaner, scaner/remover). Фаг — программа, способная уничтожить вирус (полифаг способен уничтожить много вирусов). Aidstest, к примеру, сегодня обнаруживает и обезвреживает около 2000 вирусов. Основной принцип работы традиционного фага описан выше. Он совсем прост и секретом не является. Кратко повторим основные моменты. Для каждого вируса путем анализа его кода, способов заражения файлов и т.д. выделяется некоторая характерная только для него последовательность байт. Эта последовательность называется сигнатурой данного вируса. Поиск вирусов в простейшем случае сводится к поиску их сигнатур. Современные фаги используют другие методы поиска вирусов. После обнаружения вируса в теле программы (или загрузочного сектора, который тоже, впрочем, содержит программу начальной загрузки) фаг обезвреживает его. Для этого разработчики антивирусных средств тщательно изучают работу каждого конкретного вируса: что он портит, как он портит, где он прячет то, что испортит (если прячет, конечно). В большинстве случаев фаг способен благополучно удалить вирус и восстановить работоспособность испорченных программ. Но необходимо хорошо понимать, что это возможно далеко не всегда (о причинах еще будет сказано ниже).

Ревизоры. Вирусы не всесильны. Мы уже говорили о том, что изобретательность авторов этой мерзости ограничена некоторыми рамками того, что в принципе возможно. Рамки возможного известны, и если взять под контроль все мыслимые направления вирусной атаки на ваш компьютер, то вы будете практически в полной безопасности. Имеются программы, в функции которых входит контроль возможных путей распространения инфекции. Точнее было бы сказать “имеется программа”, поскольку на сегодняшний день в России есть единственная программа, способная обеспечить настоящий контроль на вашем компьютере. Это антивирусный ревизор ADinf.

Сторожа. Сторож — небольшая [обычно:—)] резидентная программа, постоянно находящаяся в памяти компьютера и контролирующая операции, которые она считает подозрительными. В качестве примера сторожа можно привести VSAFE , входивший в поставку некоторых версий MS DOS. На наш взгляд, для обычного пользователя программные сторожа довольно бесполезны. Одни и те же операции выполняют и вирусы, и обычные программы. Невозможно даже выделить класс исключительно “вирусных” операций. Вследствие этого сторож либо вынужден ничего не контролировать и пассивно наблюдать за происходящим, либо “звенеть” при каждой подозрительной операции. При этом он так вам надоест, что вы просто отключите его, чтобы не мешал работать. Если уж использовать сторож, то на самом минимальном уровне контроля (например, отслеживая изменение загрузочных секторов). Кстати, такие сторожевые функции имеют некоторые современные BIOS, хотя и с этим все не так просто. Эта функция BIOS может конфликтовать с некоторыми операционными системами, а иногда может вообще не работать.

Не так давно был популярен еще один класс антивирусных средств — специальные вакцины, которые использовались для обработки файлов и загрузочных секторов. Вакцины бывают пассивными (пример такой вакцины описан ниже) и активными. Активная вакцина, “заражая” файл, подобно вирусу, предохраняет его от любого изменения и в ряде случаев способна не только обнаружить сам факт заражения, но и вылечить файл. Пассивные вакцины использовались (теперь это уже большая редкость) для предотвращения заражения файлов некоторыми вирусами, использующими простые признаки их зараженности — “странные” время или дата создания, определенные символьные строки и пр. В настоящее время вакцинирование широко не применяется. Бездумное вакцинирование всего и вся способно вызвать целые эпидемии несуществующих вирусных болезней. Так, в течение нескольких лет на территории бывшего СССР свирепствовала страшная эпидемия ужасного вируса TIME. Жертвой этого вируса стали сотни абсолютно здоровых программ, “зарезанных на операционном столе” хирургом ANTI-KOTом. История эта вкратце такова. Имеется довольно много вирусов, предотвращающих повторное заражение файлов “черной меткой”, которую они “навешивают” на программу. Имеются, к примеру, вирусы, выставляющие в поле секунд времени создания файла значение 62. Уже довольно давно появился вирус, который ко всем зараженным файлам дописывал в конец ровно пять байт,— “MsDos”. Нормальных файлов, содержащих в конце такую символьную строку, не бывает, поэтому вирус и использовал этот признак как индикатор заражения файла. Вакцинирование файлов против этого вируса совсем не сложно. Достаточно дописать в конец вышеупомянутую символьную строку — и вирус вам не страшен. Страшно другое — имеются (точнее, имелись) антивирусные программы (к примеру, ANTI-KOT), которые обманываются так же легко, как и сам вирус. Видя в конце файла злополучную строчку, они немедленно лечат его и умывают руки. Шансов на то, что такой инвалид будет нормально работать, практически нет. С этим же вирусом (и с этим же антивирусом) связана еще одна история. До сих пор не вышел из употребления другой “мощный” антивирус — ANTITIME. В отличие от ANTI-KOTа он не калечит программ, но и не лечит их тоже. Видя в конце файла все ту же строчку, он отрезает ее (сообщая при этом, что в файле найден “страшный TIME”,— утверждение само по себе довольно корректно, поскольку вирусом он его явно не называет). Программа эта, написанная, по всей видимости, как антивакцина, периодически пытается участвовать в конкурсе на лучший антивирус, ибо она также видит “страшный TIME” там, где никакая из нормальных антивирусных программ его не видит.

Аппаратные средства защиты. Имеются специальные дополнительные устройства, обеспечивающие достаточно надежную (в некотором смысле абсолютную) защиту. В отличие от всех рассмотренных выше антивирусных средств Sheriff способен предотвратить нападение вируса. К сожалению, автору известны случаи, когда пользователи, установившие на компьютере плату Sheriff, были настолько уверены в своей полной неуязвимости, что совершенно теряли всякую осторожность. Так, они не обращали внимания на области жесткого диска, не защищенные Sheriff (а такие области есть практически всегда — если вы защитите винчестер целиком, то как вы будете работать?). Необходимо помнить, что антивирусные средства должны применяться комплексно и только такая комплексная защита с использованием надежного ревизора (ADinf), фагов Doctor Web и Aidstest, а при необходимости и платы Sheriff способна обеспечить максимальную безопасность.

Что может Aidstest?

Aidstest способен обнаружить и обезвредить некоторые файловые, загрузочные и файлово-загрузочные вирусы. Поиск вирусов Aidstest осуществляет традиционным методом — по сигнатурам. Для каждого вируса, включенного в базу данных полифага, устанавливаются надежная сигнатура, характеризующая данный вирус, способ заражения файла и/или загрузочных секторов. Вирусная база программы насчитывает около 2000 вирусов, наиболее распространенных на территории России и бывшего СССР. В настоящее время Aidstest распространяется бесплатно совместно с программой Doctor Web.

Как правильно использовать Aidstest?

Для надежной проверки и успешного лечения Aidstest должен быть загружен в “чистой” операционной системе. Для этого вам необходимо всегда иметь под рукой системную дискету, содержащую свежие версии полифагов Aidstest и Doctor Web (Doctor Web рассматривается нами ниже). Другой, более предпочтительный, вариант — иметь системную дискету, созданную на заведомо “чистом” компьютере (защищенную от записи!), и дискету, которую вы получили в антивирусном отделе ЗАО “ДиалогНаука” при покупке антивирусного комплекта. Эта антивирусная дискета также должна быть защищена от записи (такой ее отдают вам в руки — если вы не сняли защиту, то она защищена). Последний вариант предпочтительнее потому, что сводит риск занести заразу на такую “спасительную” дискету практически к нулю. Ведь вряд ли вам хватит аккуратности, переписывая свежие версии антивирусов на свою дискету, всегда загружать “чистую” систему. А ведь еще надо снять защиту и не забыть ее восстановить... Так что не рискуйте.

Некоторое время назад наши представления о “чистоте” систем претерпели изменения. Если раньше <Reset> + “чистая” дискета (но не <Ctrl+Alt+Del>! Уже очень давно появились вирусы, перехватывающие прерывание, отвечающее за “теплую перезагрузку”, и выживающие при ней) гарантировали стерильность среды, то теперь это не так. Появились вирусы, способные выживать при настоящей “холодной” перезагрузке. Представьте себе такую ситуацию. У вас имеется ЧИСТАЯ системная дискета. Вы держите ее в целлофановом пакете в холодильнике и не кладете рядом даже дрожжей (они, конечно, всего лишь грибы, но кто знает...). С вашим компьютером что-то неладно. Вы очень аккуратно выполняете “холодную” перезагрузку и загружаетесь с чистой дискеты. Каково же будет ваше удивление, когда вирус (если это был вирус) вновь будет жив и здоров (а вот если дискета не защищена от записи, то о ней этого не скажешь). Суть дела вкратце в следующем. Имеется бутовый вирус. Помимо прочих замечательных качеств, он перед каждым обращением к флоппи-дисководам включает в CMOS признак их наличия, а после обращения — отключает. Таким образом, большую часть времени у вас “нет” дисководов, но вы об этом не знаете — когда происходит обращение к дисководам, все внешне выглядит прилично. В момент перезагрузки системы программа начальной загрузки, не найдя дисковода A, пытается загрузиться с винчестера (таков алгоритм ее работы). Вирус получает управление, устанавливается резидентно в память и передает управление загрузочному сектору диска A. Для борьбы с такими вирусами перед перезагрузкой необходимо проверить установки вашего SETUP и убедиться в наличии дисководов, правильных параметрах дисководов и правильном порядке загрузки.

При запуске Aidstest первым делом проверяет свое собственное “здоровье”. Несколько раз предпринимались попытки “посадить” вирус на сам Aidstest, и в ряде случаев эти попытки окончились успехом. Это произошло, к примеру, в 1994 г., когда на некоторые станции BBS был “подброшен” Aidstest, зараженный вирусом Phantom-1, при этом защита Aidstest была взломана. В результате счастливые обладатели последней версии полифага получили некий совсем не безобидный довесок.

После проверки целостности собственного кода Aidstest анализирует параметры командной строки. Если параметры являются допустимыми, то программа тестирует оперативную память на наличие известных вирусов. Вирусы, обнаруженные в памяти, обезвреживаются. Если проверка памяти завершается успешно (программа не нашла известных вирусов или уверена, что обнаруженные вирусы обезврежены без ущерба для целостности системы), тестируются диски в соответствии с параметрами командной строки. Рассмотрим наиболее “популярный” вызов Aidstest с единственным параметром “*”:

Aidstest *

(Эта строка должна быть введена в ответ на приглашение операционной системы. Если не предпринималось дополнительных усилий, то это приглашение обычно оканчивается символом ‘“>“’ и в простейшем случае имеет вид C:>.) Вызванный таким образом Aidstest ПРОВЕРЯЕТ (только проверяет!) загрузочные секторы (в том числе MBR) и исполняемые COM-, EXE— и SYS-файлы на всех доступных дисках начиная с C. В процессе проверки имена файлов выводятся на экран. Если файл заражен вирусом, то Aidstest указывает название вируса и его длину в байтах. Информация о зараженных файлах остается на экране (если, конечно, не “уползает” вверх при большом числе инфицированных файлов). Для ПРОВЕРКИ И ЛЕЧЕНИЯ необходимо указать дополнительный параметр /f.

Aidstest * /f

В таком режиме (проверка и лечение — ключ /f) Aidstest удаляет обнаруженные вирусы из файлов и загрузочных секторов. Последняя фраза требует подробных комментариев.

Во-первых, о загрузочных секторах. Стандартный механизм их заражения обязывает вирус “спрятать” где-то на диске оригинальный загрузочный сектор. Последний можно поместить в псевдосбойном кластере (пометить кластер в таблице распределения файлов (FAT) как сбойный), можно спрятать его в последних секторах диска (предполагая, что если информация на диске организована обычным образом, то эти секторы долго остаются незанятыми), можно, наконец, воспользоваться некоторыми служебными секторами, которые тоже не все бывают заняты. При лечении диска от бутового вируса Aidstest пытается найти оригинальный загрузочный сектор и записать его вместо зараженного. При этом Aidstest, конечно, не ищет настоящий загрузочный сектор по всему диску. Он просто знает, где его прячет данный конкретный вирус, и сразу проверяет это “укромное место”. В некоторых случаях оригинального загрузочного сектора там не оказывается. Это происходит либо тогда, когда полифаг имеет дело с незначительной модификацией известного вируса, которая прячет загрузочный сектор в другом месте, либо (гораздо чаще!) при заражении диска несколькими вирусами. В этом случае Aidstest предлагает записать в загрузочный сектор некоторый стандартный код. Трудно себе представить, чтобы согласие на это предложение могло привести к потере информации на диске, в худшем случае система по-прежнему не будет загружаться (например потому, что имена системных файлов в стандартном загрузчике Aidstest не соответствуют именам ваших системных файлов). Но надо хорошо понимать, что Aidstest не отвечает за вашу собственную халатность: ведь “подхватить” один вирус — это еще куда ни шло, все бывает, но сразу два...

Во-вторых, о лечении файлов. Вылечить файл можно не всегда. Некоторые вирусы просто не оставляют такого шанса (иногда, впрочем, не по злому умыслу, а по простой неграмотности их авторов). Безнадежно испорченные файлы Aidstest просто удаляет — ни он, ни вы все равно ничего с ними не сделаете. Нередко встречается и другая ситуация — Aidstest “лечит” файл, но тот все равно отказывается работать. Причина этого чаще всего в следующем: некоторые файлы (в том числе и сам Aidstest) следят за своим собственным здоровьем, оберегая свой код от любых изменений. Лечение файла средствами фага — это не всегда полное возвращение к оригиналу. Из имеющихся антивирусных средств восстановить файл полностью может (если может) только лечащий модуль ревизора, опирающийся на ранее сохраненную информацию, рассматриваемый ниже. После лечения фагом могут остаться мелкие погрешности, которые не должны влиять на работоспособность файла. Так вот эти оставшиеся мелкие погрешности скорее всего и не позволят работать файлам, которые обладают средствами самопроверки. (Сама по себе проверка программой целостности собственного кода — замечательная вещь, ведь при заражении такого файла вы сразу получите предупреждение.)

Чего не может Aidstest?

К сожалению:—), программирование развивается... Еще года три назад Aidstest надежно защищал наши компьютеры от всяческой нечисти и ответ на вопрос, ловит или не ловит Aidstest эту заразу, определялся лишь тем, к кому раньше “эта зараза” попала — к вам или к Лозинскому. Так как в подавляющем большинстве случаев раньше она попадала к Лозинскому, то все мы жили относительно спокойно. Сегодня ответ на тот же вопрос уже не столь однозначен. Известны вирусы, с которыми Aidstest бороться не в состоянии. Более точно — он не в состоянии обнаружить эти вирусы. Как уже было сказано выше, поиск вирусов Aidstest осуществляет традиционным способом — по сигнатурам. Перед полиморфными вирусами знаменитая программа бессильна. Для борьбы с такими вирусами используйте другой продукт, распространяемый ЗАО “ДиалогНаука”,— полифаг Doctor Web. Полиморфных вирусов на сегодняшний день еще не очень много, но они представляют очень серьезную угрозу из-за своего широкого распространения. Последний пример — печально известный OneHalf, который впервые за много лет угрожал настоящей вирусной эпидемией в России. Победное шествие этого вируса вовремя остановил Doctor Web.

Aidstest не умеет проверять исполняемые файлы, сжатые упаковщиками, “прикрытые” вакцинами, зашифрованные шифровщиками. При этом необходимо понимать и четко различать две ситуации.

Ситуация первая. Имеется чем-то обработанный (упаковщиком, вакциной, шифровщиком) исполняемый файл, который затем заражается. В таком случае вирус будет обнаружен и уничтожен (если этот вирус в принципе может быть обнаружен и уничтожен Aidstest).

Ситуация вторая. Уже зараженный файл чем-то обрабатывается (упаковщиком, вакциной, шифровщиком). В этом случае Aidstest не сможет “увидеть” вирус. Это связано с тем, что при такой обработке меняются и положение вируса в файле, и его сигнатура. Если первое еще не критично — Aidstest умеет выполнять поиск вируса в файлах, то второе (изменение сигнатуры), увы, не позволит обнаружить вирус. Сам факт “прикрытия” вируса на нем не сказывается: ведь сами программы после такой обработки функционируют — почему же вирус не должен? Еще более занятная ситуация получается при прикрытии одного вируса другим. В этом случае Aidstest удалит верхний, но при этом файл не обязательно примет оригинальный вид, при котором можно удалить и второй вирус.

Aidstest не умеет проверять файлы в архивах. Это означает, что он не может “залезть” в архив, найти в нем исполняемые файлы и проверить их. В принципе вирусы, которые Aidstest может обнаружить в обычном файле, он, конечно, может найти и в архиве. В Aidstest просто не предусмотрена возможность самостоятельно распаковывать нужные файлы из архива для проверки. Вам необходимо сделать это “руками”. Кстати, не надо бояться делать это! Ведь даже если распакованный из архива файл заражен, сам по себе он опасности не представляет — вам только не надо до проверки запускать его на выполнение. Мы предлагаем следующую простую меру предосторожности: распаковывая файл, смените расширение на любое, отличное от EXE, COM и BAT. Выберите, к примеру, расширения TCV (Test Com Virus) для COM-файлов и TEV (Test Exe Virus) для файлов с расширением EXE. Это позволит вам, во-первых, уберечься от случайного запуска файла на выполнение (а при использовании некоторых оболочек, самый простой пример — Norton Commander, такой случайный запуск не редкость, достаточно лишний раз нажать <Enter>), а во-вторых, не забыть оригинальное расширение. Если последнее указано явно, то Aidstest будет проверять файлы с каким угодно расширением, причем тип файла он определит самостоятельно. Завершая разговор об архивах, отметим, что некоторые современные антивирусные программы умеют проверять файлы в архивах — в частности, этому “научился” Doctor Web.

Наконец, Aidstest не умеет “думать”. Под способностью “думать” сегодня понимают способность к эвристическому анализу кода исполняемых файлов с целью выявления новых вирусов, которые неизвестны “в лицо” данной антивирусной программе. Несмотря на то, что все вирусы разные и не существует исключительно “вирусных” операций (то есть таких, которые выполняли бы только вирусы и никогда не выполняют “нормальные” программы), вирусы по необходимости совершают некоторые действия, которые могут насторожить. Так, вирус должен размножаться. Программа, воспроизводящая некоторый свой фрагмент (пусть иногда полностью измененный) и внедряющая его в другие программы, не может не вызвать подозрение. Современные антивирусы умеют находить такие “подозрительные” программы. Подробнее об эвристических анализаторах говорится в части, посвященной Doctor Web, который как раз и относится к антивирусам, обладающим эвристикой.

Что может Doctor Web?

Doctor Web способен обнаружить и обезвредить все известные в настоящее время типы вирусов. Несмотря на то, что сегодня основная задача этого полифага — борьба с полиморфными вирусами, он не делает различия между ними (полиморфиками) и обычными вирусами. Для поиска вирусов Doctor Web использует чрезвычайно мощный инструмент, называемый эмулятором процессора. На вход эмулятора поступает программа, и он, простите за некоторую вольность, “прикидывается” компьютером, выполняющим эту программу. Это означает, что все команды выполняются под управлением эмулятора. Хочет программа выполнить какую-то команду — пожалуйста, только вместо регистров процессора ей будут предоставлены программно реализованные “регистры” эмулятора. Хочет программа записать что-то в файл — тоже пожалуйста, только вместо настоящего файла ей предоставят некий муляж, над которым она может делать все, что ей заблагорассудится. Идея такого эмулятора, конечно, не нова. Это традиционная задача первых курсов программистских специальностей вузов — программно реализовать ЭВМ данной архитектуры. Другое дело — реализация. Реализация корректной программной модели ЭВМ на базе микропроцессора 80x86 — чрезвычайно сложная задача, успешно решенная И.А. Даниловым.

Программа, работающая под управлением эмулятора, в некотором роде беспомощна. Ведь сама-то она не выполняется! Это значит, что все хитрости, связанные с попытками “затуманить” код, сделать его абсолютно нечитабельным, все известные “приемчики”, направленные на противодействие трассировке, бессмысленны.

Что такое полиморфные вирусы?

Вероятно, большинство вопросов связано прежде всего с самим термином “полиморфный вирус”. Нам кажется, что суть дела становится яснее, если рассмотреть один из типов полиморфных вирусов, которые известный специалист по компьютерным вирусам д.т.н. Н.Н. Безруков называет вирусами с самомодифицирующимися расшифровщиками. Вирусы, шифрующие свой код, известны довольно давно. Цель такого шифрования тоже достаточно очевидна: имея зараженный и оригинальный файлы, следовательно, возможность выделить вирус “в чистом виде”, вы все равно не сможете проанализировать его код с помощью обычного дизассемблирования. Этот код зашифрован и представляет собой бессмысленный набор команд. Расшифровка производится самим вирусом уже непосредственно во время выполнения. При этом возможны самые различные варианты: он может расшифровать себя всего сразу, а может выполнять такую расшифровку “по ходу дела”, может вновь шифровать уже отработавшие участки (причем иногда не тем способом, каким они были зашифрованы раньше) — в общем, имеется очень много различных вариантов. Все это делается только ради того, чтобы затруднить анализ кода вируса (кстати, это не единственное, что предпринимается ради этой цели: хитро зашифрованный вирус, эффективно противодействующий трассировке, может заставить серьезно поработать разработчиков антивирусных средств).

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

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

Итак, сначала были обычные вирусы. Все копии вируса были одинаковыми, и вирусы легко обнаруживались по сигнатурам.

Потом в нездоровые умы вирусописателей пришла идея шифровать часть кода вируса. Смысл этого понять несложно. Незашифрованный вирус выделяется и дизассемблируется сразу (при наличии здоровой и зараженной копии программа, выделение вирусного кода сводится к простому “вычитанию”). Если часть кода зашифрована, то, даже выделив и дизассемблировав вирус, вы все равно получите полную ерунду. (К вопросу о том, “как шифровать”. Чтобы создать впечатление этой самой “полной ерунды”, не надо выдумывать ничего очень сложного. Достаточно прибавить единицу к каждому байту шифруемого кода, чтобы команды изменились до неузнаваемости. Можно использовать и более сложные алгоритмы.) При запуске вирус расшифровывался (разворачивался) в памяти и только потом выполнялся.

В любом случае этот способ шифровки обладал, с точки зрения вирусописак, следующими “достоинствами” и “недостатками”:

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

Ключ шифровки можно хранить прямо в теле расшифровщика или как-нибудь вычислять (например, как функцию от длины файла). Это уже существенно “лучше”! Вирусописатели ликовали и... огорчались, ибо:

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

Очень часто в этом месте все становится более или менее понятным, кроме одного: все-таки кажется совершенно невероятным, что можно не только придумать столько различных расшифровщиков, но и генерировать их автоматически. Ну просто не приходит в голову никакого способа сделать это!

Мы предложим вам только один, наиболее примитивный способ. Он, с одной стороны, совершенно тривиален, а с другой — снимает с вопроса ореол невероятности. Как известно, среди команд процессора есть простая и безобидная команда NOP (Not OPeration). Встретив эту команду, процессор ничего не делает — пропускает ее и выполняет следующую. Может быть, уже теперь вам все стало ясно. Действительно, если взять некоторый код расшифровщика, “понатыкать” в произвольные места команды NOP, то он изменится, но все равно будет расшифровывать. Конечно, с точки зрения вирусописак, это совсем неинтересно, такие “полиморфные” расшифровщики вычисляются очень просто. Мы приводим этот пример только для того, чтобы показать, что в этом самом “полиморфизме” нет ничего невероятного.

Об уровнях вирусного полиморфизма

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

Поясним сказанное на примере. Одним из простых и эффективных приемов шифрования (придуманным, кстати, конечно, не вирусописателями) является модификация каждого байта шифруемого текста с помощью какой-либо обратимой операции. В качестве такой операции можно использовать, например, операцию “исключающее или” (xor). В процессе шифрования выбирается некоторый параметр K (ключ шифрования) и каждый байт B шифруемого текста заменяется на число K xor B. Расшифровщик проделывает ту же самую операцию. Легко видеть, что (K xor B) xor K = B. Продемонстрируем это, взяв произвольные B и K:

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

Существуют определенные уровни вирусного полиморфизма. Кратко охарактеризуем их.

Уровень 1-й. Вирусы могут использовать некоторые постоянные параметры для разных своих расшифровщиков. Такие вирусы можно определить по некоторым постоянным участкам кода в расшифровщике. Их иногда называют “слабополиморфными”, или олигоморфными (oligomorphic).

Примерами олигоморфных вирусов являются, в частности: Cheeba.A (2 расшифровщика), Cheeba.B (2), December_3rd (2), Slovakia.2_00 (8), Slovakia.2_02 (8), Slovakia.3_0 (8), V-Sign (6), Whale (34).

Уровень 2-й. Расшифровщик имеет постоянной одну или несколько инструкций. Hапример, использует различные регистры, некоторые альтернативные инструкции. Такие вирусы также можно определить по маске — сочетаниям определенных байт в расшифровщике.

Вирусы: ABC, DM.330, Flip, Jerusalem.Moctezuma, Ontario.1024, PC-Flu, Phoenix.1226, Phoenix.2000, Phoenix.Evil, Phoenix.Phoenix, Phoenix.Proud, Seat, Stasi, Suomi, Virus-101, VS.3900, VS.4000...

Уровень 3-й. К этому уровню относят вирусы, использующие в расшифровщике команды, не участвующие в расшифровке вирусного кода, или “команды-мусор”. Это такие команды, как NOP, MOV AX,AX, STI, CLD, CLI... Данные вирусы также можно детектировать с помощью маски, если отсеять все такие команды.

Вирусы: Tequila, StarShip, V2Px.V2P1, V2Px.V2P1.Casper, V2Px.V2P2, V2Px.V2P6, DrWhite...

Уровень 4-й. Вирусы могут использовать в расшифровщике взаимозаменяемые инструкции и перемешивать команды без изменения алгоритма расшифровки. Hапример, команда MOV AX,BX имеет взаимозаменяемые инструкции: PUSH BX — POP AX; XCHG AX,BX; MOV CX,BX — MOV AX,CX... В принципе возможно детектирование данных вирусов с помощью некоторой перебираемой маски.

Такие вирусы могут послужить источником интересных задач. Вы можете, к примеру, рассмотреть такую: пусть некоторой переменной надо присвоить известное значение (например, A:=10). Ясно, что можно сделать это различными (конечно, странными немного, но что уж...) способами: A:=1+9; A:=1+1+8; ...; A:=1+1+1+...+1. Сколько всего таких способов и как получить всевозможные суммы? (Необходимые уточнения формулировки сделайте сами.) С таких вирусов, как и с паршивой овцы...

Уровень 5-й. К пятому уровню относят вирусы, использующие механизмы вирусов всех описанных выше уровней. Помимо этого, расшифровщик может использовать различные алгоритмы расшифровки вирусного кода. Также возможно использование для расшифровки основного вирусного кода расшифровки части самого же расшифровщика или нескольких расшифровщиков, поочередно расшифровывающих друг друга либо непосредственно вирусный код. Как правило, детектирование вирусов данного уровня полиморфизма с помощью сигнатуры невозможно. Процессы детектирования и особенно лечения такого вируса — очень сложные задачи. Они могут занимать значительное время. Если для детектирования такого вируса достаточно проанализировать только код расшифровщика (что само по себе непросто), то при лечении необходимо произвести частичную или полную расшифровку тела вируса для извлечения информации о зараженном файле. Из известных мне антивирусов лечение вирусов последнего уровня полиморфизма производят AVP, Dr. Solomon AntiVirus Toolkit и Doctor Web. SMEG-вирусы, по крайней мере, больше лечить никто не берется.

Вирусы 4-го и 5-го уровней: MtE, TPE, APE, DAME, DSME, DSCE, NED, MGEN, CLME, SMEG-based, Uruguay...

Существует еще шестая группа полиморфных вирусов. Они не шифруют свой код, а перемешивают кусочки самих себя. Эти вирусы тасуют свои подпрограммы (инсталляции, заражения, обработчика прерывания, анализа файла и т.д.). Такие вирусы называются пермутирующими (permutating).

К данным вирусам относятся: BadBoy, BadBoy.Worthless, CommanderBomber, Leech, EA.Asmodeus.xxxx...

Как правильно использовать Doctor Web?

Как и Aidstest, для надежной проверки и успешного лечения Doctor Web должен быть запущен в “чистой” операционной системе. Если вы еще не прочитали замечание, касающееся надежной перезагрузки (см. раздел, посвященный Aidstest),— прочитайте, получите “удовольствие”. После запуска Doctor Web первым делом проверяет свое собственное “здоровье”, после чего приступает к проверке оперативной памяти. Результаты проверки отображаются на экране (в килобайтах и в процентах). В зависимости от настроек проверяется основная память (в пределах первых 640 Кб) или вся память в пределах 1 Мб (включая и HMA). Тестирование основной памяти производится существенно быстрее, но сегодня уже не стоит экономить секунды на тестировании расширенной памяти — уже довольно давно известны вирусы, прекрасно в ней живущие.

После тестирования памяти подключаются файлы-дополнения (маска и путь для файлов-дополнений указываются). Дополнения к вирусной базе данных распространяются бесплатно. Наиболее быстрые и простые способы получить дополнения — “скачать” их на BBS DialogueScience, из конференции FidoNet adinf.support или для имеющих прямой доступ к Internet по anonymous FTP на сервере ftp.dials.ccas.ru. Следует, кстати, отметить то, что информация о вирусах, подключаемая из файлов-дополнений, может быть использована лишь для проверки дисков. Тест оперативной памяти выполняется до подключения этих файлов. Этот факт явно указан в документации, но на него стоит обратить внимание, ибо вопрос о том, “а почему Doctor Web сначала..., а потом...”, задается часто. Наверное, нелишним будет напомнить известное правило: если ничего не получается, прочтите наконец документацию:—).

После проверки оперативной памяти и подключения файлов-дополнений вы можете проверить диски. Механизм настройки программы Doctor Web подробно рассмотрен в документации. Как и при использовании Aidstest, мы рекомендуем сначала провести тестирование и только потом, при обнаружении вирусов, приступать к лечению. Не мешает между этими операциями ознакомиться с описанием найденных у вас вирусов (см. файл VIRLIST.WEB).

Doctor Web или Aidstest?

Этот вопрос тоже задается очень часто. Какую программу лучше использовать? Люди, выясняющие этот вопрос, делятся, как правило, на две категории. Одни просто не понимают, что речь идет о полифагах разных поколений, о программах, принципы работы которых абсолютно различны. Большой (и неприятной!) неожиданностью для них является тот факт, что Aidstest просто не способен обнаружить некоторые вирусы, которых с каждым годом (месяцем, неделей, днем) становится все больше. Узнав и осознав эту информацию, они часто примыкают к другой категории людей, которые прекрасно все знают и понимают, что в отличие от Aidstest Doctor Web способен обнаружить любой вирус. Следовательно, по их мнению, надо использовать только Doctor Web. Возможно, когда-нибудь они и окажутся правы, но не сейчас и не в ближайшем будущем. Именно потому, что принципы работы этих антивирусов принципиально различны, каждый, даже очень старый, вирус, давно исследованный Д.Н. Лозинским, И.А. Данилов — автор Doctor Web — вынужден обрабатывать заново. И хотя уже сегодня по объему базы данных о вирусах Doctor Web обогнал Aidstest, отказаться от использования последнего пока неразумно.

Эвристический анализ...?

Вы, наверное, уже слышали, что Doctor Web обладает встроенным эвристическим анализатором. Чем этот анализатор может помочь нам с вами?

Как уже неоднократно отмечалось выше, вирусов много... Ни один антивирус не способен знать “в лицо” абсолютно все вирусы. Если вы сами напишете вирус, то бесполезно немедленно лечить его обычными фагами, они его еще не знают. (Доводить же дело до того, чтобы знали, ей-богу, не советуем.) Таким образом, всегда существует угроза подхватить нечто, неизвестное имеющимся у вас антивирусам. В такой ситуации важно хотя бы получить предупреждение об опасности — “кто предупрежден...”. Можно использовать для этого ревизор (см. ниже), но вот беда — он не может (принципиально) контролировать файлы, которые “в глаза первый раз видит” (если только в этих файлах не сидит маскирующийся стелс-вирус, который ревизор ADinf как раз сможет обнаружить). А если вам принесли новую игрушку?.. (Хотя с игрушками проще. Вы и сами можете написать простую антивирусную программу, реализующую следующий сценарий: запрашиваются имя файла и его назначение. Если в качестве назначения вводится слово “игра”, файл стирается и дело с концом:—).)

Задача эвристического анализатора — попробовать найти в файле вирусоподобные куски и предварительно классифицировать вирус (предполагаемый!). Эта задача очень сложна. Уже несколько раз мы повторяли, что не существует исключительно вирусных операций, а анализатор не должен “дергаться” по пустякам. Чтобы оценить сложность проблемы, задумайтесь: заподозрили бы вы в вирусных действиях, к примеру, упаковщики исполняемых файлов? Они ведь шифруют файлы (раз!), дописывают в них некоторый фрагмент своего кода (два!). Это немало и уж очень похоже на вирус. А ведь желательно, чтобы и в таких случаях эвристический анализатор не ошибался. Конечно, написать эвристику, которая ловила бы 100 % вирусов и не подозревала бы всех остальных, принципиально невозможно. Результат, показанный Doctor Web,— около 87 % вирусов (для макрокомандных вирусов — около 99 %) при небольшом проценте ложных срабатываний. На сегодня эвристик Doctor Web — один из лучших в мире.

Бой — явление обоюдоострое
(Цитата из интервью известного политика)

Технология пополнения вирусных баз различна для программ Aidstest и Doctor Web. Если спроектированный много лет назад Aidstest действует по старинке: для пополнения вирусной базы требуется выпуск новой версии программы — то Doctor Web использует более современную технологию. Обновление версии программы производится лишь тогда, когда это требуется для ее совершенствования (ну, к примеру, научился Doctor Web распаковывать очередной тип архивов — вот повод для новой версии). В промежутке между обновлениями версий выпускаются дополнения к вирусной базе, которые подключаются для обнаружения и лечения новых вирусов. Таких дополнений может быть несколько.

Вообще говоря, пользователей не должно особенно интересовать, что такое дополнения, надо лишь уметь правильно их подключать, что, впрочем, тривиально: достаточно скопировать файл в один каталог с Doctor Web — и дополнение будет подключено.

Где можно получить дополнения? Вот тут мы подбираемся к сути вопроса. “ДиалогHаука” использует множество каналов для распространения дополнений, мы не станем их перечислять, они совпадают с каналами получения самих антивирусов. Теперь перечитайте внимательно предыдущую фразу: “ДиалогHаука использует...”. Дополнения (как, впрочем, и сами программы), полученные не у нас или официальных распространителей наших продуктов, использовать КАТЕГОРИЧЕСКИ HЕ РЕКОМЕHДУЕТСЯ. Правда, и среди каналов, которые использовала наша фирма, был один... ну, ненадежный. Речь идет о сети друзей, в которой всякие “друзья” встречаются. Мы имели это в виду, но... В общем, “пока гром не грянет...”.

Гром грянул в июне 1996 года. Фальшивое дополнение, распространенное в сети FidoNet от имени И.А. Данилова, содержало троянский компонент, уничтожавший файлы. Ключевая фраза предыдущего предложения — “от имени И.А. Данилова”. Это дополнение ушло не из “ДиалогHауки”, но якобы с личного адреса автора программы.

Исследование фальшивого дополнения было проведено Всеволодом Лутовиновым, соавтором Игоря Данилова по программе Doctor Web. Ниже — краткий отчет об этом исследовании.

Файл-дополнение к вирусной базе программы Doctor Web WEB060612.311 (версия 3.11) от 12.06.1996 содержит троянский компонент. Он получен посредством модификации официально выпущенного дополнения WEB60430.311 от 30.04.1996.

Была изменена “шапка”— дата выпуска и названия определяемых вирусов, в тело дополнения внедрен код, уничтожающий все файлы на всех логических дисках от C: до Z:.

Для того, чтобы это осуществить, автору “троянца” пришлось пройти несколько эшелонов защиты, применяемых в программе Doctor Web. Были расшифрованы и изучены основной код дополнения, механизмы проверки дополнения на корректность, после модификации дополнения пересчитана и зафиксирована новая контрольная информация. После этого дополнение было снова зашифровано по алгоритму, применяемому в Doctor Web.

Как только троянский код получает управление, он начинает рекурсивный обход каталогов с корневого каталога диска C:. Каждый найденный файл уничтожается по следующему алгоритму: сначала у файла выставляется атрибут “архивный” (при этом сбрасываются такие атрибуты, как “только для чтения”, “системный” и т. д.), затем в него записывается “мусор”, файл обрезается до нулевой длины и только после этого уничтожается. Восстановить файлы после этого уже невозможно. Троянский код “врезан” таким образом, что при проверке 1–2 файлов может и не получить управления, однако при сканировании диска или каталога активизируется почти со 100 %-ной вероятностью уже на этапе проверки файла на наличие вирусов.

К слову сказать, защите самой программы всегда уделялось повышенное внимание, недаром Doctor Web поставляется с удостоверяющей подписью автора (она содержится в PGP-файле, который входит в комплект поставки). Сейчас таким же образом защищаются и дополнения.

Как защититься от подделок, используя PGP

Вместе с исполняемым файлом программы Doctor Web и файлами-дополнениями поставляются их электронные подписи — PGP-файлы. Используя их, а также открытый PGP-ключ И.А. Данилова, который содержится в файле DRWEB.ME, вы можете удостовериться в подлинности указанных файлов. Такая проверка очень надежна (по крайней мере настолько, насколько надежна PGP — одна из самых совершенных криптографических систем с открытым ключом). Далее мы рассмотрим, каким образом можно использовать электронные PGP-подписи для проверки подлинности файлов. Для тех, кто намерен лишь использовать PGP простейшим образом, приводятся совсем короткие инструкции, далее мы подробнее (но не вдаваясь в математические дебри) рассматриваем суть механизма электронных PGP-подписей.

Если вы хотите лишь проверять подлинность файлов и знать ничего больше не желаете

SET PGPPATH=C:\PGP
SET PATH=%PATH%;C:\PGP

SET TZ=MSK-3MSD

PGP -ka DRWEB.ME
PGP DRWEB.PGP DRWEB.EXE
Good signature from user “Igor A. Daniloff <id@sald.spb.su>“.
WARNING: Bad signature, doesn’t match file contents!
Bad signature from user “Igor A. Daniloff <id@sald.spb.su>“.

Если вы хотите лучше представлять себе, как работает PGP

Разумеется, мы не станем рассматривать все возможности PGP. Мы сосредоточим свое внимание на механизмах, позволяющих удостоверять подлинность сообщений.

PGP использует шифрование с открытым ключом (или с общим ключом). Отметим сразу, что это не означает, что ключ единственный и он открыт для всех. Ключей на самом деле два. Один — секретный ключ, которым владеет только автор сообщений (в нашем случае — при работе с файлами программы Doctor Web — секретным ключом владеет только И.А. Данилов), другой — открытый ключ, который выдается всем желающим.

Для нас объектами шифрования являются файлы (наборы символов, или, если угодно, чисел). Ключи мы обычно тоже представляем строками символов. Однако в дальнейших рассмотрениях, чтобы не увязнуть в чисто программистских вопросах, а сосредоточиться на главном, удобно считать, что объектами шифрования являются числа (возможно, ОЧЕНЬ длинные) и ключи также являются числами. Таким образом, мы полагаем, что у нас имеются:

Требуется получить число b — “подпись” числа a.

У того, кто будет проверять подлинность числа a, имеются:

Заметьте, что единственное, что мы держим в секрете,— это ключ:–).

Ключевым понятием в дальнейших рассмотрениях станет понятие односторонней функции. Односторонней называется функция f: x®y, обладающая двумя свойствами:

i) существует полиномиальный алгоритм вычисления значений f(x);

ii) не существует полиномиального алгоритма инвертирования функции f, т.е. решения уравнения f(x)=y относительно x.

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

Другим важным понятием является так называемая односторонняя функция с секретом. Именно на такой функции построен алгоритм PGP.

Односторонней функцией с секретом s называется функция fs: x®y, зависящая от параметра s и обладающая следующими свойствами:

  1. при любом s существует полиномиальный алгоритм вычисления значений fs(x);
  2. при неизвестном s не существует полиномиального алгоритма инвертирования функции fs, т.е. решения уравнения fs(x)=y относительно x;
  3. при известном s существует полиномиальный алгоритм инвертирования функции fs.

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

Одностороннюю функцию с секретом можно применить для создания цифровых подписей следующим образом. Сообщим всем желающим алгоритм вычисления значения fs(x) для любого x, но никто, кроме нас, не должен знать секрет s. Пусть теперь, как и ранее, a — число, которое мы хотим подписать. Найдем b из уравнения fs(b)=a. Мы знаем секрет и, следовательно, можем решить указанное уравнение, а никто, кроме нас, сделать это не может (ведь никто, кроме нас, не знает секрета). Назовем b цифровой подписью а и отправим пару (a, b) своим корреспондентам. Проверить подлинность подписи может любой (надо лишь подставить число b в уравнение), а вот подделать подпись (число b) невозможно, если мы позаботимся о сохранности нашего секретного ключа. Невозможно, кстати, и отказаться от подписи, ведь никто, кроме нас, не мог найти число b.

Открытым ключом в описанном методе является сама функция fs, а закрытым — секрет s.

Рассмотрим, наконец, как сказанное выше используется в PGP. Здесь необходимо преодолеть некоторую терминологическую сложность. Дело в том, что открытым PGP-ключом традиционно называют открытый PGP-ключ автора. На самом деле открытым ключом в смысле сказанного выше является все же функция (уникальная для каждого, иначе какой смысл?), которая строится из алгоритма PGP-шифрования и открытого ключа p. Параметром же по-прежнему является секретный ключ s. Назовем указанную функцию PGPPs.

Таким образом, у автора сообщений имеется:

У получателя сообщений имеется лишь открытый ключ — функция PGPPs, что вполне согласуется с описанной выше схемой.

Обсудим в заключение, каким образом рекомендуется шифровать вирусы, отправляемые для анализа по электронной почте, с помощью данного открытого PGP-ключа (см. файл DRWEB.ME).

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

Вирусы в документах

Мы хорошо знаем, что объектом вирусной атаки (прямой или опосредованной) может быть какой-нибудь исполняемый код. Выше приводились примеры, когда такие атаки были довольно сильно опосредованы, но они все равно имели отношение к исполняемым программам. Вирусов, заражающих файлы данных, не бывает (зато портящих такие файлы — сколько угодно). Верно ли это? Верно. Но верно также и то, что мы не всегда хорошо знаем структуру наших файлов данных. Речь пойдет о документах популярного редактора WinWord 6.0 (7.0). Имеются реализации этого редактора для Windows, Windows NT, System 7.5 (Macintosh). Естественно, что формат документов у всех реализаций одинаковый. Каждый документ WW6 содержит в себе (может содержать) некую программу, которая АВТОМАТИЧЕСКИ запускается даже при простом просмотре документа. Она написана на специальном языке Word Basic (описание этого языка содержится в справочной системе редактора). Несмотря на прикладной характер языка, на нем можно, вообще говоря, делать разные интересные вещи (если под “интересной вещью” понимать форматирование винчестера — так это запросто). Например, можно писать самые настоящие вирусы в формате документов WW6.

Сразу после появления первых вирусов для WinWord И.А. Данилов выпустил антивирус Doctor Web for WinWord, который был написан на том же Word Basic, что и сами вирусы. Он позволял обнаруживать и обезвреживать макрокомандные вирусы и представлял собой специальным образом устроенный WinWord-документ. Этот антивирус распространялся бесплатно, и его быстрое появление, несомненно, оказало значительное влияние на то, что вирусы этого типа пока не получили значительного распространения в нашей стране. Летом этого года полная обработка макрокомандных вирусов была включена в Doctor Web for DOS. Это была первая российская программа, которая, работая под DOS, не только обнаруживала, но и обезвреживала макрокомандные вирусы.

В настоящее время известны вирусы, поражающие файлы данных трех типов — документы редактора Word (6-й и 7-й версий), таблицы Exсel и документы AmiPro. По последним данным западных вирусологов, именно вирусы для WinWord выходят на первые места по массовости распространения. В России это пока не так, здесь OneHalf пока не имеет конкурентов, но ситуация легко прогнозируется — как только массовые компьютеры станут мощнее и WinWord, ставший стандартом де-факто в мире, сменит наш народный Лексикон, та же участь ожидает и нас.

Без фокусов

Несмотря на то, что количество макрокомандных вирусов продолжает стремительно увеличиваться, для большинства пользователей механизм их функционирования продолжает оставаться загадкой. В значительной степени и вследствие этого они плохо подготовлены к борьбе с такими вирусами. Мы на простейшем примере продемонстрируем один из возможных механизмов функционирования макрокомандного вируса, поражающего документы Word for Windows.

Опыт показывает, что, несмотря на многочисленные объяснения, обычному пользователю трудно смириться с тем, что даже самый обычный документ Word for Windows содержит “какие-то там программки”, которые к тому же могут запускаться без его ведома. Мы рассмотрим пример создания именно такой “программки”, которая в терминологии Word называется “макросом” (мы далее будем использовать термин “макрокоманда”).

Наша макрокоманда будет вызываться при открытии любого документа и проявляться окном диалога с единственной кнопкой “Закрой меня”. При нажатии на указанную кнопку окно закрывается и макрокоманда прекращает работу.

Разумеется, после того, как мы рассмотрим работу макрокоманды, мы ее удалим, так что никакими неприятностями это упражнение вам не грозит.

Для создания макрокоманды необходимо выбрать пункт Макрос в меню Сервис.

Внимание! Если на вашем компьютере установлена какая-нибудь система документооборота и в списке макрокоманд (в нашем примере он пустой) присутствует AutoOpen — прекратите выполнять это упражнение.

В поле Имя введите имя макрокоманды, которую мы будем создавать. Имя обязательно должно быть AutoOpen

После того как имя макрокоманды введено, вам становится доступна кнопка.

Нажмите ее — и вы попадете в специальное окно редактирования текста макрокоманды. В окне уже содержится пустая заготовка для ввода макрокоманды.

Как уже отмечалось выше, макрокоманда является программой на языке WordBasic. Программа на этом языке начинается строкой Sub MAIN, а заканчивается строкой End Sub. Теперь напишем саму программу. Вообще говоря, в программах на WordBasic нет необходимости нумеровать строки, но мы будем это делать, чтобы потом было удобнее на них ссылаться.

    Sub MAIN
    10 Begin Dialog UserDialog 300, 110, 144, 34, “AutoOpen”
    20 PushButton 10, 6, 124, 21, “Закрой меня”,.Push1
    30 End Dialog
    40 b = 666
    50 Dim d As UserDialog
    60 While b <> 1
    70 b = Dialog(d)
    80 Wend
    End Sub

В строках 10–30 определяется окно диалога. Его левый верхний угол располагается в точке (300, 110), ширина окна — 144 точки, высота — 34 точки. В заголовке окна располагается строка AutoOpen (это название нашей макрокоманды). В строке 20 определяется единственная кнопка, которая будет в окне. Координаты левого верхнего угла кнопки отсчитываются от левого верхнего угла окна, на кнопке будет написан текст “Закрой меня”.

Далее в строке 40 переменной b присваивается начальное значение (можно присвоить любое, отличное от 1, так как именно 1 соответствует нажатой кнопке “Закрой меня”). В строке 50 активизируется диалог (окно появляется на экране). И, наконец, в строках 60–80 содержится цикл, в котором постоянно проверяется, не была ли нажата кнопка “Закрой меня”. Как только мы нажмем эту кнопку, цикл завершится и макрокоманда также закончит работу.

Проверить работу макрокоманды вы можете сразу, нажав кнопку с закрашенной стрелочкой.

Если вы не ошиблись, набирая текст, то после нажатия на указанную кнопку сразу появится окно диалога.

Для чистоты эксперимента можно выполнить такую последовательность действий:

Если знакомое окошко появилось снова — все замечательно! Написанная нами макрокоманда AutoOpen запускается при открытии любого файла и, разумеется, не делает ничего плохого, разве что на нервы действует. Однако этот же механизм может использовать вирус. Например, таким образом можно заражать файлы документов при их открытии. Хотя, конечно, не вполне таким образом, мы ведь не ставим цель научить вас писать вирусы;–).

Отметим, кстати, что теперь вы можете проверить, что нередко рекомендуемый способ блокировать запуск некоторых макрокомандных вирусов действительно работает. Если вы в момент открытия документа станете удерживать клавишу <Shift>, макрокоманда AutoOpen не запустится. К сожалению, этот способ не является панацеей от всех макрокомандных вирусов.

В заключение надо избавиться от AutoOpen. Для этого надо снова выбрать в меню Сервис пункт Макрос, выделить AutoOpen и нажать кнопку

Что такое ревизор?

В антивирусном понимании ревизор — это программа (комплекс программ), контролирующая все уязвимые (могущие подвергнуться вирусной атаке) компоненты компьютера. В дальнейшем речь пойдет о ревизоре, распространяемом АО “ДиалогНаука”,— программе ADinf (в комплексе с которой распространяется также отдельная программа ADinf Cure Module — лечащий модуль ревизора). Последний не является обязательным компонентом, и свои контролирующие функции (и даже некоторые лечащие) ревизор может осуществлять самостоятельно. Но поддержка лечения является необходимым свойством современных ревизоров (см. ниже), и вряд ли целесообразно экономить небольшие в общем-то деньги на лечащем модуле.

Современный ревизор диска

Выступая на ежегодной конференции по антивирусной безопасности VB’95, автор ADinf Д.Ю. Мостовой сформулировал требования, которым, на его взгляд, должен удовлетворять современный ревизор диска. Это прежде всего:

Реализация проверок без использования средств операционной системы

К сожалению, это возможно не всегда. В последнее время, когда дисковая память, требуемая наиболее “прожорливыми” системами, измеряется сотнями мегабайт, для увеличения дискового пространства иногда используют “удвоители” жестких дисков. Наиболее известные — Stacker и DoubleSpace (DriveSpace). Эти программы действительно позволяют несколько увеличить емкость дисков за счет архивирования “на лету”: при записи на диск информация “сжимается”, при чтении — “разворачивается”. Но с дисками, сжатыми таким образом, необходимо работать средствами операционной системы (то есть нет принципиальных препятствий к тому, чтобы и с ними работать напрямую, но в этом случае ревизор должен уметь выполнять функции всех таких программ; представляете себе стоимость такого ревизора?).

Поддержка лечения

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

Скорость

Хороший ревизор — совершенно необходимая программа. С этим утверждением мало кто берется спорить. Но вот использовать ревизор на своем компьютере... Авось пронесет... Бесполезно обвинять пользователей в неблагоразумии, халатности и прочих грехах. Все мы не любим, когда компьютер занимается чем-то своим, “личным”, вместо того чтобы работать. Даже “термин” специальный появился: программа “тормозит”. Совершенно очевидно, что ревизор, работающий секунды, лучше ревизора, работающего минуты. Ревизор, работающий минуты, скорее всего просто не будут использовать или будут... время от времени:—).

Что контролирует ревизор ADinf?

В стандартной конфигурации (без изменения настроек, принимаемых “по умолчанию”) ADinf контролирует:

Я-то, конечно, все понимаю...
Но вот как объяснить это моей секретарше?

Эта ситуация в разных вариантах встречается часто. Специалисту порой очень непросто объяснить пользователю-непрофессионалу (не надо думать, что мы имеем что-то против секретарш,— просто случай распространенный), что стоит потерпеть несколько секунд, ну, в крайнем случае минутку, пока работает ревизор. Нередко помимо прочих чисто психологических факторов имеет место принципиальное непонимание функций ревизора. Все сказанное выше хорошо понятно специалистам, но и им порой приходится тратить кучу времени и сил, чтобы изложить то же самое просто, убедительно и желательно без употребления специальных терминов. Мы предлагаем некую модель ревизора, которую можно использовать в тех случаях, когда применение нормальной компьютерной терминологии может лишь ухудшить дело. Итак, все о том же, вариант 2-й...

Что такое ревизор?
Нужен ли он вам?

Рассмотрим нас самих. Все мы, к сожалению, иногда болеем. Почувствовав недомогание, мы обращаемся к врачам-специалистам, которые проводят исследования, ставят диагноз (если нам повезет — правильный) и лечат нас (иногда успешно). Среди врачей бывают очень узкие специалисты (мне, к примеру, рассказывали о враче, который всю жизнь лечил только профессиональные заболевания кистей рук у музыкантов) и специалисты более широкого профиля — хирург в обычной районной поликлинике в идеале должен иметь представление о всех хирургических болезнях. Врача-специалиста мы будем считать полифагом (полидетектором). Действительно, он проверяет нас на наличие известных ему болезней и по мере возможностей лечит. Без таких врачей не обойтись, имеется лишь один серьезный недостаток столь узкоспециализированной системы врачебной помощи: если вы, к примеру, проглотили ежа, то стоматолог вам вряд ли поможет. Некоторое время назад действовала совсем неплохая по сути (к сожалению, иногда утомительная по содержанию) система обязательного ежегодного обследования. Мы, обслуживаясь в государственной поликлинике, были обязаны ежегодно делать флюорографию, сдавать различные анализы, показываться некоторым врачам. Система эта сохранила немало здоровья людям, у которых таким образом были обнаружены заболевания, которые при проявлениях на более поздних стадиях могли бы доставить куда больше проблем. Таким образом, беспристрастный анализ объективных данных о нашем организме играет чрезвычайно важную роль. Не бывает заболеваний, которые никак не проявляются, вопрос лишь в том, какие параметры организма контролировать. Если умело подобрать эти параметры, то болезни будет негде укрыться.

В функции ревизора входит проведение именно такого обследования компьютера — анализ объективных данных о конфигурации с целью выявления подозрительных изменений. На самом деле имеют место даже более тонкие аналогии. Что может насторожить врача при анализе результатов обследования вашего организма? Разумеется, отклонение ваших параметров от некоторых “нормальных”. Но ведь все мы разные, и если отклонения не носят явно угрожающего характера, врач всегда посмотрит ваши результаты годичной и более давности. Может быть, то, что является некоторым отклонением, для вас — норма и беспокоиться не о чем. Сравнение результатов — очень важный показатель! Ревизор поступает аналогично — он сравнивает данные о состоянии компьютера с результатами предыдущей проверки. Если такое сравнение не вызывает подозрений, то вы можете быть практически спокойны: чудес не бывает, вирус не способен поселиться на машине, совсем ничего не изменив.

Таким образом, часто задаваемый вопрос, что лучше — полифаг или ревизор — и чем предпочтительнее пользоваться, беспредметен. Надеемся, что наши аналогии убедили вас в этом.

В последнее время все шире распространяются системы медицинской компьютерной диагностики. Компьютерная система, анализируя некоторый набор объективных показателей организма, ставит диагноз, назначает лечение и... пока не лечит, хотя представить такое в недалеком будущем совсем не трудно. В этом вопросе компьютерные антивирусные средства пошли дальше “человеческой” медицины, возможно, потому, что при всей огромной ценности программного обеспечения его, конечно, нельзя сравнить с нашим здоровьем. Компьютерный доктор не только констатирует факт нежелательных изменений конфигурации, но и может самостоятельно, без вашего участия и без помощи специалиста (фага) восстановить прежнее состояние системы. В некоторых особо сложных случаях это не получается, но ведь компьютерный организм при всей его сложности все же гораздо проще человеческого, и процент успешных излечений очень высок. Лечение выполняет специальный лечащий модуль, который использует данные ревизора и некоторую информацию, в том числе и специально сохраняемую для этого.

А удовлетворяет ли ADinf
требованиям самого Д.Ю. Мостового?

Да, удовлетворяет. Здесь, вероятно, уместно рассказать о первом и, возможно, самом важном качестве ревизора — реализации проверок в обход операционной системы. Что это значит? Жизнью компьютера управляют прерывания. Всякое прерывание обслуживается (обрабатывается) небольшой программой обработки прерывания. Везде ниже термин “прерывание” означает, что речь идет о программе обработки прерывания. Прерываний довольно много, и все они в некотором роде “узкие специалисты”— каждое из них отвечает за определенный класс операций. Так, имеется прерывание для печати копии экрана на принтере при нажатии клавиш <Shift>+<PrtScr>. Имеется прерывание, обеспечивающее выполнение практически всех функций операционной системы — поиск файлов, создание, удаление и т.д. Для управления экраном, клавиатурой и другими устройствами также существуют прерывания. Всякий вирус что-нибудь да делает. В процессе своей работы он использует те или иные операции, то есть вызывает те или иные прерывания. Для того чтобы не быть обнаруженным, он их “перехватывает”, то есть делает так, чтобы при запуске программы обработки прерывания он получал управление и был способен контролировать ситуацию (в частности, обманывать антивирусные средства).

Рассмотрим простой пример: вирус заразил файл. В большинстве случаев длина файла меняется (ведь код вируса добавляется к коду файла). Это можно обнаружить даже невооруженным глазом, и уж во всяком случае это способна отловить даже простейшая программа антивирусного контроля. Обнаруженный вирус практически мертв. Если вы заметили изменение длины файла, то вы, вероятно, разберетесь с этим подозрительным фактом, а если вы будете достаточно аккуратны, то дни вируса сочтены. Но если вирус способен обмануть операционную систему и замаскировать изменение длины зараженного файла, то вы будете пребывать в счастливом неведении, пока вирус будет творить свои грязные делишки. Для такой маскировки вирус “садится” на прерывание операционной системы, обеспечивающее работу с дисками, и всякий раз, когда кто-то интересуется длиной зараженного файла, “подсовывает” вместо истинного значения то, которое было до заражения файла. Имеются и совсем нехорошие вирусы, не изменяющие длину зараженного файла. Вообще способы маскировки вирусов бывают самыми изощренными. Они способны, к примеру, при просмотре содержимого файла предъявлять вместо зараженного экземпляра “чистый”, что, естественно, также реализуется путем перехвата прерываний. Вирус фиксирует момент открытия файла и либо временно излечивает файл (но заражает его снова при закрытии), либо показывает вам здоровый экземпляр, сохраненный как раз на этот случай.

Перехват прерываний является достаточно эффективным средством маскировки, и не все антивирусы способны справиться с этой проблемой. Однако помимо прерываний операционной системы есть еще прерывания BIOS. Код BIOS хранится в постоянной памяти компьютера и не может быть изменен. Все дисковые операции DOS используют BIOS, таким образом, средствами BIOS можно проконтролировать саму DOS. Но для этого необходимо быть уверенным, что мы работаем непосредственно с программой BIOS. При первом запуске ADinf запоминает адрес программы BIOS, в функции которой входит работа с дисками. После этого ревизор уже работает с этой программой напрямую.

Как правильно использовать ADinf?

Авторская документация к программе написана так хорошо, что практически не оставляет вопросов. Для тех, у кого вопросы все же остаются, предлагается специальный файл adinfFAQ.txt , содержащий, как явствует из названия, ответы на часто задаваемые вопросы. И все же хочется отметить три важных момента.

В заключение обсуждения ревизора необходимо затронуть естественный вопрос: а “пробиваем” ли ADinf? Выше уже было отмечено, что при неправильном использовании ревизора вполне можно “проспать” вирусную атаку. А вот при правильном? Могут ли вирусы обойти защиту? Мы опишем механизм работы довольно известного вируса 3APA3A, который обманывал старые версии ADinf. Этот механизм интересен сам по себе как пример “творческого подхода” к вирусописательству, но мы описываем его прежде всего для того, чтобы вы лишний раз убедились в том, что создать абсолютно надежную антивирусную защиту скорее всего невозможно. 3APA3A — лишнее подтверждение этих слов: кому из нормальных людей придет в голову заранее предугадать, что могут вытворять такие заразы?

Формально 3APA3A — загрузочно-файловый вирус, заражающий бутовые секторы дискет и один-единственный файл IO.SYS (или подобный ему в других версиях DOS). Механизм заражения загрузочных секторов большого интереса не представляет, а вот механизм заражения IO.SYS очень любопытен. Файл IO.SYS обычно является первым элементом корневого каталога диска. Вторым элементом, как правило, является файл MSDOS.SYS. При заражении вирус первым делом проверяет атрибуты IO.SYS. Его интересует, не установлен ли у него атрибут “метка диска”. У обычного файла этот атрибут, естественно, не установлен. После этого вирус очень аккуратно копирует IO.SYS в последние кластеры логического раздела диска. (Под “аккуратным” копированием понимается стремление вируса на этой стадии ничего не портить: если файл не помещается в последние 256 кластеров диска, вирус отказывается от заражения.) После этого вирус сдвигает элементы корневого каталога начиная с третьего вниз на одну позицию (на этом этапе вирус уже способен “затереть” данные о файле, которому не повезло быть 80-м). Затем первая запись каталога копируется в третью, и, таким образом, в корневом каталоге оказываются два файла IO.SYS. Для третьего элемента каталога (вторая копия IO.SYS) устанавливается новый начальный кластер (в соответствии с тем, куда вирус скопировал файл). В начальный кластер первого элемента каталога вирус записывает часть своего кода и только после этого для первого элемента каталога устанавливает атрибут “метка диска”.

Таким образом, при загрузке системы с зараженного диска программа начальной загрузки находит первый элемент каталога (файл IO.SYS) и, НЕ ОБРАЩАЯ ВНИМАНИЯ на установленный атрибут “метка диска”, считывает в память первый кластер и передает ему управление. Первый кластер содержит вирус, который резидентно устанавливается в память, считывает первый кластер оригинального IO.SYS, и дальше все происходит обычно (первый кластер, отработав, считывает второй и т.д.).

Любопытно, что зараженный файл IO.SYS не виден стандартными средствами DOS, ибо DOS метки за “нормальные” файлы не считает и “думает”, что есть единственный файл IO.SYS в третьем элементе каталога. Можно, конечно, случайно обратить внимание на необычную метку диска (кстати, обычными средствами такую метку не поставить — она содержит пробелы), но мало кто обращает внимание на метки. Наиболее любопытно другое: даже в стерильной системе (при загрузке с “чистой” системной дискеты) команда sys c: не перезапишет зараженный файл! Будет перезаписан только второй файл IO.SYS, не имеющий атрибута “метка”! Это, впрочем, естественным образом следует из сказанного выше: с точки зрения DOS, файл-метка не является “нормальным” файлом, а SYS — обычная программа DOS. ADinf в первый момент оказался среди обманутых — он также не ожидал таких штучек от меток, однако очень скоро ситуация была исправлена.

Лечащий модуль ADinf Cure Module

Возвращаясь к разговору о требованиях к современным ревизорам, изложенных в докладе Д.Ю. Мостового на VB’95, нельзя не вспомнить о поддержке лечения или, в другой терминологии, о наличии восстанавливающей процедуры. Информация ревизора может быть использована не только для контроля целостности системы, но и для ее восстановления после вирусной атаки. Некоторые восстанавливающие действия умеет выполнять сам ADinf. Например, он сразу может восстановить “испорченные” вирусом загрузочные секторы. Для восстановления исполняемых файлов используется специальная программа, которая устанавливается в дополнение к ревизору (эта программа не может быть установлена отдельно). При проверке диска ревизор сохраняет некоторую дополнительную информацию о файлах, подлежащих восстановлению. (Эта информация дополнительная потому, что только для себя — для проверок — ревизор ее хранить не стал бы.)

Основная идея восстановления пораженных файлов состоит в том, что способов внедрения в файл не так много и в большинстве случаев достаточно сохранить лишь некоторую информацию об уязвимых фрагментах файла, чтобы можно было их восстановить. Восстанавливающая процедура способна удалить около 97 % вирусов, причем ей совершенно безразлично, с каким вирусом она имеет дело — написанным год назад, вчера или только что. Она не имеет никакой информации о конкретных вирусах и использует лишь информацию о файлах, подлежащих восстановлению, и общих принципах внедрения вирусов в файлы. Около 3 % вирусов настолько “неформальны”, что не могут быть удалены лечащим модулем. (Уже несколько раз упомянутый OneHalf в их числе. Кстати, при поражении последним нельзя даже восстанавливать MBR средствами ревизора, о причинах этого уже говорилось выше.) При успешном завершении восстанавливающей процедуры файл преобразуется В ТОЧНОСТИ В ТО СОСТОЯНИЕ, в котором он был до заражения. Если лечащий модуль не может произвести восстановление, то он всегда устанавливает этот факт и не меняет состояние файла. В таком случае надо воспользоваться фагами.

Взаимодействие ревизора и полифагов. Почему это важно?

Вы пробовали когда-нибудь запустить Doctor Web на гигабайтный диск? Если такой у вас есть — попробуйте, а пока будет идти “процесс”, спокойно прочитайте этот пункт.

Вот сканирует сейчас Doctor Web весь ваш диск... Если вы человек аккуратный, то потом еще и Aidstest запустите. Тот, конечно, отсканирует диск чуть побыстрее. Но Doctor Web, напомним, все еще сканирует. Он еще и четвертой части не отсканировал... НО ВЕДЬ БОЛЬШУЮ ЧАСТЬ РАБОТЫ ОН СКОРЕЕ ВСЕГО ДЕЛАЕТ ЗРЯ! Если вы работаете в нормальном режиме (не было “авралов”, установки нового программного обеспечения и проч.), то значительная часть файлов не менялась с прошлой проверки, а это означает, что их не надо проверять заново. Но Doctor Web этого не знает. Он все сканирует себе и сканирует, еще и до трети не дошел. Зато ADinf прекрасно знает, что менялось, а что не менялось, что надо проверять, а что нет. Сейчас, когда организовано взаимодействие ревизора с полифагами, вы можете сильно сэкономить время на антивирусную профилактику БЕЗ УЩЕРБА ДЛЯ СВОЕЙ БЕЗОПАСНОСТИ.

В документации приведен пример простейшего пакетного (BAT) файла для использования новых возможностей взаимодействия программ антивирусного комплекта. Если вы не являетесь программистом и содержимое указанного файла для вас не очевидно — читайте дальше, все очень просто!

Что такое пакетный (BAT) файл? Это текстовый файл, содержащий команды операционной системы и некоторые специальные команды передачи управления. Он может быть запущен обычным образом из командной строки DOS или вызван из другого пакетного файла. Если вы не имеете опыта работы с такими файлами — проделайте следующее простое упражнение.

Создайте в любом текстовом редакторе файл, содержащий всего три строчки:

echo Сейчас будет выполнена команда DIR
pause
dir

Запишите этот файл под именем TEST.BAT. Отметим, что файл должен быть именно текстовым, не содержащим никакой дополнительной информации, которую иногда добавляют редакторы документов. Получить такой файл вы можете, воспользовавшись, к примеру, встроенным редактором Norton Commander. Можете использовать и Лексикон, только не делайте никаких шрифтовых выделений.

Теперь перейдите в каталог, куда вы записали TEST.BAT, и наберите в командной строке DOS:

TEST

Вы увидите результат последовательного выполнения команд echo (вывод сообщения), pause (ожидание нажатия клавиши) и dir (вывод содержимого текущего каталога).

Теперь, следуя примеру, приведенному в документации, рассмотрим пакетный файл, дополнив его подробными комментариями.

    @echo off
    REM Отключили выдачу команд пакетного файла на экран. Знак @ перед командой подавляет печать самой команды, таким образом, самой команды echo вы тоже не увидите.
    ADINF * /@C:\ADDTEST.LST /A
    REM Запускается ADinf. Результат проверки (список измененных файлов) помещается в файл ADDTEST.LST, который записывается в корневой каталог диска C:
    if errorlevel 50 goto end
    REM После запуска ADinf анализируется код завершения программы. Этот код ADinf возвращает операционной системе, и его значение может быть получено командой if errorlevel. Код 50 — внутренняя ошибка программы. При возникновении этой ошибки обращайтесь к автору ADinf. Впрочем, автор ADinf считает, что вы не столкнетесь с указанной ситуацией.
    if errorlevel 40 goto vir_in_mem
    REM ADinf обнаружил активный вирус, препятствующий нормальной работе программы. Управление передается на метку vir_in_mem. Будет выдано соответствующее сообщение. Вам следует загрузиться с чистой дискеты и проверить винчестер полифагами.
    if errorlevel 30 goto end
    REM Работа ADinf была прервана. Не надо этого делать!
    if not exist C:\ADDTEST.LST goto end
    REM Если файл ADDTEST.LST не обнаружен (никаких изменений нет), то и проверять ничего не надо. Чувствуете разницу?
    DRWEB /@+C:\ADDTEST.LST /CL /HA1 /RV /HI /UPN /AR /NS
    REM Иначе вызывается Doctor Web, но проверяет он только файлы, указанные в ADDTEST.LST.
    if errorlevel 2 goto new_vir
    if errorlevel 1 goto vir
    Doctor Web завершается с кодом 2 при обнаружении вируса эвристиком и с кодом 1 при обнаружении известного вируса.
    AIDSTEST /@C:\ADDTEST.LST /G /NB
    REM Если все нормально, то вслед за Doctor Web запустится Aidstest.
    if errorlevel 3 goto end
    if errorlevel 2 goto end
    if errorlevel 1 goto vir
    echo Вирусы не обнаружены
    REM Если все нормально, были выполнены все проверки и мы попали сюда, то можно быть практически спокойны: на машине все в порядке.
    goto end
    :vir_in_mem
    pause Обнаружен активный вирус, противодействующий ADinf
    goto end
    :vir pause Внимание! Обнаружен известный вирус
    goto end
    :new_vir
    pause Внимание! Подозрение на неизвестный вирус
    :end

Некоторые полезные замечания

Не оставляйте имя файла списка измененных файлов таким, какое используется в приведенном примере. Смените его на что-нибудь экзотическое.

При запуске одного пакетного файла из другого (например, этого из AUTOEXEC.BAT) используйте команду call:

call имя_вызываемого_файла

Если вы не сделаете этого, то вызываемый файл запустится, но управление не будет возвращено вызывающему.

Мы воспользовались примером, рассмотренным в документации, в нем команда pause имеет параметр — строку, которая появляется на экране перед стандартным сообщением Press any key to continue. Если ваша DOS не поддерживает такой формат pause, то приведенный пакетный файл также будет работать, только вместо осмысленных сообщений вы всегда будете видеть одно стандартное. Проверить это очень просто: попробуйте выполнить команду

pause Привет!

Если вы видите Привет!— все нормально, можете воспользоваться готовым примером. Если же вместо этого появляется стандартное сообщение Press any key to continue, измените файл следующим образом: каждая команда

pause сообщение

меняется на две:

echo сообщение
pause

Отметим в заключение, что мы совсем не хотели в этом пункте продемонстрировать медлительность Doctor Web. Он ПРОСТО НЕ МОЖЕТ РАБОТАТЬ ПРИНЦИПИАЛЬНО БЫСТРЕЕ. Дело тут не в особенностях конкретной программы, дело в алгоритме, который необходимо использовать для надежного контроля. С появлением сложнополиморфных вирусов требуется все больше времени на “раскрутку” программного кода для обнаружения таких вирусов. И тут ничего не поделать — или жить с вирусами, или ждать, пока Doctor Web до них “докопается”. Второе, поверьте, дешевле. А еще дешевле и выгоднее грамотно использовать возможности антивирусного комплекта “ДиалогНауки”.

Аппаратная защита

Что это? Если совсем по-простому, то программно-аппаратный комплекс Sheriff — это одна плата и несколько программ. Плата устанавливается в свободный ISA-слот материнской платы, а основная программа является драйвером, загружаемым в CONFIG.SYS.

Зачем это? Вы не гарантированы от:

Sheriff, являясь преимущественно антивирусным средством, не делает различия между перечисленными ситуациями. Он защищает данные от любых повреждений, аппаратно блокируя работу компьютера при попытке нарушения целостности защищенных данных.

Странная идея... Может ли вирус проникнуть в систему при установленной защите? Да! Некоторые типы вирусов могут проникнуть в систему и “жить” в ней при установленной защите. Фокус в том, что, живя в системе, вирус не сможет ничего сделать! Просто жить — пожалуйста, если ты ничего (защищенного) не трогаешь — живи себе на здоровье. Но вирусу никаким способом не удастся повредить защищенные данные.

У вас установлен Sheriff. Можете ли вы потерять защищенные данные? Увы, можете, хотя слова “аппаратная защита” действуют иногда магически. К сожалению, если ваш винчестер “посыплется по собственной инициативе”, то аппаратная защита Sheriff вам ничем не поможет. Нам кажется, что это еще один убедительный довод в пользу регулярного резервного копирования.

Где и каким образом можно получить некоммерческие версии программ для ознакомления?

Если вы имеете on-line доступ в Интернет, наиболее быстрый способ получения указанных программ — “скачать” их с одного из указанных ниже серверов:

Если вы не имеете on-line доступа в Интернет, то можете воспользоваться услугами FTPmail-серверов для работы с указанными выше FTP-серверами. Абоненты сети Релком могут использовать FTPmail-сервер ftpmail@relcom.ru. Для получения инструкции по работе с этим сервером пошлите ему письмо с командой HELP.

И, наконец, мы поддерживаем секцию DialogueScience в форуме NCSA Anti-Virus Vendor Forum в сети CompuServe.

Где и каким образом можно приобрести антивирусные программы в разовом порядке?

На сегодняшний день наши программы продаются через систему серверов сети Релком.

Во-первых, любой пользователь этой сети для приобретения наших антивирусов может воспользоваться электронной почтой. Посредством электронной почты осуществляется продажа с mail-серверов news@relis.ru (он же — знакомый многим relis@kiae.su) и soft@relis.ru.

На сервере news@relis.ru организованы конференции:

Для получения инструкции по работе с сервером пошлите ему письмо, состоящее из единственного слова — HELP. Содержимое поля Subject значения не имеет и игнорируется сервером.

На сервере soft@relis.ru открыт отдел DSAV. Для получения более подробной информации отправьте серверу письмо, содержащее слово HELP (сервер вышлет инструкцию по работе с ним). Вы можете также сразу запросить информацию об отделе DSAV. Для этого в письме должна быть строка INFO DSAV. В одном письме можно указывать несколько запросов. Нам кажется, что для покупки программ с получением по электронной почте сервер soft@relis.ru сегодня наиболее удобен.

Для приобретения антивирусов в режиме on-line вы можете воспользоваться WWW-сервером www.relis.ru. На этом сервере в разделе “программные продукты” открыт отдел DIALS. Но необходимо знать, что для совершения покупок на данном сервере вы должны быть зарегистрированы в системе RELIS-ONLINE. У абонентов сети Релком не должно возникнуть никаких проблем. Им надо лишь обратиться к своему постмастеру, чтобы решить вопросы, связанные с оплатой покупок. У пользователей других сетей, имеющих возможность работать в Интернет в on-line, проблем тоже не будет, благо страничка регистрации на сервере www.relis.ru доступна всем.

Кроме того, если вы являетесь абонентом сети РОСНЕТ, то можете приобрести наши программы на узле 6100255. На этом же узле имеется раздел для обслуживания подписчиков. При оформлении подписки вы можете оговорить возможность доступа к этому разделу.

Имеют ли подписчики возможность получать новые версии программ по электронной почте?

Да, конечно. При оформлении подписки вам достаточно пожелать получать новые версии по E-mail. После этого требуется лишь связаться с менеджером, отвечающим за рассылку программ, по адресу reg@dials.ccas.ru.

Чем различаются серверы www.dials.ru и www.dials.ccas.ru?

С сервера www.dials.ru подписчики могут бесплатно получать антивирусные программы в режиме on-line. Некоммерческий сервер www.dials.ccas.ru для этого не используется, но предоставляет различные бесплатные услуги всем желающим. В частности, на этом сервере Вы можете бесплатно проверить файлы полифагами последних версий.

Распространяются ли антивирусные программы через сеть FidoNet?

Нет, нами не распространяются (к нелегальным доброхотам-распространителям наша фирма отношения не имеет). Коммерческая деятельность в FidoNet запрещена. Однако ДиалогНаука поддерживает эхо-конференцию FidoNet adinf.support (модератор — Д. Ю. Мостовой, автор ADinf). В этой конференции можно найти самую свежую информацию о наших продуктах.

Как связаться со станцией BBS DialogueScience?

Сегодня на нашей станции BBS функционируют одна линия общего доступа:

и четыре линии для обслуживания подписчиков:

Можно ли получить информацию о наших продуктах по E-mail?

Да, и совершенно бесплатно. Пошлите письмо с единственной строкой HELP по адресу manager@dials.ccas.ru и вам будет выслана инструкция по работе с этим list-сервером. В частности, вы сможете подписаться на регулярно рассылаемые информационные сообщения.


С вопросами и предложениями обращайтесь digraph@rinet.ru



Copyright © 1994-2016 ООО "К-Пресс"