Что же такое компьютерный вирус? Представьте себе работу мелкого клерка и его рабочее место. На столе стоит телефон,
копировальный аппарат и другие канцелярские принадлежности. Рядом стоит шкаф с
папками и документами.
В папках содержатся инструкции, которые клерк должен
выполнять. Каждый день он берет очередную папку и начинает с ней работать.
Инструкции в папках могут содержать алгоритмы расчета зарплаты, указания по
обработке поступающей документации и т. д.
Клерк монотонно выполняет свою работу день за днем и вдруг
недоброжелатель вкладывает ему в папку еще один лист с дополнительными
инструкциями. В них клерку предлагается скопировать этот лист на копировальной
машине и вложить его в следующую папку. Со временем такой лист распространится
по папкам и в конце концов, его копия будет находиться в каждой папке.
Кроме инструкций, отвечающих за распространение,
дополнительный лист может содержать другие инструкции. Например, в них может
указываться, что клерк должен уничтожить папку, взятую наугад из шкафа с
документами или перевести некоторую сумму на определенный счет в банке.
Теперь представьте, что работу клерка выполняет центральный
процессор. Шкаф с папками документов - это жесткий диск компьютера. Сами папки
- это файлы программ, записанные на диске. В этом случае дополнительный лист,
подброшенный кем-то в одну из папок, достаточно точно соответствует
компьютерному вирусу.
Наиболее общее определение компьютерного вируса можно дать
как самораспространяющийся в информационной среде компьютеров программный код.
Он может внедряться в выполнимые файлы программ, распространяться через
загрузочные секторы дискет и жестких дисков.
Существуют достаточно оригинальные вирусы, распространяющиеся
через файлы документов, подготовленных в текстовом процессоре Microsoft Word
for Windows и электронной таблице Microsoft Excel for Windows. Кроме
перечисленных вирусов существуют и другие, например, вирусы, заражающие
командные файлы - файлы с расширением BAT. Прогресс в мире вирусов не стоит на
месте, десятки, если не сотни скучающих программистов делают свое черное дело и
на свет появляются все более страшные монстры.
К сожалению, действие большинства вирусов не ограничивается
размножением и распространением. Они могут выполнять относительно безопасные
или напротив, разрушительные действия.
Внешне действия вирусов могут выражаться в том, что
периодически, например, по достижении определенного времени, вирус
активизируется и выполняет какие-либо операции. Вирусы могут выводить на экран
посторонние надписи, "осыпать" символы, уже отображенные на экране,
перезагружать компьютер, замедлять работу компьютера, исполнять на встроенном
динамике компьютера всевозможные мелодии, удалять файлы и каталоги, стирать
выбранные случайным образом секторы жестких и гибких дисков.
Существуют вирусы, делающие "полезную” работу. Например,
один из вирусов, поражающих файлы программ, одновременно сжимает их, уменьшая
размер. Благодаря этому на диске компьютера становится больше свободного места.
Такой вирус выполняет функции широко распространенной программы DIET, но делает
это автоматически, не спрашивая на то разрешения у пользователя.
Можно придумать много другой полезной работы, которая под
силу вирусам. Однако мы не станем отнимать хлеб у писателей вирусов, скажем
только, что даже "полезные” вирусы могут быть очень опасны.
Некоторые эффекты, вызываемые вирусами, например, внезапная
перезагрузка компьютера или зависание, часто воспринимаются как аппаратная
неисправность компьютера. На это и рассчитывают писатели вирусов.
Действительно, причиной этому может послужить аппаратная неисправность
компьютера.
Однако не торопитесь вызывать технических специалистов или
самостоятельно открывать компьютер. Сначала выполните полную диагностику
компьютера, воспользовавшись всеми антивирусными средствами, которыми вы
располагаете.
В настоящее время насчитываются тысячи различных вирусов и
их модификаций. Мы будем классифицировать их по способу распространения.
Подавляющее большинство вирусов можно разделить на две большие группы:
· вирусы,
внедряющиеся в файлы,
· вирусы, заражающие
загрузочные секторы жестких и гибких дисков.
Существует много вирусов, которые одновременно можно
включить в обе эти группы. Такие вирусы являются комбинированными. Они могут
распространяться, заражая файлы и загрузочные секторы дисков.
Операционная система MS-DOS является однозадачной. В
любой момент времени может работать только одна программа. Когда пользователь закончит
с ней работать, программа выгружается из оперативной памяти и пользователь
может запустить новую программу. Естественно, это не всегда удобно. Например,
если вы пишете в текстовом редакторе финансовый отчет, вам может потребоваться
калькулятор. Очень неудобно для запуска калькулятора каждый раз завершать
текстовый редактор, а потом запускать его снова.
Чтобы как-то смягчить неудобства, вызванные однозадачностью
MS-DOS, был создан механизм резидентных программ. При запуске резидентной
программы она сразу возвращает управление операционной системе, но оставляет в
оперативной памяти резидентный модуль.
Даже если потом запускаются другие программы этот модуль
остается в памяти. Затем, когда пользователь нажимает определенную комбинацию
клавиш или при другом условии резидентная программа может активизироваться и
выполнить некоторую работу.
В качестве примера можно привести программы резидентных
калькуляторов. Они могут быть загружены из командной строки операционной
системы или из файла AUTOEXEC.BAT и остаются резидентными в памяти. Если
пользователь нажимает определенную комбинацию клавиш, на экране появляется
панель калькулятора. Пользователь может выполнить любые вычисления и вернуться
в свою программу. Резидентные программы могут выполнять и другие действия.
Например, они могут выполнять функции будильника.
Механизм резидентных программ, предусмотренный для сугубо
мирных целей, был использован авторами вирусов. Обычные, нерезидентные вирусы
получают управление и становятся активными только во время запуска зараженной
программы. После запуска вирусом настоящей программы, он окончательно теряет
управление, до тех пор, пока зараженная программа опять не будет запущена. За
это небольшое время вирус должен заразить другие программы и выполнить
заложенные в него автором дополнительные функции.
Резидентный вирус, получив управление, оставляет в
оперативной памяти компьютера небольшой модуль, который остается активным
вплоть до перезагрузки компьютера. Резидентный модуль вируса может использоваться
для решения самых различных задач.
Обычно он применяется для заражения новых программ.
Резидентный модуль отслеживает запуск или открытие файлов программ, проверяет,
не были ли они уже заражены, и если нет, то заражает их.
Интересно, что если на компьютере, зараженном резидентным
вирусом, поражающим выполнимые файлы при их открытии, запустить антивирусную
программу, которая не может определить этот вирус, то по окончании проверки
окажутся зараженными все проверяемые выполнимые файлы.
Некоторые разновидности вирусов, называемые стелс-вирусами,
используют резидентный модуль, чтобы замаскировать свое присутствие. Они могут
перехватывать обращения к файловой системе и скрывать изменение длины
зараженных файлов. Более подробно о стелс-вирусах вы можете прочитать в разделе
"Маскировка вирусов”.
И, конечно, резидентный модуль используется для создания
всевозможных спецэффектов. Здесь все зависит от фантазии и знаний, которыми
обладает автор вируса. Те, кто попроще, могут испортить данные, записываемые на
диск, замедлить работу компьютера. Более изысканные в программировании и менее
злобные авторы создают всевозможные видеоэффекты и звуковые композиции.
Любая резидентная программа, и в том числе резидентные
модули вирусов, уменьшают объем доступной оперативной памяти. Это изменение
можно заметить с помощью команды MEM, входящей в состав операционной системы
MS-DOS.
Команда MEM отображает информацию об использовании
оперативной памяти компьютера. С помощью нее можно узнать, сколько оперативной
памяти установлено на компьютере, сколько памяти занято и сколько свободно для
использования:
Memory Type Total Used Free
---------------- -------- -------- --------
Conventional 640K 204K 436K
Upper 0K 0K 0K
Reserved 384K 384K 0K
Extended (XMS) 15 360K 14 336K 1 024K
---------------- -------- -------- --------
Total memory 16 384K 14 924K 1 460K
Total under 1 MB 640K 204K 436K
Total Expanded (EMS) 1 024K (1 048 576 bytes)
Free Expanded (EMS) 1 024K (1 048 576 bytes)
Largest executable program size 436K (446 256 bytes)
Largest free upper memory block 0K (0 bytes)
MS-DOS is resident in the high memory area.
Команда MEM позволяет подробно исследовать резидентные
модули, загруженные в память. Для этого при вызове команды ей надо указать
дополнительные параметры. Подробное описание команды MEM изложено в десятом
томе "Библиотеки системного программиста” - "Компьютер IBM PC/AT, MS-DOS и
Windows. Вопросы и ответы”. ‡Здесь мы приведем только основные сведения.
MEM [/CLASSIFY | /DEBUG] [/PAGE]
Если указать дополнительный параметр /CLASSIFY (или
/C), то будет представлена информация по каждому резидентному модулю,
размещенному в оперативной памяти.
Вместо параметра /CLASSIFY можно указать параметр
/DEBUG (или /D). В этом случае будет собрана дополнительная информация о
загруженных
драйверах.
Команда MEM выводит на экран очень много информации. Так как
экран компьютера может одновременно отображать ограниченное количество строк,
то выполняется свертка изображения. Дополнительный параметр /PAGE (или /P) позволяет
после заполнения очередного экрана выдерживать паузу.
Вирусы могут оставлять в оперативной памяти резидентные
модули. Фактически все загрузочные вирусы и большинство файловых вирусов
являются резидентными.
Резидентные модули вируса могут затруднить его обнаружение и
удаление. Чтобы не дать вирусу шанс получить управление и оставить резидентный
модуль в памяти, рекомендуется для проверки компьютера выполнять загрузку с
чистой системной дискеты.
Сразу после включения питания компьютера начинает
работать процедура проверки POST (Power On Self Test). В ходе проверки
определяется конфигурация компьютера, проверяется работоспособность основных
его подсистем. Процедура POST записана в микросхеме постоянного запоминающего
устройства, расположенного на системной плате компьютера.
Если компьютер имеет энергонезависимую память
(CMOS-память), из нее считываются значения текущих даты и времени,
конфигурация дисковой
подсистемы. Заметим, что CMOS-память установлена практически на всех
компьютерах. Она отсутствовала только на первых моделях компьютеров IBM
PC и
IBM PC/XT.
Затем процедура POST проверяет, вставлена ли дискета в
дисковод A:. Если дискета вставлена, тогда дальнейшая загрузка операционной
системы происходит с дискеты. Если дискета не вставлена, загрузка выполняется с
жесткого диска.
Практически все современные системные платы и версии
программы Setup позволяют изменить порядок загрузки компьютера. Например, вы
можете указать, что компьютер сразу должен загружаться с жесткого диска и
только в случае отсутствия жесткого диска загрузка будет выполняться с дискеты.
Последовательность загрузки операционной системы MS-DOS с
дискеты и с жесткого диска немного различаются. Мы опишем оба случая, так как
это важно для понимания механизма распространения загрузочных вирусов.
Если загрузка компьютера происходит с дискеты, то процедура
POST считывает с нее загрузочную запись (Boot Record) в оперативную память. Эта
запись всегда расположена в самом первом секторе дискеты и представляет собой
маленькую программу. Кроме программы загрузочную запись содержит структуру
данных, определяющую формат дискеты и т. д. Затем процедура POST передает
управление загрузочной записи.
Получив управление, загрузочная запись приступает
непосредственно к загрузке операционной системы. Она считывает с дискеты и
загружает в оперативную память файлы IO.SYS и MSDOS.SYS. Для операцилнных
систем, совместимых с MS-DOS
эти имена могут отличаться. Например в операционной системе IBM PC-DOS загружаются файлы IBMIO.COM IBMSYS.COM.
Затем, если на дискете записан файл конфигурации CONFIG.SYS,
анализируется его содержимое и загружаются указанные в нем драйверы.
После этого с дискеты считывается командный процессор
COMMAND.COM и управление передается ему. Командный процессор завершает загрузку
операционной системы и выполняет команды, записанные в файле AUTOEXEC.BAT.
После выполнения команд, записанных в файле AUTOEXEC.BAT,
командный процессор отображает на экране системное приглашение и ожидает ввода
команд:
A:\>
Файлы CONFIG.SYS и AUTOEXEC.BAT могут отсутствовать.
Если отсутствует файл AUTOEXEC.BAT, тогда после окончания загрузки операционной
системы командный процессор предлагает ввести текущую дату и время:
Current date is Fri 15-04-1996
Enter new date (mm-dd-yy):
Current time is 2:28:33.47p
Enter new time:
Если вы не желаете изменять дату и время, нажмите два
раза клавишу <Enter>. В этом случае дата и время останутся без изменения,
и на экране появится системное приглашение MS-DOS. Вы можете создать на
системной дискете пустой файл AUTOEXEC.BAT, тогда дата и время запрашиваться не
будут и после загрузки операционной системы на экране сразу появится системное
приглашение.
Мы рассмотрели вариант загрузки компьютера с системной
дискеты. Возможен вариант, при котором пользователь случайно или по ошибке
попытается загрузить компьютер с несистемной дискеты. На такой дискете
отсутствуют файлы операционной системы IO.SYS, MSDOS.SYS и COMMAND.COM. Тем не
менее, загрузочная запись присутствует даже на несистемной дискете.
Когда процедура POST считывает и передает управление
загрузочной записи, она определяет, что дискета несистемная (так как на ней
отсутствуют файлы операционной системы) и отображает на экране соответствующее
сообщение:
Non-System disk or disk error
Replace and press any key when ready
В некоторых случаях сообщение может иметь другой
внешний вид:
This disk is not bootable
If you wish to make it bootable,
run the DOS program SYS after the
system has been loaded
Please insert a DOS diskette into
the drive and strike any key...
Эти сообщения означают, что дискета не содержит
необходимых файлов и загрузить операционную систему с нее невозможно. Вам
предлагается вставить в компьютер системную дискету и перезагрузить компьютер.
В разделе "Создание системной дискеты” мы расскажем, как из
несистемной дискеты сделать системную.
Загрузочный вирус может распространяться как через системные,
так и через несистемные дискеты
Загрузка компьютера с жесткого диска происходит несколько
сложнее. Процедура POST считывает с жесткого диска главную загрузочную запись
(MBR - Master Boot Record) и записывает ее в оперативную память компьютера.
Главная загрузочная запись содержит программу первоначальной загрузки и таблицу
разделов, в которой описаны все разделы жесткого диска.
Формирование главной загрузочной записи и таблицы разделов
происходит во время первоначальной установки компьютера и разделения его
жестких дисков на разделы и логические диски. Обычно эту операцию делают один
раз, используя для этого команду FDISK операционной системы MS-DOS.
Главная загрузочная запись хранится в самом первом секторе
жесткого диска. Поэтому процедура POST всегда знает, где она расположена.
Затем управление передается только что прочитанной с диска
программе первоначальной загрузки. Она анализирует содержимое таблицы разделов,
выбирает активный раздел и считывает загрузочную запись активного раздела (Boot
Record). Загрузочная запись активного раздела аналогична загрузочной записи
системной дискеты и выполняет те же самые функции. Она считывает в оперативную
память файлы IO.SYS и MSDOS.SYS, анализирует файл конфигурации CONFIG.SYS,
записанный на диске активного раздела, и загружает указанные в нем драйверы.
После этого управление передается командному процессору COMMAND.COM. Командный
процессор завершает загрузку операционной системы, а затем выполняет команды,
записанные в файле AUTOEXEC.BAT.
При заражении дискеты или жесткого диска компьютера
загрузочным вирусом, последний заменяет загрузочную запись или главную
загрузочную запись. Настоящая загрузочная запись или главная загрузочная запись
обычно не пропадает (некоторые вирусы не сохраняют исходной загрузочной
записи). Вирус копирует их в один из свободных секторов (рис. 1.1).
Таким образом, вирус получает управление сразу после
завершения процедуры POST. Затем он, как правило, действует по стандартному
алгоритму. Вирус копирует себя в конец оперативной памяти, уменьшая при этом
объем свободной оперативной памяти. После этого он перехватывает несколько
функций BIOS, так что обращение к ним передает управление вирусу. В конце вирус
загружает в оперативную память компьютера настоящий загрузочный сектор и
передает ему управление. Далее компьютер загружается как обычно, но вирус уже
находится в памяти и может контролировать работу всех программ и драйверов.
Рис. 1.1. Загрузочный вирус
Обычно загрузочный вирус заражает компьютер, когда
пользователь загружает компьютер с дискеты, на которой уже есть вирус (вне
зависимости от того системная эта дискета или нет). Чаще всего это происходит
случайно. Вы работаете с дискетой и оставляете ее в дисководе A:
компьютера. Если теперь вы перезагрузите компьютер или произойдет сбой работы
компьютера из-за скачка питания, то загрузка компьютера начинается с зараженной
дискеты и управление получает вирус. Он сразу заражает жесткий диск компьютера,
устанавливает себя резидентным в памяти. Затем вирус загружает компьютер
обычным образом. Если дискета загрузочная, то произойдет загрузка операционной
системы, в противном случае на экране появляется предложение вставить в
дисковод A: системную дискету и перезагрузить
компьютер.
Теперь даже после перезагрузки компьютера с жесткого диска
путем выключения питания удалить вирус нельзя, так как он уже записан на
жестком диске. Сразу после включения питания компьютера вирус опять получит
управление и разместит себя резидентно в памяти.
Дальнейшее распространение зависит от особенностей вируса.
Обычно применяется простая схема. Если вы вставите в дисковод дискету, не
зараженную вирусом, и обратитесь к ней, например, чтобы считать названия
записанных на ней файлов, вирус получает сигнал, что дискета вставлена в
дисковод. Вирус считывает загрузочную запись с дискеты и записывает ее в
какой-либо другой сектор дискеты. Вместо оригинальной загрузочной записи
записывается код вируса.
Некоторые вирусы, например Joshi, форматируют на дискете
дополнительную дорожку. Информация с этой дорожки не может быть считана и
записана обычными средствами операционной системы. Вирус может использовать эту
дорожку для хранения настоящего загрузочного сектора и некоторых своих модулей.
Надо заметить, что использование дополнительных дорожек не является
изобретением писателей вирусов. Эта методика применяется многими системами
защиты от копирования
Интересный эффект получается, если дискета или диск
последовательно заражены несколькими загрузочными вирусами. В зависимости от
того, какие секторы эти вирусы используют для хранения настоящего загрузочного
сектора, возможны два случая.
В первом случае, когда вирусы используют различные секторы,
они будут работать вместе. Сначала получает управление вирус, заразивший
дискету последним. Он выполняет свою работу и загружает второй вирус, который
заразил дискету раньше. В принципе такая цепочка вирусов может быть достаточно
длинной. Последний вирус, который получит таким образом управление, в конце
концов загрузит настоящий загрузочный сектор.
Обычно перед заражением диска (или дискеты), загрузочные
вирусы проверяют, был ли он заражен ранее. Поэтому повторное заражение одним
вирусом не происходит. Если же после заражения диска одним вирусом, его заразит
другой загрузочный вирус, то первый вирус посчитает, что он не заражал диск
раньше и заразит его еще раз. В результате может потеряться исходная
загрузочная запись и компьютер зависнет во время загрузки.
Во втором случае вирусы, заразившие дискету, хранят
настоящий загрузочный сектор в одном и том же месте. Когда второй вирус
заражает дискету, он записывает код первого вируса в сектор, где первый вирус
хранит настоящую загрузочную запись. В результате исходная загрузочная запись
оказывается безвозвратно утерянной, а компьютер зависает: второй вирус будет
снова и снова считывать и запускать свой вирусный код.
Первый раз мы столкнулись с вирусами много лет назад, еще
будучи студентами московского инженерно физического института. В то время
персональные компьютеры еще только начали появляться и были большой редкостью.
Наша кафедра снимала несколько часов машинного времени в неделю в одном научном
институте.
И вот в один прекрасный день на экране компьютера появился
небольшой шарик. Он перемещался по экрану, отражаясь от его границ и некоторых
символов. Первое время мы были в ужасной панике, думая что испортили
дорогостоящий компьютер IBM PC/XT и все его программное обеспечение.
После перезагрузки шарик исчезал и мы надеялись, что дефект
пропадет сам собой. Только через несколько дней мы решили сказать об этом
местным инженерам. Они прореагировали очень спокойно, сообщив нам, что это
компьютерный вирус Ping Pong, живущий на их компьютерах очень давно.
Для борьбы с вирусом использовали специальную антивирусную
программу SCAN фирмы McAfee. Она легко находила вирус
на дискетах и жестких дисках компьютеров, а затем удаляла его. После такой
процедуры вирус долгое время не появлялся и некоторое время мы жили спокойно.
Однако кроме нас машинное время снимали много других
организаций и каждый приходил работать со своими дискетами, поэтому вирус
кочевал с дискеты на дискету. Вылечить его было практически невозможно, так как
очень сложно было заставить всех пользователей проверить все свои дискеты.
Впоследствии выяснилось, что вирус Ping Pong, он же вирус
Ball, распространялся через загрузочные секторы дискет и дисков. Оригинальный
загрузочный сектор записывается на свободное место. Соответствующий сектор
помечается как испорченный (Bad cluster). Испорченный кластер несколько
уменьшал доступный размер дисков и дискет, но мы списывали это на их низкое
качество.
Второй вирус, с которым мы столкнулись, также оказался
загрузочным. Антивирусные программы распознавали его как вирус Stoned. Он
получил это название из-за того, что во время загрузки операционной системы на
экране иногда появляется надпись "Your PC is now Stoned!". Мы немного
остановимся на этом вирусе, так как он имеет очень много модификаций.
Насчитывается большое количество вирусов, для которых он послужил прототипом.
Вирус достаточно легко опознается визуально. На дискетах он
записывает себя на место загрузочной записи, а на жестких дисках - на место
главной загрузочной записи. Если вы просмотрите соответствующие секторы в любом
редакторе, например Norton Disk Editor, вы увидите надписи "Your PC is now
Stoned!" и "LEGALISE MARIJUANA!". Как пользоваться программой
Norton Disk Editor, вы узнаете из шестой главы нашей книги.
Когда вирус Stoned появился в первый раз, мы изучали язык
ассемблера и особенности архитектуры персональных компьютеров, совместимых с
IBM PC. Поэтому мы полностью дизассемблировали код вируса и подробно его изучили.
На дискетах исходная загрузочная запись копируется в третий
сектор на первой стороне нулевой дорожки. Для дискет с объемом 360 Кбайт этот
сектор приходится на последний сектор корневого каталога.
При заражении жесткого диска исходная главная загрузочная
запись копируется в другое место. Она размещается в седьмом секторе на нулевой
стороне нулевой дорожки. Этот сектор обычно не используется и остается
свободным.
Некоторые загрузочные вирусы, не использующие методы
маскировки (которые будут описаны ниже) могут быть легко обнаружены просмотром
загрузочного сектора. Как выглядит загрузочная запись дискеты, созданной
средствами операционной системы MS-DOS версии 5.0, в редакторе Disk Editor из пакета Norton
Utilities вы можете посмотреть на рисунке 1.2.
Рис. 1.2. Загрузочная запись
Загрузочная запись на ваших дискетах и жестких дисках может
отличаться от приведенной нами. Это зависит как от версии операционной системы,
используемой при форматировании диска, так и от некоторых других параметров.
Если вирус заразит загрузочную запись, он, естественно,
изменит ее. Во многих случаях такое изменение заметно невооруженным взглядом.
На рисунке 1.3 мы привели внешний вид загрузочного сектора дискеты, зараженной
вирусом Form.
Рис. 1.3. Вирус Form в загрузочной записи
К сожалению, не все загрузочные вирусы можно так легко
распознать. Активные загрузочные вирусы, использующие различные механизмы
маскировки, могут обманывать Disk Editor. Например, такие вирусы могут перехватывать
обращение Disk Editor к первому сектору жестких дисков и дискет, подменяя этот
сектор копией оригинального первого сектора (копия первого сектора создается
вирусом в момент заражения диска). В этом случае изменение загрузочного сектора
не будет заметно.
Перед тем как использовать Disk Editor, загрузите MS-DOS с
чистой системной дискеты. Программа Disk Editor также должна быть записана на
дискете. В этом случае вирус не сможет задействовать свои механизмы маскировки
Источник: http://www.frolov-lib.ru/books/step/v05/ch1.htm |