Holmogorov.ru

Блог
Валентина
Холмогорова

Как работают антивирусы? Методы детектирования вредоносных программ

Статья была впервые опубликована в журнале «Хакер»

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

Как работают современные антивирусные программы и какие методы используют злоумышленники для борьбы с ними? Об этом — сегодняшняя статья.

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

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

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

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

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

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

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

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

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

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

Сигнатурное детектирование

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

Данный метод детектирования малвари основывается на создании так называемых сигнатур — уникальных цифровых идентификаторов файла, представляющих собой специальный набор байтов и получаемых на основе содержимого исследуемого файла. Фактически сигнатура — это своего рода «отпечаток пальцев» файла: с помощью сигнатуры можно однозначно идентифицировать тот или иной файл или приложение. Схожим образом устроены хеши файлов, например SHA-1 или SHA-256, — при этом под хешированием в данном случае понимается преобразование содержимого файла с использованием однонаправленной математической функции (алгоритма криптографического хеширования), в результате которого получается уникальный набор шестнадцатеричных символов. Однонаправленной такая функция называется потому, что получить из файла хеш очень просто, а вот восстановить из хеша исходный файл уже невозможно. Вирусная сигнатура устроена несколько сложнее: помимо хеша, она содержит еще целый ряд уникальных признаков файла.

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

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

Поведенческий анализ

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

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

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

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

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

Например, если программа работает в фоновом режиме, не имеет графического интерфейса, последовательно опрашивает удаленные серверы, а потом пытается скачать с них и запустить в системе какое-то приложение, она с высокой долей вероятности может оказаться троянцем-загрузчиком. Или утилитой обновления браузера Google Chrome. В этом, очевидно, и кроется основная ахиллесова пята эвристического метода анализа вирусных угроз — большая вероятность «фолс-позитива», ложного срабатывания.

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

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

Проактивная защита (HIPS)

Проактивную антивирусную защиту (HIPS — Host-based Intrusion Prevention System, англ. «система предотвращения вторжений») также можно отнести к разновидности антивирусной защиты на основе поведенческого анализа. Антивирус следит за запущенными приложениями и информирует пользователя о тех или иных действиях программы. Решения о том, позволить или запретить программе выполнять какое-либо действие, принимает пользователь. Это классический вариант реализации HIPS. Существует еще так называемый экспертный вариант, при котором антивирус самостоятельно блокирует действия тех или иных приложений на основе набора заложенных в него правил и разрешений. Пользователь может при необходимости добавить какую-либо программу в список исключений, разрешив ей выполнение любых или только выбранных действий в защищаемой системе.

Методики противодействия антивирусам

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

Переупаковка

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

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

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

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

Обфускация

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

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

Антиотладка

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

Аналогично многие вредоносы ищут среди установленных или запущенных программ приложения популярных антивирусов и пытаются завершить их, а если это не получается, выгружаются сами. Бывают и более интересные варианты: так, троян, известный под именем Trojan.VkBase.73, менял параметры загрузки Windows, устанавливал в системе специальную службу, которая при перезагрузке системы в безопасном режиме удаляла установленные на компьютере антивирусы. Затем троян размещал в области уведомлений панели задач значок соответствующего антивирусного приложения, которое было ранее им удалено. В результате пользователь даже не догадывается, что его компьютер больше не имеет антивирусной защиты. После успешного удаления антивируса защиты на экран выводится сообщение на русском или английском языке (в зависимости от версии антивирусного ПО и локали ОС) следующего содержания: «Внимание! Антивирус [название антивируса] работает в режиме усиленной защиты. Это временная мера, необходимая для моментального реагирования на угрозы со стороны вирусных программ. От вас не требуется никаких действий». Данное сообщение демонстрируется для того, чтобы пользователь не забеспокоился, обнаружив, что значок антивирусной программы в области уведомлений панели задач Windows больше не реагирует на щелчки мышью.

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

Послесловие

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

Поделиться: