查询语法

最后更新于:

概述

查询语法是构建查询语法时可使用的语言,该语法能被机器学习(ML)模型理解,并协助您在创建高级规则时构建规则条件和规则参数。

本页面包含完整的查询语法参考,涵盖基本条件、支持的数据类型、关系运算符与逻辑运算符、高级函数、聚合构造、相关性语句及实用检测示例。

基本条件

  1. 数据类型
  2. 数值关系运算符
  3. 字符串关系运算符
  4. 逻辑运算符
  5. 示例

1. 数据类型

类型名称 描述 示例
字符串 字符串值 "姓氏" "198.51.100.255" "字节数"
整数 整数值 23 -32 4000000244553
浮点 浮点数。 3.14 -1.2e5
时间跨度 由一个或两个数字后跟's'表示秒,'m'表示分钟,'h'表示小时,'d'表示天,'w'表示周,'M'表示月,'q'表示季度,'y'表示年。 2秒,45分钟,4小时,2天,3周,2个月,4季度,1年
内存 数据单位:'B'代表字节,'KB'代表千字节,'MB'代表兆字节, 'GB'代表千兆字节,'TB'代表太字节,'PB'代表拍字节。 2B, 3KB, 3 MB, 34GB, 9TB, 9PB
日期时间 日期时间格式采用"YYYY-MM-DD"、"YYYY-MM-DD HH-MM-SS"表示 "2000-08-30" "2000-08-30 15:45:06"
IP IP地址值 "10.13.29.70" "127.0.0.1/16"

2. 数值关系运算符

运算符 描述 支持的数据类型 示例
> 大于 整数、浮点数、内存、IP地址 source_IP > 10.53.12.0
>= 大于或等于 整数, 浮点数, 内存, IP 源IP < 10.53.12.0
< 小于 整数, 浮点数, 内存, IP 源IP < 10.53.12.0
小于或等于 整数, 浮点数, 内存, IP 源IP <= 10.53.12.0
= 等于 字符串, 整数, 浮点数, 内存, IP 事件ID=4624
!= 不等于 字符串、整数、浮点数、内存、IP 事件ID!=4624
in/IN 等于以下任一元素 字符串、整数、浮点数、IP 事件ID在 (4624,4625)
notin/NOTIN 不等于任何元素 字符串、整数、浮点数、IP 事件ID notin (4624,4625)
isExist 字段不是空字符串,且不为空。 对于所有字段 对于所有字段
isNotExist 字段为空字符串,且为空值。 对于所有字段 isNotExist(source_ip)

3. 字符串关系运算符

运算符 描述 示例
= 等于 username = "name"
!= 不等于 用户名 != "名称"
包含/CONTAINS 若字段包含数据则返回真 eventname contains "success"
不包含/NOTCONTAINS 字段未包含数据集时返回 true eventname notcontains "success"
startswith/STARTSWITH 字段值以数据开头时返回 true 用户名以"Ja"开头
endswith/ENDSWITH 字段值以数据结尾时返回 true username endswith "kumar"
notstartswith/NOTSTARTSWITH 字段值不以数据开头时返回 true username notstartswith "Ja"
notendswith/NOTENDSWITH 字段值不以数据结尾时返回 true username notendswith "kumar"
匹配/MATCHES 字段值匹配正则表达式时返回 true username matches "pree*"
notmatches/NOTMATCHES 字段值不匹配正则表达式时返回 true username notmatches "pree*"
= 等于 username = "name"

4. 逻辑运算符

运算符 描述 示例
AND/and 仅当两个条件都为真时返回真 username = "preethi" and eventid=4624
OR/或 返回值为 true,当任一条件为真时,无论另一条件如何。 eventid = "4688" 或 eventid = "592"

