🔬 Как писать правила YARA для повышения безопасности и обнаружения вредоносных программ |

🔬 Как писать правила YARA для повышения безопасности и обнаружения вредоносных программ

Мануал

YARA не заменит антивирусное программное обеспечение, но поможет вам эффективнее обнаруживать проблемы!

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

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

Мы также показали, как его установить.

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

Для начала используем пустой шаблон

Правила YARA – это текстовые файлы, которые следуют очень простому, но мощному синтаксису.

Правила YARA всегда содержат три части:

  • Часть meta: Эта часть содержит общую или специфическую информацию, которая не обрабатывается, но служит пользователю для понимания того, о чем идет речь.
  • Часть strings: Эта часть содержит все строки, которые необходимо искать в файлах.
  • Часть condition: Эта часть определяет условие для поиска. Это может быть просто совпадение одной или нескольких строк, но может быть и более сложным, как мы увидим далее в этой статье.

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

Таким образом, вам просто нужно будет заполнить несколько переменных и добавить необходимые условия.

rule samplerule
{
meta:
author="Itsecforu"
version="0.1"
date="2021/07/12"
reference="any useful reference"
strings:
condition:
}

Используя этот шаблон, можно быстро отредактировать метаданные и имя правила (в нашем примере оно называется samplerule).

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

Теперь, когда метаданные написаны, давайте начнем писать первое правило.

Первое правило

Правила YARA представляют собой комбинацию элементов строк и условий.

Строки могут быть текстовыми, шестнадцатеричными строками или регулярными выражениями.

Условия – это логические выражения, как и в других языках программирования.

Наиболее известными являются AND, OR, NOT.

Также могут использоваться реляционные, арифметические и битовые операторы.

Вот первое правило:

rule netcat_detection
{
meta:
author="Itsecforu"
version="0.1"
date="2021/05/12"
reference="netcat is a free tool available freely online"
strings:
$str1="gethostpoop fuxored" // this is very specific to the netcat tool
$str2="nc -l -p port [options]"
condition:
$str1 or $str2
}

Итак, давайте объясним это правило под названием netcat_detection.

После наших обычных метаданных, раздел strings содержит две переменные, str1 и str2, которые, конечно, могут быть названы как угодно.

Также, чтобы проиллюстрировать, как добавлять комментарии, первая переменная содержит один комментарий в конце.

Часть условия содержит следующее условие: Она должна соответствовать либо str1, либо str2.

Это можно было бы написать более удобным способом:

condition:
any of ($str*)

Это может быть полезно, если у нас много различных переменных и мы хотим просто сопоставить любую из них.

Запуск первого правила

Давайте теперь запустим наше правило, которое мы сохранили как файл с именем rule1.yar.

Мы запустим его на папку, содержащей несколько различных файлов, два из которых являются 32- и 64-битной версиями программы netcat.

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

Как и ожидалось, YARA запускается и возвращает имена всех файлов, соответствующих правилу.

Конечно, можно поместить столько правил YARA, сколько нужно, в один файл, что удобнее, чем иметь много разных файлов правил.

Запуск YARA с опцией -s показывает точные строки, которые совпали с этими файлами.

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

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

Более сложные строки

Для поиска файлов в системе может быть достаточно совпадения базовой строки.

Однако строки могут быть закодированы по-разному в разных системах или могут быть слегка изменены злоумышленниками.

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

К счастью, YARA легко справляется с этим.

В следующей части строк YARA строка будет соответствовать независимо от того, какой регистр она использует:

strings:
$str1="thisisit" nocase

Теперь условие $str1 будет соответствовать любому используемому регистру: “ThisIsIt”, “THISISIT”, “thisisit”, “ThIsIsiT” и т.д.

Если строки кодируются с использованием двух байт на символ, можно использовать модификатор “wide”, который, конечно, можно комбинировать с другим модификатором:

 strings:
$str1="thisisit" nocase wide

Для поиска строк как в ASCII, так и в форме wide, модификатор “ascii” можно использовать в сочетании с wide.

strings:
$str1="thisisit" ascii wide

Шестнадцатеричные строки

Шестнадцатеричные строки также могут быть легко использованы:

strings:
$str1={ 75 72 65 6C 6E 20 }
$str2={ 75 72 65 6C ?? 20 }
$str3={ 75 72 [2-4] 65 6C }

Здесь представлены три различные шестнадцатеричные переменные.

Первая из них ищет точную последовательность в шестнадцатеричных строках.

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

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

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

Регулярные выражения

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

В YARA они определяются с помощью строки, которая начинается и заканчивается символом слэш (/).

Рассмотрим пример, который имеет смысл.

В бинарном файле вредоносной программы разработчик оставил отладочную информацию, в частности знаменитую строку PDB.

Она гласит:

D:\workspace\Malware_v42\Release\malw.pdb

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

Также мы решили исключить из правила диск “D”, так как разработчик может иметь его и на другом диске.

Обратите внимание, что символы \ из наших строк были удвоены, потому что \ – это специальный символ, который должен быть экранирован, как в языке C.

Более сложные условия

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

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

Заключение

В этой статье показаны самые основные возможности YARA.

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

Возможности, предоставляемые YARA для сопоставления файлов, совершенно безграничны.

Чем больше аналитик будет работать с YARA, тем лучше он будет ее чувствовать и совершенствовать свои навыки для написания более эффективных правил.

 

 

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий