Для вызова YARA вам понадобятся две вещи: файл с правилами и цель для сканирования. Целью может быть файл, папка или процесс.
yara [ОПЦИИ] ФАЙЛ_ПРАВИЛ ЦЕЛЬ
В YARA 3.8 и ниже ФАЙЛ_ПРАВИЛ мог быть файлом с правилами как в исходном, так и в скомпилированном виде без различия. В YARA 3.9 необходимо явно указать, что ФАЙЛ_ПРАВИЛ содержит скомпилированные правила, используя флаг -C:
yara [ОПЦИИ] -C ФАЙЛ_ПРАВИЛ ЦЕЛЬ
Это мера безопасности для предотвращения непреднамеренного использования скомпилированных правил от третьих лиц. Использование скомпилированных правил из ненадёжных источников может привести к выполнению вредоносного кода на вашем компьютере.
Для предварительной компиляции правил можно использовать инструмент yarac. Это позволяет сэкономить время, поскольку YARA загружает скомпилированные правила быстрее, чем компилирует одни и те же правила снова и снова.
Вы также можете передать несколько исходных файлов в yara:
yara [ОПЦИИ] ФАЙЛ_ПРАВИЛ_1 ФАЙЛ_ПРАВИЛ_2 ФАЙЛ_ПРАВИЛ_3 ЦЕЛЬ
Обратите внимание, что это работает только для правил в исходном виде. При вызове YARA со скомпилированными правилами принимается только один файл.
В примере выше все правила находятся в одном пространстве имён «по умолчанию», что означает, что идентификаторы правил должны быть уникальными среди всех файлов. Однако вы можете задать пространство имён для отдельных файлов. Например:
yara [ОПЦИИ] namespace1:ФАЙЛ_ПРАВИЛ_1 ФАЙЛ_ПРАВИЛ_2 ФАЙЛ_ПРАВИЛ_3 ЦЕЛЬ
В этом случае ФАЙЛ_ПРАВИЛ_1 использует namespace1, а ФАЙЛ_ПРАВИЛ_2 и ФАЙЛ_ПРАВИЛ_3 используют пространство имён по умолчанию.
Во всех случаях правила применяются к цели, указанной как последний аргумент YARA. Если это путь к каталогу, будут просканированы все содержащиеся в нём файлы. По умолчанию YARA не сканирует каталоги рекурсивно, но для этого можно использовать опцию -r.
| Опция | Описание |
|---|---|
-C, --compiled-rules |
ФАЙЛ_ПРАВИЛ содержит правила, уже скомпилированные с помощью yarac. |
-c, --count |
Выводить только количество совпадений. |
-d <идентификатор>=<значение>, --define=<идентификатор>=<значение> |
Определить внешнюю переменную. Эту опцию можно использовать несколько раз. |
-q, --disable-console-logs |
Отключить вывод сообщений журнала консоли. |
--fail-on-warnings |
Считать предупреждения ошибками. Не действует при использовании с --no-warnings. |
-f, --fast-scan |
Режим быстрого сканирования. |
-h, --help |
Показать справку. |
-i <идентификатор>, --identifier=<идентификатор> |
Выводить только правила с указанным именем, остальные игнорировать. |
--max-process-memory-chunk=<размер> |
При сканировании памяти процесса читать данные блоками указанного размера. |
-l <число>, --max-rules=<число> |
Прервать сканирование после совпадения указанного числа правил. |
--max-strings-per-rule=<число> |
Задать максимальное количество строк на правило (по умолчанию: 10000). Если правило содержит больше указанного числа строк, произойдёт ошибка. (добавлено в 3.7.0) |
-x <модуль>=<файл>, --module-data=<модуль>=<файл> |
Передать содержимое файла как данные для модуля. Пример: -x cuckoo=/cuckoo_report.json. |
-n, --negate |
Выводить только правила, которые НЕ совпали (отрицание). |
-N, --no-follow-symlinks |
Не следовать символическим ссылкам при сканировании. |
-w, --no-warnings |
Отключить предупреждения. |
-m, --print-meta |
Выводить метаданные. |
-D, --print-module-data |
Выводить данные модулей. |
-e, --print-namespace |
Выводить пространство имён правил. |
-S, --print-stats |
Выводить статистику правил. |
-s, --print-strings |
Выводить совпавшие строки. |
-L, --print-string-length |
Выводить длину совпавших строк. |
-g, --print-tags |
Выводить теги. |
-r, --recursive |
Рекурсивный поиск по каталогам. Следует по символическим ссылкам. |
--scan-list |
Сканировать файлы, перечисленные в FILE, по одному на строку. |
--strict-escape |
Выводить предупреждения при использовании недопустимых escape-последовательностей в строках. (добавлено в 4.5.0) |
-z <размер>, --skip-larger=<размер> |
Пропускать файлы размером больше указанного (в байтах) при сканировании каталога. (добавлено в 4.2.0) |
-k <слоты>, --stack-size=<слоты> |
Выделить стек размером в указанное количество слотов. По умолчанию: 16384. Позволяет использовать более объёмные правила за счёт увеличения потребления памяти. (добавлено в 3.5.0) |
-t <тег>, --tag=<тег> |
Выводить только правила с указанным тегом, остальные игнорировать. |
-p <число>, --threads=<число> |
Использовать указанное количество потоков для сканирования каталога. |
-a <секунды>, --timeout=<секунды> |
Прервать сканирование по истечении указанного числа секунд. |
-v, --version |
Показать информацию о версии. |
-
Применить правила из /foo/bar/rules ко всем файлам в текущем каталоге. Подкаталоги не сканируются:
yara /foo/bar/rules . -
Применить правила из /foo/bar/rules к файлу bazfile. Выводить только правила с тегами Packer или Compiler:
yara -t Packer -t Compiler /foo/bar/rules bazfile -
Сканировать все файлы в каталоге /foo и его подкаталогах:
yara /foo/bar/rules -r /foo -
Определить три внешние переменные — mybool, myint и mystring:
yara -d mybool=true -d myint=5 -d mystring="my string" /foo/bar/rules bazfile -
Применить правила из /foo/bar/rules к файлу bazfile, передавая содержимое cuckoo_json_report модулю cuckoo:
yara -x cuckoo=cuckoo_json_report /foo/bar/rules bazfile