Docs: 新增服务端规则指南
This commit is contained in:
352
README.md
352
README.md
@@ -1,174 +1,178 @@
|
||||

|
||||
|
||||
# RmEye
|
||||
RmEye是一个window上的基于att&ck现代EDR设计思想的威胁响应工具.
|
||||
不同于EDR,它轻量、高效.自身定位是轻量级威胁检出工具.
|
||||
而不是繁重的、需要付费的、效果不明的所谓的EDR
|
||||
RmEye基于att&ck模型,如果您对att&ck模型不熟悉,请先阅读相关文章后再使用:
|
||||
https://key08.com/index.php/2022/08/09/1505.html
|
||||
|
||||
### 功能特点
|
||||
1. 基于att&ck设计.所有设计只是为了符合att&ck的攻击路径、攻击链(虽然规则里面没有标注T因为懒惰)
|
||||
2. 轻量、高效.为了不适用繁重超占内存的ELK设计思路,而且要保证检出的同时保证不会太重,agent端使用了大量规则过滤,这样才使得后端使用sqlite作为数据库成为可能.单机日志平均一天4M.此外轻量级别的客户端一天只占40-400KB的内存.
|
||||
3. 行为检出,让免杀成为过去式.基于att&ck设计,只看行为不看文件.文件类免杀已经成为过去式.
|
||||
4. 高扩展性.可随需求定制功能
|
||||
|
||||
### RmEye 之所以不是 Edr/Xdr/Mdr/Ndr/XXXXXdr
|
||||
1. RmEye没有流量监控
|
||||
2. RmEye仅覆盖20%左右的datasource
|
||||
3. RmEye没有联动WAF、IPS/IDS
|
||||
4. RmEye没有实时拦截功能
|
||||
5. 对RPC、COM、ALPC基本无能为力
|
||||
6. 不支持更高级的扩展检测,如检测脚本、下发规则,主机链
|
||||
7. 受限于Sysmon,很多att&ck的T没有覆盖,也无法覆盖.
|
||||
8. 没有响应能力,只能被动记录.
|
||||
请牢记,RmEye自身定位是轻量级威胁检出工具
|
||||
|
||||
### 最新新闻
|
||||
2022/9/5:
|
||||
增加规则编写教程:
|
||||
https://github.com/RoomaSec/RmEye/blob/main/doc_day0_rule.md
|
||||
增加`mimikatz`检测
|
||||
|
||||
2022/8/31:
|
||||
增加进程白名单系统,现在能给进程加白名单了.在打开进程链后,点击某个进程加入白名单即可
|
||||
|
||||
2022/8/29:
|
||||
增加uac提权检测插件`uac_bypass_detect`,但是受限于sysmon,没有办法获取RPC信息,因此只能检测一部分的UAC提权行为.并且有误报,请酌情考虑
|
||||
|
||||
### 检出截图
|
||||
威胁列表:
|
||||

|
||||
进程链行为回溯
|
||||

|
||||
powershell恶意执行:
|
||||

|
||||
apt样本:
|
||||

|
||||
勒索软件:
|
||||

|
||||
网站入侵提权到执行cobalt strike:
|
||||

|
||||
offic宏钓鱼:
|
||||

|
||||
uac提权检测:
|
||||

|
||||
mimikatz检测:
|
||||

|
||||
|
||||
### 待做列表
|
||||
1. 更好的前端(目前是VUE-CDN模式,不太好,想换成VUE-CLI) 已经完成
|
||||
2. 日志回放【目前重点】
|
||||
3. 威胁狩猎【目前重点】
|
||||
4. att&ck热力图
|
||||
5. 在线规则编辑器
|
||||
6. 内网横向检测
|
||||
7. iis、apache、nginx日志搜集分析(aka: XDR的实现)
|
||||
8. 集成反病毒引擎
|
||||
9. 完善目前的插件系统【目前重点】
|
||||
10. 云日志检测能力【目前重点】
|
||||
### 安装
|
||||
下载release( https://github.com/RoomaSec/RmEye/releases ),里面有客户端,服务端自行clone本项目
|
||||
服务端是python3编写,安装完依赖库后输入
|
||||
```
|
||||
python webserver.py
|
||||
```
|
||||
即可部署
|
||||
服务端部署后,修改config.py里面的
|
||||
```
|
||||
# 检出阈值,越高越难检出但是也会越准确
|
||||
MAX_THREAT_SCORE = 170
|
||||
|
||||
# 授权访问主站的IP列表.如果不在后台里面则不能访问后台
|
||||
ALLOW_ACCESS_IP = ['127.0.0.1']
|
||||
```
|
||||
MAX_THREAT_SCORE代表报警分数,意思为进程链总分超过此分数则报警,越高越准但是也会漏报
|
||||
ALLOW_ACCESS_IP代表允许的IP,只有在此名单里面的IP才能访问后台.请增加自己的IP地址
|
||||
|
||||
客户端则编辑config.ini
|
||||
```
|
||||
[communication]
|
||||
server = http://192.168.111.189:5000
|
||||
```
|
||||
其中server改成你的服务端的地址
|
||||
然后分发三个文件给客户端并且放在同一目录:
|
||||
config.ini、install.cmd、RmEye.exe、sysmon.xml、Sysmon64.exe
|
||||
之后管理员身份运行install.cmd安装sysmon与RmEye
|
||||
访问 http://服务器ip:5000(flask默认端口) 查看后台
|
||||
当然一开始啥数据也没有,为了确认是否安装成功可以将webserver.py中的
|
||||
```
|
||||
flask_log = logging.getLogger('werkzeug')
|
||||
flask_log.setLevel(logging.ERROR)
|
||||
```
|
||||
注释掉,检查有没有客户端的请求即可
|
||||
手动安装(cmd脚本其实执行了这些命令):
|
||||
```
|
||||
//安装sysmon:
|
||||
sysmon -i
|
||||
//sysmon加载配置项
|
||||
sysmon -c sysmon.xml
|
||||
//安装RmEye
|
||||
RmEye /install
|
||||
```
|
||||
|
||||
### 卸载
|
||||
卸载RmEye:
|
||||
在RmEye目录下执行
|
||||
```
|
||||
SysEye /uninstall
|
||||
```
|
||||
如果您需要卸载sysmon
|
||||
执行
|
||||
```
|
||||
sysmon /uninstall
|
||||
```
|
||||
即可干净卫生的卸载掉RmEye
|
||||
|
||||
### 规则相关的问题
|
||||
1. 规则目前仅120条,很多攻击面没有覆盖,其他规则请访问《社区》
|
||||
2. 规则目前只支持rule_engine与yara的规则,其中yara的规则支持是以插件的形式支持
|
||||
3. 目前的规则字段完全依赖sysmon的字段,sysmon的字段请检查根目录下的provider.json(但是请记住纯小写,自行做大小写转换)
|
||||
|
||||
规则目前在`Server/rules`目录规则目前有两种规则:
|
||||
rule_engine:
|
||||
如检测由CMD启动的ipconfig:
|
||||
```
|
||||
{
|
||||
'rules': [
|
||||
'originalfilename =~ ".*cmd.exe" and commandline =~ ".*ipconfig.*"',
|
||||
],
|
||||
'score': 80,
|
||||
'name': 'cmd启动ipconfig'
|
||||
},
|
||||
```
|
||||
分数代表的是本次规则给进程链所增加的分数,报警是根据前面的MAX_THREAT_SCORE设置的
|
||||
|
||||
规则编写教程请移步:
|
||||
https://github.com/RoomaSec/RmEye/blob/main/doc_day0_rule.md
|
||||
|
||||
规则引擎的语法请移步:
|
||||
https://github.com/zeroSteiner/rule-engine
|
||||
|
||||
yara,需要安装插件,具体请看交流部分
|
||||
|
||||
### 第三方引用库
|
||||
1. sysmon
|
||||
https://docs.microsoft.com/zh-cn/sysinternals/downloads/sysmon
|
||||
2. rule_engine
|
||||
https://github.com/zeroSteiner/rule-engine
|
||||
3. yara
|
||||
https://github.com/VirusTotal/yara
|
||||
4. sysmon-config(客户端使用的默认的规则,但是我做了一些修改)
|
||||
https://github.com/SwiftOnSecurity/sysmon-config
|
||||
请遵守相关库的开源协议.相关法律风险本项目不负任何责任
|
||||
|
||||
### 交流
|
||||
开源的目的不是为了免费填鸭式教学,或者被免费拿去发公众号引流、去拿去集成产品方案去赚钱,而是要一起完善这个工具,从而实现共赢.
|
||||
扫一扫加入这个工具的交流群,这样就能获取实时动态.参与开发、参与交流规则编写等等.欢迎加入
|
||||
最近进群的人有点多,所以不活跃的哥们暂时清理掉,但是微信太不好使了.要是t错了或者还想在群待着不发言的重新加群吧
|
||||

|
||||
|
||||
### 特别感谢
|
||||
@Pwn0x01 yara插件
|
||||
@zeroSteiner 规则引擎插件
|
||||
@SwiftOnSecurity 客户端规则
|
||||

|
||||
|
||||
# RmEye
|
||||
RmEye是一个window上的基于att&ck现代EDR设计思想的威胁响应工具.
|
||||
不同于EDR,它轻量、高效.自身定位是轻量级威胁检出工具.
|
||||
而不是繁重的、需要付费的、效果不明的所谓的EDR
|
||||
RmEye基于att&ck模型,如果您对att&ck模型不熟悉,请先阅读相关文章后再使用:
|
||||
https://key08.com/index.php/2022/08/09/1505.html
|
||||
|
||||
### 功能特点
|
||||
1. 基于att&ck设计.所有设计只是为了符合att&ck的攻击路径、攻击链(虽然规则里面没有标注T因为懒惰)
|
||||
2. 轻量、高效.为了不适用繁重超占内存的ELK设计思路,而且要保证检出的同时保证不会太重,agent端使用了大量规则过滤,这样才使得后端使用sqlite作为数据库成为可能.单机日志平均一天4M.此外轻量级别的客户端一天只占40-400KB的内存.
|
||||
3. 行为检出,让免杀成为过去式.基于att&ck设计,只看行为不看文件.文件类免杀已经成为过去式.
|
||||
4. 高扩展性.可随需求定制功能
|
||||
|
||||
### RmEye 之所以不是 Edr/Xdr/Mdr/Ndr/XXXXXdr
|
||||
1. RmEye没有流量监控
|
||||
2. RmEye仅覆盖20%左右的datasource
|
||||
3. RmEye没有联动WAF、IPS/IDS
|
||||
4. RmEye没有实时拦截功能
|
||||
5. 对RPC、COM、ALPC基本无能为力
|
||||
6. 不支持更高级的扩展检测,如检测脚本、下发规则,主机链
|
||||
7. 受限于Sysmon,很多att&ck的T没有覆盖,也无法覆盖.
|
||||
8. 没有响应能力,只能被动记录.
|
||||
请牢记,RmEye自身定位是轻量级威胁检出工具
|
||||
|
||||
### 最新新闻
|
||||
2022/9/8:
|
||||
增加服务端规则指南: \
|
||||
[doc_server_rule_manual.md](./doc_server_rule_manual.md)
|
||||
|
||||
2022/9/5:
|
||||
增加规则编写教程:
|
||||
https://github.com/RoomaSec/RmEye/blob/main/doc_day0_rule.md
|
||||
增加`mimikatz`检测
|
||||
|
||||
2022/8/31:
|
||||
增加进程白名单系统,现在能给进程加白名单了.在打开进程链后,点击某个进程加入白名单即可
|
||||
|
||||
2022/8/29:
|
||||
增加uac提权检测插件`uac_bypass_detect`,但是受限于sysmon,没有办法获取RPC信息,因此只能检测一部分的UAC提权行为.并且有误报,请酌情考虑
|
||||
|
||||
### 检出截图
|
||||
威胁列表:
|
||||

|
||||
进程链行为回溯
|
||||

|
||||
powershell恶意执行:
|
||||

|
||||
apt样本:
|
||||

|
||||
勒索软件:
|
||||

|
||||
网站入侵提权到执行cobalt strike:
|
||||

|
||||
offic宏钓鱼:
|
||||

|
||||
uac提权检测:
|
||||

|
||||
mimikatz检测:
|
||||

|
||||
|
||||
### 待做列表
|
||||
1. 更好的前端(目前是VUE-CDN模式,不太好,想换成VUE-CLI) 已经完成
|
||||
2. 日志回放【目前重点】
|
||||
3. 威胁狩猎【目前重点】
|
||||
4. att&ck热力图
|
||||
5. 在线规则编辑器
|
||||
6. 内网横向检测
|
||||
7. iis、apache、nginx日志搜集分析(aka: XDR的实现)
|
||||
8. 集成反病毒引擎
|
||||
9. 完善目前的插件系统【目前重点】
|
||||
10. 云日志检测能力【目前重点】
|
||||
### 安装
|
||||
下载release( https://github.com/RoomaSec/RmEye/releases ),里面有客户端,服务端自行clone本项目
|
||||
服务端是python3编写,安装完依赖库后输入
|
||||
```
|
||||
python webserver.py
|
||||
```
|
||||
即可部署
|
||||
服务端部署后,修改config.py里面的
|
||||
```
|
||||
# 检出阈值,越高越难检出但是也会越准确
|
||||
MAX_THREAT_SCORE = 170
|
||||
|
||||
# 授权访问主站的IP列表.如果不在后台里面则不能访问后台
|
||||
ALLOW_ACCESS_IP = ['127.0.0.1']
|
||||
```
|
||||
MAX_THREAT_SCORE代表报警分数,意思为进程链总分超过此分数则报警,越高越准但是也会漏报
|
||||
ALLOW_ACCESS_IP代表允许的IP,只有在此名单里面的IP才能访问后台.请增加自己的IP地址
|
||||
|
||||
客户端则编辑config.ini
|
||||
```
|
||||
[communication]
|
||||
server = http://192.168.111.189:5000
|
||||
```
|
||||
其中server改成你的服务端的地址
|
||||
然后分发三个文件给客户端并且放在同一目录:
|
||||
config.ini、install.cmd、RmEye.exe、sysmon.xml、Sysmon64.exe
|
||||
之后管理员身份运行install.cmd安装sysmon与RmEye
|
||||
访问 http://服务器ip:5000(flask默认端口) 查看后台
|
||||
当然一开始啥数据也没有,为了确认是否安装成功可以将webserver.py中的
|
||||
```
|
||||
flask_log = logging.getLogger('werkzeug')
|
||||
flask_log.setLevel(logging.ERROR)
|
||||
```
|
||||
注释掉,检查有没有客户端的请求即可
|
||||
手动安装(cmd脚本其实执行了这些命令):
|
||||
```
|
||||
//安装sysmon:
|
||||
sysmon -i
|
||||
//sysmon加载配置项
|
||||
sysmon -c sysmon.xml
|
||||
//安装RmEye
|
||||
RmEye /install
|
||||
```
|
||||
|
||||
### 卸载
|
||||
卸载RmEye:
|
||||
在RmEye目录下执行
|
||||
```
|
||||
SysEye /uninstall
|
||||
```
|
||||
如果您需要卸载sysmon
|
||||
执行
|
||||
```
|
||||
sysmon /uninstall
|
||||
```
|
||||
即可干净卫生的卸载掉RmEye
|
||||
|
||||
### 规则相关的问题
|
||||
1. 规则目前仅120条,很多攻击面没有覆盖,其他规则请访问《社区》
|
||||
2. 规则目前只支持rule_engine与yara的规则,其中yara的规则支持是以插件的形式支持
|
||||
3. 目前的规则字段完全依赖sysmon的字段,sysmon的字段请检查根目录下的provider.json(但是请记住纯小写,自行做大小写转换)
|
||||
|
||||
规则目前在`Server/rules`目录规则目前有两种规则:
|
||||
rule_engine:
|
||||
如检测由CMD启动的ipconfig:
|
||||
```
|
||||
{
|
||||
'rules': [
|
||||
'originalfilename =~ ".*cmd.exe" and commandline =~ ".*ipconfig.*"',
|
||||
],
|
||||
'score': 80,
|
||||
'name': 'cmd启动ipconfig'
|
||||
},
|
||||
```
|
||||
分数代表的是本次规则给进程链所增加的分数,报警是根据前面的MAX_THREAT_SCORE设置的
|
||||
|
||||
规则编写教程请移步:
|
||||
https://github.com/RoomaSec/RmEye/blob/main/doc_day0_rule.md
|
||||
|
||||
规则引擎的语法请移步:
|
||||
https://github.com/zeroSteiner/rule-engine
|
||||
|
||||
yara,需要安装插件,具体请看交流部分
|
||||
|
||||
### 第三方引用库
|
||||
1. sysmon
|
||||
https://docs.microsoft.com/zh-cn/sysinternals/downloads/sysmon
|
||||
2. rule_engine
|
||||
https://github.com/zeroSteiner/rule-engine
|
||||
3. yara
|
||||
https://github.com/VirusTotal/yara
|
||||
4. sysmon-config(客户端使用的默认的规则,但是我做了一些修改)
|
||||
https://github.com/SwiftOnSecurity/sysmon-config
|
||||
请遵守相关库的开源协议.相关法律风险本项目不负任何责任
|
||||
|
||||
### 交流
|
||||
开源的目的不是为了免费填鸭式教学,或者被免费拿去发公众号引流、去拿去集成产品方案去赚钱,而是要一起完善这个工具,从而实现共赢.
|
||||
扫一扫加入这个工具的交流群,这样就能获取实时动态.参与开发、参与交流规则编写等等.欢迎加入
|
||||
最近进群的人有点多,所以不活跃的哥们暂时清理掉,但是微信太不好使了.要是t错了或者还想在群待着不发言的重新加群吧
|
||||

|
||||
|
||||
### 特别感谢
|
||||
@Pwn0x01 yara插件
|
||||
@zeroSteiner 规则引擎插件
|
||||
@SwiftOnSecurity 客户端规则
|
||||
|
||||
210
doc_day0_rule.md
210
doc_day0_rule.md
@@ -1,104 +1,106 @@
|
||||
### 规则编写教程
|
||||
|
||||
首先明确一点,rmeye有绝大部分威胁的检出能力,但是受限于规则,这些能力相当于只记录但是没生效.因此编写规则是一件重要的事情.在一切的开始,请您阅读ATT&CK的思想:
|
||||
|
||||
https://key08.com/index.php/2022/08/09/1505.html
|
||||
|
||||
本文以检测`mimikatz的关键dll加载`为例
|
||||
|
||||
`mimikatz`会加载: `C:\\Windows\\System32\\samlib.dll` 本文以他为例
|
||||
|
||||
### sysmon客户端规则
|
||||
|
||||
在编写服务端规则之前,请确保`sysmon`有相关配置.因为`rmeye`依赖于`sysmon`,得有客户端规则,才有服务端规则:
|
||||
|
||||
打开客户端安装目录下的`sysmon.xml`:
|
||||
|
||||

|
||||
|
||||
我们需要检测`dll`加载,所以请把目光看到`ImageLoad`
|
||||
|
||||
其他的`sysmon`字段请自行谷歌或者百度了解.本项目有个`provider.json`那个是`sysmon`的所有字段.可以参考,打开`provider.json` ,找到`ImageLoad`
|
||||
|
||||

|
||||
|
||||
可以看到`sysmon`记录了非常多有用的字段,对于我们来说,我们只需要`ImageLoaded`
|
||||
|
||||
在`sysmon.xml`找到`Imageload`这个block,
|
||||
|
||||
```c
|
||||
<RuleGroup name="" groupRelation="or">
|
||||
<ImageLoad onmatch="include">
|
||||
<!--NOTE: Using "include" with no rules means nothing in this section will be logged-->
|
||||
</ImageLoad>
|
||||
</RuleGroup>
|
||||
```
|
||||
|
||||
我们给他增加一个,接受加载`C:\\Windows\\System32\\samlib.dll`的日志:
|
||||
|
||||
```c
|
||||
<RuleGroup name="" groupRelation="or">
|
||||
<ImageLoad onmatch="include">
|
||||
<ImageLoaded condition="is">C:\Windows\System32\samlib.dll</ImageLoaded>
|
||||
</ImageLoad>
|
||||
</RuleGroup>
|
||||
```
|
||||
|
||||
|
||||
|
||||
保存,更新`sysmon`的配置文件,在`rmeye`的安装目录或者在`sysmon`的安装目录执行:
|
||||
|
||||
```
|
||||
sysmon -c sysmon.xml
|
||||
```
|
||||
|
||||

|
||||
|
||||
看到这个,说明你成功了,其他的说明规则有错误,检查一下你写的规则.
|
||||
|
||||
|
||||
|
||||
### 服务端规则编写
|
||||
|
||||
客户端有了搜集日志能力后,是时候编写服务端的了:
|
||||
|
||||
打开服务端目录下的`server/rules/action.py`
|
||||
|
||||
在末尾添加:
|
||||
|
||||
```
|
||||
{
|
||||
'rules': [
|
||||
'action == "imageload" and imageloaded == "c:\\windows\\system32\\samlib.dll"',
|
||||
],
|
||||
'score': 50,
|
||||
'name': 'samlib的dll被加载'
|
||||
}
|
||||
```
|
||||
|
||||
其中
|
||||
|
||||
```
|
||||
rules: 规则的列表,可以是多个规则,是and关系
|
||||
score: 是分数,跟config.py里面的报警分数有关系
|
||||
name: 规则名字
|
||||
规则全部小写,==代表正常匹配,如果是=~代表使用python正则
|
||||
```
|
||||
|
||||
保存,重启服务端,如果不出意外您应该看得到最新的刚刚增加的规则:
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
### 测试
|
||||
|
||||
找个mimikatz运行一下看看:
|
||||
|
||||

|
||||
|
||||
(为了测试,将分数设置高一点准没错)
|
||||
|
||||
至此,您就具备的检测mimikatz的一些行为的能力,当然这行为是不全的而且容易产生很多误报的,很多时候为了减少误报或者实现更精准的检测,您需要高级检出能力,这将在下一章插件检测中介绍.
|
||||
下一章:
|
||||
https://github.com/RoomaSec/RmEye/blob/main/doc_day1_plugin.md
|
||||
### 规则编写教程
|
||||
|
||||
首先明确一点,rmeye有绝大部分威胁的检出能力,但是受限于规则,这些能力相当于只记录但是没生效.因此编写规则是一件重要的事情.在一切的开始,请您阅读ATT&CK的思想:
|
||||
|
||||
https://key08.com/index.php/2022/08/09/1505.html
|
||||
|
||||
本文以检测`mimikatz的关键dll加载`为例
|
||||
|
||||
`mimikatz`会加载: `C:\\Windows\\System32\\samlib.dll` 本文以他为例
|
||||
|
||||
### sysmon客户端规则
|
||||
|
||||
在编写服务端规则之前,请确保`sysmon`有相关配置.因为`rmeye`依赖于`sysmon`,得有客户端规则,才有服务端规则:
|
||||
|
||||
打开客户端安装目录下的`sysmon.xml`:
|
||||
|
||||

|
||||
|
||||
我们需要检测`dll`加载,所以请把目光看到`ImageLoad`
|
||||
|
||||
其他的`sysmon`字段请自行谷歌或者百度了解.本项目有个`provider.json`那个是`sysmon`的所有字段.可以参考,打开`provider.json` ,找到`ImageLoad`
|
||||
|
||||

|
||||
|
||||
可以看到`sysmon`记录了非常多有用的字段,对于我们来说,我们只需要`ImageLoaded`
|
||||
|
||||
在`sysmon.xml`找到`Imageload`这个block,
|
||||
|
||||
```c
|
||||
<RuleGroup name="" groupRelation="or">
|
||||
<ImageLoad onmatch="include">
|
||||
<!--NOTE: Using "include" with no rules means nothing in this section will be logged-->
|
||||
</ImageLoad>
|
||||
</RuleGroup>
|
||||
```
|
||||
|
||||
我们给他增加一个,接受加载`C:\\Windows\\System32\\samlib.dll`的日志:
|
||||
|
||||
```c
|
||||
<RuleGroup name="" groupRelation="or">
|
||||
<ImageLoad onmatch="include">
|
||||
<ImageLoaded condition="is">C:\Windows\System32\samlib.dll</ImageLoaded>
|
||||
</ImageLoad>
|
||||
</RuleGroup>
|
||||
```
|
||||
|
||||
|
||||
|
||||
保存,更新`sysmon`的配置文件,在`rmeye`的安装目录或者在`sysmon`的安装目录执行:
|
||||
|
||||
```
|
||||
sysmon -c sysmon.xml
|
||||
```
|
||||
|
||||

|
||||
|
||||
看到这个,说明你成功了,其他的说明规则有错误,检查一下你写的规则.
|
||||
|
||||
|
||||
|
||||
### 服务端规则编写
|
||||
|
||||
客户端有了搜集日志能力后,是时候编写服务端的了:
|
||||
|
||||
打开服务端目录下的`server/rules/action.py`
|
||||
|
||||
在末尾添加:
|
||||
|
||||
```
|
||||
{
|
||||
'rules': [
|
||||
'action == "imageload" and imageloaded == "c:\\windows\\system32\\samlib.dll"',
|
||||
],
|
||||
'score': 50,
|
||||
'name': 'samlib的dll被加载'
|
||||
}
|
||||
```
|
||||
|
||||
其中
|
||||
|
||||
```
|
||||
rules: 规则的列表,可以是多个规则,是and关系
|
||||
score: 是分数,跟config.py里面的报警分数有关系
|
||||
name: 规则名字
|
||||
规则全部小写,==代表正常匹配,如果是=~代表使用python正则
|
||||
```
|
||||
|
||||
保存,重启服务端,如果不出意外您应该看得到最新的刚刚增加的规则:
|
||||
|
||||

|
||||
|
||||
**完整的 `服务端规则指南`**
|
||||
|
||||
[doc_server_rule_manual.md](./doc_server_rule_manual.md)
|
||||
|
||||
### 测试
|
||||
|
||||
找个mimikatz运行一下看看:
|
||||
|
||||

|
||||
|
||||
(为了测试,将分数设置高一点准没错)
|
||||
|
||||
至此,您就具备的检测mimikatz的一些行为的能力,当然这行为是不全的而且容易产生很多误报的,很多时候为了减少误报或者实现更精准的检测,您需要高级检出能力,这将在下一章插件检测中介绍.
|
||||
下一章:
|
||||
https://github.com/RoomaSec/RmEye/blob/main/doc_day1_plugin.md
|
||||
|
||||
156
doc_server_rule_manual.md
Normal file
156
doc_server_rule_manual.md
Normal file
@@ -0,0 +1,156 @@
|
||||
# 服务端规则指南
|
||||
|
||||
编写服务端规则前,请您详细阅读本文,以便了解规则背后的故事,并帮助您更好的编写 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`
|
||||
|
||||
已加载的映像名
|
||||
Reference in New Issue
Block a user