0

正则表达式对我来说一直是一个黑匣子。

我相信我需要使用一些正则表达式来编写以下一些 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 用户可以是任何特定用户,理想情况下将替换为通配符。

4

1 回答 1

2

阅读Yara 源代码,它似乎推出了它自己的正则表达式。仅支持基本构造:

  • 交替 ( |)
  • 级联
  • 重复 ( *, *?, +, +?, ?, ??, {digit*,digit*}, {digit*,digit*}?, {digit+})
  • 边界 ( \b, \B, ^, $)
  • 分组 ( (, ))
  • 字符类 ( ., \w, \W, \s, \S, \d, \D, [...], [^...])
  • 十六进制转义 ( \xHH)
  • 正常转义(\+ 任何特殊字符)
  • 其他任何东西都是文字或非法的

它还支持正则表达式标志i和表达式s结束之后。( /.../is)

请参阅正则表达式快速参考以了解不同构造的说明。请记住,Yara 仅支持上面列出的那些。


要回答这个问题,要在or或任何子目录Excel.exe下匹配,您可以使用以下命令:C:\Program FilesC:\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)
于 2019-10-21T10:04:15.737 回答