0Pricing
Cyber Security Academy · Урок

Синтаксис правил YARA

Строки, условия и метаданные

«Синтаксис правил YARA» — бесплатный урок Cyber Security Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cyber Security Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cyber Security Academy содержит 4 уроков всего.

Три раздела

Правило YARA имеет имя и до трёх разделов: meta, strings и condition. Условие — единственный обязательный раздел, но в реальных правилах используются все три.

rule Example_Malware
{
  meta:
    author = "analyst"
    description = "Detects Example family"
  strings:
    $a = "EvilConfig"
    $b = { 6A 40 68 00 30 00 00 }
  condition:
    $a and $b
}

Раздел метаданных

meta содержит описательные метаданные, которые не влияют на сопоставление, но крайне важны для первичного анализа и сопровождения.

  • author, date, description
  • reference — ссылка на отчёт или рекомендацию
  • hash — образец или образцы, на основе которых создано правило
  • tlp — категория совместного использования

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

Текстовые строки

Раздел strings определяет идентификаторы (начинающиеся с $), связанные с шаблонами. Самый простой вариант — строка текста в кавычках.

Модификаторы уточняют сопоставление:

  • nocase — без учёта регистра
  • wide — UTF-16 (два байта на символ, часто используется в Windows)
  • ascii — ASCII (по умолчанию; объединяйте с wide, чтобы сопоставлять оба варианта)
  • fullword — сопоставлять только целое слово
strings:
  $s1 = "cmd.exe /c" nocase
  $s2 = "InjectDll" wide ascii
  $s3 = "admin" fullword

Шестнадцатеричные строки

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

Шестнадцатеричные строки поддерживают гибкость:

  • ?? — подстановочный полубайт или байт
  • [n-m] — переход через от n до m произвольных байтов
  • ( A | B ) — альтернативные варианты
strings:
  $h1 = { 4D 5A 90 00 }
  $h2 = { E8 ?? ?? ?? ?? 83 C4 04 }
  $h3 = { 6A 00 [2-6] FF 15 ?? ?? ?? ?? }
  $h4 = { ( B8 | B9 ) 00 00 00 00 }

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

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

Регулярные выражения обладают большими возможностями, но требуют много ресурсов; по возможности предпочитайте фиксированные строки или шестнадцатеричные последовательности и жёстко ограничивайте регулярное выражение привязками, чтобы не сканировать весь файл.

strings:
  $re1 = /mutex_[a-f0-9]{8}/ nocase
  $re2 = /https?:\/\/[a-z0-9]{12,20}\.top\// ascii

Раздел условий

condition — логическое выражение, определяющее совпадение. Ссылайтесь непосредственно на идентификаторы строк: отдельное $a имеет значение true, если строка найдена.

Объединяйте их с помощью and, or, not и скобок. Здесь задаётся логика, которая отличает настоящее совпадение с семейством от случайного совпадения.

condition:
  $a and ($b or $c) and not $benign

Подсчёт и множества

YARA предоставляет выразительные кванторы для множеств строк:

  • any of them / all of them
  • 2 of ($s*) — как минимум два элемента группы
  • #a > 3 — количество совпадений $a превышает 3

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

condition:
  3 of ($str*) and #marker >= 2

Смещения и размер файла

Условия могут учитывать где происходит совпадение, а также размер файла:

  • $a at 0 — совпадение должно находиться по смещению 0
  • $a in (0..1024) — в пределах диапазона байтов
  • filesize — общий размер, например filesize < 200KB
  • uint16(0) == 0x5A4D — чтение целого числа по смещению, здесь — заголовка MZ

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

condition:
  uint16(0) == 0x5A4D and filesize < 500KB and $payload

Модули

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

  • pe — PE imports, секции, точка входа, подписи, imphash
  • hash — вычисление md5/sha256 для областей
  • math — entropy и статистика
  • elf, dotnet, magic

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

import "pe"
condition:
  pe.imphash() == "a1b2c3d4e5f6..." and
  pe.imports("kernel32.dll", "VirtualAllocEx")

Перебор множеств

Для более сложной логики YARA поддерживает циклы по коллекциям с помощью for. Можно задать условия вроде «как минимум два из этих смещений обладают определённым свойством» или «имя любой секции соответствует шаблону».

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

import "pe"
condition:
  for any i in (0..pe.number_of_sections - 1) : (
    pe.sections[i].name == ".evil"
  )

Глобальные, приватные правила и теги

Ключевые слова на уровне правила организуют набор правил:

  • global rule — его условие ограничивает действие всех остальных правил в файле, например разрешает сканировать только файлы PE
  • private rule — повторно используемый строительный блок, который сам по себе не сообщается, но может быть использован другими правилами
  • теги после имени правила классифицируют совпадения, например для фильтрации результатов
global private rule IsPE { condition: uint16(0) == 0x5A4D }

rule Dropper : trojan dropper {
  strings: $a = "drop_payload"
  condition: $a
}

Быстрая проверка

Оцените надёжность условия.

Итоги

Синтаксис правил YARA в одном обзоре:

  • Правило rule = meta + strings + condition
  • Текстовые строки с модификаторами без учёта регистра, широкого формата, ASCII и целого слова
  • Шестнадцатеричные строки с подстановками ??, переходами [n-m] и вариантами
  • Регулярные выражения для структурированных шаблонов переменной формы, используйте их умеренно
  • condition объединяет строки логическими операторами И, ИЛИ и НЕ
  • Кванторы: любое/все/N из, а также счётчик #a
  • Привязка: позиция, диапазон, размер файла и чтение целых чисел
  • Модули (pe, hash, math) сопоставляют структурированные данные и imphash
  • global, private и теги организуют наборы правил

Далее: практический поиск с помощью строк и шестнадцатеричных шаблонов.

Часто задаваемые вопросы

Урок «Синтаксис правил YARA» бесплатный?

Да — полный текст урока «Синтаксис правил YARA» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cyber Security Academy, подпишись на CoddyKit PRO. Курс Cyber Security Academy содержит 4 уроков всего.

Чему я научусь в уроке «Синтаксис правил YARA»?

Строки, условия и метаданные Ты практикуешь Cyber Security Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Cyber Security Academy?

Предыдущий опыт не требуется. Cyber Security Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Синтаксис правил YARA»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Cyber Security Academy?

Да. Каждый урок Cyber Security Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Для чего нужен YARA
  2. Синтаксис правил YARA
  3. Поиск по строкам и шестнадцатеричным данным
  4. Масштабирование и автоматизация сканирования
← Назад к Cyber Security Academy