教程:使用 ES|QL 进行威胁狩猎

本动手实践教程演示如何使用 Elasticsearch 查询语言(ES|QL)执行高级威胁狩猎技术。

在一个模拟的高级持续性威胁(APT)攻击活动中,我们分析身份验证、进程执行和网络遥测数据中的安全事件,以检测:

  • 通过恶意电子邮件附件进行的初始入侵

  • 通过网络进行的横向移动

  • 权限提升尝试

  • 数据外泄活动

ES|QL 支持强大的转换、过滤、数据丰富和统计分析功能,非常适合复杂的安全调查。本教程提供了使用 ES|QL 进行威胁狩猎的实际示例,从识别可疑用户行为到构建攻击时间线。

要求

你需要一个正在运行的 Elasticsearch 集群以及 Kibana 才能运行本教程。有关部署选项,请参阅部署类型选择文档。

如何运行 ES|QL 查询

在本教程中,ES|QL 示例以下面的格式显示:

复制代码
FROM windows-security-logs
| WHERE event.code == "4624"
| LIMIT 1000

你可以使用以下方式运行这些查询:

  • 交互式界面:

    • Timeline。在导航菜单中查找 Timeline,或者使用全局搜索字段。

    • Discover。在导航菜单中查找 Discover,或者使用全局搜索字段。

  • 通过 Dev Tools Console 使用 REST API。此方式需要额外的格式:

查看 ES|QL 的 Console 语法

复制代码
POST /_query?format=txt
{
  "query": """
    FROM windows-security-logs
    | WHERE event.code == "4624"
    | LIMIT 1000
  """
}

步骤 0:添加示例数据

要跟随本教程进行操作,你需要使用 Dev Tools Console 向集群添加示例数据。

总体来说,数据分为两种类型:

  1. 核心索引:这些是包含你要分析的日志和事件的主要安全索引。我们需要三个核心索引:windows-security-logs、process-logs 和 network-logs。

  2. 查找索引:这些是为核心数据提供额外上下文的辅助索引。我们需要三个查找索引:asset-inventory、user-context 和 threat-intel。

创建核心索引

首先,为我们的威胁狩猎场景创建核心安全索引:

复制代码
PUT /windows-security-logs
{
  "mappings": {
    "properties": {
      "@timestamp": {"type": "date"},
      "event": {
        "properties": {
          "code": {"type": "keyword"}, # Event codes like 4624 (successful logon) and 4625 (failed logon) are stored as keywords for exact matching.
          "action": {"type": "keyword"}
        }
      },
      "user": {
        "properties": {
          "name": {"type": "keyword"},
          "domain": {"type": "keyword"}
        }
      },
      "host": {
        "properties": {
          "name": {"type": "keyword"},
          "ip": {"type": "ip"}
        }
      },
      "source": {
        "properties": {
          "ip": {"type": "ip"}
        }
      },
      "logon": {
        "properties": {
          "type": {"type": "keyword"}
        }
      }
    }
  }
}

事件代码(例如 4624(登录成功)和 4625(登录失败))以 keyword 类型存储,以便进行精确匹配。

现在,让我们向 windows-security-logs 索引添加一些身份验证事件示例数据,也就是登录失败和登录成功事件。

