5. Запуск YARA из командной строки

Чтобы вызвать YARA, вам понадобятся две вещи: файл с правилами (RULES_FILE), которые вы хотите использовать (либо в исходном коде, либо в скомпилированной форме), и цель для сканирования (TARGET). Целью может быть файл, папка или процесс.

yara [OPTIONS] RULES_FILE TARGET

RULES_FILE может быть передан непосредственно в форме исходного кода или может быть предварительно скомпилирован с помощью инструмента yarac. Вы можете предпочесть использовать свои правила в скомпилированной форме, если вы собираетесь вызывать YARA несколько раз с одними и теми же правилами. Таким образом, вы сэкономите время, потому что для YARA быстрее загружать скомпилированные правила, заново чем компилировать одни и те же правила.

Вы также можете передать несколько исходных файлов в yara, как в следующем примере:

yara [OPTIONS] RULES_FILE_1 RULES_FILE_2 RULES_FILE_3 TARGET

Однако обратите внимание, что это работает только для правил в исходной форме. При вызове YARA с скомпилированными правилами принимается только один файл с правилами.

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

yara [OPTIONS] namespace1:RULES_FILE_1 RULES_FILE_2 RULES_FILE_3 TARGET

В этом случае RULE_FILE_1 использует пространство имен namespace1, а rules_file_2 и RULES_FILE_3 используют пространство имен по умолчанию.

Во всех случаях правила будут применяться к цели, указанной в качестве последнего аргумента для YARA, если это путь к каталогу, то все файлы, содержащиеся в нем, будут проверены. По умолчанию YARA не сканирует каталоги рекурсивно, для этого можно использовать опцию -r.

Доступные опции:

-t <tag> –tag=<tag>

Вывод правила с тегом <tag> и игнорирование остальных правил.


-i <identifier> –identifier=<identifier>

Вывод правила с именем <identifier> и игнорирование остальных правил.


-c –count

Вывод только нужного количества совпадений.


-n

Печатать только невыполненных правил (отрицание).


-D –print-module-data

Вывод данных модуля.


-g –print-tags

Вывод тегов.


-m –print-meta

Вывод метаданных.


-s –print-strings

Вывод совпадающих строк.


-L –print-string-length

Вывод длины совпадающих строк.


-e –print-namespace

Вывод пространства имен правил.


-p <number> –threads=<number>

Использование указанного числа потоков <number> для сканирования каталога.


-l <number> –max-rules=<number>

Прервать сканирование после совпадения нескольких <number> правил.


-a <seconds> –timeout=<seconds>

Прервать сканирование по истечении нескольких <seconds> секунд.


-k <slots> –stack-size=<slots>

Выделение стека нужного размер для необходимого количества слотов <slots>. По умолчанию: 16384. Это позволит использовать более объемные правила, хотя и с большим объемом памяти.


Добавлено в версии 3.5.0.

–max-strings-per-rule=<number>

Установка максимального числа строк в правиле (по умолчанию=10000). Если в правиле больше указанного числа строк, возникает ошибка.


Добавлено в версии 3.7.0.

-d <identifier>=<value>

Определить внешнюю переменную.


-x <module>=<file>

Передать содержимое файла <file> в качестве дополнительных данных в модуль <module>.


-r –recursive

Рекурсивное сканирование каталога.


-f –fast-scan

Режим быстрого соответствия.


-w –no-warnings

Отключить предупреждения


–fail-on-warnings

Обрабатывать предупреждения как ошибки. Не имеет эффекта, если используется с --no-warnings.


-v –version

Показать информацию о версии.


-h –help

Показать справку.


Вот несколько примеров:

Применить правило в /foo/bar/rules ко всем файлам в текущем каталоге. Подкаталоги не сканируются:

yara /foo/bar/rules

Применить правила в /foo/bar/rules к bazfile. Только отчеты о правилах, помеченных как Packer или Compiler:

yara -t Packer -t Compiler /foo/bar/rules bazfile

Сканирование всех файлов в каталоге /foo и его подкаталогах:

yara -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