YARA — это универсальный инструмент, который иногда называют швейцарским ножиком для исследователей вредоносных программ, но использовать его можно и в других целях. Сегодня мы будем работать по в жанре «Сам себе антивирус антивирус» и расскажем, как при помощи YARA создавать правила и находить файлы по характерным признакам.
На просторах интернета можно найти статьи по теме как загружать заранее классифицированые обьекты и при этом полностью уповать на знания случайных аналитиков и верить,что там действительно находится малварь конкретного семейства.Это часто происходит в реале. Вредоносное ПО настолько быстро появляется, что поиск информации о том, как идентифицировать угрозу и быстро реализовать правило детектирования, становится вопросом жизни или смерти.
YARA — опенсорсный инструмент, который помогает изыскателям находить и классифицировать вредоносные семплы в том числе и проводить Threat Hunting. Утилита внедряет сигнатурный анализ на основе формальных YARA-описаний (правил).Там содержатся индикаторы компрометации для различных типов вредоносного ПО.
Фишка в том, что создавать правила легко и не занимает много времени. Именно поэтому YARA используют в AlienVault, Avast, ESET, FireEye, Group-IB, Kaspersky, Trend Micro, Virus Total, x64dbg… В общем, почти все, кто имеет дело с вредоносным ПО.
YARA-правила способны обрабатывать не только исполняемые файлы, но и документы, библиотеки, драйверы — все что угодно. Ими же можно сканировать сетевой трафик, хранилища данных, дампы памяти. Эти правила можно включать в другие инструменты,идентичные SIEM, антифишинг, IDS, песочницы.
Ну что будем разбираться какой имеют вид эти правила и как их составлять.
По обыкновению правила хранятся в текстовом формате в файле .yar и состоят из двух секций:
Выглядит это так:
rule SomeMalwareName {
meta:
author = "AuthorName"
strings:
…
condition:
…
}
Минимально необходимые секции — это название правила и его условия. Например, правилом ниже мы будем детектировать объекты только по их imphash (на тестовых объектах из предыдущей статьи):
import "pe"
rule MyLittleAgentTeslaRuleDetect {
condition:
pe.imphash() == "b21a7468eedc66a1ef417421057d3157" or
pe.imphash() == "f34d5f2d4577ed6d9ceec516c1f5a744"
}
AT.yar
и запустим на директории с семплами Agent Tesla. Посмотрим на результат и убедимся, что правило отработало на всех представителях Agent Tesla.C:\>
MyLittleAgentTeslaRuleDetect AgentTeslaAT11.exe
MyLittleAgentTeslaRuleDetect AgentTeslaAT12.exe
MyLittleAgentTeslaRuleDetect AgentTeslaAT13.exe
MyLittleAgentTeslaRuleDetect AgentTeslaAT14.exe
MyLittleAgentTeslaRuleDetect AgentTeslaAT16.exe
MyLittleAgentTeslaRuleDetect AgentTeslaAT2.exe
MyLittleAgentTeslaRuleDetect AgentTeslaAT18.exe
MyLittleAgentTeslaRuleDetect AgentTeslaAT15.exe
MyLittleAgentTeslaRuleDetect AgentTeslaAT10.exe
MyLittleAgentTeslaRuleDetect AgentTeslaAT3.exe
MyLittleAgentTeslaRuleDetect AgentTeslaAT6.exe
MyLittleAgentTeslaRuleDetect AgentTeslaAT7.exe
MyLittleAgentTeslaRuleDetect AgentTeslaAT1.exe
MyLittleAgentTeslaRuleDetect AgentTeslaAT9.exe
MyLittleAgentTeslaRuleDetect AgentTeslaAT4.exe
MyLittleAgentTeslaRuleDetect AgentTeslaAT17.exe
MyLittleAgentTeslaRuleDetect AgentTeslaAT5.exe
MyLittleAgentTeslaRuleDetect AgentTeslaAT8.exe
Результат — все из всех.
Как видите, правила YARA поддерживают импорт полезных модулей. Таким образом, вы можете писать свои собственные модули. Вот некоторые из наиболее часто используемых:
pe — функции, необходимые при работе с переносимыми исполняемыми объектами, например контрольная сумма imphash, отметка времени создания, расположение раздела;
hash — вычисление криптографических контрольных сумм и хешей;
Math — математические вычисления, такие как среднее арифметическое и энтропия.
Полный список ты всегда можешь глянуть в официальной документации по YARA.
В опциональной секции определений можно юзать маски (wildcard, подобия регулярных выражений). Например, для шестнадцатеричных строк возможны такие маски:
?
— наличие любого байта на месте этого символа;[4-6]
— от 4 до 6 различных байтов);|
).Рассмотрим еще один пример с несколькими правилами и продемонстрируем тебе разнообразие возможностей детектирования YARA:
import "hash"
rule MyExe_RUFUS {
strings:
$my_HEX_string = { E0 38 D2 21 32 4D 1B C1 79 EC 00 70 76 F5 62 B6 }
condition:
$my_HEX_string and hash.md5(0, filesize) == "d35936d329ac21ac3b59c525e2054078"
}
rule MyExe_Hercules4 {
strings:
$my_HEX_string = { 59 (E9 D8|FF) 1A 00 00 5? E8 [4-6] 94 8F }
condition:
$my_HEX_string
}
rule MyURL_Yandex {
strings:
$my_URL_string = "https://yandex.ru"
condition:
$my_URL_string
}
rule MyRar_SFX {
strings:
$winrar1 = "WINRAR.SFX" nocase wide ascii
$winrar2 = ";The comment below contains SFX script commands" wide ascii
$winrar3 = "Silent=1" wide ascii
$winrar4 = { E8 65 64 00 00 E9 78 FE FF FF}
//$winrar4 = "sfx" nocase
condition:
1 of them
Разберем каждое из правил:
MyExe_RUFUS
— правило срабатывает, если будет обнаружен указанный машинный код и совпадет хеш MD5;MyExe_Hercules4
— пример правила с использованием маски по шестнадцатеричным значениям. 59
(E9 D8|FF
) — значит, что должно встретиться после байта 59 либо два байта E9 D8, либо один байт FF. 5?
значит, что здесь может быть вариация от 50 до 5F. E8 [4-6] 94 значит, что между байтами E8 и 94 могут быть любые от 4 до 6 байт.MyURL_Yandex
— правило срабатывает при нахождении в объекте строки, содержащей ссылку.MyRar_SFX
— пример правила для поиска архивов SFX. "sfx" nocase
означает, что строка может быть с любой вариацией регистров символов, например Sfx
или SFX
. Параметр wide ascii
означает, что в строке должно быть соответствие по ASCII-символам, которые могут кодироваться двумя байтами (wide), что типично для исполняемых бинарников.Посмотрим, как выглядят исходные файлы для тестирования правил.
Запустим проверку с нашим правилом MyExe.yar и оценим результат.
C:\>
MyExe_Hercules4 C:SAMPLESHercules4.exe
MyExe_RUFUS C:SAMPLESrufus-2.17p.exe
MyRar_SFX C:SAMPLESHV_DETECT_FIN.exe
MyURL_Yandex C:SAMPLESDear_Recipient.pdf
Документы PDF и DOCX одинаковы, но YARA не смогла найти строку ссылки, поскольку формат DOCX является файлом ZIP. Чтобы работать с этим, вам нужно добавить собственный модуль для работы с файлами, но мы не будем вдаваться в подробности.
Самое главное — грамотно составить условие, по которому будет проверяться файл. Обычно оно комбинирует переменные из секции определения, поддерживаются логические операторы вроде or
и and
, скобки и константы. Например:
filesize
— размер файла;at
— задание смещения;1 of them
— хотя бы одно условие из перечисленных в правиле должно выполниться;any of them
— то же самое, что «1 of them».И так далее, полный список смотри в документации.
Вы можете получить правила тремя способами: загрузить их все в готовом виде (ссылки — ниже), создать их самостоятельно (вариант для энтузиастов) или позволить машине сделать это за вас. В последнем случае подходят разные генераторы, например yabin,YaYaGen,yarGen,BASS.В большинстве случаев вы можете найти уникальные строки во фрагментах вредоносных программ для создания правил. Однако вы сами понимаете, что это не самый надежный способ.
Остается только один вопрос: откуда берутся все эти предопределенные индикаторы взлома (IoC) и правила?Отвечаем: есть официальный репозиторий (и его зеркало) и масса агрегаторов правил в подборке на GitHub.
Кстати, вы можете объединить все правила в один файл .yar. Единственное требование — правила должны иметь уникальные имена, которые появятся в результате работы программы.
Чтобы взломать сеть Wi-Fi с помощью Kali Linux, вам нужна беспроводная карта, поддерживающая режим мониторинга…
Работа с консолью считается более эффективной, чем работа с графическим интерфейсом по нескольким причинам.Во-первых, ввод…
Конечно, вы также можете приобрести подписку на соответствующую услугу, но наличие SSH-доступа к компьютеру с…
С тех пор как ChatGPT вышел на арену, возросла потребность в поддержке чата на базе…
Если вы когда-нибудь окажетесь в ситуации, когда вам нужно взглянуть на спектр беспроводной связи, будь…
Elastic Security стремится превзойти противников в инновациях и обеспечить защиту от новейших технологий злоумышленников. В…