156 lines
4.2 KiB
Markdown
156 lines
4.2 KiB
Markdown
# 服务端规则指南
|
||
|
||
编写服务端规则前,请您详细阅读本文,以便了解规则背后的故事,并帮助您更好的编写 RmEye 规则。
|
||
|
||
|
||
# 规则在何时被应用
|
||
|
||
RmEye 通过本地部署的客户端,向服务器传输行为事件。 \
|
||
服务器在收集并解析了行为事件日志后,会立即调用规则匹配函数检测该行为是否被某条规则命中。
|
||
|
||
|
||
# 规则分类
|
||
|
||
基于 RmEye 的设计思想,一切动作都基于其进程载体,所以,规则被分为 动作(action)和 进程(process)两种类型。
|
||
|
||
- [`进程规则`]
|
||
|
||
用于在进程启动事件日志中,检测新进程的启动上下文,判断其是否为可疑行为。
|
||
|
||
- [`动作规则`]
|
||
|
||
用于在非进程启动事件日志中,检测其特定行为上下文,判断其是否为可疑行为。
|
||
|
||
RmEye 动作规则列表编写于 `/Server/rules/py/action.py` 文件中;进程规则列表编写于 `/Server/rules/py/process.py` 文件中。
|
||
|
||
|
||
# 规则单元数据结构
|
||
|
||
```json
|
||
{
|
||
'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`:
|
||
|
||
规则名称
|
||
|
||
# 适用于 RmEye 的 `rule_engine` 规则匹配表达式
|
||
|
||
`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`
|
||
|
||
已加载的映像名 |