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

Обновлено: 23.04.2024

Рабочие листы и материалы для учителей и воспитателей

Более 300 дидактических материалов для школьного и домашнего обучения

  • Онлайн
    формат
  • Диплом
    гособразца
  • Помощь в трудоустройстве

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

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

Широкую известность получил американский программист Моррис. Он известен как создатель вируса, который в ноябре 1988 года заразил порядка 7 тысяч персональных компьютеров, подключенных к Internet .

по среде обитания вируса

по способу заражения среды обитания

по деструктивным возможностям

по особенностям алгоритма вируса.

Более подробную классификацию внутри этих групп можно представить примерно так :

распространяются по компьютерной сети

внедряются в выполняемые файлы

внедряются в загрузочный сектор диска ( Boot - сектор)

находятся в памяти, активны до выключения компьютера

не заражают память, являются активными ограниченное время

практически не влияют на работу; уменьшают свободную память на диске в результате своего распространения

уменьшают свободную память, создают звуковые, графические и прочие эффекты

могут привести к серьезным сбоям в работе

могут привести к потере программ или системных данных

вирусы, не изменяющие файлы, создают для ЕХЕ-файлов файлы-спутники с расширением ,СОМ

распространяются по сети, рассылают свои копии, вычисляя сетевые адреса

изменяют содержимое дисковых секторов или файлов

примитив, содержат большое количество ошибок

перехватывают обращения DOS к пораженным файлам или секторам и подставляют вместо себя незараженные участки

не имеют ни одного постоянного участка кода, труднообнаружи- ваемы, основное тело вируса зашифровано

пишутся не в машинных кодах, а на WordBasic , живут в документах Word , переписывают себя в Normal . dot

Основными путями проникновения вирусов в компьютер являются съемные диски (гибкие и лазерные), а также компьютерные сети. Заражение жесткого диска вирусами может произойти при загрузке программы с дискеты, содержащей вирус. Такое заражение может быть и случайным, например, если дискету не вынули из дисковода А и перезагрузили компьютер, при этом дискета может быть и не системной. Заразить дискету гораздо проще. На нее вирус может попасть, даже если дискету просто вставили в дисковод зараженного компьютера и, например, прочитали ее оглавление.

Как работает вирус.

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

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

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

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

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

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

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

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

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

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

выделяет некоторую область диска и помечает ее как недоступную операционной системе, это можно сделать по-разному, в простейшем и традиционном случае занятые вирусом секторы помечаются как сбойные ( bad )

копирует в выделенную область диска свой хвост и оригинальный (здоровый) загрузочный сектор

замещает программу начальной загрузки в загрузочном секторе (настоящем) своей головой

организует цепочку передачи управления согласно схеме.

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

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

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

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

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

Признаки проявления вируса.

При заражении компьютера вирусом важно его обнаружить. Для этого следует знать об основных признаках проявления вирусов. К ним можно отнести следующие :

прекращение работы или неправильная работа ранее успешно функционировавших программ

медленная работа компьютера

невозможность загрузки операционной системы

исчезновение файлов и каталогов или искажение их содержимого

изменение даты и времени модификации файлов

изменение размеров файлов

неожиданное значительное увеличение количества файлов на диске

существенное уменьшение размера свободной оперативной памяти

подача непредусмотренных звуковых сигналов

частые зависания и сбои в работе компьютера

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

Антивирусные программы.

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

Требования к антивирусным программам.

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

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

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

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

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

Характеристика антивирусных программ.

Антивирусные программы делятся на: программы-детекторы, программы-доктора, программы-ревизоры, программы-фильтры, программы-вакцины.

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

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

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

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

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

Учитывая, что постоянно появляются новые вирусы, программы-детекторы и программы-доктора быстро устаревают, и требуется регулярное обновление их версий.

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

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

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

попытки коррекции файлов с расширениями СОМ и ЕХЕ;

изменение атрибутов файлов;

прямая запись на диск по абсолютному адресу;

запись в загрузочные сектора диска.

загрузка резидентной программы.

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

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

Краткий обзор антивирусных программ.

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

В настоящее время серьезный антивирус должен уметь распознавать не менее 25000 вирусов. Это не значит, что все они находятся "на воле". На самом деле большинство из них или уже прекратили свое существование или находятся в лабораториях и не распространяются. Реально можно встретить 200-300 вирусов, а опасность представляют только несколько десятков из них.

