Большой сигнатурный review

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

Это общий обзор имеющихся технологий!

Хеширование

MD5

Алгоритм и одноимённая утилита, в мире линуксов иногда имеет название md5sum. Как не сложно догадаться, подсчитывает хеш файла. Помещена в этой статье для плавности повествования.

MD5 часто используется для white-listing’a, иначе говоря списка доверенных файлов, проверять которые нет смысла. Например, системных. Для верности может быть дополнена другими хешами, например SHA-1 или SHA-256.

ssdeep (Fuzzy Hash)

Исторически возник из проекта spamsum, который резал почтовый спам. Идея состоит в том, что бы поделить файл на блоки и хешировать каждый из них отдельно, урезав каждый хеш до одной буквы. Например:

Что обозначает, что размер блока равен 96, а каждая буква представляет определенную часть файла. Если файл изменился частично – ssdeep сможет его опознать. Самый верный способ уйти от этого хеша – изменить размер файла в пару раз,  тогда размер блока станет иным и  хеши поломаются.

Описывать детали алгоритма не буду, но вы сможете их посмотреть в современной си-шарп инкарнации Fuzzy-Hashing.

Формато-зависимое хеширование

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

Например, можно хешировать только Optional или Section Header, так или почти так поступают довольно многие ав.

Чтобы проиллюстрировать этот пример, посмотрите мою реализацию движка для поиска “заимствованных” функций в pe32.

Шаблоны

PEiD

Открываем файл userdb.txt

Обычный WildCard, с двумя вариантами поиска – по всему файлу или только точке входа.

 TrID

Утилита TrID используется при анализе на VirusTotal, призвана определять тип файла. Сигнатуры имеют вид:

Уже лучше, можно задать позицию.

ClamAv

Сигнатура выглядит так:

Поддерживает:

  • поиск точных вхождений
  • альтернативные варианты
  • произвольные расстояния между вхождениями

Основная статья с разбором всех нюансов лежит здесь

Регулярные выражения

Мощный шаблонный язык, позволяет описать всё что угодно, кроме вложенных конструкций, типа xml. “Сигнатура” может выглядеть так:

Подробности здесь

Yara

Продвинутый сигнатурный двиг, поддерживает все тоже самое что и ClamAv, только с кучей дополнений. Самый лучший сигнатурный двиг с открытыми исходниками.

Подробней можно почитать здесь

Частота вхождений

N-grams

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

Что такое n-грамма? Это все подстроки длины N от одной большой строки. Для примера в строке “MALWARE” могут быть выделены следующие 4-граммы: “MALW”,“ALWA”, “LWAR”, “WARE”

Суть алгоритма в том что бы выбрать оптимальную ширину “окна” (размер подстроки) и подсчитать количество вхождений.

andromeda loader

Сравнение двух версий лоадера Andromeda

Таким образом финальная сигнатура будет выглядеть вроде:

И о чудо, оно даже работает!

Подводя итоги

Я рассмотрел сигнатурные движки с которыми знаком сам, возможно мы знаете больше меня на этом поприще, если есть что добавить – оставьте комментарий!

Не пропустите апдейты +)

2 thoughts on “Большой сигнатурный review

Добавить комментарий