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

Какой вред наносят вирусы

Различные вирусы выполняют различные деструктивные действия:

  • выводят на экран мешающие текстовые сообщения;
  • создают звуковые эффекты;
  • создают видео эффекты;
  • замедляют работу ЭВМ, постепенно уменьшают объем оперативной памяти;
  • увеличивают износ оборудования;
  • вызывают отказ отдельных устройств, зависание или перезагрузку компьютера и крах работы всей ЭВМ;
  • имитируют повторяющиеся ошибки работы операционной системы;
  • уничтожают FAT-таблицу, форматируют жесткий диск, стирают BIOS, стирают или изменяют установки в CMOS, стирают секторы на диске, уничтожают или искажают данные, стирают антивирусные программы;
  • осуществляют научный, технический, промышленный и финансовый шпионаж;
  • выводят из строя системы защиты информации, дают злоумышленникам тайный доступ к вычислительной машине;
  • делают незаконные отчисления с каждой финансовой операции и т.д.;

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

Что показывает на вирусное заражение

Основные симптомы вирусного заражения ЭВМ следующие:

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

Какие бывают вирусы

Рассмотрим основные виды вирусов. Существует большое число различных классификаций вирусов:

Как защитить компьютер от вирусов

Рассмотрим основные меры по защите ЭВМ от заражения вирусами:

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

Анатомия вируса

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

Основными частями кода вируса являются infector и payload. Infector – это код, который ищет подходящие для заражения файлы и внедряет в них вирус, стараясь максимально скрыть факт внедрения и при этом не повредить функционалу файла. Payload – это код, который выполняет собственно необходимые вирмейкеру действия, например, рассылает спам, DoS-ит кого-нибудь, или просто оставляет на машине текстовой файлик «Здесь был Виря». Нам совершенно непринципиально, что там внутри payload, главное, что вирмейкер всячески старается скрыть его содержимое.

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

jmp message

the_back:
mov eax, 0x4
mov ebx, 0x1
pop ecx ; со стека будет взят адрес «Hello, World»
mov edx, 0xF
int 0x80. message:
call the_back ; после исполнения на стеке будет лежать адрес «возврата», т. адрес «Hello, World
»
db «Hello, World!», 0Dh, 0Ah

push 0x68732f2f ; “hs//”
push 0x6e69622f ; “nib/”
mov ebx, esp ; в ESP теперь адрес строки «/bin/sh»
mov al, 11
int 0x80

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

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

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

Итак, разберемся с внедрением в файл. Современные исполняемые форматы для платформы x86 в Windows и Linux – это PE (Portable Executable) и ELF (Executable and Linkable Format). Вы без проблем найдёте их спецификации в системной документации, и если будете заниматься вопросами защиты исполняемого кода, то точно не пропустите. Исполняемые форматы и системный загрузчик (код операционной системы, который занимается запуском исполняемого файла) являются одним из «слонов», на которых стоит операционная система. Процедура запуска. exe файла является очень сложным алгоритмически процессом с кучей нюансов, и рассказывать об этом можно в десятке статей, которые вы обязательно найдете сами, если тема вас заинтересует. Я ограничусь простым рассмотрением, достаточным для базового понимания процесса запуска. Чтобы в меня не кидались помидорами, далее под компилятором я буду иметь в виду весь комплекс программ, превращающий исходный код в готовый исполняемый файл, то есть, фактически, компилятор + линкер.

Исполняемый файл (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) для работающего с методами защиты исполняемого кода – это настольные книжки.

Так как адреса внутри всех этих секций связаны, просто шлепнуть кусок кода в середину секции, «перевязав» его JMP-ами не получится, исходный файл сломается. Поэтому популярными местами для внедрения кода вируса являются:

  • основная кодовая секция (перезапись вирусом начала исполняемого кода начиная прямо с Entry Point).
  • padding между окончанием заголовка и первой секцией. Там ничего нет и вполне можно уместить там небольшой вирус (либо его загрузчик) не сломав файл.
  • новая секция, которую можно дописать в заголовок и разместить в файле после всех остальных. В этом случае никакие внутренние смещения не поломаются, и с местом проблем тоже нет. Правда последняя секция в файле, в которой разрешено исполнение, конечно же, обратит на себя внимание эвристика.
  • padding между окончанием содержимого секции и ее выровненным концом. Это намного сложнее, так как сначала надо этот самый «конец» найти, и не факт, что нам повезет и места будет достаточно. Но для некоторых компиляторов это место можно обнаружить просто по характерным байтам