Существует множество антивирусных программ. Рассмотрим наиболее известные из них.

Один из наиболее известных и популярных антивирусов. Процент распознавания вирусов очень высокий (близок к 100%). В программе используется механизм, который позволяет распознавать новые неизвестные вирусы.

В интерфейсе программы Norton Anti V irus имеется функция LiveUpdate, позволяющая щелчком на одной-единственной кнопке обновлять через Web как программу, так и набор сигнатур вирусов. Мастер по борьбе с вирусами выдает подробную информацию об обнаруженном вирусе, а также предоставляет вам возможность выбора: удалять вирус либо в автоматическом режиме, либо более осмотрительно, посредством пошаговой процедуры, которая позволяет увидеть каждое из выполняемых в процессе удаления действий.

Антивирусные базы обновляются очень часто (иногда обновления появляются несколько раз в неделю). Имеется резидентный монитор.

Недостатком данной программы является сложность настройки (хотя базовые настройки изменять, практически не требуется).

Считается одним из самых лучших антивирусов (Евгений Касперский как-то сказал, что это единственный конкурент его AVP). Обнаруживает практически 100% известных и новых вирусов. Большое количество функций, сканер, монитор, эвристика и все что необходимо чтобы успешно противостоять вирусам.

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

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

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

Лаборатория Касперского внимательно следит за появлением новых вирусов и своевременно выпускает обновления антивирусных баз. Имеется резидентный монитор для контроля за исполняемыми файлами.

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

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

Каталог решений и проектов ИБ - Антивирусы доступны на TAdviser

Содержание


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

Классификация

В настоящее время не существует единой системы классификации и именования вирусов, однако, в различных источниках можно встретить разные классификации, приведем некоторые из них:

Классификация вирусов по способу заражения

Резидентные

Такие вирусы, получив управление, так или иначе остается в памяти и производят поиск жертв непрерывно, до завершения работы среды, в которой он выполняется. С переходом на Windows проблема остаться в памяти перестала быть актуальной: практически все вирусы, исполняемые в среде Windows, равно как и в среде приложений Microsoft Office, являются резидентными вирусами. Соответственно, атрибут резидентный применим только к файловым DOS вирусам. Существование нерезидентных Windows вирусов возможно, но на практике они являются редким исключением.

Нерезидентные

Получив управление, такой вирус производит разовый поиск жертв, после чего передает управление ассоциированному с ним объекту (зараженному объекту). К такому типу вирусов можно отнести скрипт-вирусы.

Классификация вирусов по степени воздействия

Безвредные

Вирусы никак не влияющие на работу компьютера (кроме уменьшения свободной памяти на диске в результате своего распространения);

Неопасные

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

Опасные

Вирусы, которые могут привести к различным нарушениям в работе компьютера;

Очень опасные

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

Классификация вирусов по способу маскировки

При создании копий для маскировки могут применяться следующие технологии:

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

Шифрованный вирус

Это вирус, использующий простое шифрование со случайным ключом и неизменный шифратор. Такие вирусы легко обнаруживаются по сигнатуре шифратора.

Вирус-шифровальщик

На практике встречаются случаи получения по электронной почте обычного `вордовского` (с расширением .doc) файла, внутри которого, помимо текста, есть изображение, гиперссылка (на неизвестный сайт в Интернете) или встроенный OLE-объект. При нажатии на такой объект происходит незамедлительное заражение.

Вирусы-шифровальщики стали набирать большую популярность начиная с 2013 года. В июне 2013 известная компания McAfee обнародовала данные, показывающие что они собрали 250 000 уникальных примеров вирусов шифровальщиков в первом квартале 2013 года, что более чем вдвое превосходит количество обнаруженных вирусов в первом квартале 2012 года .

В 2016 году данные вирусы вышли на новый уровень, изменив принцип работы. В апреле 2016 г. в сети появилась информация о новом виде вируса-шифровальщика Петя (Petya), который вместо шифрования отдельных файлов, шифрует таблицу MFT файловой системы, что приводит к тому что операционная система не может обнаружить файлы на диске и весь диск по факту оказывается зашифрован.

Полиморфный вирус

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