复制代码
POST /_bulk?refresh=wait_for
{"index":{"_index":"windows-security-logs"}}
{"@timestamp":"2025-05-20T08:15:00Z","event":{"code":"4625","action":"logon_failed"},"user":{"name":"jsmith","domain":"corp"},"host":{"name":"WS-001","ip":"10.1.1.50"},"source":{"ip":"10.1.1.100"}}
{"index":{"_index":"windows-security-logs"}}
{"@timestamp":"2025-05-20T08:17:00Z","event":{"code":"4624","action":"logon_success"},"user":{"name":"jsmith","domain":"corp"},"host":{"name":"WS-001","ip":"10.1.1.50"},"source":{"ip":"10.1.1.100"},"logon":{"type":"3"}}
{"index":{"_index":"windows-security-logs"}}
{"@timestamp":"2025-05-20T09:30:00Z","event":{"code":"4624","action":"logon_success"},"user":{"name":"jsmith","domain":"corp"},"host":{"name":"SRV-001","ip":"10.1.2.10"},"source":{"ip":"10.1.1.50"},"logon":{"type":"3"}}
{"index":{"_index":"windows-security-logs"}}
{"@timestamp":"2025-05-20T10:45:00Z","event":{"code":"4624","action":"logon_success"},"user":{"name":"jsmith","domain":"corp"},"host":{"name":"DB-001","ip":"10.1.3.5"},"source":{"ip":"10.1.2.10"},"logon":{"type":"3"}}
{"index":{"_index":"windows-security-logs"}}
{"@timestamp":"2025-05-20T02:30:00Z","event":{"code":"4624","action":"logon_success"},"user":{"name":"admin","domain":"corp"},"host":{"name":"DC-001","ip":"10.1.4.10"},"source":{"ip":"10.1.3.5"},"logon":{"type":"3"}}

接下来,创建一个用于进程执行日志的索引。

复制代码
PUT /process-logs
{
  "mappings": {
    "properties": {
      "@timestamp": {"type": "date"},
      "process": {
        "properties": {
          "name": {"type": "keyword"},
          "command_line": {"type": "text"}, # Command lines are stored as text fields to enable full-text search for suspicious parameters and encoded commands.
          "parent": {
            "properties": {
              "name": {"type": "keyword"}
            }
          }
        }
      },
      "user": {
        "properties": {
          "name": {"type": "keyword"}
        }
      },
      "host": {
        "properties": {
          "name": {"type": "keyword"}
        }
      }
    }
  }
}

命令行以 text 字段存储,以支持针对可疑参数和编码命令的全文搜索。

向 process-logs 索引添加一些示例数据。

复制代码
POST /_bulk?refresh=wait_for
{"index":{"_index":"process-logs"}}
{"@timestamp":"2025-05-20T08:20:00Z","process":{"name":"powershell.exe","command_line":"powershell.exe -enc JABzAD0ATgBlAHcALgBPAGIAagBlAGMAdAAgAFMAeQBzAHQAZQBtAC4ATgBlAHQALgBXAGUAYgBDAGwAaQBlAG4AdAA=","parent":{"name":"winword.exe"}},"user":{"name":"jsmith"},"host":{"name":"WS-001"}}
{"index":{"_index":"process-logs"}}
{"@timestamp":"2025-05-20T09:35:00Z","process":{"name":"net.exe","command_line":"net user /domain","parent":{"name":"cmd.exe"}},"user":{"name":"jsmith"},"host":{"name":"SRV-001"}}
{"index":{"_index":"process-logs"}}
{"@timestamp":"2025-05-20T10:50:00Z","process":{"name":"sqlcmd.exe","command_line":"sqlcmd -S localhost -Q \"SELECT * FROM customers\"","parent":{"name":"powershell.exe"}},"user":{"name":"jsmith"},"host":{"name":"DB-001"}}
{"index":{"_index":"process-logs"}}
{"@timestamp":"2025-05-20T02:35:00Z","process":{"name":"ntdsutil.exe","command_line":"ntdsutil \"ac i ntds\" \"ifm\" \"create full c:\\temp\\ntds\"","parent":{"name":"cmd.exe"}},"user":{"name":"admin"},"host":{"name":"DC-001"}}
{"index":{"_index":"process-logs"}}
{"@timestamp":"2025-05-20T12:15:00Z","process":{"name":"schtasks.exe","command_line":"schtasks.exe /create /tn UpdateCheck /tr c:\\windows\\temp\\update.exe /sc daily","parent":{"name":"cmd.exe"}},"user":{"name":"jsmith"},"host":{"name":"WS-001"}}
{"index":{"_index":"process-logs"}}
{"@timestamp":"2025-05-20T12:30:00Z","process":{"name":"schtasks.exe","command_line":"schtasks.exe /create /tn SystemManager /tr powershell.exe -enc ZQBjAGgAbwAgACIASABlAGwAbABvACIA /sc minute /mo 5","parent":{"name":"powershell.exe"}},"user":{"name":"jsmith"},"host":{"name":"SRV-001"}}
{"index":{"_index":"process-logs"}}
{"@timestamp":"2025-05-20T13:15:00Z","process":{"name":"sc.exe","command_line":"sc.exe create RemoteService binPath= c:\\windows\\temp\\remote.exe","parent":{"name":"cmd.exe"}},"user":{"name":"jsmith"},"host":{"name":"DB-001"}}
{"index":{"_index":"process-logs"}}
{"@timestamp":"2025-05-20T13:20:00Z","process":{"name":"sc.exe","command_line":"sc.exe create BackdoorService binPath= c:\\programdata\\svc.exe","parent":{"name":"powershell.exe"}},"user":{"name":"jsmith"},"host":{"name":"SRV-001"}}
{"index":{"_index":"process-logs"}}
{"@timestamp":"2025-05-20T13:25:00Z","process":{"name":"sc.exe","command_line":"sc.exe create PersistenceService binPath= c:\\windows\\system32\\malicious.exe","parent":{"name":"cmd.exe"}},"user":{"name":"admin"},"host":{"name":"DC-001"}}