Читать также:  ПРОБЛЕМЫ И ВОЗМОЖНЫЕ РЕШЕНИЯ ДЛЯ ПОВЫШЕНИЯ ЭФФЕКТИВНОСТИ УПРАВЛЕНИЯ РАСХОДАМИ РЕГИОНАЛЬНОГО БЮДЖЕТА, РЕАЛИЗАЦИИ ФЕДЕРАЛЬНЫХ ПРОГРАММ И

Есть способы и похитрее, некоторые я опишу во второй статье.

Теперь о передаче управления. Чтобы вирус отработал, его код должен каким-то способом получить управление. Самый очевидный способ: сначала управление получает вирус, а потом, после того, как он отработает – программа-хост. Это самый простой способ, но также имеют право на жизнь и варианты, когда вирус получает управление, например, после завершения работы хоста, или в середине исполнения, «замещая» исполнение какой-нибудь функции. Приведем несколько техник передачи управления (термин Entry Point или EP, используемый далее, – это точка входа, то есть адрес, на который системный загрузчик передаст управление после того, как подготовит исполняемый файл к запуску):

  • JMP на тело вируса замещает первые байты, находящиеся в Entry Point файла. Затёртые байты вирус сохраняет в своём теле, и, по окончании собственной работы, восстанавливает их и передает управление на начало восстановленного буфера.
  • Способ, похожий на предыдущий, но вместо байтов вирус сохраняет несколько полных машинных инструкций в Entry Point, тогда он может, ничего не восстанавливая (проследив только за корректной очисткой стека), выполнить их после окончания собственной работы и передать управление на адрес инструкции, следующей за «сворованными».
  • Как и в случае с внедрением, есть способы и похитрее, но мы их тоже рассмотрим ниже, или отложим до следующей статьи.

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

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

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

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

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

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

Анатомия детектора

Вдруг, откуда ни возьмись, появляется рыцарь на белом компе, в левой руке у него отладчик, а в правой – дизассемблер, программист антивирусной компании. Откуда он там взялся? Вы, конечно, догадались. С большой долей вероятности, он появился там из «смежной области». Антивирусная область в плане программирования весьма уважаема теми, кто в теме, ибо возиться этим ребятам приходится с весьма изощренными алгоритмами, причем в довольно стеснённых условиях. Сами посудите: у вас на входе сотня тысяч экземпляров всякой заразы и исполняемый файл, работать вы должны практически в реальном времени, а цена ошибки весьма высока.

Для антивируса, как и для любого конечного автомата, принимающего бинарное решение «да/нет» (инфицирован/здоров), существует два типа ошибок – false positive и false negative (ошибочно признал файл заразным, ошибочно пропустил зараженный). Понятно, что общее число ошибок надо снижать в любом раскладе, но false negative для антивируса куда более неприятна, чем false positive. «После скачивания торрента, перед установкой игры отключите антивирус» — знакомо? Это и есть «false positive» – crack. exe, записывающий что-то в исполняемый. exe файл для достаточно умного эвристического анализатора (см. ниже), выглядит как вирус. Как говорится: «лучше перебдеть, чем недобдеть».

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

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

XX XX XX XX XX XX ; начало вируса длиной N байт. 68 2F 2F 73 68 push 0x68732f2f ; “hs//”
68 2F 62 69 6E push 0x6e69622f ; “nib/”
8B DC mov ebx, esp ; в ESP теперь адрес строки «/bin/sh»
B0 11 mov al, 11
CD 80 int 0x80
XX XX XX XX ; конец вируса длиной M байт.

Сразу хочется просто взять пачку опкодов (68 2F 2F 73 68 68 2F 62 69 6E 8B DC B0 11 CD 80) и поискать эту байтовую строку в файле. Если нашли – попался, гад. Но, увы, оказывается эта же пачка байт встречается и в других файлах (ну мало ли кто вызывает командный интерпретатор), да еще и таких строк для поиска «стотыщ», если искать каждую, то никакая оптимизация не поможет. Единственный, быстрый и правильный способ проверить наличие такой строки в файле – это проверить ее существование по ФИКСИРОВАННОМУ смещению. Откуда его взять?