示例

  • 重复失败的SUDO命令基本判定条件: logtype="unix" and iename = "sudo command execution failed"
  • 密码变更失败过多的基本条件:common_report_name = "用户账户密码变更" 且 severity = "failure" 或 iename = "密码更新失败"
  • Ryuk 远程唤醒命令基本条件:日志类型 ("Windows", "Fortinet", "Sonic wall") 且 (事件ID = "4688" 或 事件ID = "592") 且 ( 命令行包含 "8 lan" 或 命令行包含 "9 rep")
  • Windows登录失败基本条件:日志类型 = "Windows" 且 操作名称 = "登录失败"
  • 成功登录的基本条件:actionname = "Success logon"
注:
  • 日志类型将包含以下值:*(包含所有日志类型)、 Windows、 Unix、Cisco等。
  • 通过actionname运算符,可在查询中调用预定义操作。

查询语法

该查询语言支持多种运算符和子句。以下是完整的语法 参考。

1. 基础语法:

操作名称:

日志类型 = (* | windows | syslog | ...) [ 逻辑运算符 基本条件 ... ] 通过 [ 聚合函数(字段名), ... ]

示例:eventid = 4624

2. 排序:

| 排序字段名 (升序 | 降序)

3. 直方图:

| histo 字段名 范围(起始值, 起始值至结束值) 排序 [ 聚合字段 | 计数 ] (升序 | 降序)

4. 时间窗口:

| 时间窗口 值 单位 排序 [ 聚合字段 | 计数 ] (升序 | 降序) 限制 值 具有 计数 运算符 值

5. 分组:

| 分组字段名 带 [ 聚合函数(字段名), ... ] 排序 [ 聚合表达式 | 计数 ] (升序 | 降序) 限制 数量 具有 [ 聚合表达式 | 计数 ] 比较运算符 数量

注意:
  • 括号内的运算符(groupby、histo等)可任意排序。
  • timeslice运算符仅能出现一次。
  • groupbyhisto运算符最多可出现 三次,顺序不限。

6. 唯一值:

| 唯一字段名 排序 (升序 | 降序) 限制 [1-200] 具有 计数 运算符 值

7. 后处理:

| 具有聚合表达式 运算符 值 [ 逻辑运算符 (聚合表达式 运算符 值) ]
| 异常检测(字段, 模型, 字段)

8. 首尾条件:

| 首个 [1-10] 字段名 [, 字段名 ...]
| 最后 [1-10] 字段名 [, 字段名 ...]

9. 查找:

| 在<查找表.查找字段>中查找<事件字段>,将<事件目标字段> 设为<查找表.查找目标字段>

10. 定义:

def: 变量名 = <表达式>

支持类型:整数、字符串、浮点数、时间、布尔值

11. 过滤:

filter: <条件>

这将移除不符合条件的搜索结果。

12. 事件序列:

跟随:动作名称1 紧接 | 未紧接 动作名称2 在 [1-60] (毫秒 | 秒 | 分钟 | 小时 | 天)

示例:基于关联性检测某事件发生后10分钟内 紧接另一事件。

13. 选择:

select 操作名称.字段, 操作名称.字段集, 定义名称

高级运算符

  1. isMalicious函数
  2. isVulnerable 函数
  3. misConfiguredFor 函数

1. 是否恶意

  • 'isMalicious' 条件仅适用于 IP 地址字段。该条件检查 检测到的 IP 地址是否存在于内部数据库中 预先定义的恶意 IP 地址列表中。
  • 该函数返回 true 或 false。

语法:isMalicious(字段名)

示例:外部远程服务

来自公共IP的登录失败:

logtype = "*" and eventid = 4625 and isExists(remoteip) and isMalicious(remoteip)

2. 存在漏洞

  • 仅在集成 Endpoint Central 后可用,可用于设备字段。检查设备是否在 Endpoint Central 中被标记为存在漏洞,并识别易受特定攻击(如 CVE-2023-38831)影响的设备。
  • 该函数返回 true 或 false。