Классификация вирусов по среде обитания

  • загрузочные;
  • файловые
  • макро-вирусы;
  • скрипт-вирусы.

В эпоху вирусов для DOS часто встречались гибридные файлово-загрузочные вирусы. После массового перехода на операционные системы семейства Windows практически исчезли как сами загрузочные вирусы, так и упомянутые гибриды. Отдельно стоит отметить тот факт, что вирусы, рассчитанные для работы в среде определенной ОС или приложения, оказываются неработоспособными в среде других ОС и приложений. Поэтому как отдельный атрибут вируса выделяется среда, в которой он способен выполняться. Для файловых вирусов это DOS, Windows, Linux, MacOS, OS/2. Для макровирусов — Word, Excel, PowerPoint, Office. Иногда вирусу требуется для корректной работы какая-то определенная версия ОС или приложения, тогда атрибут указывается более узко: Win9x, Excel97.

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

Файловые вирусы при своем размножении тем или иным способом используют файловую систему какой-либо (или каких-либо) ОС. Они:

  • различными способами внедряются в исполняемые файлы (наиболее распространенный тип вирусов);
  • создают файлы-двойники (компаньон-вирусы);
  • создают свои копии в различных каталогах;
  • используют особенности организации файловой системы (link-вирусы).

Число вредоносных программ неуклонно растет и уже в скором будущем может достичь масштабов эпидемии. Распространение вирусов в цифровом мире не имеет границ, и даже при всех имеющихся возможностях нейтрализовать деятельность преступного киберсообщества сегодня уже невозможно. Бороться с хакерами и вирусописателями, которые неустанно совершенствуют свое мастерство, становится все сложнее. Так, злоумышленники научились успешно скрывать цифровые каналы распространения угроз, что значительно затрудняет отслеживание и анализ их онлайн-движения. Меняются и пути распространения, если раньше киберпреступники предпочитали электронную почту для распространения вирусов, то сегодня лидерские позиции занимают атаки в режиме реального времени. Также наблюдается рост вредоносных веб-приложений, которые оказались более чем пригодны для атак злоумышленников. Как заявил Говинд Раммурти, генеральный и управляющий директор компании eScan MicroWorld, сегодня хакеры научились успешно уклоняться от детектирования традиционными антивирусными сигнатурами, которые по ряду причин обречены на неудачу, когда дело доходит до обнаружения веб-угроз. Судя по образцам, исследованным в eScan, веб-угрозы превалируют среди вредоносных программ. 82% выявленных вредоносных программ - файлы с расширением PHP, HTML и EXE, а MP3, CSS и PNG - менее чем 1%.

Это явно говорит о том, что выбор хакеров – это Интернет, а не атаки с использованием уязвимостей программного обеспечения. Угрозы имеют полиморфный характер, это означает, что вредоносные программы могут быть эффективно перекодированы удаленно, что делает их трудно обнаружимыми. Поэтому высокая вероятность заражения связана, в том числе, и с посещениями сайтов. Согласно данным eScan MicroWorld, количество перенаправляющих ссылок и скрытых загрузок (drive-by-download) на взломанных ресурсах увеличилось более чем на 20% за последние два месяца. Социальные сети также серьезно расширяют возможности доставки угроз.

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

MosaicRegressor (вирус)

Загрузочные вирусы записывают себя либо в загрузочный сектор диска (boot-сектор), либо в сектор, содержащий системный загрузчик винчестера (Master Boot Record), либо меняют указатель на активный boot-сектор. Данный тип вирусов был достаточно распространён в 1990-х, но практически исчез с переходом на 32-битные операционные системы и отказом от использования дискет как основного способа обмена информацией. Теоретически возможно появление загрузочных вирусов, заражающих CD-диски и USB-флешек, но на текущий момент такие вирусы не обнаружены.

Макро-вирусы

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

Скрипт-вирусы

Скрипт-вирусы, также как и макро-вирусы, являются подгруппой файловых вирусов. Данные вирусы, написаны на различных скрипт-языках (VBS, JS, BAT, PHP и т.д.). Они либо заражают другие скрипт-программы (командные и служебные файлы MS Windows или Linux), либо являются частями многокомпонентных вирусов. Также, данные вирусы могут заражать файлы других форматов (например, HTML), если в них возможно выполнение скриптов.