接下来,创建一个用于网络流量日志的索引。

复制代码
PUT /network-logs
{
  "mappings": {
    "properties": {
      "@timestamp": {"type": "date"},
      "source": {
        "properties": {
          "ip": {"type": "ip"},
          "port": {"type": "integer"}
        }
      },
      "destination": {
        "properties": {
          "ip": {"type": "ip"},
          "port": {"type": "integer"}
        }
      },
      "network": {
        "properties": {
          "bytes": {"type": "long"},
          "protocol": {"type": "keyword"}
        }
      },
      "host": {
        "properties": {
          "name": {"type": "keyword"}
        }
      }
    }
  }
}

向 network-logs 索引添加一些示例数据。

复制代码
POST /_bulk?refresh=wait_for
{"index":{"_index":"network-logs"}}
{"@timestamp":"2025-05-20T08:25:00Z","source":{"ip":"10.1.1.50","port":52341},"destination":{"ip":"185.220.101.45","port":443},"network":{"bytes":2048,"protocol":"tcp"},"host":{"name":"WS-001"}}
{"index":{"_index":"network-logs"}}
{"@timestamp":"2025-05-20T11:15:00Z","source":{"ip":"10.1.3.5","port":54892},"destination":{"ip":"185.220.101.45","port":443},"network":{"bytes":50000000,"protocol":"tcp"},"host":{"name":"DB-001"}}
{"index":{"_index":"network-logs"}}
{"@timestamp":"2025-05-20T02:40:00Z","source":{"ip":"10.1.4.10","port":61234},"destination":{"ip":"185.220.101.45","port":443},"network":{"bytes":500000000,"protocol":"tcp"},"host":{"name":"DC-001"}}

创建查找索引

查找模式允许这些索引与 LOOKUP JOIN 操作一起使用,从而使用资产上下文丰富安全事件。

使用 lookup 索引模式创建我们需要的索引。

复制代码
PUT /asset-inventory
{
  "mappings": {
    "properties": {
      "host.name": {"type": "keyword"},
      "asset.criticality": {"type": "keyword"},
      "asset.owner": {"type": "keyword"},
      "asset.department": {"type": "keyword"}
    }
  },
  "settings": {
    "index.mode": "lookup"
  }
}

PUT /user-context
{
  "mappings": {
    "properties": {
      "user.name": {"type": "keyword"},
      "user.role": {"type": "keyword"},
      "user.department": {"type": "keyword"},
      "user.privileged": {"type": "boolean"}
    }
  },
  "settings": {
    "index.mode": "lookup"
  }
}