Вспоминаем «смежную область» — особенно места про то, куда вирус себя кладет и как передает себе управление:

  • вирус внедряется в padding между заголовком и началом первой секции. В этом случае можно проверить существование этой байт-строки по смещению
    «длина заголовка» + N (где N – число байт от начала вируса до байт-строки)
  • вирус лежит в новой, отдельной секции. В этом случаем можно проверить существование байт-строки от начала всех секций с кодом
  • вирус внедрился в padding между концом кода и концом кодовой секции. Можно использовать отрицательное смещение от конца секции, типа «конец кодовой секции» — М (где M — число байт от конца байт-строки до конца кода вируса) – «длина байт-строки»

Теперь оттуда же про передачу управления:

  • вирус записал свои инструкции прямо поверх инструкций в Entry Point. В этом случае ищем байт строку просто по смещению «Entry Point» + N(где N – число байт от начала вируса до байт-строки)
  • вирус записал в Entry Point JMP на свое тело. В этом случае надо сначала вычислить куда смотрит этот JMP, а потом искать байт-строку по смещению «адрес перехода JMP» + N(где N – число байт от начала вируса до байт-строки)

Что-то я устал писать «байт-строка», она переменной длины, хранить ее в базе неудобно, и совершенно необязательно, поэтому вместо байт-строки мы будем использовать её длину плюс CRC32 от неё. Такая запись очень короткая и сравнение работает быстро, так как CRC32 алгоритм не из медленных. Гнаться за устойчивостью к коллизиям контрольных сумм смысла нет, так как вероятность коллизии по фиксированным смещениям мизерная. Кроме того, даже в случае коллизии ошибка будет типа «false positive», что не так уж и страшно. Обобщаем все вышеописанное, вот примерная структура записи в нашей антивирусной базе:

  • ID вируса
  • флаги, указывающие откуда считать смещение (от EP, от конца заголовка, от конца первой секции, от начала всех секций, от адреса перехода инструкции JMP в EP и т.п.)
  • смещение (offset)
  • длина сигнатуры (Lsig)
  • CRC32 сигнатуры (CRCsig)
Читать также:  War Thunder Technical Problems

Оптимизируем вход (оставляем только сигнатуры, которые «влазят» в данный файл, сразу из заголовка подготавливаем набор необходимых смещений) и далее:

Сбор и каталогизация этой «гадости» является задачей весьма нетривиальной, но совершенно необходимой для качественного тестирования детектора. Сбор эталонной базы исполняемых файлов задача непростая: попробуйте найти все экземпляры зараженных файлов (для сложных случаев в нескольких экземплярах), каталогизировать их, перемешать с «чистыми» файлами и регулярно гонять по ним детектор с целью выявления ошибок детектирования. Такая база собирается годами, и является очень ценным активом антивирусных компаний. Возможно, я ошибаюсь, и её реально достать (всякие сервисы online-проверок на вирусы вполне в состоянии предоставить некоторый её аналог), но, когда я занимался этим вопросом, ничего похожего достать было нельзя (по крайней мере, под Linux).

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

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

  • некорректный (испорченный вирусом, но работоспособный) заголовок файла
  • JMP прямо в точке входа
  • «rwx» на секции кода

Ну, и так далее. Помимо указания факта заражения, эвристик может помочь принять решение – запускать ли более «тяжелый» анализ файла? Каждый признак имеет разный вес, от «подозрительный какой-то» до «не знаю чем, но файл заражен точно». Именно эти признаки дают большинство ошибок «false positive». Не забудем также о том, что именно эвристик может предоставить антивирусной компании экземпляры потенциальных вирусов. Сработал эвристик, но ничего конкретного не было найдено? Значит файл точно является кандидатом на отправку в антивирусную компанию.

Межвидовое взаимодействие и эволюция

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

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

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

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

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

