Нечёткое хэширование в задачах информационной безопасности
Тюрин Кай Андреевич — заместитель заведующего лабораторией ФГАНУ НИИ «Спецвузавтоматика»
Хэширование (англ. hashing) -преобразование массива входных данных произвольной длины в (выходную) битовую строку установленной длины, выполняемое определённым алгоритмом. Функция, воплощающая алгоритм и выполняющая преобразование, называется «хэш функцией» или «функцией свёртки» (https://ru.wikipedia. org/wiki/Хеширование).
В ходе решения множества прикладных задач возникает необходимость обработки большого количества файлов и данных различного формата. Такие задачи возникают, например, в ходе проведения криминалистических расследований (в том числе инцидентов информационной безопасности), а также при анализе компьютера на предмет наличия вредоносного программного обеспечения.
Одной из типовых задач является определение схожести файлов. Так, известные криптографические хэши (MD5, SHA 1 и т. д.),
а также классические контрольные суммы (CRC и т. д.) облегчают задачу нахождения одинаковых файлов. Так, достаточно один раз посчитать хэш-функцию от файла, чтобы в дальнейшем быстро обнаруживать идентичные ему. При этом нет необходимости проводить побайтовое сравнение, достаточно посчитать хэш от проверяемого файла, сохранить результат в соответствующей базе данных, имеющей относительно небольшой объем, и сравнить его с исходным. При равенстве хэшей с некоторой степенью уверенности можно судить об идентичности файлов, в зависимости от значения уровня коллизий (collision rate [1]) конкретной хэш-функции.
Тем не менее, достаточно незначительно изменить некоторый файл для того, чтобы сильно изменить значение хэш-функции, вычисляемой от него. Эта проблема имеет ещё большую значимость при решении задач поиска вредоносного программного обеспечения, т.к. его авто-
ры используют обфускаторы, меняющие содержимое файлов, а любое такое преобразование приведет к изменению значения хэш-функции.
Этот факт происходит непосредственно из свойств хэш-функции, в частности, из свойства «лавинного эффекта» [1], согласно которому при незначительном изменении входных данных результат хэш-функции значительно изменяется. Следовательно, если цель злоумышленника - избежать обнаружения при помощи криптографических хэшей, ему достаточно произвести незначительные изменения вредоносного файла.
Несмотря на это, криптографические хэш-функции повсеместно используются в том числе и для задач обнаружения вредоносного ПО, так как являются чрезвычайно простым и «дешёвым» (в том числе по времени и затратам вычислительных ресурсов) для реализации методом. Так, достаточно посчитать хэш-функцию от одного из экземпляров вредоносного
ПО, после чего все идентичные экземпляры могут быть обнаружены без сложного анализа, лишь за время вычисления хэш-функции.
Стоит отметить, что использование хэширования для обнаружения вредоносных файлов заключается не только в хэшировании всего файла целиком. Так, для обнаружения может быть вычислен хэш от части файла (например, хэш от секции ресурсов или кода), что позволяет обнаружить и обфусциро-ванный код, для чего аналитики выявляют отдельные сигнатуры исполнимых файлов, не изменяемые при обфускации, но характерные для данного семейства вредоносных программ, и считают значения хэш-функций от них.
Кроме того, так как хэш-функции требуют полного совпадения для того, чтобы свидетельствовать об идентичности файлов, а также имеют фиксированную короткую длину, простой является задача организации базы данных хэшей с быстрой операцией проверки
наличия в ней определенного вновь вычисленного хэша. Например, такая компактная база может хранить информацию о тысячах семейств вредоносных программ и позволит осуществлять быстрый поиск по ней.
В то же время остаётся проблема идентификации схожих, но не идентичных файлов. Так, если некоторый экземпляр вредоносного ПО был незначительно изменён для того, чтобы избавить его от наличия сигнатуры, при помощи которой он может быть обнаружен, большая часть файла останется неизменной.
Данная задача особенно актуальна в современных условиях, когда злоумышленники активно противостоят эффективному методу обнаружения с использованием статистических сигнатур, используя об-фускаторы, позволяющие изменить заранее не известную или сложно идентифицируемую аналитиком часть кода, таким образом, не давая возможности описать эту сигнатуру.
В этом случае существует востребованность в наличии метода идентификации таких «схожих файлов». Важно оговориться, что в данном контексте не существует строгого определения «схожести» файлов, и в зависимости от ситуации она может трактоваться по-разному, соответственно, существуют различные пути решения данной задачи. Анализу их по-
священа настоящая работа. В разное время предлагались различные решения задачи определения схожести. В качестве примеров можно привести Коэффициент Жаккара [2] и отпечаток Рабина [3]. Решению этой же задачи служат и нечёткие хэш-функции.
Нечёткие хэш-функции
Аналогично хэш-функциям, нечёткие хэш-функции являются инъективным отображением из множества массивов бинарных данных любого размера в строку определенной длины. Однако, если хэш-функции строятся исходя из требований значительно менять своё значение при незначительном изменении, то нечёткая хэш-функция, наоборот, незначительно меняет своё значение пропорционально объему изменений в исходных данных. Таким образом, разница между двумя значениями нечётких хэш-функций является метрикой для разницы между соответствующими бинарными данными.
Нечёткие хэш-функции используются в различных задачах: при анализе схожести образцов текста, спам-фильтрах, поиске вредоносных программ и т. п. В зависимости от задач, которые они решают, существуют различные виды нечётких хэш-функций, и различные алгоритмы их реализации. Разные источники предлагают разные способы классификации нечёт-
ких хэшей. Одной из основных классификаций является разделение нечётких хэшей на следующие группы:
• кусочное хэширование (Piecewise hashing);
• контекстно-побуждаемое кусочное хэширование (Context-triggered piecewise hashing);
• выделение статистически маловероятных особенностей (Statistically improbable features);
• алгоритмы блочного перестроения (Block-based rebuilding);
• статистические отпечатки.
Эта классификация основана на деталях работы каждого алгоритма.
Существует также классификация нечётких хэшей по типу информации, используемой для вычисления:
• побайтовые (bytewise) - алгоритм взаимодействует с входными данными исключительно как с потоком байт;
• синтаксические (syntactic) -алгоритм знает синтаксис файла и использует его при хэшировании;
• семантические (semantic) -алгоритм может интерпретировать файл на более высоком уровне, используя смысловые составляющие его частей для хэширования.
Такая классификация позволяет оценивать универсальность/специфичность хэшей, входящих в тот или иной класс.
Далее мы рассмотрим классификацию нечётких хэш-функций, основанную на уровне сложности анализа
связи между блоками исходных данных и контекстной зависимости алгоритма расчета функции от исходных данных. На основе полученной классификации делается вывод о перспективных направлениях для создания новых нечётких хэш-функций.
Кусочное хэширование
Первым типом нечётких хэшей являются алгоритмы кусочного хэширования (piecewise hashing). Данный тип имеет двух основных представителей: ddcfld [4] и md5bloom [5].
Утилита ddcfld
Утилита командной строки под названием ddcfld является расширением утилиты dd (программа, используемая в системах семейства UNIX для побайтовой работы с данными), предназначенным для работы в компьютерной криминалистике. Одной из решаемых этим расширением задач является обнаружение изменений данных, содержащихся на каком-либо носителе. При этом используется низкоуровневый подход: изменения фиксируются на уровне организации данных ниже файловой системы, то есть на уровне носителя.
Так, пространство жёсткого диска разбивается на участки фиксированного размера (размер участков указывается пользователем). Каждый по-
лученный участок хэшируется при помощи одного из доступных алгоритмов (поддерживаются тс15, эЬа1, зЬа256, зЬа384 и 8Ьа512). Данная операция может быть повторена через некоторое время. Хэши, полученные в первом случае, сравниваются с хэшами, полученными во втором случае. Несовпадение хэ-шей означает изменение соответствующего участка памяти.
Этот подход является эффективным для задачи обнаружения изменений в большом объёме данных, так как позволяет не хранить его полностью (что сильно сокращает объём данных, необходимых для хранения), при этом остаётся также эффективным с точки зрения скорости работы. Длина хэша является пропорциональной размеру файла и зависит от длины блока.
Утилита т(15Ыоот
Данная утилита разработана в 2006 году командой исследователей из Новоорлеанского университета. В оригинальной статье указано два основных направления использования:
1. установление связи между несколькими целями расследования, заключающееся в поиске среди множества изображений наиболее похожего (или непохожего) на некоторое целевое;
2. обнаружение версиониро-вания объекта, заключающееся в обнаружении файла несмотря на то, что он был изменён
(например, обнаружение исполняемых файлов некоторого программного обеспечения несмотря на обновления).
Входными данными для утилиты, помимо потока байт для хэширования, являются следующие значения:
• к - количество частей, на которые будет разделён каждый хэш;
• 1 - число, определяющее размер фильтров Блума;
• г - максимальное количество хранимых элементов для одного фильтра Блума;
• размер блоков, на которые делится входной поток.
Механизм работы хэша во многом схож с с1сЙ11с1. Так, входной поток разделяется на блоки фиксированного размера, от каждого блока вычисляется хэш Л/ГО5. Однако, вместо того, чтобы сохранять этот хэш целиком, тс15Ь1оот разделяет его на к подхэшей, каждый из которых добавляется в фильтр Блума размера 21 бит. Если количество занесённых в фильтр Блума значений достигает г, он конкатенируется к текущему значению хэша, после чего новые значения добавляются в новый фильтр Блума. Сравнение производится путём побитового сопоставления фильтров Блума.
Контекстно-побуждае-\1 о е кусочное хэширование
Исторически первым типом алгоритмов, по-настоящему отнесённых к классу нечётких
хэшей, является контекстно-побуждаемое кусочное хэширование (Contex-Triggered Piecewise Hashing, СТРН).
Алгоритмы этого класса обладают следующими свойствами:
1. результирующий хэш является последовательной конкатенацией хэшей «кусков», то есть участков входных данных;
2. разделение файла на «куски» зависит от его содержимого.
Таким образом, данный класс нечёткого хэширования образуется от кусочного хэширования, однако расширяет эту концепцию при помощи разделения файла на куски на основе его содержимого.
Это связано с тем, что кусочное хэширование имеет один серьёзный недостаток: при изменении входных данных не путём изменения значения определённых байтов, но путём добавления или удаления каких-либо новых участков, из-за сдвига изменятся все кусочные хэши, входящие в состав результирующего. Чтобы устранить эту проблему, была выдвинута идея изменить способ разделения данных на хэ-шируемые участки. СТРН в качестве такого решения предлагает некоторым образом анализировать содержимое и проводить границу определённого участка при появлении определённого «триггера», то есть срабатывании некоторого условия, зависящего от данных.
Разделение входных данных
на участки в зависимости от содержимого даёт дополнительную гибкость и устойчивость результирующего хэша к изменениям входных данных.
Алгоритм вв(1еер
Является не только первым алгоритмом указанного типа, но и традиционно считается первым нечётким хэшем. Одновременно с этим данный алгоритм является первым алгоритмом нечёткого хэширования, получившим широкое распространение при решении задач информационной безопасности, помимо обнаружения спам-со-общений.
Алгоритм ssdeep разработан Джесси Корнблюмом [6] с целью использования в компьютерной криминалистике. Основан на алгоритме вратэиш за авторством Эндрю Триджелла [7]. Изначально разработанный для обнаружения спама, алгоритм был адаптирован для использования против файлов любого типа.
Алгоритм использует скользящее окно байт для вычисления кольцевого хэша. Такой тип хэша был выбран с целью обеспечения большей производительности, так как он позволяет быстро получить хэш следующего окна, если известен хэш предыдущего. Байты, через которые проходит скользящее окно, добавляются в некоторый буфер, представляющий очередной «кусок». Далее, когда очередное значе-
ние кольцевого хэша удовлетворяет условию, срабатывает триггер к хэшированию текущего буфера. Буфер хэширует-ся при помощи некриптографического хэша Р1МУ [8]. Младшие 6 бит получившегося хэша переводятся в кодировку Ьаве64 и добавляются к результирующему хэшу.
Одним из важных ограничений 8811еер является то, что сравнивать хэши от двух разных файлов можно только в том случае, если размеры скользящего окна, используемого при их построении, совпадают. Для того, чтобы расширить возможности сравнения файлов, происходит расчёт не только для скользящего окна размером N. но и размером 2]\. Таким образом, результирующий хэш является конкатенацией двух хэшей с разным размером окон, отличающимся в 2 раза.
Размер скользящего окна подбирается таким образом, чтобы размер результирующего хэша не превышал 80 символов. Таким образом, хэш может быть пересчитан несколько раз с разным размером окна.
Сравнение двух хэшей происходит путём измерения расстояния Дамерау-Левенштей-на между ними, причём веса для операций имеют следующие значения:
• удаление или вставка - 1;
• изменение байта - 3;
• обмен двух байтов местами - 5.
Данный хэш является достаточно распространённым. Это подтверждается тем, ресурс антивирусной проверки файлов Virustotal рассчитывает ssdeep для файлов, присылаемых на проверку.
Тем не менее, ssdeep обладает рядом недостатков, таких как низкая производительность, невозможность выявления частей файла и ограничение на сравнение файлов, связанное с размером окна. В связи с этим на сегодняшний день имеется множество нечётких хэшей, призванных устранить эти недостатки.
Так, алгоритм FKsum [9] является прямым развитием алгоритма ssdeep и призван решить проблему размерности скользящего окна в ssdeep. Для решения этой задачи FKsum использует дополнительное окно четырехкратной длины при расчёте хэша.
Использование статистически маловероятных особенностей
Следующим исторически появившимся после СТРН подходом является использование статистически маловероятных особенностей (Statisctically Impropable Features, SIP). Данный подход основан на идее отпечатка Ра-бина [4]. Наиболее известным его представителем является алгоритм sdhash.
Алгоритм $(№а$11
Этот алгоритм создан Вас-силем Руссевым. Хэш, используемый в данном алгоритме, основан на следующей идее: хэш строится не на файле в целом, но на его наиболее характерных особенностях. Так, используется скользящее окно, рассчитывающее для каждого участка значение энтропии. Дальше по полученным значениям проходит другое скользящее окно, которое выбирает среди своих элементов наиболее характерные. Эти элементы сохраняются в хэш, но не целиком. Вместо этого для их сохранения используется набор фильтров Блума, которые в дальнейшем и представляют собой результирующий хэш.
Этот нечёткий хэш позволил решить множество проблем, связанных с эвёеер, и является вторым по частоте использования нечётким хэшем.
Алгоритмы блочного перестроения
Третий тип нечётких хэшей имеет три наиболее ярких представителя: тгвЬ, его продолжение шг8Ь-у2 и ЬЬЬавЬ.
Алгоритмы тг$11 и ШГ8Ь-у2
Алгоритм тгвЬ [10] был создан как попытка совместить в себе ээс^ер и всШавИ, сохра-
нив преимущества обоих и устранив их недостатки. Так же, как и в 88с1еер, кусочные хэши вычисляются при срабатывании определённого условия, однако результат не конкатенируется к общему результирующему хэшу, а заносится в блум-фильтры с фиксированным количеством элементов.
Другим изменением по сравнению с оригинальным 8вс1еер является замена хэшей, используемых в 88с1еер, на более криптостойкие [5].
Детали работы шгвЬ:
1. Скользящее окно (длина по умолчанию - 7) проходит по файлу. Для каждого состояния скользящего окна вычисляется хэш й)Ь2.
2. Очередной хэш участка вычисляется в том случае, если все 7 младших битов хэша скользящего окна имеют значение «1».
3. В качестве хэша для участков используется 1УШ5.
4. Полученный М05 делится на 4 куска по 11 бит каждый, которые затем заносятся в фильтры Блума.
5. Когда количество элементов в блум-фильтре достигает максимума (256 элементов), создаётся новый.
Алгоритм шг811-у2 [11] является развитием шгвЬ. В частности, шгвЬ не оправдал идею использования криптографически стойких хэшей, в связи с чем в шг811-у2 используется кольцевое хэширование и Р1\У, как и в ввёеер.
Алгоритм bbhash
Для работы алгоритма bbhash [12] используется некоторое предварительно заданное инициализирующее множество блоков. Цель алгоритма - обнаружить признаки того, что в анализируемых файлах содержатся данные, которые не являются широко используемыми, однако являются общими для анализируемого множества.
Работа алгоритма заключается в поблочной обработке файла. Каждый очередной блок сравнивается со всеми блоками из инициализационного множества. Сравнение происходит посредством измерения расстояния Хэмминга. Выбирается минимальное значение из всех. При этом значение добавляется в результирующий хэш только в случае, если оно меньше некоторого порогового значения.
Таким образом, в работе данного алгоритма прослеживается идея поиска маловероятных особенностей.
Множество блоков инициализации может быть выбрано случайно, однако для корректного сравнения двух файлов множества блоков, используемых при расчёте их хэшей, должны быть одинаковы. В связи с этим рекомендуется использовать блоки, приведённые в оригинальной статье.
Для сравнения блоков может использоваться как механизм сравнения, используемый в sdhash, так и механизм сравнения из ssdeep.
Алгоритм mvhash-b
Алгоритм вычисления нечёткого хэша mvhash-b [13] состоит из трёх этапов:
1. Преобразование всех байт входных данных по методу мажоритарного голосования.
2. Применение к полученной последовательности байт алгоритма кодирования длин серий (Run Length Encoding - RLE).
3. Разбиение результата на оптимальные для добавления в фильтры Блума группы.
Мажоритарное голосование заключается в том, что для каждого байта входных данных определяется количество единиц и нулей в его двоичном представлении. Если в байте количество единиц больше, чем нулей, он заменяется на OxFF (все единицы). В противном случае он заменяется на 0x00 (все нули).
Кодирование длин серий заключается в том, что последовательности повторяющихся элементов (нулей или единиц) заменяются на последовательность вида NW, где N - количество повторений символа W.
Для добавления группы в фильтр Блума используется специальный хэш. Так, каждый элемент группы заменяется на его остаток от деления на два. Полученная последовательность из 11 бит делится на две части, где первые 8 позиций указывают номер байта блум-фильтра, а оставшиеся 3 - номер бита в байте. Таким образом, длина группы - 11 элементов. Группы
перекрываются, и каждая группа смещена относительно другой на 2 элемента. Для сравнения хэшей, как и в всШавЬ, используется расчёт расстояния Хэммин-га между блум-фильтрами.
Статистический отпечаток
Одним из новых направлений в развитии нечётких хэшей является вычисление статистического отпечатка. Основным представителем такого подхода является алгоритм ивЬ.
Алгоритм
Одним из наиболее современных фаззи-хэшей, используемых для решения задач информационной безопасности, является ивЬ [14], разработанный компанией Тгепс11УНсго. Данный хэш основан на алгоритме МЫгша [15], который, так же, как и алгоритм вратвши, был использован для идентификации почтового спама.
Алгоритм заключается в обработке данных при помощи скользящего окна длиной 5 байт. Из каждого окна выбираются тройки, которые хэши-руются и по значению хэша заполняют гистограмму частоты появления. Полученная гистограмма нормируется таким образом, чтобы каждое значение занимало два байта, то есть каждое значение заменяется номером четверти, в которую данное значение попало относительно максимального значения в ги-
стограмме. Например, если максимальный элемент равен 16, то элемент «3» будет заменён на «1», элемент «6» на «2», элемент 10 на «3», а сам максимальный элемент на «4». Результирующий хэш представлен конкатенацией всех элементов полученной гистограммы.
Это позволяет хэшу, с одной стороны, быть устойчивым к изменению входных данных, а с другой - использовать для вычисления всё пространство входных данных.
Контекстно-специфичные алгоритмы
Одной из современных тенденций в сфере нечёткого хэширования является создание фаззи-хэшей для конкретных типов данных, в отличие от созданных ранее алгоритмов для данных общего вида. Мотивацией к созданию такого класса алгоритмов является то, что одни и те же данные могут быть преобразованы в разные бинарные представления, несмотря на то, что имеют идентичную структуру.
Этот подход может быть полезным для тех ситуаций, когда необходимо обрабатывать большие объёмы данных конкретного вида. В качестве примера можно привести задачу поиска схожих изображений в большом массиве данных. При этом изображения могут иметь разный формат, способы сжатия и т.д. В таком случае использование традиционного побайтового нечёткого хэширования будет
являться малоэффективным, так как для схожих изображений нечёткие хэши могут сильно отличаться за счёт разного представления на уровне двоичного кода. В то же время, алгоритмы нечёткого хэширования, анализирующие не двоичный код, но само изображение, могли бы оказаться полезными для решения такой задачи.
Алгоритм Мас1юке
Представителем данного класса нечётких хэшей является МасЬоке. Данный алгоритм был впервые представлен на конференции г2соп в 2017 году и предназначен для создания нечёткого хэша для исполняемых файлов. Для этого он хэширует не просто бинарное представление, а граф потока исполнения программы. Для каждой полученной функции строится граф потока выполнения. Узлы этого графа нумеруются, после чего граф записывается в строковом представлении. При этом записываются переходы между графами, а также тип перехода, если это вызов функции. Эти строки хэшируются при помощи некриптографического алгоритма тигтигЬаэ!^, после чего результаты хэширования для всех функций конкатенируются для получения результата.
Данный подход призван улучшить использование нечёткого хэширования в за-
дачах автоматизации обнаружения вредоносных исполняемых файлов и их классификации.
Дальнейшие работы
На данный момент в области нечёткого хэширования существует множество перспективных направлений развития. Одним из них является использование нечёткого хэширования в анализе вредоносного ПО.
В современном мире угрозы, связанные с распространением вредоносного программного обеспечения, являются одними из ключевых в сфере информационной безопасности. Антивирусными компаниями обнаруживается всё больше образцов вредоносных программ. Вирусные эпидемии представляют серьёзную угрозу как для рядовых пользователей, так и для коммерческих компаний и даже государственных служб. В качестве примеров крупных вирусных атак можно привести Mirai и WannaCry. Из этого следует, что современные способы борьбы с вредоносным ПО требуют постоянной модификации с целью повышения её эффективности. При этом под эффективностью, могут пониматься: скорость обнаружения вредоносного ПО, процент ошибок первого и второго рода, время реагирования на новую угрозу и т.п.
Как было сказано во введении, многие антивирусы используют для обнаружения вредоносного ПО т.н. «сигнатуры», позволяющие обнаружить уже известные вирусы по некоторому характерному признаку. В качестве такого признака может выступать не только определённая последовательность байт, но и какое-либо более сложное правило, связывающее ряд последовательностей. Ключевой особенностью данного метода является тот факт, что для выявления отдельных сигнатур и их последовательностей используются значения хэш-функций от соответствующих участков кода вредоносных программ. Соответственно, эффективность этого метода обосновывается высокой скоростью обнаружения вредоносного ПО после того, как его образец попадает в руки антивирусных аналитиков.
Таким образом, современная индустрия разработки вредоносного ПО представляет собой попытки «установить сигнатуру» на вирус со стороны антивирусной компании и попытки «убрать сигнатуру» со стороны вирусописателей. Однако необходимость сокращения числа ошибок второго рода приводит к тому, что сигнатуры, особенно те из них, которые получаются аналитиками в первые дни распространения угрозы (наиболее эффективное «окно возможностей» для злоумышленни-
ков), являются достаточно короткими, так как описывают наиболее вероятный признак, без детального анализа структуры самой программы вредоносного ПО. Это ведёт к тому, что вредоносный файл часто получает незначительные изменения, сделанные с целью убрать сигнатуру, и распространяется снова. Наиболее универсальным подходом при этом является использование автоматизированных средств обфускации программ. Так, об-фускация даёт способ генерировать семантически эквивалентные программы, зачастую кардинально отличающиеся на уровне двоичного кода.
В этой области очень перспективным является использование нечёткого хэширования. Так, незначительно изменённый файл может быть легко сопоставлен со своей оригинальной модификацией и обнаружен даже в том случае, если сигнатура его обнаружения была убрана. Более того, нечёткие хэши так же, как и обычные хэш-функции, являются достаточно быстрыми в вычислении и могут использоваться для быстрого сопоставления значения, полученного от подозрительного файла, с базой уже имеющихся хэшей.
Существующие виды обфускации вредоносных программ подчас снижают эффективность использования нечёткого хэширования в анализе вредоносного ПО. Это связано с тем, что применение обфуска-
ции не приводит к равномерному изменению кода (часть секций остается без изменений, а часть может быть изменена достаточно сильно), что, в свою очередь, не находит пропорционального отражения в результирующих значениях нечётких хэш-функций широкого профиля, т.к. они рассчитаны на однородные данные и их изменения.
Несмотря на то, что для изображений задача определения схожести уже является во многом решённой [16], для других типов данных эта область может всё ещё иметь открытые проблемы. Одной из таких областей являются исполняемые программные файлы (несмотря на то, что существуют алгоритмы их сравнения, например, ВтОНТ [17]).
Так, является открытой задача создания нечёткого хэша, позволяющего идентифицировать семантически схожие вредоносные программы. В то время как проблема установления эквивалентности программ с точки зрения семантики является ЫР-трудной, вероятно, могут существовать способы определения схожих программ. Так, например, для различных видов программного обеспечения могут использоваться различные, наиболее подходящие для конкретного вида, способы определения схожести. Эти способы будут основаны на ключевых особенностях программ, характерных для того или иного вида. Воз-
можно, в то время как в одних программах преобладают операции математических вычислений, для других будет более характерным наличие большого числа вызовов функций API операционной системы для операций ввода-вывода и т.д.
Кроме того, для идентификации могут быть использованы особенности стиля программирования, характерные для авторов программного обеспечения.
Таким образом, развитие исследований в области нечётких хэш-функций уже сейчас позволяет решать множество задач в сфере информационной безопасности. Однако большинство таких задач эффективно решаются лишь специфичными хэш-функциями, зависимыми как от контекста задачи, так и от ряда её параметров (таких как объем анализируемых данных). В том числе, задачи обнаружения вредоносного программного обеспечения, скрываемого с использованием автоматизированных методов обфускации, могут решаться с использованием контекстно-специфичных алгоритмов вычисления нечётких хэш-функций, использующих для построения хэш-значения внутреннюю структуру программ.
Литература:
1. Alfred J. Menezes Paul С. van Oorschot and Scott A. Vanstone Handbook of Applied Cryptography.
Boca Raton, Florida, США: CRC Press, 2001,810 стр.
2. Jaccard P. Distribution de la flore alpine dans le Bassin des Dranses et dans quelques regions voisines // Bull. Soc. Vaudoise sci. Natur. 1901. V. 37. Bd. 140. S. 241-272.
3. Rabin M. Fingerprinting by random polynomials, technical report TR1581, center for research in computing technology Cambridge, Massachusetts: Harvard University; 1981.
4. ddcfld [Электронный ресурс] Режим доступа: http://dcfldd.sourceforge. net/. Дата обращения: 10.09.2018 г.
5. Vassil Roussev, Yixin Chen, Timothy Bourg, Golden G. Richard III. md5bloom: Forensic filesystem hashing revisited // Digital Investigation. Volume 3, Supplement, September 2006, Pages 82-90
6. Jesse Kornblum. Identifying almost identical files Using context triggered piecewise hashing // Digital Investigation. Volume 3, Supplement, September 2006, Pages 91-97
7. Spamsum readme. [Электронный ресурс] Режим доступа: http://www. samba.org/ftp/unpacked/junkcode/ spamsum/README Дата обращения: 10.09.2018 г.
8. The FNV Non-Cryptographic Hash Algorithm [Электронный ресурс] Режим доступа: https://tools.ietf.org/ html/draft-eastlake-fnv-03 Дата обращения: 10.09.2018 г.
9. Roussev, V., Building a Better Similarity Trap with Statistically Improbable Features // In Proceedings of the 42nd Hawaii International Conference on System Sciences, IEEE, Jan 2009.
10. Vassil Roussev, Golden G. Richard III, Lodovico Marziale. Multi-
resolution similarity hashing // Digital Investigation. Volume 4, Supplement, September 2007, Pages 105-113
11. Similarity Preserving Hashing: Eligible Properties and a New Algorithm MRSH-v2 // Lecture Notes of the Institute for Computer Sciences, Social Informatics and Telecommunications Engineering book series (LNICST, volume 114)
12. Frank Breitinger, Harald Baier. A Fuzzy Hashing Approach Based on Random Sequences and Hamming Distance // Annual ADFSL Conference on Digital Forensics, Security and Law 2012
13. Frank Breitinger, Knut Petter Astebol, Harald Baier, Christoph Busch. mvHash-B - a new approach for similarity preserving hashing // Seventh international conference on IT security incident management and IT forensics, IMF 2013, nuremberg, germany, march 12-14, 2013 (pp. 33-44)
14. TLSH - A Locality Sensitive Hash Jonathan Oliver, Chun Cheng, Yanggui Chen 2013
15. E. Damiani, S. De Vimercati, S. Paraboshi, P. Samarati. An Open Digest-based Technique for Spam Detection // Proceedings of the ISCA 17th International Conference on Parallel and Distributed Computing Systems, September 15-17, 2004, The Canterbury Hotel, San Francisco, California, USA
16. Исследование перцептивных хеш-функций изображений // Наука и Образование. МГТУ им. Н.Э. Баумана. Электрон, журн. 201 5. № 08. С. 269-280
17. BinDiff [Электронный ресурс] Режим доступа: https://www. zynamics.com/bindiff.html Дата обращения: 10.09.2018 г.