注意:此运算符仅适用于EventLog Analyzer的 持续执行模式。

语法:

isVulnerable(字段名)

isVulnerable(字段名 , 匹配值)

示例:

A. Microsoft Outlook 漏洞利用

Outlook连接webDAV或SMB共享时:

logtype = "windows" and eventid = 4656 and objectname contains "\REGISTRY\MACHINE\SYSTEM" or objectname contains "Services" or objectname contains "WebClient\NetworkProvider,LanmanWorkstation\NetworkProvider" 且访问列表包含 "读取数据 (或列出目录)" 且存在漏洞(设备名称, "CVE-2023-23397")

| 按进程名分组

通过Rundll.exe执行可疑webDAV客户端:

logtype = "sysmon" 且 iename = "Sysmon Process Creation" 且 parentprocessname 包含 "svchost.exe" 且 parentprocesscommandline 包含 "-s WebClient" 且 processname 包含 "rundll.exe" 且 processname = Outlook 连接 webDAV 或 SMB 共享.processname

B. AWS登录失败

错误事件:

日志类型 = "aws cloudtrail" 且 isVulnerable(errorcode)

3. 配置错误事件

仅在与 Endpoint Central 集成后可用,可与设备字段配合使用。 检测由 Endpoint Central 识别出的配置错误设备(例如 Windows 凭据防护功能被禁用)。

注意:此运算符仅适用于 EventLog Analyzer 的 持续执行模式。

语法:

misConfiguredFor(字段名 , 匹配值)

示例:

A. 内置访客账户权限提升

网络访客登录成功:

logtype = "windows" and eventid = 4624 and username contains "Guest" and logontype = 3 and MisconfiguredFor(设备名称, "内置来宾账户未禁用或未正确限制")

| 按登录ID分组

B. 特权操作尝试:

logtype = "windows" and eventid = 4672 and logonid = 成功网络访客登录.logonid and MisconfiguredFor(设备名称, "内置访客账户未禁用或未受限")

C. 用户账户本地组成员资格变更尝试:

logtype = "windows" and eventid = 4732 and groupname contains "Administrators" and logonid = Successful Network Guest Logon.logonid and MisconfiguredFor(设备名称, "内置来宾账户未禁用或未受限")

查询组件

  • 聚合函数
  • 排序运算符
  • 时间窗口运算符
  • 分组运算符
  • 唯一操作符
  • 拥有操作员
  • 首/末操作符
  • 带运算符
  • 语句顺序

1. 聚合函数

函数 描述 语法 示例 输出
SUM
  • 返回字段中选定值的总和。
  • 返回单个数值。
sum(field) 或 SUM(field) sum(bytes_in) 3.27MB (3,432,605)
平均值
  • 返回字段中值的平均值。
  • 返回单个数值。
avg(field) 或 AVG(field) avg(_zl_timestamp) 1.36KB (1,393.156)
MAX
  • 返回字段中的最大值。
  • 返回单个数值。
max(field) 或 MAX(field) max(接收字节数_i) 107.61kb (110,196)
MIN
  • 返回字段中的最小值。
  • 返回单个数值。
min(字段) 或 MIN(字段) min(接收字节数_i) 107.61kb (110,196)
STDEV
  • 返回给定字段的标准差。
  • 返回单个数值。
stdev(field) 或 STDEV(field) stdev(_zl_timestamp) 2.46kb (2,521.297)
COUNT
  • 返回匹配查询的日志消息数量。
  • 使用“with”运算符 → 返回数字。
  • 使用“having”运算符 → 返回布尔值(true/false)。
计数 计数 > 100 true/false
DCOUNT 返回唯一值的计数。使用“with”操作符时→返回数字。使用“having”操作符时→返回布尔值(true/false)。 dcount(字段) 或 DCOUNT(字段) having dcount(_zl_host) > 2 true/false

