Реферат: Разработка антивирусного монитора
C++ файл основной формы (Unit1.cpp) 18
C++ файл формы парольного окна (Unit2.cpp) 24
C++ файл формы окна изменения пароля (Unit3.cpp) 24
C++ файл параллельной нити (Unit6.cpp) 25
C++ файл тестирующего приложения (Вирус.cpp) 27
С++ файл инсталляционного файла Creator.cpp 27
Список глобальных переменных 29
Описание основных функций 30
1. Анализ существующих вариантов решения задачи и выбор наиболее приемлемого
1.1. Антивирусные мониторы
Антивирусные мониторы — это резидентные программы, перехватывающие вирусоопасные ситуации и сообщающие об этом пользователю. К вирусоопасным относятся вызовы на открытие для записи в выполняемые файлы, запись в загрузочные секторы дисков или MBR винчестера, попытки программ остаться резидентно и т. д., то есть вызовы, которые характерны для вирусов в моменты их размножения.
К достоинствам мониторов относится их способность обнаруживать и блокировать вирус на самой ранней стадии его размножения, что, кстати, бывает очень полезно в случаях, когда давно известный вирус постоянно "выползает неизвестно откуда". К недостаткам относятся существование путей обхода защиты монитора и большое количество ложных срабатываний, что, видимо, и послужило причиной для практически полного отказа пользователей от подобного рода антивирусных программ. [1]
Необходимо также отметить такое направление антивирусных средств, как антивирусные мониторы, выполненные в виде аппаратных компонентов компьютера. Наиболее распространенной является встроенная в BIOS защита от записи в MBR винчестера. Однако, как и в случае с программными мониторами, такую защиту легко обойти прямой записью в порты контроллера диска, а запуск DOS-утилиты FDISK немедленно вызывает ложное срабатывание защиты.
Существует несколько более универсальных аппаратных мониторов, но к перечисленным выше недостаткам добавляются также проблемы совместимости со стандартными конфигурациями компьютеров и сложности при их установке и настройке. Все это делает мониторы крайне непопулярными на фоне остальных типов антивирусной защиты. [1]
1.2. Обнаружение загрузочного вируса
В загрузочных секторах дисков расположены, как правило, небольшие программы, назначение которых состоит в определении размеров и границ логических дисков (для MBR винчестера) или загрузке ОС (для загрузочного сектора).
Вначале следует проверить содержимое сектора, подозрительного на наличие вируса. Для этой цели удобно использовать DISKEDIT из "Нортоновских утилит" или AVPUTIL из профессионального комплекта AVP.
Некоторые загрузочные вирусы практически сразу можно обнаружить по наличию различных текстовых строк (например, вирус Stoned содержит строки: "Your PC is now Stoned!", "LEGALISE MARIJUANA!"). Некоторые вирусы, поражающие загрузочные сектора дисков, наоборот, определяются по отсутствию строк, которые обязательно должны быть в загрузочном секторе. К таким строкам относятся имена системных файлов (например, строка IOSYSMSDOS SYS) и строки сообщений об ошибках. Отсутствие или изменение строки-заголовка загрузочного сектора (строка, содержащая номер версии DOS или название фирмы — производителя ПО, например MSDOS5.0 или MSWIN4.0) также может служить сигналом о заражении вирусом, если на компьютере не установлена Windows 95/NT, так как эти системы по неизвестной мне причине записывают в заголовок загрузочных секторов дискет случайные строки текста.
Стандартный загрузчик MS-DOS, расположенный в MBR, занимает меньше половины сектора, и многие вирусы, поражающие MBR винчестера, довольно просто заметить по увеличению длины кода, расположенного в секторе MBR.
Однако существуют вирусы, которые внедряются в загрузчик без изменения его текстовых строк и с минимальными изменениями кода загрузчика. Для того чтобы обнаружить такой вирус, в большинстве случаев достаточно отформатировать дискету на заведомо незараженном компьютере, сохранить в виде файла ее загрузочный сектор, затем некоторое время использовать ее на зараженном компьютере (записать/прочитать несколько файлов), а после этого на незараженном компьютере сравнить ее загрузочный сектор с оригинальным. Если в коде загрузочного сектора произошли изменения — вирус пойман.
Существуют также вирусы, использующие более сложные приемы заражения, например, изменяющие при инфицировании MBR всего 3 байта Disk Partition Table, соответствующие адресу активного загрузочного сектора. Для идентификации такого вируса придется провести более детальное исследование кодов загрузочного сектора вплоть до полного анализа алгоритма работы его кода.
Приведенные рассуждения основываются на том, что стандартные загрузчики (программы, записываемые операционной системой в загрузочные сектора) реализуют стандартные алгоритмы загрузки ОС и оформляются в соответствии с ее стандартами. Если же диски отформатированы утилитами, не входящими в состав DOS (Disk Manager), то для обнаружения в них вируса следует проанализировать алгоритм работы и оформление загрузчиков, создаваемых такой утилитой. [2]
1.3. Обнаружение файлового вируса
Все вирусы делятся на резидентные и нерезидентные.
Резидентные вирусы отличаются гораздо большим коварством и изощренностью, чем нерезидентные. Поэтому для начала нужно рассмотреть простейший случай — поражение компьютера неизвестным нерезидентным вирусом. Такой вирус активизируется при запуске какой-либо зараженной программы, совершает все, что ему положено, передает управление программе-носителю и в дальнейшем (в отличие от резидентных вирусов) не мешает ее работе. Для обнаружения такого вируса необходимо сравнить длины файлов на винчестере и в дистрибутивных копиях. Если это не поможет, то следует побайтно сравнить дистрибутивные копии с используемыми программами.
Можно также просмотреть дамп выполняемых файлов. В некоторых случаях можно сразу обнаружить присутствие вируса по наличию в его коде текстовых строк. Многие вирусы, например, содержат строки: ".СОМ", "*.СОМ", ".ЕХЕ", "*.ЕХЕ", "*.*", "MZ", "COMMAND" и т. д. Эти строки часто встречаются в начале или в конце зараженных файлов.
Существует и еще один способ визуального определения зараженного вирусом файла. Он основан на том, что выполняемые файлы, исходный текст которых написан на языке высокого уровня, имеют вполне определенную структуру. В случае Borland или Microsoft C/C++ сегмент кода программы находится в начале файла, а сразу за ним — сегмент данных, причем в начале этого сегмента стоит строка-копирайт фирмы — изготовителя компилятора. Если в дампе такого файла за сегментом данных следует еще один участок кода, то вполне вероятно, что файл заражен вирусом.
То же справедливо и для большинства вирусов, заражающих файлы Windows. В выполняемых файлах этой ОС стандартным является размещение сегментов в следующем порядке: сегмент(ы) кода, за ним сегменты данных. Если за сегментом данных идет еще один сегмент кода, это также может служить сигналом о присутствии вируса.
Рекомендуется запустить одну из резидентных антивирусных программ-мониторов и следить за ее сообщениями о подозрительных действиях программ (запись в СОМ- или ЕХЕ-файлы, запись на диск по абсолютному адресу и т. п.). Существуют мониторы, которые не только перехватывают такие действия, но и сообщают адрес, откуда поступил подозрительный вызов (к таким мониторам относится AVPTSR.COM). Обнаружив подобное сообщение, следует выяснить, от какой программы оно пришло, и проанализировать ее коды при помощи резидентного дизассемблера (например, AVPUTIL.COM). При анализе кодов программ, резидентно находящихся в памяти, большую помощь часто оказывает трассирование прерываний 13h и 21h.
Следует отметить, что резидентные DOS-мониторы часто оказываются бессильны, если работа ведется в DOS-окне под Windows 95/NT, поскольку Windows 95/NT позволяют вирусу работать в обход монитора (как, впрочем, и всех остальных резидентных программ). DOS-мониторы неспособны остановить также распространение Windows-вирусов.
Рассмотренные выше методы обнаружения файловых и загрузочных вирусов подходят для большинства как резидентных, так и нерезидентных вирусов. Однако эти методы не срабатывают, если вирус выполнен по технологии "Стелс", что делает бесполезным использование большинства резидентных мониторов, утилит сравнения файлов и чтения секторов. [2]
Приняв во внимание всё выше сказанное, можно сделать вывод о большой ненадёжности антивирусных мониторов, как средства защиты от компьютерных вирусов.
1.4. Выбор методов построения антивирусного монитора
Передо мной стоит задача разработать антивирусный монитор под операционную систему Windows98. Первое, что приходит в голову при анализе такой задачи, - разработать резидентную программу, перехватывающую обращения к диску и при возникновении вирусоподобной ситуации генерирующую исключение [7], либо просто предупреждение пользователю. Однако, написание резидентной программы под Windows, это далеко не простая задача. Да и ко всему прочему, как оказалось, вовсе не обязательно перехватывать и сканировать все обращения к диску, что может вызывать огромную массу ложных срабатываний.