СИСТЕМА ДЛЯ БЫСТРОГО ОБНАРУЖЕНИЯ ПОХОЖИХ ОБЪЕКТОВ С ИСПОЛЬЗОВАНИЕМ СВЕРТОК

Область техники
Полезная модель относится к системам для обнаружения похожих объектов при сравнении неизвестных объектов с уже известными объектами.
Уровень техники
В настоящее время одной из главных проблем антивирусной индустрии является постоянно растущее количество вредоносных программ, таких как вирусы, троянские программы, черви, руткиты и другие. Для обнаружения все новых видов вредоносных программ антивирусные компании постоянно обновляют свои антивирусные базы данных, где содержаться сигнатуры вредоносных программ, а также совершенствуют другие методы анализа неизвестных программ на наличие вредоносного функционала. Однако, становится все труднее обнаружить вредоносные программы, которые иногда отличаются совсем незначительно, для которых получаются разные сигнатуры. Вместе с тем, постоянно растет и количество анализируемых файлов, что также создает большую вычислительную нагрузку и приводит к тому, что антивирусные базы обновляются с задержкой или в них отсутствуют новые вредоносные программы.
Таким образом, перед антивирусными компаниями стоит важная задача - определить, что новый неизвестный файл содержит вредоносный функционал за ограниченное время. Одной из проблем, которые возникают при решении этой задачи является тот факт, что вредоносный функционал можно реализовать разными способами, каждый из которых будет давать один и тот же результат. Рассмотрим пример небольшого фрагмента кода, написанного на языке С:
int i=0, j=0;
int main()
{
if(i==1000)
return i;
else
return j;
}
и сравним его со вторым фрагментом кода, который получился после компиляции вышеуказанного фрагмента в низкоуровневый язык ассемблера:
_main proc near
mov ecx, dword_414184
mov ecx, 3E8h
cmp ecx, eax
jz short locret_401124
mov eax, dword_414180
locret_401124:
retn
_main endp
Небольшие изменения во фрагменте кода, написанного на языке С, которые не повлияют на его функциональность, будут по-другому отражены во втором фрагменте. Например, когда условный переход меняется с "if(i==1000)" на "if(i=999)", то в результате фрагмент будет скомпилирован в другой фрагмент на языке ассемблера. Добавление таких инструкций как NOP (no operation), смена названий переменных и другие действия, не влияющие на конечный результат, могут скрыть или обфусцировать (англ. obfuscate) реальный функционал, который может носить и вредоносный характер. Помимо этого, в объектном коде могут использоваться и различные регистры процессора, отличные от тех, что используются обычными компиляторами (например, можно использовать другой регистр вместо регистра АХ). В конечном счете, по-разному модифицируя объектный код, можно добиться того, что не останется практически ни одного фрагмента, который можно было бы подвергнуть сравнению с уже известными фрагментами вредоносного кода.
Таким образом, метод сигнатурной проверки несмотря на свою простоту, является далеко не самым надежным способом обнаружения вредоносных программ, так как вирусописатели могут применять многочисленные методы изменения и обфускации кода. В результате требуется большое количество времени, сил и практических навыков для того, что определить скрытый функционал и методы, которые применялись для его сокрытия, даже несмотря на то, что это была одна и та же вредоносная программа.
Системы сравнения файлов для определения их похожести могут быть найдены в описаниях таких патентов, как US 6990600, US 6738932, US 5995982, US 6021491, US 5878050 и других. Однако системы, описанные в этих патентах, опираются на точное сравнение объектов и не эффективны при небольших их изменениях.
Анализ предшествующего уровня техники и возможностей, которые появляются при комбинировании их в одной системе, позволяют получить новый результат, а именно систему для ускорения обнаружения похожих объектов при сравнении неизвестных объектов данных с уже известными объектами. Данный результат достигается за счет представления объектов в виде представлений-сверток и их последующего сравнения.
Сущность полезной модели
Настоящая полезная модель предназначена для обнаружения похожих объектов при сравнении неизвестных объектов с уже известными объектами.
Технический результат настоящей полезной модели заключается в использовании системы, которая содержит: средство хранения коллекции известных объектов, предназначенное для хранения известных объектов и связанное со средством подсчета сверток; средство подсчета сверток, предназначенное для подсчета сверток известных объектов, также связанное с средством обновления сверток; средство обновления сверток, связанное со средством хранения коллекции сверток известных объектов и предназначенное для обновления сверток известных объектов в средстве хранения коллекции сверток известных объектов; упомянутое средство хранения коллекции сверток известных объектов, предназначенное для хранения сверток известных объектов и связанное с локальным средством обновления сверток; упомянутое локальное средство обновления сверток, предназначенное для обновления сверток известных объектов в локальной коллекции сверток известных объектов, связанное с локальным средством хранения коллекции сверток известных объектов; упомянутое локальное средство хранения коллекции сверток известных объектов, предназначенное для хранения сверток известных объектов, связанное с локальным средством сравнения сверток; упомянутое локальное средство сравнения сверток, предназначенное для обнаружения похожих объектов путем сравнения сверток известных объектов из локального средства хранения коллекции сверток известных объектов и сверток неизвестных объектов от локального средства подсчета сверток, связанное с локальным средством подсчета сверток; упомянутое локальное средство подсчета сверток, предназначенное для подсчета сверток неизвестных объектов, которые были получены от локального средства анализа неизвестных объектов и связанное с локальным средством анализа неизвестных объектов; упомянутое локальное средство анализа неизвестных объектов, предназначенное для обнаружения неизвестных объектов, необходимых для сравнения с известными объектами.
В одном из вариантов реализации объектом является файл.
В еще одном из вариантов реализации система дополнительно содержит средство обработки неизвестных объектов, предназначенное для получения от локального средства сравнения сверток и локального средства анализа неизвестных объектов информации о неизвестных объектах, которые были определены как похожие на известные объекты.
В одном из частных вариантов реализации средство хранения коллекции известных объектов представляет собой базу данных известных вредоносных программ.
Краткое описание чертежей
Дополнительные цели, признаки и преимущества настоящей полезной модели будут очевидными из прочтения последующего описания осуществления полезной модели со ссылкой на прилагаемые чертежи, на которых:
Фиг.1-5 показывают графическое отображение исполняемых файлов.
Фиг.6 иллюстрирует гистограмму свертки, которая представлена в графическом виде на фиг.2.
Фиг.7 иллюстрирует сравнение в виде гистограммы для сверток, которые графически представлены на фиг.4А и 4Б.
Фиг.8 иллюстрирует сравнение в виде гистограммы для сверток, которые графически представлены на фиг.4А и 5.
Фиг.9 показывает пример файла, чья свертка не подходит для предложенного сравнения.
Фиг.10 раскрывает использование сверток для нахождения новых вариантов уже известных объектов.
Фиг.11 иллюстрирует примерную систему настоящей полезной модели.
Фиг.12 иллюстрирует способ подсчета свертки.
Описание вариантов осуществления полезной модели
Объекты и признаки настоящей полезной модели, способы для достижения этих объектов и признаков станут очевидными посредством отсылки к примерным вариантам осуществления. Однако, настоящая полезная модель не ограничивается примерными вариантами осуществления, раскрытыми ниже, она может воплощаться в различных видах. Приведенное описание предназначено для помощи специалисту в области техники для исчерпывающего понимания полезной модели, которая определяется только в объеме приложенной формулы.
В дальнейшем в описании будет идти речь про сравнение в первую очередь объектов, связанных с антивирусным анализом, но стоит отметить, что рамки настоящей полезной модели этим не ограничиваются и можно использовать предложенную систему и для сравнения объектов и файлов других типов, например, для сравнения графических изображений.
Для того чтобы в дальнейшем лучше понять используемый в работе предложенной системы подход, можно рассмотреть графическое представление нескольких примерных файлов. На фиг.1 представлено подобное представление (растровое изображение) исполняемого файла file1. На данном изображении каждый байт представлен в виде пикселя, при этом интенсивность каждого пикселя соответствует значению байта, т.е. черный цвет соответствует 0, а белый соответствует 255. Таким образом, файл размером 10000 байт будет представлен в виде квадрата 100×100, файл размером 40000 байт будет представлен в виде квадрата 200×200 и т.д.
В антивирусной индустрии было замечено, что большинство изменений во вредоносных файлах, которые используются для сокрытия вредоносного функционала, будет отображено в виде совсем небольших изменений на изображениях, подобных фиг.1. Особенно это актуально для различных семейств вредоносных программ, которые имеют схожий функционал и их различия в графическом виде совсем малозаметны.
На фиг.2 изображен другой пример подобного представления, в данном случае для файла file2, который используется программой-планировщиком. Видно, что структура этого файла отличается от file1, который отображен на фиг.1, и отличия видны невооруженным взглядом. File3, который отображен на фиг.3 также иллюстрирует совершенно другое представление файла, что позволяет сделать вывод об отличии его функционала от file1 и file2.
Заметим, что различные способы компиляции для одного и того же файла, могут привести к различным представлениям этого файла, что можно видеть на фиг.4А и 4Б для файла file4. В данном случае фиг.4Б иллюстрирует file4 в котором был изменен порядок работы некоторых функций. Также отметим фиг.5, на которой также изображено представление file4, но который был скомпилирован в режиме отладки. Можно также видеть разницу между фиг.4А и фиг.5. Это показывает, что небольшие и нефункциональные изменения файла не несут серьезных изменений для его конечной структуры.
Можно видеть, что сравнение подобных представлений в виде изображений, таких как на фиг.1-5, достаточно тяжело воспринимается человеком, хотя и удается различить разницу. Подобный подход был представлен исключительно для иллюстрации, так как автоматический способ обнаружения разницы между файлами не нуждается в формировании графического отображения файлов, а работает с исходными данными. Подход представления файлов (и вообще объектов) в виде двухмерного растрового изображения хорошо подходит для описания отличий между файлами. Конечной задачей является подсчет степени отличия одного файла от другого и подобный подход может включать создание графическое отображения в виде гистограммы, хотя следует понимать, что и в данном случае гистограммы являются лишь иллюстрацией.
Рассмотрим файлы, представленные на фиг.4А и 4Б. Каждое такое изображение может быть разделено на некоторое число N (например, в данном случае N=100) горизонтальных линий. Каждая линия соответствует определенной части файла. Если, допустим, изображение имеет размер 100×100 (т.е. это отображение файла размером 100×100=10,000 байт), тогда каждая горизонтальная линия будет сформирована из 100 пикселей. Далее для каждой линии может быть подсчитано среднее значение для всех значений байт в этой линии, альтернативно может быть подсчитана и сумма всех значения байт в линии и как итог, для каждого файла можно получить набор из N значений. Заметим, что если файл не делится нацело на N, то можно добавить дополнительные байты заполненные нулями. В случае больших файлов (например, размером 40000 байт), первая горизонтальная линия будет сформирована 2 рядами пикселей. Остальные вычисления остаются теми же самыми.
Таким образом, для изображения может быть сформирована гистограмма, каждый вертикальный столбец которой соответствует каждой линии. Пример гистограммы для изображения на фиг.3 приведен на фиг.6. Соответственно, можно сформировать гистограммы для различных изображений (например, для изображений на фиг.4А и 4Б) и затем наложить одну гистограмму на другую для показательного сравнения.
На фиг.7 изображено наложение двух сигнатур для изображений на фиг.4А и 4Б, на котором хорошо видно, что отличие очень незначительное и заключается в небольшом участке А на фиг.7, которое отображено немного более подробно. Таким образом, можно заключить, что если файл, отображенный на фиг.4А, является вредоносным, то можно утверждать, что файл, отображенный на фиг.4Б, также является вредоносным из-за большого уровня сходства между ними. С другой стороны, при сравнении файлов, отображенных на фиг.4А и 5, сравнение которых показано на фиг.8, можно видеть, что файлы сильно отличаются, так как между значениями для этих файлов достаточно большая разница.
Описанный выше подход отличается от обычных методов сравнения файлов, которые основаны на использовании хешей и контрольных сумм. При вычислении подобных значений даже совсем небольшое изменение файла может привести к тому, что в итоге получится совершенно другое значение и даже совсем похожие по функционалу файлы будут иметь абсолютно разные значения хешей или контрольных сумм. В то же время настоящая система позволяет решить задачу нахождения похожих файлов, например, различные вариации зловредных программ.
В настоящей полезной модели также предусмотрена собственная функция, которая вычисляет характеристическое значение для файла, в нашем случае это "свертка" (в дальнейшем будем употреблять это слово без кавычек). Сверткой является N-мерный вектор или последовательность из N байт (или слов или двойных слов), графическое отображение которого было дано выше в примере на фиг.6. Значение каждого байта в свертке является высотой соответствующего вертикального столбца в гистограмме. Соответственно, остается вопрос вычисления свертки таким образом, чтобы она точно отражала изменения в файле, но при этом была стабильной по отношению к совсем незначительным изменениям (т.е. удалось бы избежать минусов, характерных при вычислении хешей или контрольных сумм).
Определим N, как длину свертки, для дальнейшего обсуждения предложим значение N=100. Было также экспериментально установлено, что значения N, которые отличаются от 100 на порядок и более, характеризуются большим количеством ошибок первого и второго рода. Также стоит отметить, что при вычислении свертки требуется решить задачу, так называемых, коллизий, т.е. ситуаций, когда функция дает одно и то же значение для различных входных данных. Еще один минус вышеупомянутых методов вычисления хешей и контрольных сумм заключается в их ресурсоемкости, что может привести к большой нагрузке, например, при определении похожести между сотнями тысяч или миллионов образцов вредоносных программ, которые ежедневно получают антивирусные компании.
В настоящей полезной модели для решения всех вышеперечисленных недостатков предлагается использовать следующий алгоритм вычисления свертки:
а) выбирается степень разбиения, например, по байтам, по словам, по двойным словам и т.д.
б) инициализируется набор байт А состоящий из нулей. Размер набора составляет N.
в) файл делится на N частей, после чего выделяется первая часть (начало файла)
г) вычисляется среднее значение байт (или слов, или двойных слов - в зависимости от степени разбиения) для первой части
д) предыдущий шаг повторяется для всех остальных частей файла
е) полученный набор А теперь представляет собой свертку файла и он сохраняется в базу данных
С помощью псевдокода можно описать этот алгоритм следующим образом:
int blocksize=filesize/N
for i=0 to N-l
furl[i]=average(file[i*blocksize], …, file[i*blocksize + blocksize - 1])
Фиг.12 иллюстрирует способ подсчета свертки. После того как на этапе 1202 были выбраны оптимальные параметры для числа N, на этапе 1204 происходит определение размера файла для которого на этапе 1206 произойдет разбиение файла на N частей. Затем на этапе 1208 начинается перебор всех частей файла, для каждой из которых на этапе 1214 будет происходить вычисление части свертки. В том случае, если части файла закончились, то на этапе 1210 свертка считается полученной и будет записана в базу данных на этапе 1212.
Теперь приведем уравнение, которое позволяет вычислить разность между свертками:
i
i
A
n
n
n
где n это среднее значение байта в i-ой части анализируемого объекта (например, файла), N является длиной свертки, Δn является разностью между i-ми элементами сверток, K представляет общую разность объектов (точнее, вес разницы), в то время как K представляет уже коэффициент для нормализации этой разницы, а M является максимальным значением свертки (например, при выборе байта в качестве степени разбиения M будет равно 255). Таким образом, K показывает, насколько разными являются объекты. И чем K меньше, тем более объекты схожи.
Рассмотрим более подробно количество разностей между свертками. Стоит отметить, что разность между двумя элементами сверток с Δ=1 и разность в одном элементе свертки с Δ=2 означают два разных типа похожести между файлами. Вообще, максимально возможная разность между файлами может быть определена как М*N и может быть использована в уравнении следующим образом:
i
n
где D является количество разностей в свертках (при выборе байта в качестве степени разбиения, D будет также равно количество ненулевых |Δn|). K является числом, которое лежит в пределах от 0 до 1. Этот альтернативный способ подсчета учитывает разные типы разностей, которые были приведены ранее.
Следовательно, если файлы имеют, например, совершенно разные заголовки, но остальные данные у них идентичны, то в таком случае они будут считаться похожими. Однако если файлы имеют отличия во всех частях, то они не будут похожими, так как большая часть значений в свертке отличается, хотя и очень близка между собой. Можно сделать вывод, что описанный выше способ, основанный на свертках, будет плохо работать с зашифрованными или архивными файлами, которые имеют случайную или псевдослучайную структуру, как, например, на фиг.9. Такую же проблему представляют файлы, заполненные одинаковыми значениями (например, нулями) на 95-100%.
Таким образом, выбрав две свертки для сравнения можно использовать различные метрики, например, просуммировать все разности для сверток, а потом использовать различные методы нормализации (корреляции) получившегося значения для того, чтобы подсчитать общую разность между свертками. Можно добавлять некоторое значение для всех разностей, для того, чтобы считать файлы похожими при небольшом расхождении в 2-3%. Другой способ заключается в подсчете среднеквадратичного размера разностей для сверток.
Стоит также отметить, что для оптимизации процесса лучше сравнивать файлы примерно равного размера (с точностью до 50% для несжатых или незашифрованных файлов) для упрощения сравнения сверток этих файлов.
n
Фиг.10 раскрывает использование сверток для нахождения новых вариантов уже известных объектов, в частности, для обнаружения новых вариантов вредоносных программ. На этапе 1002 происходит инициализация процесса обнаружения похожих файлов, после чего происходит загрузка известной коллекции файлов на этапе 1004, например, новых версий вредоносных программ. На этапе 1006 для каждого из этих файлов подсчитывается свертка, которая затем сохраняется в базе данных на этапе 1008. На этапе 1010 база данных сверток будет обновлена, после чего можно начинать процесс проверки (например, файловой системы) на наличие необнаруженных вредоносных программ на этапе 1012. На этапе 1014 проверяется, проверены ли все файлы и если таковых не осталось, то сам процесс заканчивается на этапе 1016. На этапе 1018 происходит подсчет свертки для файла, после чего на этапе 1020 в базе данных сверток происходит поиск ближайшей свертки и выполняется подсчет их разности. Если на этапе 1022 делается заключение, что разность лежит ниже порога риска (т.е. файлы не являются идентичными), то процесс продолжается со следующими файлами. В том случае если порог был превышен, то на этапе 1024 файл будет помещен в карантин и на этапе 1026 отправлен на дальнейший анализ, как потенциально вредоносная программа. Заметим, что для антивирусной проверки порог (т.е. значение K) лежит в диапазоне 0.01-0.04.
На фиг.11 приведена примерная система настоящей полезной модели для одного из вариантов реализации. Использование сверток позволяет существенно ускорить процесс обнаружения похожих объектов. Коллекция 1102 известных объектов может находиться на стороне сервера любого крупного поставщика софтверных услуг - это может быть антивирусная компания, так и компания, предоставляющая различные сервисы по обнаружению похожих объектов, например, похожих изображений или текстовых файлов, что может быть очень актуально в сфере образования при обнаружении плагиата или похожих рефератов. Затем средство 1104 подсчета сверток подсчитывает свертки для объектов из этой коллекции (например, это можно делать периодически для новых объектов) и направляет данные средству 1106 обновления сверток, которое обновляет коллекцию 1108 сверток известных объектов. Заметим, что сами свертки занимают уже гораздо меньше места чем сами объекты, таким образом ими гораздо легче оперировать при их передаче на компьютеры пользователей, на которых установлено локальное средство 1110 обновления сверток, которое использует полученные данные для обновления локальной коллекции 1112 сверток известных объектов.
В то же время локальное средство 1114 анализа неизвестных объектов (это может быть как средство антивирусной проверки, так и любой другой файловый фильтр с заданными параметрами) обнаруживает неизвестные файлы, которые требуется подвергнуть сравнению. Для них затем подсчитываются свертки с помощью локального средства 1116 подсчета сверток, которые передаются на локальное средство 1118 сравнения сверток. На основании сравнений локальное средство 1118 сравнения сверток делает вывод о похожести неизвестных объектов с уже известными. Дополнительно неизвестные объекты, которые являются схожими с уже известными, могут быть отправлены средству 1120 обработки неизвестных объектов (например, с целью дополнительного антивирусного анализа в случае антивирусной компании). Стоит отметить, что вышеприведенные локальные средства предпочтительно находятся на компьютерах пользователей, в то время как остальные средства находятся на стороне компании-поставщика услуг с использованием коллекций известных объектов.
Коллекция 1102 известных объектов, коллекция 1108 сверток известных объектов и локальная коллекция 1112 сверток известных объектов могут быть выполнены в виде таких систем управления базами данных (СУБД), как MySQL, PostgreSQL, Firebird, DB2. По использованию модели данных подобные системы могут быть иерархическими, сетевыми, реляционными и объектно-ориентированными. Также подобные системы могут иметь различный доступ к самой базе данных в виде файл-серверного, клиент-серверного или встраиваемого типа доступа.
Средство 1104 подсчета сверток, также как и локальное средство 1116 подсчета сверток работают по аналогии с хеш-функциями, такими как SHA1 или MD5, которые производят преобразование входного массива данных произвольной длины в выходную битовую строку. Использование систем, которые производят подсчет хеш-сумм описано в таких патентах как JP 4148372, JP 11306194. Основное отличие подсчета сверток заключается в том, что сама свертка в итоге представляется в виде N-мерного вектора или последовательности из N байт. Как уже упоминалось при вычислении хеш-сумм даже совсем небольшое изменение файла может привести к тому, что в итоге получится совершенно другое значение и даже совсем похожие по функционалу файлы будут иметь абсолютно разные значения хешей или контрольных сумм. В то же время использование сверток позволяет решить задачу нахождения похожих файлов, например, различные вариации зловредных программ. Средство 1106 обновления сверток, также как и локальное средство 1110 обновления сверток могут быть выполнены в виде средств обновления программ в одном из вариантов реализации. Средства обновления программ описаны в таких патентах и заявках как US 2003070087, JP 2003015926, JP 2002318722, и US 7069452. Одним из вариантов обновления может служить утилита patch (http://ru.wikipedia.org/wiki/Patch_(UNIX)), которая предназначена для переноса правок (изменений) между разными версиями текстовых файлов. Как правило, обновление осуществляется с помощью файлов (так называемых "патчей" или "заплаток"), которые используются для переноса различий между версиями файлов. Свертки могут быть сохранены в виде файлов определенного формата, что позволяет использовать стандартные средства обновления.
Локальное средство 1118 сравнения сверток может быть выполнено в виде компаратора на основе логических элементов в одном из вариантов реализации. Для более точного подсчета схожести сверток можно использовать также средства сравнения, которые описаны в таких патентах как ЕР 1560446 и JP 11039194.
Локальное средство 1114 анализа неизвестных объектов, также как и средство 1120 обработки неизвестных объектов могут быть представлены в виде одного из средств антивирусной проверки и анализа. В список таких средств входят эвристический анализ (http://en.wikipedia.org/wiki/Heuristic_analysis), применение эмулятора (http://en.wikipedia.org/wiki/Emulator), запуск программ в защищенной среде (так называемая "песочница", http://en.wikipedia.org/wiki/Sandbox_(computer_security)), использование средств контроля программ (http://en.wikipedia.org/wiki/Host-based_intrusion-prevention_system#Host-based) и т.д. Все вышеприведенные системы анализа позволяют проанализировать неизвестный объект (например, файл) с целью определения его возможной вредоносной сущности. Результатом работы может быть заключение о вредоносности неизвестного объекта. В другом случае неизвестный объект может быть определен как, например, законно используемая программа.
В заключении следует отметить, что приведенные в описании сведения являются только примерами, которые не ограничивают объем настоящей полезной модели, определенной формулой. Специалисту в данной области становится понятным, что могут существовать и другие варианты осуществления настоящей полезной модели, согласующиеся с сущностью и объемом настоящей полезной модели.