Что такое вирус компьютера


Загрузочный вирус — Википедия

Материал из Википедии — свободной энциклопедии

Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 28 января 2015; проверки требуют 29 правок. Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 28 января 2015; проверки требуют 29 правок.

Загру́зочный ви́рус — компьютерный вирус, записывающийся в первый сектор гибкого или жёсткого диска и выполняющийся при загрузке компьютера с идущих после главной загрузочной записи (MBR), но до первого загрузочного сектора раздела. Перехватив обращения к дискам, вирус либо продолжает загрузку операционной системы, либо нет (MBR-Locker). Размножается вирус записью в загрузочную область других накопителей компьютера.

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

  • Выделяют некоторую область диска и делают её недоступной для операционной системы.
  • Замещают программу начальной загрузки в загрузочном секторе диска, копируя корректную программу загрузки, а также свой код, в выделенную область диска;
  • Организуют передачу управления так, чтобы вначале выполнялся код вируса и лишь затем — программа начальной загрузки.

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

Загрузочные вирусы были широко распространены в эпоху MS-DOS. Вирус Brain — первый в истории компьютерный вирус, вызвавший широкую эпидемию, относился именно к классу загрузочных. Во второй половине 1990-х годов в связи с повсеместным использованием 32-разрядных версий Windows загрузочные вирусы временно потеряли свою актуальность. Однако в 2007 г. появилась новая разновидность вредоносных программ — руткиты, использующие те же технологии заражения дисков, что и загрузочные вирусы.

  • Касперский Е. Компьютерные вирусы в MS-DOS. — М.: Эдель, 1992. С. 176. ISBN 5-85308-001-6
  • Климентьев К. Е. Компьютерные вирусы и антивирусы: взгляд программиста. — М.: ДМК-Пресс, 2013. С. 656. ISBN 978-5-94074-885-4

ru.wikipedia.org

Что такое компьютерный вирус? | Удаление вирусов

Что такое компьютерный вирус

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

Как компьютерные вирусы проникают на устройство пользователя

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

Как распознать вирус

Соединение с Интернетом существенно замедленно или не работает вообще. Антивирусная защита и/или брандмауэр деактивированы или полностью удалены. Инфицированные компьютеры способны даже совершать действия самостоятельно, без ведома пользователя.

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

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

Как предупредить инфицирование вирусами
  • Избегайте программ из неизвестных источников.
  • Не загружайте приложения из сомнительных сообщений, пришедших по электронной почте или в сети Facebook.
  • Загружайте приложения исключительно из официального магазина приложений Google для Android.
  • Обеспечьте свой смартфон надежной антивирусной защитой с помощью бесплатного приложения Avast Mobile Security.
Защитите свою систему от вирусов

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

www.avast.ru

Вирусы. Вирусы? Вирусы! Часть 1 / Mail.ru Group corporate blog / Habr

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

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

Итак, давным-давно, после того, как DOS пришел к людям, и у каждого программиста появилась своя маленькая вселенная, где адресное пространство было единым, а права на файлы были всегда rwx, появилась мысль о том, может ли программа копировать сама себя. «Конечно, может!», – сказал программист и написал код, который копирует собственный исполняемый файл. Следующая мысль была «а могут ли две программы объединиться в одну?». «Конечно, могут!», – сказал программист и написал первый инфектор. «Только вот зачем?» – подумал он, и это стало началом эпохи компьютерных вирусов. Как оказалось, гадить на компьютере и всячески пытаться избежать обнаружения очень весело, а создание вирусов является очень интересным с точки зрения системного программиста делом. Кроме того, появившиеся на рынке антивирусы предоставляли создателям вирусов серьёзный вызов их профессионализму.

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

Мы будем говорить о вирусах, живущих в исполняемых файлах форматов 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\n» 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, используемый далее, – это точка входа, то есть адрес, на который системный загрузчик передаст управление после того, как подготовит исполняемый файл к запуску):

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

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

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

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

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

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

Для антивируса, как и для любого конечного автомата, принимающего бинарное решение «да/нет» (инфицирован/здоров), существует два типа ошибок – 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», что не так уж и страшно. Обобщаем все вышеописанное, вот примерная структура записи в нашей антивирусной базе:
  1. ID вируса
  2. флаги, указывающие откуда считать смещение (от EP, от конца заголовка, от конца первой секции, от начала всех секций, от адреса перехода инструкции JMP в EP и т.п.)
  3. смещение (offset)
  4. длина сигнатуры (Lsig)
  5. CRC32 сигнатуры (CRCsig)

Оптимизируем вход (оставляем только сигнатуры, которые «влазят» в данный файл, сразу из заголовка подготавливаем набор необходимых смещений) и далее:
{ # для всех подходящих записей - на основании флагов вычисляем базовое смещение в файле (начало кодовой секции, entry point и т.п.) - прибавляем к нему offset - читаем Lsig байт - считаем от них CRC32 - если совпало – мы поймали вирус } 

Ура, вот наш первый антивирус. Он достаточно крут, так как при помощи достаточно полной базы сигнатур, нормально подобранных флагов и хорошей оптимизации этот детектор способен очень быстро ловить 95% всяких зараз (подавляющее большинство современного malware это просто исполняемые файлы, без всякой способности к мутации). Далее начинается игра «кто быстрее обновит базы сигнатур» и «кому раньше пришлют новый экземпляр какой-нибудь гадости».

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

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

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

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

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

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

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

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

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

habr.com

Вирусы (компьютерные) - это... Что такое Вирусы (компьютерные)?

В августе 1998 появилась широко известная утилита BackOrifice (Backdoor.BO), применяемая для скрытого администрирования удалённых компьютеров и сетей. Следом за BackOrifice были написаны несколько других аналогичных программ: NetBus, Phase и прочие.

Также в августе был отмечен первый вирус, заражающий выполняемые модули Java — Java.StangeBrew. Этот вирус не представлял какой-либо опасности для пользователей Интернет, поскольку на удалённом компьютере невозможно использовать необходимые для его размножения функции. Вслед за ним в ноябре 1998 появился и VBScript.Rabbi. Интернет-экспансия скриптовых вирусов продолжилась тремя вирусами, заражающими скрипты VisualBasic (VBS-файлы), которые активно применяются при написании Web-страниц. Как логическое следствие VBScript-вирусов стало появление полноценного HTML-вируса (HTML.Internal).

1999 год прошёл под знаком гибридного вируса Melissa, побившего все существовавшие на тот момент рекорды по скорости распространения. Melissa сочетал в себе возможности макровируса и сетевого червя, используя для размножения адресную книгу Outlook.

Правоохранительные органы США нашли и арестовали автора Melissa. Им оказался 31-летний программист из Нью Джерси, Дэвид Л. Смит. Вскоре после ареста Смит начал плодотворное сотрудничество с ФБР и, учтя это, федеральный суд приговорил его к необычно мягкому наказанию: 20 месяцам тюремного заключения и штрафу в размере 5 000 долл. США.

В апреле был найден и автор вируса CIH (он же «Чернобыль»), которым оказался студент Тайваньского технологического института Чень Инхао (陳盈豪, CIH — его инициалы). Однако, из-за отсутствия жалоб на действия вируса со стороны местных компаний, у полиции не было оснований для его ареста.

Также в 1999 году был отмечен первый macro-вирус для Corel — Gala. в начале лета 1999 грянула эпидемия Интернет-червя ZippedFiles. Этот червь интересен тем, что являлся первым упакованным вирусом, получившим широкое распространение в «диком» виде.

OS/2

В июне 1996 года появился OS2.AEP — первый вирус для OS/2, корректно заражающий EXE-файлы этой операционной системы. До этого в OS/2 встречались только компаньон-вирусы.[18]

Unix-подобные

Вероятно, первые вирусы для семейства ОС Unix были написаны Фредом Коэном в ходе проведения экспериментов. В конце 1980-х появились первые публикации с исходными текстами вирусов на языке sh.[19][20]

Первый вирус для Linux (Bliss) появился в конце сентября 1996 года. Заражённый файл был помещён в ньюс-группу alt.comp.virus и ещё некоторые, в феврале следующего года вышла исправленная версия. В октябре 1996 года в электронном журнале, посвящённом вирусам VLAD, был опубликован исходный текст вируса Staog.[21] В 1995 году была опубликована книга Марка Людвига «The Giant Black Book of Computer Viruses», в которой приведены исходные тексты вирусов Snoopy для FreeBSD.[22] Snoopy и Bliss написаны на языке Си и могут быть перенесены практически в любую UNIX-подобную операционную систему с минимальными изменениями.

Операционная система GNU/Linux, как и Unix-подобные операционные системы, вообще расцениваются как защищённые против компьютерных вирусов. Однако, вирусы могут потенциально повредить незащищённые системы на Linux и воздействовать на них, и даже, возможно, распространяться к другим системам. Число вредоносных програм, включая вирусы, трояны, и прочие вредоносные программы, определённо написанных под Linux, выросло в последние годы и более чем удвоилось в течение 2005 от 422 до 863.[23] Имелись редкие случаи обнаружения вредоносных программ в официальных сетевых репозиториях.[24][25][26]

MenuetOS

Первый вирус для RRLF, известным как Second Part To Hell.[27]

AROS

Первые вирусы для

Вирусы, меняющие результаты поисковых систем

Развитие вирусов охватило также область использования поисковых систем (типа Google).

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

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

Примечания

  1. http://kp.ru/daily/24157/371884/
  2. The Scarred Man(англ.)
  3. Fred Cohen. Computer Viruses — Theory and Experiments(англ.)
  4. Коэн Ф. Компьютерные вирусы — теория и эксперименты(рус.)
  5. Leonard Adleman. An Abstract Theory of Computer Viruses(англ.)
  6. Цитируется по Diomidis Spinellis. Reliable Identification of Bounded-length Viruses is NP-complete IEEE Transactions on Information Theory, 49(1), pp. 280—284, January 2003
  7. 1 2 Fred Cohen. Computational aspects of computer viruses Computers & Security, vol. 8, № 4, pp. 325—344, June 1989
  8. 1 2 Alan M. Turing. On computable numbers, with an application to the Entscheidungs Problem. Proceedings of the London Mathematical Society, vol. 2, № 42, pp. 230—265, 1936, Corrections in 2(43): pp. 544—546
  9. Виталий Камлюк. Ботнеты. Вирусная энциклопедия. Лаборатория Касперского (13 мая 2008). Проверено 13 декабря 2008.
  10. Роман Боровко. Экономический ущерб от вирусов. Рынок информационной безопасности 2003. CNews-Аналитика. Проверено 13 декабря 2008.
  11. Penrose L. S., Penrose R. A Self-reproducing Analogue Nature, 4571, p. 1183, 0028-0836
  12. McIlroy et al. Darwin, a Game of Survival of the Fittest among Programs
  13. Selbstreproduktion bei programmen
  14. Page dedicated to Elk Cloner on Rich’s home site
  15. Сообщение в alt.folklore.computers
  16. THE DIRTY DOZEN (17-10-1985)
  17. Глава 5. Компьютерные вирусы. Освоение ПК. Краткое руководство. PC Magazine/RE (28 января 2008). Проверено 5 октября 2008.
  18. Вирусы для OS/2
  19. Douglas McIlroy. Virology 101
  20. Tom Duff. Viral Attacks On UNIX System Security
  21. Virus Laboratory And Distribution VLAD Magazine
  22. Mark Ludwig. The Giant Black Book of Computer Viruses American Eagle Publications, Inc. 1995. ISBN 0-929408-10-1
  23. Andy Patrizio. Linux Malware On The Rise (апрель 2006). Проверено 8 марта 2008.
  24. http://www.linuxcenter.ru/news/2002/10/09/1237/
  25. http://kunegin.narod.ru/ref7/troya/sposob.htm
  26. http://www.xakep.ru/post/20379/default.asp
  27. http://spth.host.sk/menuetinf.txt

См. также

Ссылки

ushakov.academic.ru

Что такое компьютерный вирус и как удалить вирус с компьютера?

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

Компьютерный вирус - что это?

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

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

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

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

  1. По системам, которые способен поразить вирус – для Windows, Android, Linux и другие.
  2. По объектам, которые поражает вирус: вирусы исходного кода, загрузочные, файловые (имеют отдельную классификацию по принципу действия – перезаписывающие, паразитирующие или вирусы «спутники»), сценарные, макровирусы.
  3. По языку программирования, который использован при разработке вируса – сценарный, ассемблер и другие.
  4. По технологии работы вируса, например, полиморфные вирусы или руткиты.
  5. По своей функциональности – шпионы, бэкдоры, ботнеты.

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

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

Сетевые вирусы

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

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

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

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

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

Макровирусы

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

  • редакторах;
  • текстовых и графических программах;
  • электронных таблицах.

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

Как бороться с вирусами?

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

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

  1. Не открывать незнакомые файлы, присланные по электронной почте.
  2. Не скачивать подозрительные приложения, архивы, программы.
  3. Использовать защитные программы.
  4. Не оставлять пароли и доступы к личным файлам
  5. Не пользоваться чужими флеш-накопителями и картами памяти.

Проверка компьютера на вирусы

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

1. Антивирус Касперского – базовая программа для защиты компьютера от вредоносных атак. Ее преимущества:

  • отсутствие влияния на производительность компьютера;
  • надежная защита и постоянное обновление баз;
  • функциональная система управления защитой.

2. Антивирус Dr.WEB предлагает программы для защиты компьютера от широкого ряда известных вирусов. Помимо стандартного пакета дополнительно могут быть подключены функции родительского контроля и защиты от потери данных.

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

4. Один из бесплатных антивирусов – программа Avast. Его характеристики:

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

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

Как удалить вирус с компьютера?

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

  • чистка регистра;
  • форматирование имеющихся дисков;
  • переустановка системы.

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

Защита от вирусов

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

  • баннеры;
  • реклама;
  • дополнительные окна браузера.

Могут быть скрытыми и проявиться в виде:

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

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

 

womanadvice.ru


Смотрите также



© 2010- GutenBlog.ru Карта сайта, XML.