正则表达式对我来说一直是一个黑匣子。
我相信我需要使用一些正则表达式来编写以下一些 yara 规则。Yara 规则使用正则表达式来匹配恶意软件中特定二进制文件的执行。了解这一点对于回答这个问题不是必需的,只需他们使用正则表达式即可。
我有一些基本规则,例如检测以下程序:
C:Program Files (x86)Windows Kits10Debuggersx64cdb.exe
C:Program Files (x86)Windows Kits10Debuggersx86cdb.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\ Office 开头并以 excel 结尾的模式匹配的任何文件Microsoft.exe
像下面这样?
cuckoo.filesystem.file_access(/C:\*\Excel.exe/) or
还需要检测的是dnx.exe,也许这样的东西会起作用:
cuckoo.filesystem.file_access(/C:\*\dnx.exe/) or
还需要检测以下内容:
C:Program FilesMicrosoft Officerootclientappvlp.exe
其中 root 用户可以是任何特定用户,理想情况下会替换为通配符。
阅读 Yara 源代码,它似乎滚动了它自己的正则表达式风味。仅支持基本构造:
- 交替 (
|
( - 串联
- 重复 (
*
,*?
,+
,+?
,?
,??
,{digit*,digit*}
,{digit*,digit*}?
,{digit+}
( - 边界 (
b
,B
,^
,$
( - 分组 (
(
,)
( - 字符类 (
.
,w
,W
,s
,S
,d
,D
,[...]
,[^...]
( - 十六进制逃逸 (
xHH
( - 正常转义(
+任何特殊字符(
- 其他任何东西都是字面或非法 的
它还支持表达式结束后i
和s
的正则表达式标志。(/.../is
(
请参阅正则表达式快速参考,了解不同结构的说明。请记住,雅苒仅支持上面列出的那些。
要回答这个问题,为了匹配C:Program Files
或C:Program FilesMicrosoft 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 比较文件名的方式保持一致。
要匹配dnx.exe
C:
下的任何位置,您可以使用以下内容:
cuckoo.filesystem.file_access(/^C:\(.*\)?dnx.exe$/i)
要匹配C:
下任何目录中的所有三个二进制文件,请执行以下操作:
cuckoo.filesystem.file_access(/^C:\(.*\)?(Excel.exe|dnx.exe|appvlp.exe)$/i)