Анатомия детектора
Вдруг, откуда ни возьмись, появляется рыцарь на белом компе, в левой руке у него отладчик, а в правой – дизассемблер, программист антивирусной компании. Откуда он там взялся? Вы, конечно, догадались. С большой долей вероятности, он появился там из «смежной области».
Антивирусная область в плане программирования весьма уважаема теми, кто в теме, ибо возиться этим ребятам приходится с весьма изощренными алгоритмами, причем в довольно стеснённых условиях. Сами посудите: у вас на входе сотня тысяч экземпляров всякой заразы и исполняемый файл, работать вы должны практически в реальном времени, а цена ошибки весьма высока.
Для антивируса, как и для любого конечного автомата, принимающего бинарное решение «да/нет» (инфицирован/здоров), существует два типа ошибок – 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) и поискать эту байтовую строку в файле. Если нашли – попался, гад. Но, увы, оказывается эта же пачка байт встречается и в других файлах (ну мало ли кто вызывает командный интерпретатор), да еще и таких строк для поиска «стотыщ», если искать каждую, то никакая оптимизация не поможет.
Вспоминаем «смежную область» — особенно места про то, куда вирус себя кладет и как передает себе управление:
Теперь оттуда же про передачу управления:
Что-то я устал писать «байт-строка», она переменной длины, хранить ее в базе неудобно, и совершенно необязательно, поэтому вместо байт-строки мы будем использовать её длину плюс CRC32 от неё. Такая запись очень короткая и сравнение работает быстро, так как CRC32 алгоритм не из медленных.
Гнаться за устойчивостью к коллизиям контрольных сумм смысла нет, так как вероятность коллизии по фиксированным смещениям мизерная. Кроме того, даже в случае коллизии ошибка будет типа «false positive», что не так уж и страшно. Обобщаем все вышеописанное, вот примерная структура записи в нашей антивирусной базе:
- ID вируса
- флаги, указывающие откуда считать смещение (от EP, от конца заголовка, от конца первой секции, от начала всех секций, от адреса перехода инструкции JMP в EP и т.п.)
- смещение (offset)
- длина сигнатуры (Lsig)
- CRC32 сигнатуры (CRCsig)
Оптимизируем вход (оставляем только сигнатуры, которые «влазят» в данный файл, сразу из заголовка подготавливаем набор необходимых смещений) и далее:
{ # для всех подходящих записей
- на основании флагов вычисляем базовое смещение в файле (начало кодовой секции, entry point и т.п.)
- прибавляем к нему offset
- читаем Lsig байт
- считаем от них CRC32
- если совпало – мы поймали вирус
}
Ура, вот наш первый антивирус. Он достаточно крут, так как при помощи достаточно полной базы сигнатур, нормально подобранных флагов и хорошей оптимизации этот детектор способен очень быстро ловить 95% всяких зараз (подавляющее большинство современного malware это просто исполняемые файлы, без всякой способности к мутации). Далее начинается игра «кто быстрее обновит базы сигнатур» и «кому раньше пришлют новый экземпляр какой-нибудь гадости».
Сбор и каталогизация этой «гадости» является задачей весьма нетривиальной, но совершенно необходимой для качественного тестирования детектора. Сбор эталонной базы исполняемых файлов задача непростая: попробуйте найти все экземпляры зараженных файлов (для сложных случаев в нескольких экземплярах), каталогизировать их, перемешать с «чистыми» файлами и регулярно гонять по ним детектор с целью выявления ошибок детектирования.
Такая база собирается годами, и является очень ценным активом антивирусных компаний. Возможно, я ошибаюсь, и её реально достать (всякие сервисы online-проверок на вирусы вполне в состоянии предоставить некоторый её аналог), но, когда я занимался этим вопросом, ничего похожего достать было нельзя (по крайней мере, под Linux).
Классификация вирусов
На сегодняшний день существует сотни тысяч вирусов.
Классификация вирусов осуществляется по следующим признакам:
- средой обитания;
- способом заражения;
- действием;
- особенностями алгоритма.
В зависимости от среды обитания вирусы можно разделить на сетевые, файловые, загрузочные и файлово — загрузочные. Сетевые вирусы распространяются по различным компьютерным сетям. Файловые вирусы проникают главным образом в исполняемые модули, есть в файлы, имеющие расширения EXE и т.д.
Файловые вирусы могут проникать и в другие типы файлов, но, как правило, записанные в таких файлах, они никогда не получают управление и, следовательно, теряют способность к размножению. Загрузочные вирусы проникают в загрузочный сектор диска (Boot-сектор) или в сектор, содержащий программу загрузки системного диска (Master Boot Record). Файлово — загрузочные вирусы заражают как файлы, так и загрузочные сектора дисков.
По способу заражения вирусы делятся на резидентные и нерезидентных. Резидентный вирус при заражении (инфицировании) компьютера оставляет в оперативной памяти свою резидентную часть, которая затем перехватывает обращения операционной системы к объектам заражения (файлам, загрузочным секторам дисков и т. п.) и проникает в них.
По степени воздействия вирусы можно разделить на следующие виды:
- безопасные, такие, которые не мешают работе компьютера, но уменьшающие объем свободной оперативной памяти и памяти на дисках; действия таких вирусов проявляются в каких-либо графических или звуковых эффектах;
- опасные вирусы, которые могут привести к различным нарушениям в работе компьютера;
- очень опасные, действие которых может привести к потере программ, уничтожению данных, стиранию информации в системных областях диска.
По особенностям алгоритма вирусы трудно классифицировать из-за большого разнообразия. Простые вирусы — паразитические, они изменяют содержимое файлов и секторов диска и могут быть достаточно легко обнаружены и уничтожены. Можно отметить вирусы — репликаторы, называемые червями , которые распространяются по компьютерным сетям, находят адреса сетевых компьютеров и записывают по этим адресам свои копии.
Известны вирусы-невидимки , называемые стелс — вирусами , которые очень трудно обнаружить и обезвредить, так как они перехватывают обращения операционной системы к зараженным файлам и секторам дисков и подставляют вместо своего тела незараженные участки диска.
Самое трудное, это выявить вирусы-мутанты , содержащие алгоритмы шифровки-расшифровки, благодаря которым копии одного и того же вируса не имеют ни одной цепочки байтов, которые повторяется. Есть и так называемые квазивирусные или «троянские»программы, которые хотя и не способны к самораспространению, но очень опасны, так как, маскируясь под полезную программу, разрушают загрузочный сектор и файловую систему дисков.
Компьютерный вирус
Понятие и классификация Компьютерный вирус — это специально написанная, небольшая по размерам программа (т.е. некоторая совокупность выполняемого кода), которая может приписывать себя к другим программам (заражать их), создавать свои копии и внедрять их в файлы, системные области компьютера и т.д., а также выполнять различные нежелательные действия на компьютере.
Программа, внутри которой находится вирус, называется зараженной. Когда такая программа начинает работу, то сначала управление получает вирус. Вирус находит и заражает другие программы, а также выполняет какие-нибудь вредные действия (например, портит файлы или таблицу размещения файлов на диске, засоряет оперативную память и т.д.).
Например, вирус Anti-MIT ежегодно 1 декабря разрушает всю информацию на жестком диске, вирус Tea Time мешает вводить информацию с клавиатуры с 15:10 до 15:13. В 1989 году американский студент сумел создать вирус, который вывел из строя около 6 000 компьютеров Министерства обороны США.
Эпидемия известного вируса Dir-II разразилась в 1991 году. Вирус использовал действительно оригинальную, принципиально новую технологию и на первых порах сумел широко распространиться за счет несовершенства традиционных антивирусных средств. Кристоферу Пайну удалось создать вирусы Pathogen и Queeq, а также вирус Smeg.
Именно последний был самым опасным, его можно было накладывать на первые два вируса, и из-за этого после каждого прогона программы они меняли конфигурацию. Поэтому их было невозможно уничтожить. Чтобы распространить вирусы, Пайн скопировал компьютерные игры и программы, заразил их, а затем отправил обратно в сеть.
Пользователи загружали в свои компьютеры, зараженные программы и инфицировали диски. Ситуация усугубилась тем, что Пайн умудрился занести вирусы и в программу, которая с ними борется. Запустив ее, пользователи вместо уничтожения вирусов получали еще один. В результате этого были уничтожены файлы множества фирм, убытки составили миллионы фунтов стерлингов.
Широкую известность получил американский программист Моррис. Он известен как создатель вируса, который в ноябре 1988 года заразил порядка 7 тысяч персональных компьютеров, подключенных к Internet.
Первые исследования саморазмножающихся искусственных конструкций проводились в середине нынешнего столетия. Термин «компьютерный вирус» появился позднее (в 1984 году на седьмой конференции по безопасности информации) — официально его автором считается сотрудник Лехайского университета (США) Ф. Коэн. Эксперты считают, что число существующих вирусов перевалило за 20 тысяч.
Один из «вирусологов» страны Евгений Касперский предлагает условно классифицировать вирусы по следующим признакам:
по среде обитания вируса;
по способу заражения среды обитания;
по деструктивным возможностям;
по особенностям алгоритма вируса.
Более подробную классификацию вирусов внутри этих групп можно представить примерно так (табл. 28):
Основными путями проникновения вирусов в компьютер являются съемные внешние устройства, а также компьютерные сети. Заражение жесткого диска вирусами может произойти при загрузке программы с внешнего устройства, содержащего вирус.
Как работает вирус
Что происходит при включении компьютера? Первым делом управление передается программе начальной загрузки (ПНЗ), которая хранится в постоянно запоминающем устройстве (ПЗУ), т.е. ПНЗ ПЗУ.
Эта программа тестирует оборудование.
Среди секторов есть несколько служебных, используемых операционной системой для собственных нужд. Из служебных секторов нас интересует один — сектор начальной загрузки (boot-sector).
В секторе начальной загрузки хранится информация о внешнем устройстве — количестве поверхностей, дорожек, секторов и пр. Таким образом, нормальная схема начальной загрузки следующая:
ПНЗ (ПЗУ) — ПНЗ (диск) — СИСТЕМА.
Теперь рассмотрим вирус. В загрузочных вирусах выделяют две части — голову и хвост. Хвост, вообще говоря, может быть пустым.
Пусть имеются чистая дискета и зараженный компьютер с активным резидентным вирусом. Как только этот вирус обнаружит, что в дисководе появилась подходящая жертва — не защищенная от записи и еще не зараженная дискета, он приступает к заражению. Заражая дискету, вирус производит следующие действия:
выделяет некоторую область диска и помечает ее как недоступную операционной системе. Это можно сделать по-разному, в простейшем и традиционном случае занятые вирусом секторы помечаются как сбойные (bad);
копирует в выделенную область диска свой хвост и оригинальный (здоровый) загрузочный сектор;
замещает программу начальной загрузки в загрузочном секторе (настоящем) своей головой;
организует цепочку передачи управления согласно схеме.
Таким образом, голова вируса теперь первой получает управление, вирус устанавливается в память и передает управление оригинальному загрузочному сектору. В цепочке
ПНЗ (ПЗУ) — ПНЗ (диск) — СИСТЕМА
появляется новое звено:
ПНЗ (ПЗУ) — ВИРУС — ПНЗ (диск) — СИСТЕМА.
Мы рассмотрели схему функционирования простого бутового вируса, живущего в загрузочных секторах дискет. Как правило, вирусы способны заражать не только загрузочные секторы дискет, но и загрузочные секторы винчестеров. При этом в отличие от дискет на винчестере имеются два типа загрузочных секторов, содержащих программы начальной загрузки, которые получают управление.
При загрузке компьютера с винчестера первой берет на себя управление программа начальной загрузки в MBR (Master Boot Record — главная загрузочная запись). Если ваш жесткий диск разбит на несколько разделов, то лишь один из них помечен как загрузочный (boot).
Программа начальной загрузки в MBR находит загрузочный раздел винчестера и передает управление на программу начальной загрузки этого раздела. Код последней совпадает с кодом программы начальной загрузки, содержащейся на обычных дискетах, а соответствующие загрузочные секторы отличаются только таб?????? ??????????. ????? ???????, ?? ?????????? ??????? ??? ??????? ????? ??????????? ??????? лицами параметров.
Признаки проявления вируса
При заражении компьютера вирусом важно его обнаружить. Для этого следует знать основные признаки проявления вирусов. К ним можно отнести следующие:
прекращение работы или неправильная работа ранее успешно функционировавших программ;
медленная работа компьютера;
невозможность загрузки операционной системы;
исчезновение файлов и каталогов или искажение их содержимого;
изменение даты и времени модификации файлов;
изменение размеров файлов;
неожиданное значительное увеличение количества файлов на диске;
существенное уменьшение размера свободной оперативной памяти;
вывод на экран непредусмотренных сообщений или изображений;
подача непредусмотренных звуковых сигналов;
частые зависания и сбои в работе компьютера.
Следует отметить, что перечисленные выше признаки необязательно вызываются присутствием вируса, а могут быть следствием других причин. Антивирусные программы
Для обнаружения, удаления и защиты от компьютерных вирусов разработаны специальные программы, которые позволяют обнаруживать и уничтожать вирусы. Такие программы называются антивирусными. Современные антивирусные программы представляют собой многофункциональные продукты, сочетающие в себе как превентивные, профилактические средства, так и средства лечения вирусов и восстановления данных.
Требования к антивирусным программам
Количество и разнообразие вирусов велико, и чтобы их быстро и эффективно обнаружить, антивирусная программа должна отвечать некоторым параметрам. Стабильность и надежность работы. Этот параметр является определяющим — даже самый лучший антивирус окажется бесполезным, если он не сможет нормально функционировать на компьютере, если в результате какого-либо сбоя в работе программы процесс проверки компьютера не пройдет до конца. Тогда всегда есть вероятность того, что какие-то зараженные файлы остались незамеченными.
Размеры вирусной базы программы (количество вирусов, которые правильно определяются программой). С учетом постоянного появления новых вирусов база данных должна регулярно обновляться. Сюда следует отнести возможность программы определять разнообразные типы вирусов и умение работать с файлами различных типов (архивы, документы).
Скорость работы программы, наличие дополнительных возможностей типа алгоритмов определения даже неизвестных программе вирусов (эвристическое сканирование). Сюда следует отнести возможность восстанавливать зараженные файлы, не стирая их с жесткого диска, а только удалив из них вирусы.
Многоплатформенность (наличие версий программы под различные операционные системы). Если антивирус используется только на одном компьютере, то этот параметр не имеет большого значения. Но антивирус для организации обязан поддерживать все распространенные операционные системы.
Характеристика антивирусных программ
Антивирусные программы делятся на: программы-детекторы, программы-докторы, программы-ревизоры, программы-фильтры, программы-вакцины. Программы-детекторы. Позволяют обнаруживать файлы, зараженные одним из нескольких известных вирусов. Эти программы проверяют, имеется ли в файлах на указанном пользователем диске специфическая для данного вируса комбинация байтов.
При ее обнаружении на экран выводится соответствующее сообщение. Многие детекторы имеют режимы лечения или уничтожения зараженных файлов. Программы-детекторы могут обнаруживать только те вирусы, которые ей известны. Программа Scan фирмы McAfee Associates и Aidstest Д. Н.
Лозинского позволяют обнаруживать около 9 000 вирусов. Некоторые программы-детекторы, например Norton AntiVirus или AVSP фирмы «Диалог-МГУ», можно настраивать на новые типы вирусов, им необходимо лишь указать комбинации байтов, присущие этим вирусам.
Если программа не опознается детекторами как зараженная, не следует, что она здорова — в ней может быть новый вирус или модифицированная версия старого вируса, неизвестные программам-детекторам.
Большинство программ-детекторов имеют функцию доктора, т.е. они пытаются вернуть зараженные файлы или области диска в их исходное состояние. Те файлы, которые не удалось восстановить, как правило, делаются неработоспособными или удаляются.
Большинство программ-докторов умеют лечить только от некоторого фиксированного набора вирусов, поэтому они быстро устаревают. Но некоторые программы могут обучаться не только способам обнаружения, но и способам лечения новых вирусов.
Различают детекторы универсальные и специализированные. Универсальные детекторы в своей работе используют проверку неизменности файлов путем подсчета и сравнения с эталоном контрольной суммы. Недостаток универсальных детекторов связан с невозможностью определения причин искажения файлов.
Детектор, позволяющий обнаруживать несколько вирусов, называют полидетектором.
Программы-докторы (фаги), не только находят зараженные вирусами файлы, но и лечат их, т.е. удаляют из файла тело программы вируса, возвращая файлы в исходное состояние. В начале своей работы фаги ищут вирусы в оперативной памяти, уничтожая их, и только затем переходят к лечению файлов.
Среди фагов выделяют полифаги, т.е. программы-докторы, предназначенные для поиска и уничтожения большого количества вирусов. Программы-ревизоры имеют две стадии работы. Сначала они запоминают сведения о состоянии программ и системных областей дисков (загрузочного сектора и сектора с таблицей разбиения жесткого диска).
Предполагается, что в этот момент программы и системные области дисков не заражены. После этого с помощью программы-ревизора можно в любой момент сравнить состояние программ и системных областей дисков с исходным. О выявленных несоответствиях сообщается пользователю.
Чтобы проверка состояния программ и дисков проходила при каждой загрузке операционной системы, необходимо включить команду запуска программы-ревизора в командный файл AUTOEXEC.BAT. Это позволяет обнаружить заражение компьютерным вирусом, когда он еще не успел нанести большого вреда. Более того, та же программа-ревизор сможет найти поврежденные вирусом файлы.
Многие программы-ревизоры являются интеллектуальными — они могут отличать изменения в файлах, вызванные, например, переходом к новой версии программы, от изменений, вносимых вирусом, и не поднимают ложной тревоги. Дело в том, что вирусы обычно изменяют файлы весьма специфическим образом и производят одинаковые изменения в разных программных файлах.
Для проверки того, не изменился ли файл, некоторые программы-ревизоры проверяют длину файла. Но эта проверка недостаточ- на — некоторые вирусы не изменяют длину зараженных файлов. Более надежная проверка — прочесть весь файл и вычислить его контрольную сумму. Изменить файл так, чтобы его контрольная сумма осталась прежней, практически невозможно.
Появились полезные гибриды ревизоров и докторов, т.е. ДОКТОРЫ-РЕВИЗОРЫ — программы, которые не только обнаруживают изменения в файлах и системных областях дисков, но и могут в случае изменений автоматически вернуть их в исходное состояние. Такие программы могут быть гораздо более универсальными, чем программы-докторы, поскольку при лечении они используют заранее сохраненную информацию о состоянии файлов и областей дисков.
Это позволяет им излечивать файлы даже от тех вирусов, которые не были созданы на момент написания программы. Но они могут лечить не от всех вирусов, а только от тех, которые используют стандартные, известные на момент написания программы, механизмы заражения файлов.
Программы-ревизоры имеют достаточно развитые алгоритмы, обнаруживают стелс-вирусы и могут отличить изменения версии проверяемой программы от изменений, внесенных вирусом. Программы-фильтры (сторожа) представляют собой небольшие резидентные программы, предназначенные для обнаружения подозрительных действий при работе компьютера, характерных для вирусов. Такими действиями могут являться:
попытки коррекции файлов с расширениями СОМ и ЕХЕ;
изменение атрибутов файлов;
прямая запись на диск по абсолютному адресу;
запись в загрузочные сектора диска;
загрузка резидентной программы.
При попытке какой-либо программы произвести указанные действия сторож посылает пользователю сообщение и предлагает запретить или разрешить соответствующее действие. Программы-фильтры весьма полезны, так как способны обнаружить вирус на самой ранней стадии его существования до размножения.
Однако они не лечат файлы и диски. Для уничтожения вирусов требуется применить другие программы, например фаги. К недостаткам программ-сторожей можно отнести их назойливость (например, они постоянно выдают предупреждение о любой попытке копирования исполняемого файла), а также возможные конфликты с другим программным обеспечением.
Вакцины (иммунизаторы) — это резидентные программы, предотвращающие заражение файлов. Вакцины применяют, если отсутствуют программы-докторы, лечащие этот вирус. Вакцинация возможна только от известных вирусов. Вакцина модифицирует программу или диск таким образом, чтобы это не отражалось на их работе, а вирус будет воспринимать их зараженными и поэтому не внедрится.
Краткий обзор антивирусных программ
При выборе антивирусной программы необходимо учитывать не только процент обнаружения вирусов, но и способность обнаруживать новые вирусы, количество вирусов в антивирусной базе, частоту ее обновления, наличие дополнительных функций.
В настоящее время серьезный антивирус должен уметь распознавать не менее 25 000 вирусов. Существует множество антивирусных программ. Рассмотрим наиболее известные из них. Norton AntiVirus 4.0 и 5.0 (производитель «Symantec»).
Один из наиболее известных и популярных антивирусов. Процент распознавания вирусов очень высокий (близок к 100 %). В программе используется механизм, который позволяет распознавать новые неизвестные вирусы.
В интерфейсе программы Norton AntiVirus имеется функция LiveUpdate, позволяющая щелчком на одной-единственной кнопке обновлять через Web как программу, так и набор сигнатур вирусов. Мастер по борьбе с вирусами выдает подробную информацию об обнаруженном вирусе, а также предоставляет вам возможность выбора: удалять вирус либо в автоматическом режиме, либо более осмотрительно, посредством пошаговой процедуры, которая позволяет увидеть каждое из выполняемых в процессе удаления действий. Антивирусные базы обновляются часто. Имеется резидентный монитор.
Недостатком данной программы является сложность настройки (хотя базовые настройки изменять, практически не требуется). Dr Solomons AntiVirus (производитель «Dr Solomons Software»).
Считается одним из лучших антивирусов. Обнаруживает практически 100 % известных и новых вирусов. Большое количество функций, сканер, монитор, эвристика. McAfee VirusScan (производитель «McAfee Associates»).
Один из наиболее известных антивирусных пакетов. Хорошо удаляет вирусы, но у VirusScan хуже, чем у других пакетов, обстоят дела с обнаружением новых разновидностей файловых вирусов. Он легко и быстро устанавливается с использованием настроек по умолчанию, но его можно настроить и по собственному усмотрению.
Относится к классу детекторов-докторов и имеет эвристический анализатор — алгоритм, позволяющий обнаруживать неизвестные вирусы. «Лечебная паутина», как переводится с английского название программы, стала ответом отечественных программистов на нашествие самомодифицирующихся вирусов-мутантов.
Последние при размножении модифицируют свое тело так, что не остается ни одной характерной цепочки байт, присутствовавшей в исходной версии вируса. Dr.Web можно назвать антивирусом нового поколения. Хорошо распознает вирусы, но в его базе их гораздо меньше чем у других антивирусных программ. Antiviral Toolkit Pro (производитель «Лаборатория Касперского»).
Антивирус признан в мире как один из самых надежных. Несмотря на простоту в использовании он обладает всем необходимым арсеналом для борьбы с вирусами. Эвристический механизм, избыточное сканирование, сканирование архивов и упакованных файлов — это далеко не полный перечень его возможностей.
Межвидовое взаимодействие и эволюция
Как мы увидели, для быстрого и точного сравнения детектору необходимы сами байты сигнатуры и ее смещение. Или, другим языком, содержимое кода и адрес его расположения в файле-хосте. Поэтому понятно, как развивались идеи сокрытия исполняемого кода вирусов – по двум направлениям:
Сокрытие кода вируса в результате вылилось в появление полиморфных движков. То есть движков, позволяющих вирусу изменять свой код в каждом новом поколении. В каждом новом зараженном файле тело вируса мутирует, стараясь затруднить обнаружение. Таким образом, затрудняется создание содержимого сигнатуры.
Сокрытие точки входа (Entry Point Obscuring) в результате послужило толчком для появления в вирусных движках автоматических дизассемблеров для определения, как минимум, инструкций перехода. Вирус старается скрыть место, с которого происходит переход на его код, используя из файла то, что в итоге приводит к переходу: JMP, CALL, RET всякие, таблицы адресов и т.п. Таким образом, вирус затрудняет указание смещения сигнатуры.
Гораздо более подробно некоторые алгоритмы таких движков и детектора мы посмотрим во второй статье, которую я планирую написать в ближайшее время.
Параллельно с развитием вирусных движков и противостоящих им детекторов активно развивались коммерческие защиты исполняемых файлов. Появилось огромное количество небольших коммерческих программ, и разработчикам нужны были движки, позволяющие взять EXE-файл и «завернуть» его в некоторый «конверт», который умеет защищенным образом генерировать валидный серийный номер.
А кто у нас умеет скрывать исполняемый код, и внедрять его в исполняемые файлы без потери работоспособности? Правильно, те самые разработчики из «смежной области». Поэтому написание хорошего полиморфного вируса и навесной защиты исполняемого файла – это очень похожие задачи, с использованием одних и тех же алгоритмов и инструментов.
В интернетах существуют несколько страниц по теме «классификация компьютерных вирусов». Но мы же договорились, вирус – это то, что умеет само себя воспроизводить в системе, и чему необходим файл-носитель. Поэтому всякие трояны-руткиты-malware – это не вирусы, а тип payload-кода, который вирус может таскать на себе.
Рассмотренный в статье детектор легко детектирует неполиморфные (мономорфными их назвать, что ли) вирусы. Ну а переход к полиморфным вирусам является отличным поводом, наконец, завершить эту статью, пообещав вернуться к более интересным методам сокрытия исполняемого кода во второй части.
Способы защиты от вирусов
Одним из основных последствий деятельности вирусов является потеря или порча информации. Поэтому для обеспечения устойчивой и надежной работы необходимо (или, по крайней мере желательно) всегда иметь чистые, не зараженные (эталонные) копии используемой информации и программного обеспечения.
К общим средствам относятся:
- резервное копирование информации (создание копий файлов и системных областей дисков);
- разграничение доступа к информации (предотвращение несанкционированного использования информации).
К программным средствам относятся различные антивирусные программы, которые являются наиболее эффективными в борьбе с компьютерными вирусами. Однако не существует антивирусов, гарантирующих стопроцентную защиту от вирусов, поскольку на любой алгоритм антивируса всегда можно предложить контр-алгоритм вируса, невидимого для этого антивируса.
Использование специальных антивирусных средств в большинстве случаев позволяет не только выявить вирусное вторжение, но и оперативно обезвредить обнаруженные вирусы и восстановить испорченную информацию.
Антивирусные программы — это утилиты, позволяющие выявить вирусы, вылечить, или ликвидировать зараженные файлы и диски, обнаруживать и предотвращать подозрительные (характерные для вирусов действия).
Существует очень много классификаций антивирусных программ. Рассмотрим одну из них.
Классификация антивирусных программ
Тип антивирусной программы | Принцип действия |
Детекторы | Обнаруживают файлы, зараженные одним из известных вирусов |
Врачи (фаги) | «Лечат» зараженные программы или диски, Извлекают из зараженных программ код вируса, то есть восстанавливают программу в том состоянии в котором она была до заражения вирусом |
Ревизоры | Сначала запоминают сведения о состоянии программ и системных областей дисков, а затем а затем сравнивают их состояние с исходным. При обнаружении несоответствия сообщают о нем. |
Фильтры | Загружаются резидентно в оперативной памяти, перехватывают те обращения к системе, которые используются вирусами для размножения и нанесения вреда, и сообщают о них. Можно разрешить или запретить выполнение данной операции. |
Среди популярных и эффективных антивирусных программных систем можно выделить:
Более надежную защиту дают те антивирусные программы, версии которых постоянно обновляются.