Перейти к содержанию

Yara

Yara - Инструмент сигнатурного анализа файлов на предмет их соответствия предопределённым шаблонам.

Разрабатывается силами VirusTotal. GitHub проекта

Принцип работы заключается в анализе файлов на предмет наличия в них как двоичных так и текстовых паттернов. Исходя из того, что текстовые строки являются неотмлемой частью любой программы, они могут содержать в себе информацию (адреса С2 серверов, реквизиты bitcoin кошелька для выплаты и т.п.), которая может свидетельствовать о вредоносной активности такой программы.

Yara rules

Описание паттернов задаётся с помощью правил, которые описываются несложным синтаксисом. Принятое расширение файлов с правилами - .yar.

Правила могут содержать следующие секции:

  1. Import - Импорт модулей для расширения функциональности yara.
  2. Имя правила - наименование правила, теги.
  3. Meta - Используется для Описания, информации об авторах.
  4. Strings - Описание шаблонов
  5. Conditions - Описание условий сработки правила, в том числе на основании данных из секции Strings

Каждое правило в обязательном порядке должно содержать имя и секцию condition. Однако, такое правило не будет сильно полезным без секции strings - которая собственно и содержит в себе описание необходимых шаблонов.

Исчерпывающая информация по созданию собственных правил размешена на страницах документации

Готовые Yara правила можно найти на:

  1. GitHub/Yara-Rules

  2. GitHub/awesome-yara

Картинка с ключевыми концепциями Yara правил:

Примеры yara правил.
import "hash"

rule MyExe_RUFUS {
strings:
    $my_HEX_string = { E0 38 D2 21 32 4D 1B C1 79 EC 00 70 76 F5 62 B6 }
condition:
    $my_HEX_string and hash.md5(0, filesize) == "d35936d329ac21ac3b59c525e2054078"
}

rule MyExe_Hercules4 {
strings:
    $my_HEX_string = { 59 (E9 D8|FF) 1A 00 00 5? E8 [4-6] 94 8F }
condition:
    $my_HEX_string
}

rule MyURL_virusTotal {
strings:
    $my_URL_string = "//https://virustotal.com"
condition:
    $my_URL_string
}

rule MyRar_SFX {
strings:
    $winrar1 = "WINRAR.SFX" nocase wide ascii
    $winrar2 = ";The comment below contains SFX script commands" wide ascii
    $winrar3 = "Silent=1" wide ascii
    $winrar4 = { E8 65 64 00 00 E9 78 FE FF FF}
    //$winrar4 = "sfx" nocase
condition:
    1 of them
}
Проверка файлов в каталоге CheckingDir на предмет соответствия правилам из файла my_RULE.yar
yara my_RULE.yar ~/CheckingDir/

Автоматизированное создание правил

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

К таким генераторам можно отнести:

Модули

Для расширения функциональности, Yara поддерживает различные модули. Подробная информация в документации, а из наиболее используемых можно выделить:

  • pe — функции, нужные при работе с объектами Portable Executable, например контрольная сумма imphash, метка времени создания, расположение секций;

  • hash — расчет контрольных сумм и криптографических хешей;

  • math — математические подсчеты, например среднее арифметическое или энтропия.

Инструменты

Множество различных инструментов использующих Yara в своей работе представлены в репозитории GitHub/awesome-yara

Отдельно можно отметить следующие:

  1. LOKI - бесплатный опенсорс IOC сканер

  2. THOR - еще один IOC и Yara сканер от тех же разработчиков что и LOKI, правда на этот раз уже с подпиской

  3. FENRIR - IOC сканер на чистом shell