Yara 规则 - 正则表达式 - 匹配通配符

Yara Rule - Regex - Matching Wildcard

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

我相信我需要使用一些正则表达式来编写以下一些 yara 规则。 Yara 规则使用正则表达式来匹配恶意软件中特定二进制文件的执行。回答问题不需要了解这一点,只需他们使用正则表达式即可。

我已经掌握了一些基本规则,例如检测以下程序:

    C:\Program Files (x86)\Windows Kits\Debuggers\x64\cdb.exe
    C:\Program Files (x86)\Windows Kits\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 用户可以是任何特定用户,最好用通配符替换。

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

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

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

请参阅 Regular Expressions Quick Reference 了解不同结构的解释。请记住,Yara 仅支持上面列出的那些。


要回答这个问题,要匹配 C:\Program FilesC:\Program Files\Microsoft Office 或任何子目录下的 Excel.exe,您可以使用:

cuckoo.filesystem.file_access(/^C:\Program Files\(Microsoft Office\)?(.*\)?Excel\.exe$/i)
  • ^$ 用于将模式锚定到目标字符串的开头和结尾。如果模式不匹配,您可以尝试删除它们。
  • (Microsoft Office\)? 是多余的,因为 (.*\)? 会匹配 C:\Program Files 下的任何子目录。我把它包括在内以匹配问题。
  • (.*\)? 匹配任何以反斜杠 (\) 结尾的内容,包括更多的反斜杠。我把它设为可选,以允许 C:\Program Files 下的文件直接匹配。
  • 点 (.) 需要转义 (\.) 以匹配文字点,因为它被视为特殊字符。
  • 末尾的 /i 使模式不区分大小写,以与 Windows 比较文件名的方式保持一致。

要在 C:\ 下的任何位置匹配 dnx.exe,您可以使用:

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

匹配C:\下任何目录下的所有三个二进制文件:

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