Классификация вирусов по способу заражения файлов

Перезаписывающие

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

Паразитические

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

Внедрение вируса в начало файла

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

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

Внедрение вируса в конец файла

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

Внедрение вируса в середину файла

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

Вирусы без точки входа

Вирусы-компаньоны

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

К вирусам данного типа относятся те из них, которые при заражении переименовывают файл в какое-либо другое имя, запоминают его (для последующего запуска файла-хозяина) и записывают свой код на диск под именем заражаемого файла. Например, файл NOTEPAD.EXE переименовывается в NOTEPAD.EXD, а вирус записывается под именем NOTEPAD.EXE. При запуске управление получает код вируса, который затем запускает оригинальный NOTEPAD.

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

Вирусы-ссылки

Файловые черви

Некоторые файловые черви могут записывать свои копии в архивы (ARJ, ZIP, RAR). Другие записывают команду запуска зараженного файла в BAT-файлы.

OBJ-, LIB-вирусы и вирусы в исходных текстах

Вирусы, заражающие библиотеки компиляторов, объектные модули и исходные тексты программ, достаточно экзотичны и практически не распространены. Всего их около десятка. Вирусы, заражающие OBJ- и LIB-файлы, записывают в них свой код в формате объектного модуля или библиотеки. Зараженный файл, таким образом, не является выполняемым и неспособен на дальнейшее распространение вируса в своем текущем состоянии. Носителем же "живого" вируса становится COM- или EXE-файл, получаемый в процессе линковки зараженного OBJ/LIB-файла с другими объектными модулями и библиотеками. Таким образом, вирус распространяется в два этапа: на первом заражаются OBJ/LIB-файлы, на втором этапе (линковка) получается работоспособный вирус.

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

Распространение

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

  • при заражении доступных дисков вирус проник в файлы, расположенные на сетевом ресурсе;
  • вирус скопировал себя на съёмный носитель или заразил файлы на нем;
  • пользователь отослал электронное письмо с зараженным вложением.

Интересные факты

  • 1986 Brian – первый компьютерный вирус; он распространялся за счет записи собственного кода в загрузочный сектор дискет.
  • 1988 червь Морриса заразил примерно 10% компьютеров, подключенных к Интернету (т.е. около 600 компьютеров).
  • 1992 Michelangelo – первый вирус, который привлек внимание СМИ.
  • 1995 Concept – первый макровирус.
  • 1999 Melissa ознаменовал наступление эры массовых рассылок вредоносного ПО, приводящих к глобальным эпидемиям.
  • 26 апреля 1999 года произошла первая глобальная компьютерная катастрофа. Вирусом "Чернобыль" или CIH программисты, разве что, не пугали своих детей. По различным данным, пострадало около полумиллиона компьютеров по всему миру, и никогда еще до этого момента последствия вирусных эпидемий не были столь масштабными и не сопровождались такими серьезными убытками
  • 2003 Slammer – бесфайловый червь, вызвавший широкомасштабную эпидемию по всему миру.
  • 2004 Cabir – первый экспериментальный вирус для Symbian; распространялся через Bluetooth.
  • 2006 Leap – первый вирус для платформы Mac OSX.
  • 2007 Storm Worm [Zhelatin] – впервые использовал для управления зараженными компьютерами распределенные командные серверы.
  • 2008 Koobface – первый вирус, целенаправленно атаковавший пользователей социальной сети Facebook.
  • 2008 Conficker – компьютерный червь, вызвавший одну из крупнейших в истории эпидемий, в результате которой заражению подверглись компьютеры компаний, домашних пользователей и правительственных организаций в более чем 200 странах.
  • 2010 FakePlayer – SMS-троянец для смартфонов на базе Android.
  • 2010 Stuxnet – червь, с помощью которого была осуществлена целевая атака на системы SCADA (Supervisory Control And Data Acquisition – Диспетчерское управление и сбор данных), ознаменовавший начало эры кибервойн.
  • 2011 Duqu – сложная троянская программа, которая собирает информацию промышленных объектах.
  • 2012 Flame – сложная вредоносная программа, которая активно используется в ряде стран в качестве кибероружия. По сложности и функционалу вредоносная программа превосходит все ранее известные виды угроз.