2. 排序运算符

  • 按指定字段排序所有结果。
  • 默认按计数降序排序。
  • 在"sort"之后,仅允许使用非聚合字段。
  • 语法:sort 字段名1 (asc/desc) [, 字段名2 (asc/desc) ...]
  • 示例:
    • logtype="windows" and eventid = 4625 | sort username asc, hosttype desc

3. 时间窗口运算符

  • 将日志分组到指定的时间段。
  • 在"sort"之后,仅允许使用聚合字段。
  • 按关键词分组的最大限制值为1000。
  • 可用时间窗口单位:y(年)、M(月)、w(周)、d(日)、h (小时)、m(分钟)、s(秒)。
  • 语法:timewindow 值 单位 排序 [聚合字段, 计数] (升序/降序) 限制 值 筛选 计数 运算符 值
  • 示例
    • logtype="windows" | timewindow 5m
    • logtype="windows" | timewindow 5m sort count desc
    • logtype="windows" | timewindow 1h sort sum(bytes_in) as totalBytes asc
    • logtype="windows" | timewindow 1h sort timewindow desc
    • logtype="windows" | timewindow 5m limit 5
    • logtype="unix" and eventid = 4625 | timewindow 10m limit 10 having count > 100
    • logtype="windows" | timewindow 10m | groupby username

4. 分组运算符

  • 用于获取字段的唯一值。
  • 当指定多个分组字段时,第一个为主要分组,第二个为次要分组。
  • 在"排序"之后,仅允许聚合字段。
  • 分组上限为1000。
  • 语法:groupby 字段名1 with 聚合字段 排序 [聚合字段, 计数] [升序/降序] 限制 [1-1000] having 聚合表达式 运算符 值
  • 示例
    • logtype="unix" | groupby username sort sum(sent_bytes_i) as total desc
    • logtype="unix" | groupby username sort sum(sent_bytes_i) as total desc limit 10 | groupby hostname
    • logtype="unix" | groupby username sort sum(sent_bytes_i) as total desc limit 10 | groupby hostname with sum(sent_bytes_i) as total
    • logtype="windows" and eventid = 4625 | groupby username having count > 100
    • logtype="windows" and eventid = 4625 | 按用户名分组 having avg(发送字节数) 作为 平均值 > 10 MB
    • logtype="windows" | 按用户名分组 限制20条 | 按主机类型分组 且 avg(sent_bytes_i) 作为平均值 > 10MB | 按主机名分组 且 sum(received_bytes_i) 作为总计 < 500 MB

5. 唯一值操作符

  • 获取仅包含唯一值的表。
  • 仅允许一个唯一字段。
  • 唯一字段仅可按计数排序。
  • 唯一值上限为 200。
  • 语法:distinct 字段名 sort (asc | desc) limit [1-200] having count operator value
  • 示例
    • logtype="windows" | 唯一 zuid
    • logtype="windows" | 唯一 zuid 升序排序
    • logtype="windows" | 唯一 zuid 限制 150
    • logtype="windows" | 唯一位置 且 计数 > 5

6. 筛选运算符

  • 后置结果运算符。用于外部聚合条件。
  • 语法:having 聚合表达式 运算符 值 [ 逻辑运算符 (聚合表达式 运算符 值) ]
  • 示例
    • logtype="unix" and eventname contains "logon" | having count > 120
    • logtype="windows" and eventid = 4625 | having avg(sent_bytes) as average > 10 MB

7. 首尾操作符

  • 第一个运算符返回最早的日志,最后一个运算符返回最新的日志。
  • 可单独使用 first 或 last 操作符。
  • 可与 first/last 配合使用 limit 参数。
  • 最大限制值为10。
  • 语法:first/last [1-10] 字段名1 (, 字段名2, ...)
  • 示例
    • logtype="windows" | groupby status | first 2 request_uri,remote_ip
    • logtype="windows" | groupby status | last 2 request_uri,remote_ip

