Правила YARA используются для классификации и идентификации образцов вредоносных программ путем создания описаний их семейств на основе текстовых или двоичных шаблонов.
Сегодня мы разберем:
Принцип действия правил YARA
Примеры использования правил YARA
Полезные факты о YARA
Создание правил YARA
В чем суть правил YARA?
Правила YARA напоминают язык программирования. Основная их задача — определять переменные в шаблонах, найденных в образце вредоносного ПО. При полном или частичном совпадении (в зависимости от конкретного правила) этот алгоритм может быть использован для успешной идентификации вредоносного ПО.
При анализе части вредоносного ПО аналитики идентифицируют уникальные шаблоны и цепочки внутри вредоносного ПО, что позволяет им определить, к какой группе угроз и семейству вредоносных программ относится данный образец. Правило YARA, созданное на основе нескольких образцов из одного семейства вредоносных программ, помогает идентифицировать несколько образцов, все из которых могут быть связаны с одной и той же кибератакой или злоумышленником.
Изучение вредоносного ПО дает аналитику возможность создать правило YARA для нового исследуемого образца. Затем это правило можно использовать для поиска аналогичных образцов в его личной базе данных вредоносных программ или в онлайн-хранилищах (например, VirusTotal).
Если специалист по анализу вредоносных программ работает в организации, которая для защиты от вредоносных программ использует IPS или другую платформу с поддержкой YARA, правила YARA можно применить как средство обнаружения вредоносных двоичных файлов внутри организации и реагирования на них.
Примеры использования
Технология YARA особенно популярна в сфере защиты информации благодаря следующим возможностям применения:
Обнаружение и классификация вредоносных программ;
Выявление новых образцов на основе характерных семейству свойств;
Специалисты по реагированию на инциденты могут использовать правила YARA для выявления образцов и взломанных устройств;
Упреждающая настройка правил YARA может повысить степень защиты организации.
Элементы YARA, о которых необходимо знать
Чтобы создать эффективное правило YARA, необходимо знать различные элементы, которые можно использовать для его кастомизации.
Метаданные
Метаданные не влияют на то, что будет искать правило YARA, зато они предоставляют полезную информацию о самом правиле:
Автор: имя, адрес электронной почты, идентификатор Twitter;
Дата: дата создания правила;
Версия: номер версии правила YARA для отслеживания изменений;
Ссылка: ссылка на статью или загрузку образца; используется для предоставления соответствующей информации об образце вредоносного ПО, которое правило должно обнаружить;
Описание: краткое изложение, для чего предназначено правило, а также описание характеристик вредоносного ПО, которое предполагается обнаружить;
Хеш: список образцов хешей, которые использовались для создания правила YARA.
Строки
В образце вредоносного ПО часто можно найти уникальные и важные строки, которые очень помогают при создании правила YARA. Чтобы определить строку в правиле, саму строку нужно обозначить как переменную.
$a=”string from malware sample”
Помимо обозначения строки, также можно добавлять модификаторы после нее для точной настройки поиска:
$a=”malwarestring” fullword: этот модификатор будет точно соответствовать определенному слову. Например, "www.malwarestring.com" вернет совпадение, а "www.abcmalwarestring.com" — нет;
$a=”malwarestring” wide – соответствует строкам Unicode, разделенным нулевыми байтами, например, "w.w.w…m.a.l.w.a.r.e.s.t.r.i.n.g…c.o.m";
$a=”malwarestring” wide ascii: правило сможет искать соответствия по символам Unicode и ASCII;
$a=”MalwareString” nocase: правило будет искать соответствия в строке независимо от регистра.
На изображении ниже мы использовали шестнадцатеричный редактор HxD; в нем видны некоторые строки внутри инструмента:
Мы выделили строку ASCII "\photo.png"; а также соответствующее шестнадцатеричное выражение. Используя эту информацию, можно обозначить шестнадцатеричную строку в правиле YARA:
$a={5C 70 68 6F 74 6F 2E 70 6E 67}: обратите внимание на использование фигурных скобок, а не кавычек;
$a={5C 70 68 6F ?? ?F 2E 70 6E 67}: вопросительные знаки можно использовать в качестве подстановочных, если обнаружены небольшие изменения шестнадцатеричной модели в нескольких образцах;
$a={5C [2-10] 6F 74 6F 2E 70 6E 67}: в этом примере видно, что строка может начинаться со значения 5C, но перед тем, как совпадение с шаблоном повторится, возможны 2–10 случайных байтов;
$a={5C (01 02 | 03 04) 6F 2E 70 6E 67}: в этом примере видно, что шестнадцатеричные значения на этом участке могут быть "01 02" или "03 04".
Приведенные ниже строки и уникальные идентификаторы очень помогают при создании правил YARA:
Мьютексы: уникальны для семейств вредоносных программ; проверка на наличие мьютекса позволяет вредоносному ПО определить, было ли устройство взломано ранее;
Редкие и необычные пользовательские агенты: обнаруживаются, когда вредоносное ПО связывается с его инфраструктурой C2;
Ключи реестра: часто создаются вредоносным ПО как механизм сохранения;
Пути PDB: сокращение от Program Database (базы данных программы). PDB содержит отладочную информацию о файле. У вас вряд ли будет PDB для вредоносного ПО, но путь PDB часто можно найти и использовать в правиле YARA; например c:\user\desktop\vc++ 6\6.2.20\scrollerctrl_demo\scrollertest\release\scrollertest.pdb.
Зашифрованные строки конфигурации: вредоносное ПО часто шифрует свою конфигурацию, которая содержит полезные идентификаторы компрометации (IOC), например IP-адреса и домены. Если у вас есть навыки реверс-инжиниринга для идентификации этих зашифрованных данных, их можно использовать в правиле YARA.
Условия
Раздел строк определяет критерии поиска, которые будут использоваться для правила YARA. Раздел условий определяет критерии, по которым правило будет искать совпадения. Ниже мы описали несколько возможных условий:
uint16 (0) == 0x5A4D: проверка заголовка файла — полезное условие, которое следует включить в правила YARA. Это условие предусматривает, что файл должен быть исполняемым файлом Windows, поскольку шестнадцатеричные значения 4D 5A всегда располагаются в начале заголовка исполняемого файла. В YARA ситуация обратная из-за порядка байтов.
uint32(0)==0x464c457f) or (uint32(0) == 0xfeedfacf) or (uint32(0) == 0xcffaedfe) or (uint32(0) == 0xfeedface) or (uint32(0) == 0xcefaedfe): используется для идентификации двоичных файлов Linux путем проверки заголовка файла.
(#a == 6): количество строк равно 6.
(#a> 6): количество строк больше 6
Указать условие размера файла можно по-разному:
(filesize>512)
(filesize<5000000)
(filesize<5MB)
После указания строк в правиле вы можете установить число совпадений, которое необходимо инициировать в качестве условия, чтобы правило возвращало выявленные совпадения:
2 из ($a,$b,$c)
3 из указанных
4 из ($a*)
все указанные
любые указанные
$a и не $b
По возможности попробуйте использовать 2–3 группы условий. Это поможет избежать ложных срабатываний, а также повысит надежность созданного правила.
Импорт
Импорты — отличный способ реализовать дополнительные условия в ваших правилах YARA. В этой статье мы расскажем о некоторых примерах использования импорта PE.
Библиотека PE
Добавление синтаксиса "import pe" в начало правила YARA позволит использовать функциональные возможности PE YARA; это поможет, если уникальные строки не идентифицируются.
Экспорты — хорошее дополнение к правилу YARA. Это функции, созданные автором вредоносной программы, поэтому обязательно воспользуйтесь их уникальными именами. На изображении ниже мы идентифицировали используемые DLL экспорты, которые были размещены вредоносной программой Formbook:
pe.exports (Botanist, Chechako, Originator” Repressions)
На изображении ниже показана интересная DLL, которая используется для HTTP-соединения, — winhttp.dll:
Мы также видим, что эта библиотека импортирует ряд полезных API, которые можно включить в правило.
pe.imports (winhttp.dll, WinHttpConnect)
pe.machine == pe.MACHINE_AMD64: используется для проверки типа устройства.
Imphash — это хеш таблицы адресов импорта (Import Address Table, IAT) вредоносного ПО, который мы определили на предыдущем изображении с помощью PEStudio. Одна и та же таблица IAT часто используется в семействе вредоносных программ, поэтому ее использование в правиле YARA должно обнаруживать похожие образцы.
pe.imphash() == “0E18F33408BE6E4CB217F0266066C51C”
Чтобы временная метка файлов использовалась в правиле YARA, она должна быть преобразована во временную метку эпохи Unix; на изображении ниже показано, когда было скомпилировано вредоносное ПО:
Использование синтаксиса "//" позволяет вносить комментарии в правило, поэтому ниже мы можем добавить комментарий с указанием временной метки эпохи.
pe.timestamp == 1616850469 // Tue Dec 08 17:58:56 2020
Раздел версии PEStudio показывает, что этот образец Lokibot имеет некоторые уникальные идентификаторы версии. Используя функцию pe.version_info, мы можем указать, какие свойства версии использовать (например, поле "CompanyName").
pe.version_info [“CompanyName”] содержит AmAZon.cOm
pe.language(0x0804) // Китай: определенные языки можно использовать с указанием кода языка Microsoft.
На изображении ниже видно, что мы смогли идентифицировать ряд разделов вредоносного ПО, нетипичных для других исполняемых файлов Windows, которые были проанализированы. Используя эту информацию, можно указать конкретные названия разделов и их соответствующие номера.
Обратите внимание, что разделы имеют нулевой индекс, поэтому первый раздел будет иметь значение "0", второй — "1" и так далее. Итак, в приведенном ниже примере мы использовали раздел под названием "BSS", который является разделом номер два.
pe.sections[2].name == “BSS”
Создание правил Yara
На изображении ниже показан пример правила YARA, которое мы написали на основе образца вредоносного ПО Redline:
Начало правила
Правило YARA начинается с синтаксиса "rule", за которым следует имя правила. Затем к нему добавляется "{" c обозначением содержания правила YARA.
Чуть выше мы импортировали функцию PE, указав "import pe"; эта функция используется в разделе с условиями.
Метаданные
В это правило мы включили автора, тип файла вредоносного ПО, дату написания правила, его версию, ссылку на источник, из которого получен образец, а также хеш вредоносного ПО. Это дает некоторую контекстную информацию, которая будет полезна всем, кто будет пользоваться правилом, а возможно, и самому автору при обращении к нему через некоторое время.
Указание строк
Затем мы обозначили некоторые строки, которые были найдены в образце вредоносного ПО. Они определены как переменные в правиле и могут использоваться для поиска файлов с аналогичным содержимым.
Строки, которые мы использовали, были идентифицированы с помощью PEStudio и представляют собой набор интересных API Windows и строк, которые будут уникальными для этого семейства вредоносных программ.
Условия
В разделе с условиями указано, какие условия должны быть выполнены, чтобы правило YARA выявило совпадение. Первое сформулированное нами правило заключается в том, что заголовок файла должен быть исполняемым файлом Windows. Это делается путем указания шестнадцатеричных значений, найденных в заголовке исполняемого файла Windows. На изображении ниже вы можете увидеть, как это определяется с помощью шестнадцатеричного редактора.
Версия файла во вредоносной программе также показалась нам в какой-то мере уникальной, поэтому мы включили ее в правило “Versium Research 5 Installation”.
Мы также указали на необходимость присутствия трех импортов, которые инструмент PEStudio пометил как подозрительные:
Со временем вы сможете обнаруживать подозрительные разделы в образцах. Наиболее часто встречаются разделы ".data", ".reloc", and ".rsrc". В этом образце мы обнаружили несколько разделов, которые не соответствуют этому шаблону, поэтому наше правило YARA ищет разделы под названием "CODE" и "BSS".
Согласно другим условиям, должна присутствовать первая строка, помеченная как "$a1", ИЛИ три строки из "$b" или одна из строк "$c". Неизменным остается условие, по которому размер файла не должен превышать 50 000 байт.
Теперь это правило готово для использования, и мы можем начать поиск дополнительных образцов Redline.
Надеемся, это материал будет вам полезен, чтобы создавать собственные правила YARA для поиска новых образцов и их анализа или, в качестве альтернативы, для их активного обнаружения в своей организации.