Антонов. Функциональное сравнение исполняемых файлов
Скачать 76.5 Kb.
|
А. Е. Антонов, асп.; рук. А.С. Федулов д.т.н., профессор (Филиал МЭИ в г. Смоленске) ФУНКЦИОНАЛЬНОЕ СРАВНЕНИЕ ИСПОЛНЯЕМЫХ ФАЙЛОВОдной из проблем анализа вредоносного программного обеспечения (П.О.) является автоматическое сравнение исполняемых файлов. Эта задача особенно актуальна в связи с тенденцией разработчиков вредоносного ПО выпускать множество серий, состоящих из незначительных модификаций одного и того же исполняемого кода. Такие серии значительно усложняют работу классических антивирусных программ, основанных на сигнатурном анализе: фактически необходимо детектировать каждую из модификаций подобной серии. Эффективные алгоритмы обнаружения похожих файлов значительно упростят детектирование. Перспективным методом сравнения исполняемых файлов является сравнение выполняемых функций интерфейса операционной системы (API функций). Обзор существующих методов Существует ряд методов для сравнения исполняемых файлов. В работе [1] предложен метод кластеризации больших коллекций вредоносного П.О. с помощью пространственно чувствительных хэш функций. В качестве описания исполняемых файлов используется набор API функций совместно с их параметрами. В работе [2] предложены следующие меры сравнения исполняемых файлов: сравнение последовательности API функций с помощью редакционного расстояния и сравнения частоты вызовов исполняемых функций. В работе [3] предлагается сравнивать множество n-грамм API функций, поскольку порядок вызова функций может иметь большое значение. В работе [4] проведен экспериментальный анализ методов сравнения исполняемых файлов. Проблемы функционального сравнения вредоносных программСуществует ряд проблем, затрудняющих сравнение вредоносных программ по API функциям: Сложность получение списка API функций и порядка их выполнения в исполняемом файле. Целенаправленное изменение номинала, количества и порядка API функций авторами вредоносного П.О. с целью усложнения анализа и детектирования. Выявление неинформативных API функций, вставляемых компилятором и служащих для инициализации и других действий, не определяющих функционал приложения. Выявление используемых функций Выявление API функций приложения является нетривиальной задачей. Дополнительным условием при анализе вредоносного ПО является невозможность запуска исследуемого приложения вне контролируемой среды, чтобы не позволить активировать вредоносный функционал. Существуют различные способы получить используемые функции, каждый из которых обладает определенными недостатками: Получение списка используемых функций из секции импорта файла. Недостатком данного метода является невозможность выявления функций, импортируемых во время работы программы. В операционной системе «Windows» для этих целей используются функций «LoadLibrary» и «GetProcAddress». В некоторых случаях имена функций в файлах хранятся в виде открытого текста, поэтому возможно получение списка используемых функций из списка строк файла. Этот метод обладает существенным недостатком: во многих вредоносных программах имена функций шифруются с целью усложнения анализа: данный метод для таких случаев неприменим. Получение используемых функций с помощью эмулятора или виртуальной машины. В этом случае исследуемый файл запускается в контролируемой среде. Осуществляя мониторинг, возможно получить не только наименование используемых функций, но и порядок их вызова. Недостатком данного метода является то, что он выделяет только функции используемые при запуске программы: он не способен выявить функции, вызываемые только при определенных условиях. В том числе он плохо подходит для анализа библиотек, экспортирующих вредоносные функции. Также данный метод не сможет обрабатывать файлы, содержащие в себе антиэмуляционные приемы и приемы предотвращающие запуск в виртуальной машине. Для целей анализа вредоносного П.О. наиболее надежным является совмещение всех способов с целью извлечь максимальное количество информации об используемых файлом интерфейсов операционной системы. Сравнение файлов по API функциям Для оценки близости файлов возможно использовать различные способы сравнения: 1) Определение количества API функций, содержащихся в двух файлах по отношению ко всем функциям файла [3]:
|