8. WITH 运算符

  • 聚合表达式可在基本条件和分组运算符中使用。
  • 语法:with 聚合表达式 (, 聚合表达式 ...)
  • 示例
    • logtype="windows" and with sum(sent_bytes) as bytesSum, avg(received_bytes) as average | groupby srcip
    • logtype="windows" and | groupby srcip with sum(sent_bytes) as bytesSum, avg(received_bytes) as average

9. 语句顺序

| 基本条件 with 字段.聚合函数 [, 字段.聚合函数, ...]

| 排序字段 (升序/降序)

[ | histo 字段名 范围(起始值, 起始值至结束值) 排序 [聚合字段, 计数] [升序/降序]

| 时间窗口 值 限制值

| 分组字段 排序聚合(字段) (升序/降序) 限制数量 ]

| 唯一字段

| 首尾[1-10]字段名

| 具有 (分组字段.字段 / 时间窗口.计数 运算符 / 分组字段.唯一字段.聚合/聚合函数.字段) 运算符 值

注:
  • 括号内的操作符可任意排序。
  • timewindow只能出现一次。
  • 分组计数可最多出现三次, 顺序不限。

查找条件

查找查询

查找运算符可从查找表中获取额外信息。

它将事件字段名称和值与查找表字段名称进行匹配。

  • 若未使用"set" → 则按查找包含方式工作(检查键是否存在)。返回 True/False。
  • 若使用"set" → 从查找表中获取值并存储在您选择的字段中。

语法:

lookup 事件字段 in 查找表.查找字段 [ 及/或更多条件 ] (set 查找表.目标字段 as 新字段)

示例:

  • logtype = windows and eventid = 4625 → 在user_details.user中查找username
  • logtype = windows 且 eventid = 4625 → 在 user_details.user 中查找用户名 将 user_details.ip_address 设为 ip,将 user_details.port 设为 port
  • logtype = windows 且 eventid = 4625 → 在 user_details.user 中查找用户名,在 user_details.hostname 中查找设备 将 user_details.ip_address 设为 ip,将 user_details.port 设为 port

关联条件

  1. 算术运算符
  2. 关联多操作
  3. 链接语句
  4. 序列语句
  5. 定义和过滤语句
  6. 选择语句

1. 算术运算符

运算符 描述 示例
+ 添加 时间戳 + 3600000毫秒 > 4800000
- 时间戳 - 3600000毫秒 > 2400000
* 乘法 比率 = (故障事件计数 / 访问计数)
/ 除法 比率 = (失败事件计数 / 访问计数) * 100

2. 关联(多操作)

  • 您可以定义多个带条件的操作(e1、e2 等)。
  • 每个动作必须包含基本条件。聚合函数和查找条件为可选项。
  • 语法:操作名称 : 基本条件 | 聚合条件 | 查找条件 | 关联条件
  • 示例
    • e1: 日志类型 = cisco 且 常见报表名称 属于 (unix用户添加, 防火墙用户 添加, 用户账户创建, 计算机账户创建)
    • e2: 日志类型 = cisco 且通用报表名称 in (计算机账户删除, 用户 account deleted, unix user deleted, firewall user deleted) and hosttype = e1.hosttype and targetuser = e1.targetuser and _zl_timestamp between e1._zl_timestamp and (e1._zl_timestamp + 3600000ms)
  • 链接语句用于比较某操作字段是否与另一操作字段匹配。
  • 可通过AND/OR/NOT与其他条件组合使用。
  • 语法:字段名 (运算符) 操作名.字段名 [ 及/或更多 比较条件 ]
  • 示例
    • 暴力破解登录
      • e1:logtype = windows and event_name = failed windows login | groupby username | groupby devicename
      • e2:logtype = windows 且 event_name = successful windows login 且 username = e1.username 且 devicename = e1.devicename
      • 序列:e1 紧接 e2,间隔不超过 10 分钟
      • Select e1.username, e2.devicename
    • 异常用户账户变更
      • e1:日志类型 = Windows 且通用报表名称在 (unix 用户 添加, 防火墙用户添加, 用户账户创建, 计算机账户 创建)
      • e2:日志类型 = windows 且 common_report_name 属于 (计算机账户删除, 用户账户删除, unix 用户删除, 防火墙用户删除) 且 主机类型 = e1.hosttype 且 目标用户 = e1.targetuser 且 时间 >= e1.time
      • Select e1.主机类型, e1.目标用户

