TL;DR

Обзор: библиотека для написания правил YARA на Python теперь существует.
Получите код: https://github.com/matonis/yara_tools
Ознакомьтесь примеры: https://github.com/matonis/yara_tools/examples
Хештег: #yara_tools

Обзор

Сегодня я представляю yara_tools, библиотеку, которую я создал, чтобы помочь исследователям безопасности создавать простые или сложные правила YARA на Python. Поскольку он написан на Python, он интегрируется везде, где уже есть Python. Если вы не знаете о YARA, прочтите документацию.

YARA - это хлеб с маслом для исследования и защиты вредоносных программ ... и yara_tools - его нож для масла.

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

Погружение: что делает yara_tools уникальным?

yara_tools позволяет делать prrreeetttyyy почти все, что вы хотели бы сделать при создании правила YARA, но с некоторыми преимуществами.

  • Скучная штука, которая входит в создание правила, в значительной степени автоматизирована (имена переменных и целочисленные приращения).
  • Раздражающие вещи, такие как работа с двоичными данными, циклы for и добавление метаданных и комментариев, теперь стали проще.
  • Действительно неприятные вещи, такие как создание и поддержание сложных условий и отношений, теперь стали немного более интуитивно понятными.

Создание правила

Обратите внимание: Пример 1 -« Hello World »
Создать правило просто. Каждое правило создается с помощью одного конструктора и возвращается как объект. Каждым аспектом правила можно управлять с помощью комбинации функций и параметров.

Если в вашем правиле есть строки или условия, yara_tools.build_rule () выдаст вам правило взамен.

Помощь с автоматизацией

Обратите внимание:
Пример 2 - Грубая форсировка строки с XOR
Пример 3 - Работа с модулем PE для поворота на Shamoon
Пример 7 - Скрипт Flame IDAPython

Одним из ключевых факторов расширения yara_tools было содействие в перспективных исследованиях.

Часто вы можете найти алгоритм декодирования / кодирования, DGA или изъян в логике автора вредоносной программы и преуспеть в грубом принуждении ряда вещей для расширения охвата или проведения некоторой охоты. Я построил столько автоматических средств в yara_tools, чтобы вы могли выбросить столько данных, сколько вам нужно, и иметь возможность уйти с правилом.

Тратьте больше времени на кодирование решений и меньше времени на то, чтобы пинать экран при форматировании правила.

Расширение контекста и доставки

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

  • Добавьте столько мета-полей, сколько захотите.
  • Наслаждайтесь возможностью добавлять к строкам встроенные комментарии.

Обработка двоичных данных

Отъезд: Пример 4 - Создание экспериментальной подписи для EXE в макросе

Передайте yara_tools.add_binary_strings () необработанный фрагмент двоичных данных и получите взамен автоматически добавленную шестнадцатеричную строку.

Сложные условия: введение в «группы условий»

Отъезд: Пример 5 - (Kaspersky & STONEDRILL)

Моим главным критерием при измерении возможностей yara_tools была способность создавать сложные условия.

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

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

›(Все из ($ s *) и 3 из ($ x)) или (любое из ($ y *) и 1 из ($ s *)) или ($ s1 и #o› = 42 и любое из ($ а, $ б, $ в, $ г))

Ой.

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

Введите «Группы условий».

Отъезд: Пример 6 - Иллюстрированные группы сложных условий

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

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

Эта концепция упоминается в yara_tools как группа условий.

Группы условий - это контейнеры для условий.

  • Группа условий имеет одно настраиваемое логическое значение, назначенное всем выражениям в ней.
  • В группе условий может быть одно или несколько выражений и условий.
  • группу условий можно инвертировать / инвертировать (не модификатор)
  • Выражение можно использовать во многих группах условий.
  • Группы условий могут быть связаны друг с другом и могут быть вложенными.

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

  • Например, общий набор условий и выражений привязки часто вращается вокруг проверки форматов файлов (например, PECOFF, заголовок MZ, строка DOS, разделы и т. Д.)

yara_tools позволяет создавать отношения между группами условий, определяя «parent_group» в соответствующем вызове, и, как показано, группы условий могут иметь значение 1 : N отношения.

Всегда помните, определяйте свои группы постепенно, как в идеале они должны быть представлены на бумаге, и пожалуйста ... пожалуйста ... Сохраняйте простые группы условий (KYCGS).

Скрытый готч и последние слова

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

Во-вторых, группы состояний являются новыми и могут вызывать некоторые головные боли. Итак, я даю вам совет, который вы не должны забывать: условия основаны на заказе.

  • Порядок, в котором вы добавляете условия, имеет значение.
  • Также имеет значение порядок, в котором вы добавляете группы условий.
  • Существует понятие «глобального условия», то есть условия, не являющегося группой условий. Они всегда добавляются первыми. Группы условий добавляются после.

Первоначально yara_tools был разработан около четырех лет назад, когда я создавал бета-версию ripPEv2 (получите OG-версию ripPE здесь!); тем не менее, он видел некоторые ограниченные испытания. Я разработал и использую его, но ему еще предстоит пройти путь, чтобы стать полностью надежным. Будут баги.

Вилка и отправьте запрос на перенос!

Я с нетерпением жду возможности увидеть, как вы его используете! #yara_tools