Параллельно с развитием вирусных движков и противостоящих им детекторов активно развивались коммерческие защиты исполняемых файлов. Появилось огромное количество небольших коммерческих программ, и разработчикам нужны были движки, позволяющие взять EXE-файл и «завернуть» его в некоторый «конверт», который умеет защищенным образом генерировать валидный серийный номер. А кто у нас умеет скрывать исполняемый код, и внедрять его в исполняемые файлы без потери работоспособности? Правильно, те самые разработчики из «смежной области». Поэтому написание хорошего полиморфного вируса и навесной защиты исполняемого файла – это очень похожие задачи, с использованием одних и тех же алгоритмов и инструментов. Так же схожи и процесс анализа вирусов и создания сигнатур и взлом коммерческого ПО. В обоих случаях надо добраться до истинного кода и либо создать сигнатуру, либо достать из него алгоритм генерации серийного номера.

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

1 Вирусы как вредоносные компьютерные программы

Опасность злоумышленных несанкционированных действий интернет экстремизма над информацией приняла особенно угрожающий характер с развитием компьютерных сетей. Большинство систем обработки информации создавалось как обособленные объекты: рабочие станции, ЛВС, большие универсальные компьютеры и т. Каждая система использует свою рабочую платформу (Windows, Linux), а также разные сетевые протоколы (TCP/IP, ). Сложная организация сетей создает благоприятные предпосылки для совершения различного рода интернет экстремизма, связанных с несанкционированным доступом к конфиденциальной информации.

Большинство операционных систем, как автономных, так и сетевых, не содержат надежных механизмов защиты информации.

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

Компьютерным вирусом называется способная к самовоспроизводству и размножению программа.

В 1983 г. Ученый Фред Коэн 3 ноября 1983 г. в диссертационной работе, ввел термин «компьютерный вируc». Коэн, в целях эксперимента, написал свой первый вирус, с целью демонстрации его работоспособности. Запустив вирус на компьютере, он убедился, что его творение размножается невероятно. В 1986 году появился первый вирус со зловредным кодом – он назывался Brain (в переводе Мозг). Он считался очень опасный. Заражал вирус только дискеты.

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

В настоящее время к наиболее известным вирусам относятся.

Jerusalem, создан в 1988 году. Вирус Jerusalem форматировал жесткие диски компьютеров в пятницу, 13-ого числа. Вирус создан в Израиле 13 мая. При попытке запуска зараженного файла, он его попросту удалял, а в пятницу, 13-ого числа многие компании испытывали настоящий шок, увидев последствия работы вируса. Что бы обезопасить себя от подобного вируса, я рекомендую вам регулярно делать «бекап» (Резервное копирование).

«Червь Морриса», создан в 1988 год. Этому вирусу в ноябре удалось парализовать весь интернет. Убытки составили 96 млн. долларов. Страшно представить, что бы было, если бы вирусу удалось парализовать интернет в наше время.

«Win95. CIH», создан в 1998 год. Этот вирус оказался очень опасным и вывел из строя около 500 тыс. компьютеров. Вирус разработал тайванский студент. Вирус проникал в компьютер через почту, сменные носители. Вирус проявлял себя только 26 апреля (дата аварии на ЧАЭС). В этот день он не просто форматировал жесткий диск, но и удалял содержимое BIOS, после такого вреда компьютер не включался. Заражено оказалось 300 тыс. компьютеров. Уничтожали вирус несколько лет. Для восстановления BIOS требуется специальное устройство программатор, так что в данном случаи разумнее обратится в специализированную компанию, для восстановления работы компьютера.

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

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

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

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

2 Классификация компьютерных вирусов

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

Читать также:  Программы восстановить ошибки

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

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

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

Рис. Классификация компьютерных вирусов

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

А

A. 1
A. 2
A. 3
A. 4
A. 5

1
2
3
4
1
2
1
2
3
1
2
3
4
5
6
1
2
3
4
5
6

Net-Worm. Win32. Kido. ih
+


+

+


+



+





+
+

Virus. Win32. Sality. aa
+




+






+


+


+
+

Virus. Win32. Virut. ce


+

+


+

+
+
+
+
+
+



+
+
+

Б
В

Б. 1
Б. 2
B. 1
B. 2
B. 3

1
2
1
2
3
4
5
1
2
3
4
5
1
2
3
1
2
3
4
5
6

Net-Worm. Win32. Kido. ih
+

+

+


+
+
+
+
+


+
+
+
+
+
+
+

Virus. Win32. Sality. aa

+

+
+

+
+


+



+
+
+
+
+
+
+

Virus. Win32. Virut. ce

+
+
+
+


+






+
+
+
+
+
+
+

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

