Валентин Холмогоров - Pro Вирусы
Одним из методов безопасного исследования поведения приложения является его запуск в так называемой песочнице (sandbox) — защищенном изолированном виртуальном контейнере, из которого приложение не может получить доступ к компонентам ОС и файловой системе. Если поведение программы вызывает у антивируса подозрения — например, она пытается встроиться в процессы запущенных приложений (выполнить инжект), модифицировать загрузочную запись, изменить структуру исполняемого файла и т. д., она может быть признана потенциально опасной или вредоносной.
Одним из вариантов поведенческого анализа является, в частности, технология Origin TracingTM, активно применяемая компанией «Доктор Веб» в некоторых программных решениях, например в Антивирусе Dr.Web для Android. В рамках данной технологии для каждого образца вредоносной программы создается специальная запись, описывающая поведение троянца в инфицированной системе. Если приложение, запустившись на устройстве, действует в соответствии с этим шаблоном, оно признается вредоносным. Такой подход позволяет, во-первых, заметно сократить объем вирусных баз (поскольку одной записью в этом случае детектируется целое семейство вредоносных программ), а во-вторых, успешно определять еще неизвестные аналитикам угрозы: если поведение приложения укладывается в эталонную модель, оно будет обезврежено вне зависимости от того, попадал раньше этот образец в вирусную лабораторию на анализ или нет. Нужно отметить, что в мобильной операционной системе Android, где у вредоносных программ (в отличие от Windows) не так много свободы действий, этот метод работает весьма эффективно. Все угрозы с префиксом «origin», детектируемые на смартфонах и планшетах Антивирусом Dr.Web для Android, обезвреживаются при помощи технологии Origin TracingTM.
Эвристический анализ
Эвристический анализ — разновидность вероятностного анализа вредоносных программ, основанная на логических алгоритмах, позволяющих выявить и обезвредить потенциально опасное приложение. Эвристический анализ приходит пользователям на помощь в тех случаях, когда угрозу не удается обнаружить с помощью сигнатурного детектирования.
Упрощая, основной принцип эвристического анализа можно описать следующим образом. Каждой функции, которую может реализовывать программа в операционной системе, назначается некий условный «рейтинг опасности». Какие-то действия приложения могут считаться менее опасными, другие — более. Если по совокупности выполняемых приложением действий оно превышает некий условный «порог безо-пасности», то признается потенциально вредоносным.
Например, если какая-то программа работает в фоновом режиме, не имеет графического интерфейса, последовательно опрашивает удаленные серверы, а потом пытается скачать с них и запустить в системе некое приложение, оно с высокой долей вероятности может оказаться троянцем-загрузчиком. Или утилитой обновления браузера Google Chrome, которая действует аналогичным образом. В этом, очевидно, и кроется основная «ахиллесова пята» эвристического метода анализа вирусных угроз — большая вероятность ложного срабатывания.
Другой метод эвристического анализа — эмуляция исполнения программы. Антивирус загружает подозрительное приложение в собственную буферную память, выполняет разбор кода на инструкции и выполняет их по очереди, последовательно проверяя результат.
Эвристический анализ применяется с целью выявления и обезвреживания угроз, еще неизвестных антивирусу, — то есть тех, сигнатуры которых на текущий момент отсутствуют в вирусных базах. Отсюда логически вытекает еще один недостаток эвристических алгоритмов: даже если неизвестную ранее угрозу удается обнаружить, ее далеко не всегда получается сразу «вылечить». Во многих случаях пользователю приходится ожидать появления очередного обновления вирусных баз, содержащее алгоритмы лечения конкретно для этой вредоносной программы.
Проактивная защита (HIPS)
Проактивную антивирусную защиту, HIPS (Host-based Intrusion Prevention System, англ. «система предотвращения вторжений»), также можно отнести к разновидности антивирусной защиты на основе поведенческого анализа. Антивирус следит за запущенными приложениями и информируют пользователя о тех или иных действиях приложения. Решение о том, позволить или запретить программе выполнять какое-либо действие, принимает пользователь. Это — классический вариант реализации HIPS. Существует еще так называемый экспертный вариант, при котором антивирус самостоятельно блокирует действия тех или иных приложений на основе набора заложенных в него правил и разрешений. Пользователь может при необходимости добавить какую-либо программу в список исключений, разрешив ей выполнение тех или иных действий в защищаемой системе.
Методики противодействия антивирусам
К сожалению, борьба вирусописателей и производителей антивирусных программ носит перманентный характер: первые непрерывно изобретают все новые способы обхода антивирусной защиты, вторые стараются совершенствовать алгоритмы поиска и обнаружения вредоносного ПО. Давайте перечислим основные методики, которыми пользуются злоумышленники для противодействия антивирусным приложениям.
Переупаковка
Это самый распространенный и популярный метод, активно применяемый вирусописателями для обхода сигнатурного детекта. Как я уже упоминал, сигнатура является своего рода аналогом «отпечатков пальцев» каждого конкретного файла, при этом она уникальна для файлового объекта. Соответственно, если в файл будут внесены даже незначительные изменения, антивирус не сможет «опознать» его с помощью сигнатуры, и такой файл не будет детектироваться антивирусом до тех пор, пока не попадет в исследовательскую лабораторию антивирусной компании.
Наиболее простой способ изменить структуру файла, не меняя его функциональных возможностей, — «накрыть» его программным упаковщиком. Программные упаковщики сжимают содержимое файла приложения и дописывают к нему код, необходимый для распаковки и выполнения программы. Некоторые из них к тому же включают различные функции шифрования, затрудняющие анализ и исследование подобного приложения. Этим и пользуются злоумышленники.
При каждой повторной упаковке файла его сигнатура меняется и он становится «невидимым» для системы сигнатурного детектирования антивируса. Некоторые вирусописатели для затруднения исследования вируса или троянца упаковывают и шифруют свои творения в «несколько слоев» — тогда под одним упаковщиком прячется другой сжатый и зашифрованный объект, под ним — еще один, и вся конструкция напоминает в итоге этакую логическую «матрешку», добраться до «сердцевины» которой бывает порой весьма непросто.
Иногда киберпреступники применяют и иной метод: на сервере, с которого жертвам раздается вредоносное ПО, устанавливается специальный сценарий. При активизации этого сценария (например, при переходе пользователя по ссылке) скрипт извлекает из соответствующей директории сервера бинарный файл вируса или троянца, упаковывает его «на лету» и только после этого «отдает» его пользователю. Таким образом каждая жертва получает свой собственный, уникальный, экземпляр вредоносной программы, гарантированно не детектируемой по сигнатуре.
Обфускация
Обфускация (от англ. obfuscate — «запутывать», «сбивать с толку») — сознательное запутывание, усложнение кода вредоносной программы с сохранением ее функциональности в целях затруднения ее исследования и анализа. Для обфускации вирусописатели иногда добавляют в приложение различный «мусорный» код, ненужные инструкции, множественные переходы или вызовы различных функций и т. д. Существуют специальные утилиты — обфускаторы, созданные для запутывания кода приложений.
Обфускация приложений затрудняет реверс-инжиниринг, то есть декомпиляцию вредоносной программы и изучение ее функциональных возможностей на уровне кода, однако одновременно с этим усложняет вирусописателям отладку приложения, а в некоторых случаях увеличивает его размер и снижает быстродействие.
Антиотладка
Большинство современных вредоносных программ оснащено различными мощными механизмами антиотладки, препятствующими их исследованию. Ряд вирусов и троянцев в момент начала работы проверяют, не пытаются ли их запустить в изолированной среде («песочнице»), под отладчиком или в виртуальной машине. Осуществляется это разными методами, например попытками получить имена работающих процессов (и их сравнением с заданным списком), поиском характерных строк в заголовках открытых окон и т. д. Если вредоносное приложение определяет попытку запуска в виртуальной среде или под отладчиком, оно завершает свою работу.