PUT /threat-intel
{
  "mappings": {
    "properties": {
      "indicator.value": {"type": "keyword"},
      "indicator.type": {"type": "keyword"},
      "threat.name": {"type": "keyword"},
      "threat.severity": {"type": "keyword"}
    }
  },
  "settings": {
    "index.mode": "lookup"
  }
}

现在,我们可以使用上下文数据填充查找索引。这个单独的批量操作可以通过一次请求,将数据分别写入 user-context、threat-intel 和 asset-inventory 索引。

复制代码
POST /_bulk?refresh=wait_for
{"index":{"_index":"asset-inventory"}}
{"host.name":"WS-001","asset.criticality":"medium","asset.owner":"IT","asset.department":"finance"}
{"index":{"_index":"asset-inventory"}}
{"host.name":"SRV-001","asset.criticality":"high","asset.owner":"IT","asset.department":"operations"}
{"index":{"_index":"asset-inventory"}}
{"host.name":"DB-001","asset.criticality":"critical","asset.owner":"DBA","asset.department":"finance"}
{"index":{"_index":"asset-inventory"}}
{"host.name":"DC-001","asset.criticality":"critical","asset.owner":"IT","asset.department":"infrastructure"}
{"index":{"_index":"user-context"}}
{"user.name":"jsmith","user.role":"analyst","user.department":"finance","user.privileged":false}
{"index":{"_index":"user-context"}}
{"user.name":"admin","user.role":"administrator","user.department":"IT","user.privileged":true}
{"index":{"_index":"threat-intel"}}
{"indicator.value":"185.220.101.45","indicator.type":"ip","threat.name":"APT-29","threat.severity":"high"}
{"index":{"_index":"threat-intel"}}
{"indicator.value":"powershell.exe","indicator.type":"process","threat.name":"Living off the Land","threat.severity":"medium"}

步骤 1:狩猎初始入侵指标

我们的威胁狩猎第一阶段关注识别初始入侵。我们希望搜索来自 Office 应用程序的可疑 PowerShell 执行,这是常见的初始攻击向量。

复制代码
FROM process-logs
| WHERE process.name == "powershell.exe" AND process.parent.name LIKE "*word*" #1
| LOOKUP JOIN asset-inventory ON host.name  #2
| LOOKUP JOIN user-context ON user.name  #3
| EVAL encoded_command = CASE(process.command_line LIKE "*-enc*", true, false) #4
| WHERE encoded_command == true #5
| STATS count = COUNT(*) BY host.name, user.name, asset.criticality #6
| LIMIT 1000
  1. 使用 WHERE、== 和 LIKE 运算符检测 PowerShell 进程。

  2. 使用 LOOKUP JOIN 与资产清单进行数据丰富。

  3. 使用 LOOKUP JOIN 添加用户上下文。

  4. 使用 EVAL 和 CASE 检测编码命令。

  5. 使用 WHERE 进行额外过滤。

  6. 使用 STATS 和 COUNT 按多个字段对结果进行聚合。

响应

响应包含可疑 PowerShell 执行的摘要,包括主机名称、用户名和资产关键性。

count host.name user.name asset.criticality
1 WS-001 jsmith medium

步骤 2:检测横向移动模式

在此步骤中,我们跟踪用户在多个系统上的身份验证情况。这对于识别横向移动和潜在的权限提升非常重要。

此查询演示了 DATE_TRUNC 如何创建时间窗口来进行速度分析,并结合 COUNT_DISTINCT 聚合和 DATE_DIFF 计算,同时衡量用户在网络资产之间移动的范围和速度。

复制代码
FROM windows-security-logs
| WHERE event.code == "4624" AND logon.type == "3"
| LOOKUP JOIN asset-inventory ON host.name
| EVAL time_bucket = DATE_TRUNC(30 minute, @timestamp)
| STATS unique_hosts = COUNT_DISTINCT(host.name),
        criticality_levels = COUNT_DISTINCT(asset.criticality),
        active_periods = COUNT_DISTINCT(time_bucket),
        first_login = MIN(@timestamp),
        last_login = MAX(@timestamp)
BY user.name
| WHERE unique_hosts > 2
| EVAL time_span_hours = DATE_DIFF("hour", first_login, last_login)
| EVAL movement_velocity = ROUND(unique_hosts / (time_span_hours + 1), 2)
| EVAL lateral_movement_score = unique_hosts * criticality_levels
| SORT lateral_movement_score DESC
| LIMIT 1000
  1. 使用 WHERE 进行基本的身份验证过滤。

  2. 使用 DATE_TRUNC 创建时间桶,以进行时间类型分析。

  3. 使用 STATS 和 COUNT_DISTINCT 计算全面的访问指标。

  4. 使用 DATE_DIFF 计算持续时间。

  5. 使用 EVAL 和 CASE 进行风险评分。

响应

响应显示登录到多个主机的用户、这些主机的关键性级别以及其横向移动速度。

unique_hosts criticality_levels active_periods first_login last_login user.name time_span_hours movement_velocity lateral_movement_score
3 3 3 2025-05-20T08:17:00.000Z 2025-05-20T10:45:00.000Z jsmith 2 1 9

步骤 3:识别数据访问和潜在的数据外泄

高级攻击者通常会将敏感数据作为目标。我们希望狩猎数据库访问行为,以及向外部系统进行的大规模数据传输。

复制代码
FROM network-logs
| WHERE NOT CIDR_MATCH(destination.ip, "10.0.0.0/8", "192.168.0.0/16") #1
| EVAL indicator.value = TO_STRING(destination.ip) #2
| LOOKUP JOIN threat-intel ON indicator.value
| LOOKUP JOIN asset-inventory ON host.name
| WHERE threat.name IS NOT NULL
| STATS total_bytes = SUM(network.bytes),
        connection_count = COUNT(*),
        time_span = DATE_DIFF("hour", MIN(@timestamp), MAX(@timestamp)) #3
BY host.name, destination.ip, threat.name, asset.criticality
| EVAL mb_transferred = ROUND(total_bytes / 1048576, 2) #4
| EVAL risk_score = CASE(
    asset.criticality == "critical" AND mb_transferred > 100, 10,
    asset.criticality == "high" AND mb_transferred > 100, 7,
    mb_transferred > 50, 5,
    3
  ) #5
| WHERE total_bytes > 1000000
| SORT risk_score DESC, total_bytes DESC
| LIMIT 1000
  1. 使用 CIDR_MATCH 过滤内部 IP 范围,以检测外部数据传输。

  2. 使用 TO_STRING 统一 IP 格式,以便执行威胁情报查找。

  3. 使用 DATE_DIFF,结合 SUM 和 COUNT,衡量一段时间内的数据传输量。

  4. 使用 ROUND 生成便于人类阅读的数值。

  5. 使用 CASE 根据资产关键性和传输数据量进行风险评分。

响应

响应显示外部数据传输、其风险评分以及传输的数据量。

total_bytes connection_count time_span host.name destination.ip threat.name asset.criticality mb_transferred risk_score
500000000 1 0 DC-001 185.220.101.45 APT-29 critical 476 10
50000000 1 0 DB-001 185.220.101.45 APT-29 critical 47 3

步骤 4:构建攻击时间线并评估影响

为了了解攻击的推进过程,我们需要跨多个索引构建事件时间线。这有助于我们关联各种行为,并识别攻击者在环境中的驻留时间。

