Yara Rule - Regex - Соответствующий шаблон - PullRequest
0 голосов
/ 19 октября 2019

Regex всегда был для меня чем-то вроде черного ящика.

Я считаю, что мне нужно использовать некоторое регулярное выражение, чтобы написать некоторые из следующих правил yara. Правила Yara используют регулярные выражения, чтобы соответствовать выполнению определенных двоичных файлов в вредоносной программе. Знание этого не обязательно, чтобы ответить на вопрос, просто они используют регулярные выражения.

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

    C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\cdb.exe
    C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\cdb.exe

С помощьюследующие правила

    cuckoo.filesystem.file_access(/C\:\\Program\ Files\ \(x86\)\\Windows\ Kits\\10\\Debuggers\\x64\\cdb.exe/) or
    cuckoo.filesystem.file_access(/C\:\\Program\ Files\ \(x86\)\\Windows\ Kits\\10\\Debuggers\\x86\\cdb.exe/) or

Но если я пытаюсь обнаружить выполнение следующих двоичных файлов, то есть любой файл, который соответствует шаблону, начинающемуся с C: \ Program Files \ или C: \ Program Files \Microsoft Office и заканчивается excel.exe

Что-то вроде следующего?

    cuckoo.filesystem.file_access(/C\:\\*\\Excel.exe/) or

Что еще нужно для обнаружения - это dnx.exe, возможно, что-то вроде этого будет работать:

    cuckoo.filesystem.file_access(/C\:\\*\\dnx.exe/) or

Также необходимо обнаруживать такие вещи, как:

    C:\Program Files\Microsoft Office\root\client\appvlp.exe

Где пользователь root может быть любым конкретным пользователем и в идеале должен быть заменен подстановочным знаком.

1 Ответ

1 голос
/ 21 октября 2019

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

  • Чередование (|)
  • Конкатенация
  • Повторение (*, *?, +, +?, ?, ??, {digit*,digit*}, {digit*,digit*}?, {digit+})
  • Границы (\b, \B, ^, $)
  • Группировка ((, ))
  • Классы символов (., \w, \W, \s, \S, \d, \D, [...], [^...])
  • Шестнадцатеричные побеги (\xHH)
  • Обычные побеги (\ + любой специальный символ)
  • Все остальное является буквальным или недопустимым

Он также поддерживает флаги регулярных выражений i и s после окончания выражения. (/.../is)

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


Чтобы ответить на вопрос, чтобы соответствовать Excel.exe в C:\Program Files или C:\Program Files\Microsoft Office или любом подкаталоге, вы можете использовать это:

cuckoo.filesystem.file_access(/^C:\\Program Files\\(Microsoft Office\\)?(.*\\)?Excel\.exe$/i)
  • ^ и $ предназначены для привязки шаблона к началу и концу целевой строки. Вы можете попытаться удалить их, если шаблон не совпадает.
  • (Microsoft Office\\)? является избыточным, поскольку (.*\\)? будет соответствовать любому подкаталогу в C:\Program Files. Я включил его, чтобы соответствовать вопросу.
  • (.*\\)? соответствует всему, что заканчивается обратной косой чертой (\), включая дополнительные обратные косые черты. Я сделал это необязательным, чтобы разрешить совпадение файлов непосредственно под C:\Program Files.
  • Точка (.) должна быть экранирована (\.), чтобы соответствовать буквальной точке, поскольку она считаетсяспециальный символ.
  • /i в конце делает шаблон нечувствительным к регистру для выравнивания с тем, как Windows сравнивает имена файлов.

Для соответствия dnx.exe в любом месте под C:\,Вы можете использовать это:

cuckoo.filesystem.file_access(/^C:\\(.*\\)?dnx\.exe$/i)

Для сопоставления всех трех двоичных файлов в любом каталоге в C:\:

cuckoo.filesystem.file_access(/^C:\\(.*\\)?(Excel\.exe|dnx\.exe|appvlp\.exe)$/i)
...