编写服务端规则前,请您详细阅读本文,以便了解规则背后的故事,并帮助您更好的编写 RmEye 规则。
RmEye 通过本地部署的客户端,向服务器传输行为事件。
服务器在收集并解析了行为事件日志后,会立即调用规则匹配函数检测该行为是否被某条规则命中。
基于 RmEye 的设计思想,一切动作都基于其进程载体,所以,规则被分为 动作(action)和 进程(process)两种类型。
-
[
进程规则
]用于在进程启动事件日志中,检测新进程的启动上下文,判断其是否为可疑行为。
-
[
动作规则
]用于在非进程启动事件日志中,检测其特定行为上下文,判断其是否为可疑行为。
RmEye 动作规则列表编写于 /Server/rules/py/action.py
文件中;进程规则列表编写于 /Server/rules/py/process.py
文件中。
{
'rules': [
'originalfilename =~ ".*wbadmin.exe.*" and commandline =~ ".*delete.*"',
],
'score': 70,
'name': '通过wbadmin删除备份'
}
这是一个 进程(process)类型的示例规则单元,它是一个 dict 数据,包含有三个 item,
分别是:rules
, score
, name
-
[
rules
]->list
:其中包含一个或多个使用
rule_engine
语法的规则匹配表达式,每个表达式间的关系为或
,即任何一个表达式被匹配,都认为该规则已命中。 -
[
score
]->int
:由一个整数表示的规则匹配分值
-
[
name
]->str
:规则名称
rule_engine
表达式是服务端规则的核心,它允许用户定义一个 key-value 类型的 Query 表达式,以匹配一个 dict 数据;
表达式的左值匹配 dict 数据中的特定键名(key),
右值允许适用通配符、数字、字符串等进行完全匹配或模糊匹配 dict 数据中,对应左值键名的值(value)。
需要特别注意的是,必须定义 RmEye 数据源事件日志中存在的左值,才可以使规则完全按照预期工作。
-
processid
进程 PID
-
image
进程文件路径
-
originalfilename
进程原始文件名
-
hashes
进程 MD5 哈希
-
commandline
进程命令行
-
user
进程用户名
-
integritylevel
进程权限等级
-
parentprocessid
父进程 PID
-
parentimage
父进程文件路径
-
parentcommandline
父进程命令行
-
parentuser
父进程用户
-
action
动作类型,包括:
action 描述 processaccess 进程句柄访问 pipecreate 命名管道创建 createremotethread 远程线程创建 filecreatestreamhash 文件流创建 registryadd 注册表项新建 registryvalueSet 注册表值项设置 registryobjectSet 注册表对象设置 dnsquery DNS 查询 networkconnect 网络连接建立 clipboardchange 剪贴板访问 processtampering 进程执行流劫持 filedeletedetected 可执行文件删除 filecreate 文件创建 imageload DLL 加载 processcreate 进程创建(已分离为进程规则) processterminal 进程退出(内部保留) -
sourceimage
- 仅适用于动作processaccess
源进程文件路径
-
targetimage
- 仅适用于动作processaccess
目标进程文件路径
-
grantedaccess
- 仅适用于动作processaccess
访问权限
-
calltrace
- 仅适用于动作processaccess
调用栈(Call Stack)
-
pipename
- 仅适用于动作pipecreate
管道名称
-
targetfilename
- 仅适用于动作filecreate
目标文件名
-
imageloaded
- 仅适用于动作imageload
已加载的映像名