复制代码
FROM windows-security-logs, process-logs, network-logs  # 1
| LOOKUP JOIN asset-inventory ON host.name
| LOOKUP JOIN user-context ON user.name
| WHERE user.name == "jsmith" OR user.name == "admin"
| EVAL event_type = CASE(
    event.code IS NOT NULL, "Authentication",
    process.name IS NOT NULL, "Process Execution",
    destination.ip IS NOT NULL, "Network Activity",
    "Unknown") # 2
| EVAL dest_ip = TO_STRING(destination.ip)
| EVAL attack_stage = CASE(
    process.parent.name LIKE "*word*", "Initial Compromise",
    process.name IN ("net.exe", "nltest.exe"), "Reconnaissance",
    event.code == "4624" AND logon.type == "3", "Lateral Movement",
    process.name IN ("sqlcmd.exe", "ntdsutil.exe"), "Data Access",
    dest_ip NOT LIKE "10.*", "Exfiltration",
    "Other") # 3
| SORT @timestamp ASC #4
| KEEP @timestamp, event_type, attack_stage, host.name, asset.criticality, user.name, process.name, destination.ip
| LIMIT 1000
  1. 使用 FROM 同时读取多个索引,以进行全面的数据关联。

  2. 使用 IS NOT NULL 和 CASE,根据不同数据源对事件类型进行分类。

  3. 使用复杂的 CASE 逻辑将事件映射到 MITRE ATT&CK 阶段。

  4. 使用 SORT 构建按时间顺序排列的攻击时间线。

响应

响应提供按时间顺序排列的事件时间线,展示攻击者的行为以及对组织造成的影响。

@timestamp event_type attack_stage host.name asset.criticality user.name process.name destination.ip
2025-05-20T02:30:00.000Z 身份验证 横向移动 DC-001 critical admin null null
2025-05-20T02:35:00.000Z 进程执行 数据访问 DC-001 critical admin ntdsutil.exe null
2025-05-20T08:15:00.000Z 身份验证 其他 WS-001 medium jsmith null null
2025-05-20T08:17:00.000Z 身份验证 横向移动 WS-001 medium jsmith null null
2025-05-20T08:20:00.000Z 进程执行 初始入侵 WS-001 medium jsmith powershell.exe null
2025-05-20T09:30:00.000Z 身份验证 横向移动 SRV-001 high jsmith null null
2025-05-20T09:35:00.000Z 进程执行 侦察 SRV-001 high jsmith net.exe null
2025-05-20T10:45:00.000Z 身份验证 横向移动 DB-001 critical jsmith null null
2025-05-20T10:50:00.000Z 进程执行 数据访问 DB-001 critical jsmith sqlcmd.exe null
2025-05-20T12:15:00.000Z 进程执行 其他 WS-001 medium jsmith schtasks.exe null
2025-05-20T12:30:00.000Z 进程执行 其他 SRV-001 high jsmith schtasks.exe null
2025-05-20T13:15:00.000Z 进程执行 其他 DB-001 critical jsmith sc.exe null
2025-05-20T13:20:00.000Z 进程执行 其他 SRV-001 high jsmith sc.exe null
2025-05-20T13:25:00.000Z 进程执行 其他 DC-001 critical admin sc.exe null

步骤 5:狩猎异常的解释器使用行为

此查询演示了如何使用 ES|QL 的 COUNT_DISTINCT 函数和条件 CASE 语句,以用户和部门为维度建立解释器使用行为基线,并利用聚合函数识别异常脚本执行,这类行为可能表明账户已遭入侵或存在内部威胁。

复制代码
FROM process-logs
| WHERE process.name IN ("powershell.exe", "cmd.exe", "net.exe", "sqlcmd.exe", "schtasks.exe", "sc.exe")
| LOOKUP JOIN asset-inventory ON host.name
| LOOKUP JOIN user-context ON user.name
| STATS executions = COUNT(*),
        unique_hosts = COUNT_DISTINCT(host.name),
        unique_commands = COUNT_DISTINCT(process.name)