На рис. 2 представлен нормированный ущерб мировой экономике от вирусов за период с 2003г. по 2015 г.

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

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

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

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

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

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

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

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

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

3 Рейтинги компьютерных вирусов

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

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

В глобальном рейтинге отмечен рост активности почти всех угроз. Спад испытали только троянская программа Win32/Bundpil и вредоносные элементы веб-страниц HTML/ScrInject. В апреле в десятку вошла новая вредоносная программа Win32/TrojanDownloader. Wauchos. Злоумышленники используют ее для загрузки других вредоносных программ на компьютер (downloader), получая плату за установку от других киберпреступников.

В рейтинге угроз по России наблюдался рост активности, исключение составляют только вредоносные программы Win32/Dorkbot и Win32/Hoax. Arch-SMS, а также вредоносные элементы веб-страниц HTML/ScrInject и JS/IFra-me. Win32/Hoax. ArchSMS – семейство вредоносного ПО, представляющее собой платные SMS-архивы. Они могут содержать бесплатные программы или другое ПО, за установку которого злоумышленники вымогают деньги у пользователей. В рейтинге присутствует также вредоносная программа MSIL/CoinMiner, которая используется злоумышленниками для майнинга биткоинов на зараженном компьютере.

Таблица 3 — Глобальный рейтинг

Угроза
Уровень распространенности
Динамика

Win32/Bundpil
2,79 %

Win32/Sality
1,68 %
+

INF/Autorun
1,61 %
+

Win32/Qhost
1,55 %
+

HTML/ScrInject
1,4 %

Win32/Conficker
1,34 %
+

Win32/Ramnit
1,28 %
+

Win32/Dorkbot
1,08 %
+

Win32/TrojanDownloader. Wauchos
0,96 %
+

Win32/TrojanDownloader. Waski
0,94 %
+

Таблица 4 — Рейтинг угроз по России

Угроза
Уровень распространенности
Динамика

Win32/Qhost
13,2 %
+

HTML/ScrInject
2,93 %

Win32/Spy. Ursnif
1,32 %
+

Win32/Dorkbot
1,23 %

INF/Autorun
1,1 %
+

Win32/Hoax. ArchSMS
0,9 %

HTML/IFrame
0,77 %
+

Win32/Conficker
0,67 %
+

JS/IFrame
0,61 %

MSIL/CoinMiner
0,53 %
+

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

1 Сущность антивирусных программ

Антивирусная программа (антивирус) – это специализированная программа для защиты компьютера, а именно для обнаружения опасных деструктивных программ и предотвращения заражения, так называемым, вирусным атакам и эпидемиям. Первый шаг на путь к появлению антивирусных программ совершил американский программист Энди Хопкинс в восьмидесятых годах прошлого столетия. Речь идет об утилитах CHK4BOMB и BOMBSQAD, которые позволяли сканировать загрузочный модуль, противостоять некоторым типам вирусов, а также перехватывать небольшое количество операций через BIOS.

На протяжении длительного времени этих программ было вполне достаточно для полноценного обеспечения безопасности информации, потому что вредоносных программ было очень мало. Однако ассортимент вредоносных приложений с каждым годом возрастал все больше и больше, что, в конечном счете, привело к осознанию пользователей о необходимости в постоянной антивирусной защите. Так к началу 1985 года американским программистом Ги Вонгом, сотрудником компании GEE WIZ Sofware Company, была разработана антивирусная программа DPROTECT, отслеживающая работу запущенных программ, а также способная обезопасить от их нежелательных воздействий.

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

А первым разработчиком антивирусных приложений на российском рынке стал в 1988 году Д. Лозинский, разработавший программу Aidstest, которая использовала метод сигнатурного (сканирование файлов и сравнение их с образцами вирусов) поиска угроз. Его разработки и по сей день оказывают большой вклад в компании «Доктор Веб» для борьбы с вирусами.

С появлением многозадачной и разветвленной системой Windows и распространения интернета, требования к разработчикам стали существенно выше. программе необходимо было производить проверку файлов очень быстро, что привело к резкому сокращению числа производителей, а также к существенному росту прибыли. Сегодня борьба с вредоносными программами также продолжается (более 60 компаний трудится над разработкой). И на данный момент самыми популярными из них остаются: Антивирус Касперского, Eset NOD32, Symantec Norton Anti — Virus, Dr. Web и Avast.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *