教程:使用 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-logsprocess-logsnetwork-logs

  2. 查找索引:这些是为核心数据提供额外上下文的辅助索引。我们需要三个查找索引:asset-inventoryuser-contextthreat-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-contextthreat-intelasset-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. 使用 EVALCASE 检测编码命令。

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

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

响应

响应包含可疑 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. 使用 STATSCOUNT_DISTINCT 计算全面的访问指标。

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

  5. 使用 EVALCASE 进行风险评分。

响应

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

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,结合 SUMCOUNT,衡量一段时间内的数据传输量。

  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 NULLCASE,根据不同数据源对事件类型进行分类。

  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 JOINasset-inventoryuser-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_DISTINCTtime_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

相关推荐
weixin_505061451 小时前
原厂技术协同|世强硬创携手星坤连接解锁 IOTE 高可靠互连解决方案
大数据
bwz999@88.com1 小时前
Ubuntu Server 24.04 设置中文
linux·运维·ubuntu
乐迪信息1 小时前
如何通过AI防爆摄像机精准判断船舶超速?
大数据·人工智能·算法·安全·目标跟踪
Cx330❀2 小时前
【Linux网络】网络层协议 IP :从网络层原理到 Linux 内核源码
linux·运维·服务器·网络·tcp/ip·ai·ai编程
志栋智能2 小时前
运维超自动化的变更管理实践
运维·自动化
全栈攻略2 小时前
Docker 中 ROS2 工作流 Topic 验证与常用命令指南
运维·docker·容器
ITxiaobing20232 小时前
广告归因场景下的IP情报工程化:提升AppsFlyer P360匹配精度的实践思路
大数据·人工智能·tcp/ip
爱吃糖醋红烧肉2 小时前
谷歌SEO与独立站建站双启动:出海品牌企业的增长引擎
大数据·谷歌seo·外贸建站·独立站seo·谷歌建站·外贸seo·白帽seo