Panda Security: рейтинг вирусов 2010 года


Поговорим о компьютерных вирусах? Нет, не о том, что вчера поймал ваш антивирус. Не о том, что вы скачали под видом инсталлятора очередного Photoshop. Не о rootkit-e, который стоит на вашем сервере, маскируясь под системный процесс. Не о поисковых барах, downloader-ах и другой малвари. Не о коде, который делает плохие вещи от вашего имени и хочет ваши деньги. Нет, всё это коммерция, никакой романтики…

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

Мы будем говорить о вирусах, живущих в исполняемых файлах форматов PE и ELF, то есть о вирусах, тело которых представляет собой исполняемый код для платформы x86. Кроме того, пусть наш вирус не будет уничтожать исходный файл, полностью сохраняя его работоспособность и корректно инфицируя любой подходящий исполняемый файл. Да, ломать гораздо проще, но мы же договорились говорить о правильных вирусах, да? Чтобы материал был актуальным, я не буду тратить время на рассмотрение инфекторов старого формата COM, хотя именно на нем были обкатаны первые продвинутые техники работы с исполняемым кодом.

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


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

  • Куда положить вирус? Необходимо найти достаточно места, чтобы вирус туда поместился, записать его туда, по возможности не разломав файл и так, чтобы в области, в которой вирус окажется, было разрешено исполнение кода.
  • Как передать управление на вирус? Просто положить вирус в файл недостаточно, надо еще совершить переход на его тело, а после завершения его работы вернуть управление программе-жертве. Или в другом порядке, но, в любом случае, мы же договорились не ломать ничего, да?

Исполняемый файл (PE или ELF) состоит из заголовка и набора секций. Секции – это выровненные (см. ниже) буферы с кодом или данными. При запуске файла секции копируются в память и под них выделяется память, причем совсем необязательно того объёма, который они занимали на диске. Заголовок содержит разметку секций, и сообщает загрузчику, как расположены секции в файле, когда он лежит на диске, и каким образом необходимо расположить их в памяти перед тем, как передать управление коду внутри файла. Для нас интересны три ключевых параметра для каждой секции, это psize, vsize, и flags. Psize (physical size) представляет собой размер секции на диске. Vsize (virtual size) – размер секции в памяти после загрузки файла. Flags – атрибуты секции (rwx). Psize и Vsize могут существенно различаться, например, если программист объявил в программе массив в миллион элементов, но собирается заполнять его в процессе исполнения, компилятор не увеличит psize (на диске содержимое массива хранить до запуска не нужно), а вот vsize увеличит на миллион чего-то там (в runtime для массива должно быть выделено достаточно памяти).

Флаги (атрибуты доступа) будут присвоены страницам памяти, в которые секция будет отображена. Например, секция с исполняемым кодом будет иметь атрибуты r_x (read, execute), а секция данных атрибуты rw_ (read,write). Процессор, попытавшись исполнить код на странице без флага исполнения, сгенерирует исключение, то же касается попытки записи на страницу без атрибута w, поэтому, размещая код вируса, вирмейкер должен учитывать атрибуты страниц памяти, в которых будет располагаться код вируса. Стандартные секции неинициализированных данных (например, область стека программы) до недавнего времени имели атрибуты rwx (read, write, execute), что позволяло копировать код прямо в стек и исполнять его там. Сейчас это считается немодным и небезопасным, и в последних операционных системах область стека предназначена только для данных. Разумеется, программа может и сама изменить атрибуты страницы памяти в runtime, но это усложняет реализацию.

Также, в заголовке лежит Entry Point — адрес первой инструкции, с которой начинается исполнение файла.