BY user.name, user.department
| WHERE executions > 1
| EVAL usage_pattern = CASE(
    executions > 5, "High Usage",
    executions > 3, "Moderate Usage",
    "Low Usage"
  )
| SORT executions DESC
| LIMIT 1000
  1. 使用 WHERE...IN 监控高风险系统工具。

  2. 使用 LOOKUP JOIN 与 asset-inventory 和 user-context 索引结合,为事件添加上下文。

  3. 使用 COUNT_DISTINCT 衡量可疑工具使用的广度。

  4. 使用 CASE 对使用模式进行分类,以便进行异常检测。

响应

响应显示每个用户和部门的执行次数、唯一主机数量以及使用模式。

executions unique_hosts unique_commands user.name user.department usage_pattern
7 3 5 jsmith finance 高使用量

步骤 6:狩猎持久化机制

此查询展示了 DATE_TRUNC 如何支持对持久化机制进行时间类型分析,通过时间分桶和 COUNT_DISTINCT 识别快速连续创建任务或跨多个时间窗口建立持久化等可疑模式。

复制代码
FROM process-logs
| WHERE process.name == "schtasks.exe" AND process.command_line:"/create" #1
| LOOKUP JOIN asset-inventory ON host.name
| LOOKUP JOIN user-context ON user.name
| EVAL time_bucket = DATE_TRUNC(1 hour, @timestamp) #2
| STATS task_creations = COUNT(*),
        creation_hours = COUNT_DISTINCT(time_bucket) #3
BY user.name, host.name, asset.criticality
| WHERE task_creations > 0
| EVAL persistence_pattern = CASE(
    creation_hours > 1, "Multiple Hours",
    task_creations > 1, "Burst Creation",
    "Single Task"
  )
| SORT task_creations DESC
| LIMIT 1000
  1. 使用带有 : 匹配运算符的 WHERE,检测计划任务创建行为(这是一种常见的持久化机制)。

  2. 使用 DATE_TRUNC 将事件划分到按小时计算的时间桶中,以进行时间类型分析。

  3. 使用 COUNT_DISTINCT 和 time_bucket 衡量任务创建速度。

  4. 使用 CASE 根据时间和频率对可疑模式进行分类。

响应

响应显示每个用户和主机的任务创建数量、创建时间以及持久化模式。

task_creations creation_hours user.name host.name asset.criticality persistence_pattern
1 1 jsmith WS-001 medium 单个任务
1 1 jsmith SRV-001 high 单个任务

其他资源

提示

要了解可以在 Elastic Security 的哪些场景中使用 ES|QL,请参阅 ES|QL for security 概览。

原文:Tutorial: Threat hunting with ES|QL | Elastic Docs

相关推荐
梦帮科技20 分钟前
领域认知知识库图谱注入:从双式记账图网络到高质量问答对自动化合成流水线
运维·网络·数据库·人工智能·矩阵·架构·自动化
Long long ago.21 分钟前
vastbase数据库运行sql宕机重启解决
数据库·sql
逐流人1 小时前
Ceph分布式存储集群配置与池管理:从配置优先级到PG、复本池与纠删码池
运维·分布式·ceph·云原生·云计算·rados
海宇服务1 小时前
零信任架构实战:基于海宇车型识别精准构建自动化定损网关
运维·人工智能·架构·自动化
SelectDB技术团队1 小时前
一条日志两套引擎的账:把 Elasticsearch 检索与分析合并到同一份数据的落地写法
大数据·数据库·elasticsearch·搜索引擎·全文检索·日志·apache doris
数据库百宝箱1 小时前
rum&gin索引对比
java·数据库·gin
大大大大晴天1 小时前
每天认识一个组件:远端数据服务Apache Celeborn
大数据
Fcy6481 小时前
Linux下 进程间关系与守护进程
linux·运维·服务器·守护进程
wefg12 小时前
【Redis】初识 Redis
数据库·redis·缓存
g10565591392 小时前
公有云_云运维服务
java·运维·服务器