4. 序列语句

  • 定义特定时间内某操作是否紧随另一操作发生。
  • 必须始终指定时间范围。
  • 语法:序列 : 操作1 (跟随/不跟随) 操作2 在 时间范围内 [ 且操作2 跟随/不跟随 操作3 ... ]
  • 示例
    • 未经授权的文件访问
      • e1:logtype = windows and eventid = 4663 (对象访问尝试)
      • e2:logtype = windows and eventid = 4656 (句柄请求)
      • 序列:e1 未由 e2 跟随 且 时间间隔小于 5 分钟
      • 选择 e1.username, e1.devicename
    • 暴力破解登录
      • e1:日志类型 = windows 且 事件名称 = 失败的 windows 登录 | 按用户名分组 | 按设备名称分组
      • e2:日志类型 = windows 且事件名称 = 成功的 windows 登录 且用户名 = e1.username 且设备名称 = e1.devicename
      • 序列:e1 紧接 e2 且时间间隔小于10分钟
      • Select e1.username, e2.devicename
    • Ragnar Locker勒索软件检测
      • e1:日志类型 = Windows 且 进程ID = 4688 且 进程名称 = msiexec.exe
      • e2:日志类型 = windows 且 事件ID = 4654 且 对象名称 包含 Program Files(X86) 且 以 VirtualAppliances\va.exe 结尾 且 设备名称 = e1.devicename
      • e3: 日志类型 = Windows 且 进程ID = 4688 且 进程名称 = e2.对象名称 且 设备名称 = e1.设备名称
      • 序列:e1 发生后 30 分钟内出现 e2,随后 2 分钟内出现 e3
    • 可疑SQL备份活动
      • e1:日志类型 = Windows 且事件ID = 4625 | 唯一 设备名称
      • e2:日志类型 = Windows 且事件ID = 4624 且设备名称 = e1.设备名称 且用户名 = e1.用户名
      • e3:日志类型 = mssql 且操作ID = lgis
      • e4:日志类型 = * 且操作 = ba
      • 序列:e1后10分钟内发生e2,且e3后 5分钟内发生e4

5. 定义与过滤语句

Def语句

  • def语句用于计算表达式并将结果值放入搜索结果字段。
  • 用于在搜索结果中创建新字段,该字段值即表达式计算结果。
  • 在 def 语句中,仅可获取总计数、平均值或总和,例如 action_count 或基于动作的字段聚合如 'e1.count' 或 'e1.sent_bytes.sum'。
  • 语法:def: 变量名 = 操作名.(计数 / 字段.聚合函数) 运算符 操作名.(计数 | 字段.聚合函数 / 值)

过滤语句

  • 过滤运算符仅保留符合过滤条件的记录。
  • def语句中的字段约束将应用于过滤语句。
  • 语法:filter: (def_variable_name / actionname. (count / field.aggregate_function)) operator value

示例:两个事件的比率:

  • 访问条件:logtype="windows" and
  • failure_event:logtype="windows" and and
  • def:ratio = count(failure_event) / count(access)
  • def:百分比 = 比率 * 100
  • 过滤器:百分比 > 50
  • Select 比率, 失败事件计数, 访问计数