Необходимо упомянуть и о таком важном для вирмейкеров свойстве исполняемых файлов, как выравнивание. Для того чтобы файл оптимально читался с диска и отображался в память, секции в исполняемых файлах выровнены по границам, кратным степеням двойки, а свободное место, оставшееся от выравнивания (padding) заполнено чем-нибудь на усмотрение компилятора. Например, логично выравнивать секции по размеру страницы памяти – тогда ее удобно целиком копировать в память и назначать атрибуты. Даже вспоминать не буду про все эти выравнивания, везде, где лежит мало-мальски стандартный кусок данных или кода, его выравнивают (любой программист знает, что в километре ровно 1024 метра). Ну а описание стандартов Portable Executable (PE) и Executable Linux Format (ELF) для работающего с методами защиты исполняемого кода – это настольные книжки.

  • поставить указатель точно на начало какой-нибудь инструкции (просто так взять рандомное место в исполняемой секции и начать дизассемблирование с него нельзя, один и тот же байт может быть и опкодом инструкции, и данными)
  • определить длину инструкции (для архитектуры x86 инструкции имеют разные длины)
  • переместить указатель вперед на эту длину. Мы окажемся на начале следующей инструкции.
  • повторять, пока не решим остановиться
  1. Выбираем вкусный исполняемый файл (достаточно толстый, чтобы в него поместилось тело вируса, с нужным распределением секций и т.п.).
  2. Читаем свой код (код тела вируса).
  3. Берем несколько первых инструкций из файла-жертвы.
  4. Дописываем их к коду вируса (сохраняем информацию, необходимую для восстановления работоспособности).
  5. Дописываем к коду вируса переход на инструкцию, продолжающую исполнение кода-жертвы. Таким образом, после исполнения собственного кода вирус корректно исполнит пролог кода-жертвы.
  6. Создаем новую секцию, записываем туда код вируса и правим заголовок.
  7. На место этих первых инструкций кладем переход на код вируса.

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

Итак (рассматриваем классические вирусы), на входе имеем исполняемый файл и один из сотни тысяч потенциальных вирусов в нем. Давайте детектировать. Пусть это кусок исполняемого кода вируса:

  • сокрытие кода самого вируса;
  • сокрытие его точки входа.

Сокрытие точки входа (Entry Point Obscuring) в результате послужило толчком для появления в вирусных движках автоматических дизассемблеров для определения, как минимум, инструкций перехода. Вирус старается скрыть место, с которого происходит переход на его код, используя из файла то, что в итоге приводит к переходу: JMP, CALL, RET всякие, таблицы адресов и т.п. Таким образом, вирус затрудняет указание смещения сигнатуры.

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

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


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

Определение вируса по Коэну

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

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

Но для машины Тьюринга (как доказал в 1936 году ее автор) невозможно предсказать будущее. Для произвольного кода непредсказуем результат его выполнения, т.е. последовательность состояний машинной ленты (памяти) на неограниченное число тактов вперед. Единственный способ выяснить, чем закончится выполнение этого кода — проверить на практике. Иными словами, чтобы выяснить, является ли изучаемый код вирусом, его надо запустить и посмотреть, что будет. С учетом неизвестности результата, в реальной системе это небезопасно. Кроме того, время ожидания выполнения кода может оказаться сколь угодно большим (бесконечным). А без информации о том, к чему приведет запуск кода, нельзя судить о том, является ли он вирусом.

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

Кроме неутешительного вывода о невозможности надежного распознавания вирусов в своей модели, Коэн доказал следующее:
a) к произвольному коду всегда можно подобрать такую машину, которая интерпретирует его как вирус; например, для какой-то машины вирусом будет код из одного байта — 42;
b) некоторые машины любой код интерпретируют как вирус;
c) некоторые машины никакой код не интерпретируют как вирус.

Определение вируса по Адлеману

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

Определение вируса по нарушению кода

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

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

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

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

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

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

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

Какое из определений вируса лучше?

Сравните подходы, используемые в различных моделях и определениях вируса.

Вирус — это:
a) соответствующая определенным критериям функция, отображающая эталонный, незараженный объект на отличающийся от него зараженный объект;
b) любая функция, отображающая эталонный, незараженный объект на отличающийся от него зараженный объект.

Для распознавания вируса в проверяемом объекте нужно:
a) провести полное аналитическое или алгоритмическое изучение свойств и поведения системы, состоящей из проверяемого объекта и машины (среды);
b) определить местоположение проверяемого объекта в машине (среде).

Определение вируса основано на:
a) свойстве рекурсивной репликации;
b) методе сравнения образца с эталоном.

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

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

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

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

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

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

P.S. Конечно, возможны и другие определения, кроме приведенных в статье. Их можно поискать в Сети или создать самостоятельно. Главное, что надо при этом помнить: по нормам формальной логики грамотное определение должно позволять, как минимум, определить искомый объект в ряду других :)

Читайте также: