服务端规则指南

September 8, 2022 · View on GitHub

编写服务端规则前,请您详细阅读本文,以便了解规则背后的故事,并帮助您更好的编写 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:

    规则名称

适用于 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注册表对象设置
    dnsqueryDNS 查询
    networkconnect网络连接建立
    clipboardchange剪贴板访问
    processtampering进程执行流劫持
    filedeletedetected可执行文件删除
    filecreate文件创建
    imageloadDLL 加载
    processcreate进程创建(已分离为进程规则)
    processterminal进程退出(内部保留)
  • sourceimage - 仅适用于动作 processaccess

    源进程文件路径

  • targetimage - 仅适用于动作 processaccess

    目标进程文件路径

  • grantedaccess - 仅适用于动作 processaccess

    访问权限

  • calltrace - 仅适用于动作 processaccess

    调用栈(Call Stack)

  • pipename - 仅适用于动作 pipecreate

    管道名称

  • targetfilename - 仅适用于动作 filecreate

    目标文件名

  • imageloaded - 仅适用于动作 imageload

    已加载的映像名