6. Select语句

  • Select用于显示结果中需要呈现的字段或聚合值。
  • 语法:select 字段, 聚合函数
  • 示例:
    • 过多的登录失败
      • e1:logtype = windows 且 common_report_name 属于 (router logon failed, unix logon failed, firewall logon failed, logon failed, vpn logout, firewall logoff, failed cloud logon) | 按 username 分组
      • Select e1._zl_timestamp, e1.hostname
    • 异常用户账户变更
      • e1:日志类型 = windows 且 common_report_name 属于 (unix 用户 添加, 防火墙用户添加, 用户账户创建, 计算机账户 创建)
      • e2:日志类型 = * 且通用报表名称在 (计算机 账户 删除, 用户账户删除, Unix 用户删除, 防火墙用户删除) 且 主机类型 = e1.hosttype 且目标用户 = e1.targetuser 且 _zl_timestamp 介于 e1._zl_timestamp 与 (e1._zl_timestamp + 3600000ms) 之间
      • Select e1._zl_timestamp, e1.log_uuid, e2._zl_timestamp, e2.log_uuid
    • VPN登录失败过多
      • failed_logon: logtype = * and eventtype = vpn_logon_failure | distinct username having count > 5
      • Select failed_logon.username, count(failed_logon)
    • 可疑文件访问
      • file_access:logtype = windows and eventid = 4663 | groupby username | groupby objectname having count > 3
      • file_modified: logtype = windows and eventid = 4663 and type = modify and username = file_access.username and objectname = file_access.objectname
      • 序列:file_access 紧接 file_modified 且 时间间隔<5分钟
      • Select file_access.username, file_modified.objectname, count(file_access.objectname)

用例特定示例

以下是查询语法如何应用于检测常见安全场景的实际示例。 每个示例展示查询逻辑、支持的运算符及输出字段。

1. 成功登录

描述:检测Windows系统中的成功登录事件。

查询语句:

logtype = "Windows"
且事件ID = 4624
且消息包含"成功登录"

2. 过多登录失败尝试

描述:标记登录失败次数过多的用户名或设备。

查询

日志类型为 ("windows", "unix")
且事件ID = 4625
| 按用户名分组
| 按设备名称分组且计数 > 10

3. 暴力破解登录检测

描述:检测暴力破解尝试,即同一用户在同一设备上短时间内多次登录失败后 紧接着 成功登录的情况。

查询语句:

步骤1 – 失败登录记录 (e1):

e1:
logtype = "windows"
且 event_name = "Failed Windows Login"
| 按用户名分组
| 按设备名称分组

步骤 2 – 成功登录 (e2):

e2:
日志类型 = "windows"
且事件名称 = "Windows登录成功"
用户名 = e1.username
且设备名称 = e1.设备名称

序列逻辑:

e1 发生后 10 分钟内触发 e2

最终输出:

select e1.username, e2.devicename

4. 端口扫描攻击

描述:识别在短时间内扫描多个端口的设备或IP地址。

查询语句:

e1:
日志类型在 ("unix", "windows", "sysmon")
且事件名称 = "允许连接"
| 按远程IP分组
| 按主机分组
| 按端口分组,且计数 > 100

select e1.主机, count(e1.主机)

5. 数据外泄检测

描述:检测异常高出站数据传输量。

查询:

netlog:
logtype = "unix"
且 event_name = "允许连接"
| 按 srcip 分组
| 按目标IP分组,且发送字节数>100MB

select netlog.源IP, netlog.目标IP, sum(netlog.发送字节数)

6. 失败事件与成功事件的比例

描述:计算失败访问事件占总访问事件的百分比。

查询:

步骤1 – 总访问事件

access:
logtype = "*"
且 type = "access"

步骤 2 – 访问失败事件:

failure_event:
日志类型 = "*"
且类型 = "访问"
且状态 = "失败"

定义比率:

def: ratio = (failure_event.count / access.count) * 100

过滤高失败率:

筛选条件:比率 > 50

最终输出:

select 比率, 访问次数, 故障事件次数

检测规则限制

