Yara правила что это
Catena scientiarum
Yara — это и инструмент, и формат представления индикаторов компрометации (IOC), предназначенный для идентификации и классификации вредоносных программ. Он был создан Виктором Альварезом (Victor M. Alvarez) из VirusTotal для организации и распространения информации среди аналитиков.
Далее показан пример файла Yara для Linux-руткита Umbreon:
Документ разделен на три части.
— Раздел «мета» содержит информацию об IOC, такую как имя автора, время создания или ссылка на подробную документацию.
— Раздел «строк» содержит три строки — одну в шестнадцатеричном формате и две в формате ASCII, которые идентифицируют руткит.
— В разделе «условий» к исследуемым файлам применяется фильтр, чтобы найти соответствующие особым критериям. В этом примере сначала производится поиск по заголовку файла, который соответствует формату ELF (uint32(0) == 0x464c457f), а затем поиск общедоступного выходного файла (uint8(16) == 0x0003) типа ELF. Если для обоих условий найдены соответствия, Yara станет искать строки, указанные ранее. Если все они будут присутствовать в файле, то это будет расцениваться как обнаружение руткита.
Консольный инструмент Yara способен сканировать целые системы на наличие файлов, которые соответствуют сигнатурам вредоносных файлов, применив команду:
Проект правил Yara собирает IOC, выявленные аналитиками безопасности во время расследований, и делает их широкодоступными. Yara сосредоточен на файловых IOC [1].
Про написание сигнатур тут и тут.
Источники литературы:
— «Безопасный DevOps. Эффективная эксплуатация систем» (2020)
— Васильева И.Н. Расследование инцидентов информационной безопасности : учебное пособие / И.Н. Васильева. — СПб. : Изд-во СПбГЭУ, 2019. — 113 с. [PDF]
Yara. Пишем правила, чтобы искать малварь и не только
Содержание статьи
В нашей прошлой статье («Хеш четкий и хеш нечеткий») мы рассказали, как загружали заранее классифицированные объекты и при этом полностью уповали на знания рандомных аналитиков и верили (конечно, не до конца!), что там действительно находится малварь конкретного семейства. Такое часто происходит в реальном мире, вредоносное ПО настолько быстро появляется, что информацию о том, как идентифицировать угрозу и быстро реализовать правило детектирования, порой бывает почти что вопросом жизни или смерти.
YARA — это опенсорсный инструмент, который помогает исследователям искать и классифицировать вредоносные семплы и даже проводить Threat Hunting. Утилита выполняет сигнатурный анализ на основе формальных YARA-описаний (правил). В них содержатся индикаторы компрометации для разных типов вредоносного ПО.
Фишка в том, что делать правила легко и не занимает много времени. Именно поэтому YARA используют в AlienVault, Avast, ESET, FireEye, Group-IB, Kaspersky, Trend Micro, Virus Total, x64dbg. В общем, почти все, кто имеет дело с анализом вредоносного ПО.
YARA-правила могут обрабатывать не только исполняемые файлы, но и документы, библиотеки, драйверы — все что угодно. Ими же можно сканировать сетевой трафик, хранилища данных, дампы памяти. Эти правила можно включать в другие инструменты, такие как SIEM, антифишинг, IDS, песочницы.
Давай разберемся, как же выглядят эти правила и как их составлять.
Структура правил
Применяем YARA
Минимально необходимые секции — это название правила и его условия. Например, правилом ниже мы будем детектировать объекты только по их imphash (на тестовых объектах из предыдущей статьи):
Сохраним файл как AT. yar и запустим на директории с семплами Agent Tesla. Посмотрим на результат и убедимся, что правило отработало на всех представителях Agent Tesla.
Результат — все из всех.
Как ты мог заметить, правила YARA поддерживают импорт полезных модулей. Соответственно, можно написать свои модули. Вот несколько наиболее часто используемых:
Полный список ты всегда можешь глянуть в официальной документации по YARA.
Пишем правила
В опциональной секции определений можно юзать маски (wildcard, подобия регулярных выражений). Например, для шестнадцатеричных строк возможны такие маски:
Рассмотрим еще один пример с несколькими правилами и продемонстрируем тебе разнообразие возможностей детектирования YARA:
Обзор правил YARA: изучение инструмента исследования вредоносного ПО
Правила 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= : обратите внимание на использование фигурных скобок, а не кавычек;
$a=<5C 8 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
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 для поиска новых образцов и их анализа или, в качестве альтернативы, для их активного обнаружения в своей организации.
🔬 Как писать правила YARA для повышения безопасности и обнаружения вредоносных программ
YARA не заменит антивирусное программное обеспечение, но поможет вам эффективнее обнаруживать проблемы!
Узнаем, как писать правила YARA для повышения безопасности и улучшения реагирования на инциденты.
В нашей первой статье о YARA мы определили, что это за инструмент и в каком контексте его можно использовать: обнаружение вредоносного ПО в сети или на конечных устройствах, помощь в реагировании на инциденты и мониторинге, классификация файлов или даже обнаружение утечек конфиденциальных данных.
Мы также показали, как его установить.
Теперь пришло время написать правила, чтобы получить максимальную отдачу от него.
Для начала используем пустой шаблон
Правила YARA – это текстовые файлы, которые следуют очень простому, но мощному синтаксису.
Правила YARA всегда содержат три части:
По моему опыту, настоятельно рекомендуется создать пустой шаблон, который вы всегда будете использовать для начала написания нового правила.
Таким образом, вам просто нужно будет заполнить несколько переменных и добавить необходимые условия.
Используя этот шаблон, можно быстро отредактировать метаданные и имя правила (в нашем примере оно называется samplerule).
Метаданные могут быть любыми, которые пользователь захочет поместить туда.
Теперь, когда метаданные написаны, давайте начнем писать первое правило.
Первое правило
Правила YARA представляют собой комбинацию элементов строк и условий.
Строки могут быть текстовыми, шестнадцатеричными строками или регулярными выражениями.
Условия – это логические выражения, как и в других языках программирования.
Наиболее известными являются AND, OR, NOT.
Также могут использоваться реляционные, арифметические и битовые операторы.
Вот первое правило:
Итак, давайте объясним это правило под названием netcat_detection.
После наших обычных метаданных, раздел strings содержит две переменные, str1 и str2, которые, конечно, могут быть названы как угодно.
Также, чтобы проиллюстрировать, как добавлять комментарии, первая переменная содержит один комментарий в конце.
Часть условия содержит следующее условие: Она должна соответствовать либо str1, либо str2.
Это можно было бы написать более удобным способом:
Это может быть полезно, если у нас много различных переменных и мы хотим просто сопоставить любую из них.
Запуск первого правила
Давайте теперь запустим наше правило, которое мы сохранили как файл с именем rule1.yar.
Мы запустим его на папку, содержащей несколько различных файлов, два из которых являются 32- и 64-битной версиями программы netcat.
Наша система для тестирования представляет собой дистрибутив Kali Linux, но это не имеет значения, так как Yara может быть легко установлена на операционные системы Linux, Mac или Windows.
Как и ожидалось, YARA запускается и возвращает имена всех файлов, соответствующих правилу.
Конечно, можно поместить столько правил YARA, сколько нужно, в один файл, что удобнее, чем иметь много разных файлов правил.
В качестве примечания, обнаружение инструментов типа netcat где-нибудь в корпоративной сети, возможно, действительно стоит расследовать: Этот инструмент не должен быть найден на компьютере обычного пользователя, поскольку он позволяет компьютерам соединяться и обмениваться данными через определенные порты и может использоваться злоумышленниками.
Конечно, он также может использоваться ИТ-специалистами или сотрудниками безопасности, поэтому необходимо провести расследование, чтобы определить, почему он был обнаружен на компьютере из корпоративной сети.
Более сложные строки
Для поиска файлов в системе может быть достаточно совпадения базовой строки.
Однако строки могут быть закодированы по-разному в разных системах или могут быть слегка изменены злоумышленниками.
Одним из таких изменений может быть, например, изменение регистра строк с использованием случайного верхнего и нижнего регистра.
К счастью, YARA легко справляется с этим.
В следующей части строк YARA строка будет соответствовать независимо от того, какой регистр она использует:
Если строки кодируются с использованием двух байт на символ, можно использовать модификатор “wide”, который, конечно, можно комбинировать с другим модификатором:
Для поиска строк как в ASCII, так и в форме wide, модификатор “ascii” можно использовать в сочетании с wide.
Шестнадцатеричные строки
Шестнадцатеричные строки также могут быть легко использованы:
Здесь представлены три различные шестнадцатеричные переменные.
Первая из них ищет точную последовательность в шестнадцатеричных строках.
Третья строка ищет два первых байта, затем скачок от двух до четырех символов, затем два последних байта.
Это очень удобно, когда некоторые последовательности отличаются в разных файлах, но показывают предсказуемое количество случайных байтов между двумя известными.
Регулярные выражения
Регулярные выражения, как и в любом языке программирования, очень полезны для обнаружения определенного содержимого, которое может быть написано различными способами.
В YARA они определяются с помощью строки, которая начинается и заканчивается символом слэш (/).
Рассмотрим пример, который имеет смысл.
В бинарном файле вредоносной программы разработчик оставил отладочную информацию, в частности знаменитую строку PDB.
Теперь идея заключается в том, чтобы создать правило, которое будет соответствовать не только этой вредоносной программе, но и всем различным ее версиям в случае изменения номера версии.
Также мы решили исключить из правила диск “D”, так как разработчик может иметь его и на другом диске.
Обратите внимание, что символы \ из наших строк были удвоены, потому что \ – это специальный символ, который должен быть экранирован, как в языке C.
Более сложные условия
Условия могут быть более сложными, чем просто совпадение одной или нескольких строк.
Вы можете использовать условия для подсчета строк, для указания смещения, по которому вы хотите найти строку, для соответствия размеру файла или даже для использования циклов.
Заключение
В этой статье показаны самые основные возможности YARA.
Конечно, мы не могли описать все, поскольку это действительно своего рода язык программирования.
Возможности, предоставляемые YARA для сопоставления файлов, совершенно безграничны.
Чем больше аналитик будет работать с YARA, тем лучше он будет ее чувствовать и совершенствовать свои навыки для написания более эффективных правил.