检测规则限制规定了ELA和L3C关联模式下的功能约束及运算符支持范围。 下表详细说明了计划检测规则与持续检测规则在支持运算符、阈值、聚合及查询结构方面的差异。

下表详细说明了定时检测规则与持续检测规则在支持运算符、阈值、聚合及 查询构造方面的差异。

功能 描述 EventLog Analyzer 计划关联 EventLog Analyzer 持续关联 Log360 Cloud 计划关联 Log360 Cloud 持续关联
数值关系运算符 基本比较运算符(>、<、=、!=、>=、<=、in、not in、exists、not exists、between、not between) IP范围不支持 支持所有运算符 不支持IP范围 支持所有运算符
字符串关系运算符 基于文本的比较(包含、不包含、以...开头、以...结尾、 匹配、不匹配) 匹配与不匹配不支持 支持所有运算符 匹配与不匹配不支持 支持所有运算符
逻辑运算符 逻辑条件(与、或) 全部支持 全部支持 全部支持 全部支持
高级运算符 安全检查(isMalicious、isVulnerable、misconfiguredFor) 仅支持 isMalicious 全部支持 不支持任何操作符 仅支持 isMalicious
声明链接 在条件构建器中链接操作 支持多重+嵌套条件 支持多重条件;不支持嵌套条件 支持多重+嵌套条件 最多支持3个条件;不支持嵌套
阈值限制 阈值计数限制 无限制 最大限制为999 无限制 默认限制为10(可增加)
IN运算符值限制 IN 操作符内部的最大项数 25 25 25 25
聚合函数 聚合函数(求和、求均值、求最大值、求最小值、求标准差、求百分位数、求计数、求唯一值) 全部支持 仅支持计数和唯一项统计 全部支持 仅支持计数和唯一项
WITH 运算符 基本条件中使用聚合函数 最多支持10个条件项 不支持 最多 10 个术语 不支持
排序运算符 按字段排序结果 支持(最多5个字段) 不支持 支持(最多5个字段) 不支持
时间窗口运算符 设置基于时间的阈值 最多7天;上限200 无限制(不支持时间窗口) 最多1天;上限200 默认1小时(可延长);不支持时间窗口
直方图运算符 直方图功能 不支持 不支持 不支持 不支持
分组运算符 按条件分组字段 最多 3 个字段 无限制 最多 3 个字段(受限制) 最多 3 个字段
唯一运算符 阈值/查询中的唯一计数 仅限1个唯一字段(无排序/限制) 仅限1个唯一字段(无排序/限制) 仅1个唯一字段(无排序/限制) 仅1个唯一字段(无排序/限制)
最大分组计数 + 唯一值计数 组合使用限制 最多3个groupby + 1个distinct 多个分组 + 1个唯一值 或(最多2个分组+1个唯一)或(最多3个分组+0个唯一) 最多 3 次分组 + 1 次去重
首尾操作符字段 返回首条或末条记录 最多10个字段 不支持 最多 10 个字段 不支持
isAnomalous 运算符 UEBA异常检测
算术运算符 查询中的算术运算 支持 不支持 支持 不支持
最大操作限制 允许操作次数 最多10次 最多 10 最多3次 最多3
序列语句 有序事件检查(后跟/不后跟) 最多7天 最多30天 最多1天 最多1小时
Def语句 创建新计算字段 最多10 不支持 最多 10 不支持
筛选条件 保留符合条件的记录 最多 10 不支持 最多 10 不支持
SELECT语句 选择字段(仅限计划规则中的别名) 最多 20 最多 20 最多 20 最多 20
查询长度 每次查询的最大字符数 10000 10000 10000 10000
高级规则中的异常操作 异常检测不可与阈值/分组/去重/关联条件组合使用

另请参阅

本文档阐述了查询语法如何支持高级规则创建,涵盖通过运算符与函数定义 条件、应用关联逻辑及构建实用检测用例的全过程。