Osquery

编辑

Osquery 是一个开源工具,允许您像数据库一样查询操作系统,从而使您可以了解您的基础设施和操作系统。使用基本的 SQL 命令,您可以询问有关设备(例如服务器、Docker 容器以及运行 Linux、macOS 或 Windows 的计算机)的问题。广泛的架构有助于各种用例,包括漏洞检测、合规性监控、事件调查等。

使用 Kibana 中的 Osquery,您可以

  • 为一个或多个代理运行实时查询
  • 安排查询包以捕获操作系统状态随时间的变化
  • 查看过去查询及其结果的历史记录
  • 保存查询并为特定用例构建查询库

Kibana 中的 Osquery 由 Osquery Manager 集成提供支持。有关如何设置 Osquery Manager 的信息,请参阅 管理集成

所需权限

编辑

要使用 Osquery Manager,您必须被分配到具有以下权限的角色

  • logs-osquery_manager.result* 索引的 读取 权限。
  • 用于 Osquery Manager 的 Kibana 权限。 全部 权限使您可以运行、安排和保存查询。读取 权限使您可以查看实时和计划的查询结果,但您无法运行实时查询或进行编辑。

运行实时查询

编辑

要检查主机,请针对一个或多个代理或策略运行查询,然后查看结果。

  1. 使用导航菜单或 全局搜索字段转到 Osquery
  2. 实时查询 视图中,单击 新建实时查询
  3. 选择运行单个查询或查询包。
  4. 选择要查询的一个或多个代理或组。在搜索字段中开始键入,您将获得按名称、ID、平台和策略列出的代理建议。
  5. 指定要运行的查询或包

    • 查询:选择一个已保存的查询或在文本框中输入一个新的查询。输入查询后,您可以展开 高级 部分,以设置查询的超时时间,并查看或设置实时查询结果中包含的 映射的 ECS 字段(可选)。

      覆盖查询的默认超时时间,可以支持需要更长时间才能完成的查询。超时字段的默认值和支持的最小值是 60。支持的最大值是 900

    • :从可用的查询包中选择。选择一个包后,将显示该包中的所有查询。

      请参阅 预构建包,了解有关使用和管理 Elastic 预构建包的信息。

      Select saved query dropdown name showing query name and description
  6. 单击 提交

    要保存单个查询以供将来使用,请单击 保存以供以后使用,并定义 ID、描述和其他 详细信息

  7. 查看结果并执行以下任何操作

    • 单击 在 Discover 中查看 (在 Discover 中查看图标) 以在 Discover 中浏览结果。
    • 单击 在 Lens 中查看 (在 Lens 中查看图标) 以导航到 Lens,您可以在其中使用拖放式 Lens 编辑器创建可视化效果。
    • 单击 添加到案例 (添加到案例图标) 以将查询结果添加到新的或现有的案例中。
    • 单击查看详细信息图标 (查看详细信息图标) 以检查查询 ID 和语句。
  8. 要查看有关请求的更多信息(例如失败),请打开 状态 选项卡。

查看或重新运行以前的实时查询

编辑

实时查询历史记录 部分(在 实时查询 选项卡上)显示过去 30 天运行的查询日志。在“实时查询”表中,您可以

  • 单击运行图标 (向右三角形) 以重新运行单个查询或查询包。
  • 单击表图标 (表图标) 以检查单个查询或查询包的 结果。在结果表中,您还可以找到查询 状态

    Results of OSquery

使用包计划查询

编辑

包是一组执行类似功能或解决常见用例的分组查询。可下载的预构建 Elastic 包可以帮助您开始使用 Osquery 集成。

您还可以创建一个包含一个或多个查询的自定义包。例如,在创建自定义包时,您可能会创建一个检查 IT 合规性类型问题的包,以及另一个监视恶意软件证据的包。

您可以将包作为实时查询运行,或安排包为一个或多个代理策略运行。计划后,包中的查询将按为这些策略中的所有代理设置的时间间隔运行。

  1. 单击 选项卡。
  2. 单击 添加包 以创建新包,或单击现有包的名称,然后单击 编辑 以向现有包添加查询。
  3. 提供包的名称。简短描述是可选的。
  4. 安排该包部署在指定的代理策略(策略)或所有代理策略(全局)上。

    包部署详细信息存储在 Osquery 配置中。分片 字段值是策略中使用该包的代理的百分比。

    如果您选择 策略 选项,请配置以下字段

    在定义包部署详细信息时,您不能多次配置同一策略。换句话说,指定策略后,您可以选择将包部署到该策略的所有代理,或者仅部署到一部分代理。您不能同时选择两者。

    • 计划的 Elastic Agent 策略(可选):允许您将包部署到特定的代理策略。默认情况下,该包将部署到注册到您定义的策略的所有 Elastic Agent。
    • 部分部署(分片):允许您将包部署到每个指定代理策略中的一部分代理。定义策略后,使用 分片 滑块设置要将包部署到的代理数量。例如,指定策略后,您可以通过在滑块上选择 50% 来选择将包部署到策略中一半的代理。
  5. 如果要创建新包,请添加要计划的查询

    • 单击 添加查询,然后添加已保存的查询或输入新的查询。每个查询都必须包含唯一的查询 ID 和应运行的间隔。您可以选择设置最低 Osquery 版本和平台、指定超时时间或 映射 ECS 字段。将已保存的查询添加到包时,这将添加查询的副本。已保存的查询和包之间不维护连接。

      覆盖查询的默认超时时间,可以支持需要更长时间才能完成的查询。超时字段的默认值和支持的最小值是 60。支持的最大值是 900

    • 通过将包拖到查询表下的放置区,从 .conf 查询包上载查询。要浏览 Osquery 发布的社区包,请单击 示例包
  6. 单击 保存包。策略收到更新后,查询将运行。

查看计划包的状态

编辑
  1. 打开 选项卡。
  2. 单击包名称以查看状态。

    详细信息包括每个查询上次运行的时间、返回的结果数量以及运行该查询的代理数量。如果有错误,请展开该行以查看详细信息,包括在日志中查看更多信息的选项。

    Shows queries in the pack and details about each query
  3. Discover 或拖放式 Lens 编辑器中查看计划的查询结果。

保存查询

编辑

您可以通过两种方式保存查询

  • 运行实时查询后,单击 保存以供以后使用 链接。
  • 已保存的查询 选项卡中,单击 添加已保存的查询

保存查询后,您只能从 已保存的查询 选项卡中编辑该查询

  1. 转到 已保存的查询,然后单击 添加已保存的查询 或编辑图标。
  2. 提供以下字段

    • 唯一标识符(必填)。
    • 简短描述。
    • SQL 查询(必填)。Osquery 支持多行查询。
    • 超时时间(可选)。增加查询的默认超时时间以支持需要更长时间才能完成的查询。 超时字段的默认值和支持的最小值是 60。支持的最大值是 900
    • 查询运行时要填充的 ECS 字段(可选)。将此查询添加到包时,这些字段也会被复制。
    • 将查询添加到包时要设置的默认值。

      • 运行查询的频率。
      • 运行查询所需的最低 Osquery 版本
      • 运行查询所需的操作系统。有关每个表支持的平台的信息,请参阅 Osquery 架构
  3. 单击 测试配置 以测试查询和任何映射的字段

    • 测试查询 面板中,选择要测试查询的代理或组,然后单击 提交 以运行实时查询。具有 映射 图标的结果列已映射。将鼠标悬停在图标上以查看映射的 ECS 字段。
  4. 单击 保存更新

预构建的 Elastic 包和查询

编辑

预构建的 Osquery 包包含在集成中。添加包后,您可以激活并计划它。

预构建包

编辑

预构建的 Osquery 包包含在集成中,可以选择加载。添加后,您可以激活并计划这些包。

您可以修改预构建包的计划代理策略,但无法编辑包中的查询。要编辑查询,您必须先创建包的副本。

有关可用的预构建包的信息,请参阅预构建包参考

加载和激活预构建的 Elastic 包

编辑

按照以下步骤加载并开启新的或更新的预构建包

  1. 转到,然后单击加载 Elastic 预构建包
  2. 对于要激活和计划的每个包

    • 打开活动切换开关以确保包持续运行。

      您必须手动运行未激活的包。

    • 单击包名称,然后单击编辑
    • 更新计划的代理策略以指定此包应在何处运行的策略。
  3. 单击更新包

复制预构建的 Elastic 包

编辑

要修改预构建包中的查询,您必须首先创建包的副本。

  1. 转到堆栈管理已保存的对象
  2. 按名称搜索要修改的 Osquery 包。
  3. 选择要导出的包的复选框。
  4. 单击导出 x 个对象
  5. 单击导入
  6. 选择导入选项创建具有随机 ID 的新对象,然后单击导入以导入该包。这将创建您可以编辑的包的副本。

预构建查询

编辑

集成中包含一组已保存的查询,可作为实时查询运行。请注意以下关于预构建查询的信息

  • 这些查询不可编辑。
  • 其中几个查询包含默认的 ECS 映射,以标准化结果。
  • 预构建的 Elastic 查询都遵循相同的命名约定,并标识正在查询的信息类型、它支持的操作系统(如果仅限于一个或多个),以及这些是 Elastic 查询。例如,firewall_rules_windows_elastic

将结果字段映射到 ECS

编辑

当您保存查询或将查询添加到包时,您可以选择将 Osquery 结果或静态值映射到Elastic Common Schema (ECS) 中的字段。这可以标准化您的 Osquery 数据,以便在检测、机器学习以及任何其他依赖于符合 ECS 的数据的领域中使用。当查询运行时,结果将包括原始的 osquery.<fields> 和映射的 ECS 字段。例如,如果您更新查询以将 osquery.name 映射到 user.name,则查询结果将同时包含这两个字段。

  1. 编辑已保存的查询或包中的查询以映射字段

    • 对于已保存的查询:打开已保存的查询选项卡,然后单击要映射的查询的编辑图标。
    • 对于:打开选项卡,编辑一个包,然后单击要映射的查询的编辑图标。
  2. ECS 映射部分中,选择要映射的ECS 字段
  3. 列中,使用左侧的下拉菜单选择要映射到 ECS 字段的值类型

    • Osquery 值:选择一个 Osquery 字段。可用的字段基于输入的 SQL 查询,并且仅包括查询返回的字段。当查询运行时,ECS 字段将动态设置为所选 Osquery 字段的值。
    • 静态值:输入一个静态值。当查询运行时,ECS 字段将设置为输入的值。例如,可以使用静态字段将 tags 或您首选的 event.category 应用于查询结果。
  4. 根据需要映射更多字段。要删除任何已映射的行,请单击删除图标。
  5. 保存您的更改。
  • 某些 ECS 字段受到限制,无法映射。这些字段在 ECS 下拉列表中不可用。
  • 某些 ECS 字段被限制为一组允许的值,例如event.category。在映射字段时,请使用ECS 字段参考获取帮助。
  • Osquery 日期字段具有多种数据类型(包括整数、文本或 bigint)。将 Osquery 日期字段映射到 ECS 日期字段时,您可能需要在查询中使用 SQL 运算符来获取 Elasticsearch 兼容的日期类型。

Kubernetes 查询的扩展表

编辑

除了 Osquery 模式之外,Elastic 提供的 Osquery 版本还包括以下表,以支持 Kubernetes 容器。可以使用实时或计划查询来查询这些表。

  • host_users
  • host_groups
  • host_processes

查询这些表时,期望 /etc/passwd/etc/group/proc 在容器中以 /hostfs 的形式可用:/hostfs/etc/passwd/hostfs/etc/group/hostfs/proc。有关这些表中可用字段的信息,请参阅导出的字段参考。

Osquery 状态

编辑

查询可以具有以下状态

成功

查询已成功完成。

失败

查询遇到问题,例如查询问题或代理已断开连接,并且可能已失败。

尚未响应

查询尚未发送到代理。

已过期

操作请求超时。代理可能处于脱机状态。

如果代理处于脱机状态,则当 Kibana 重试请求时,请求状态将保持待定。默认情况下,查询请求在一分钟后超时。当查询未在该间隔内完成时,将返回操作超时错误。

Osquery 结果

编辑

当您运行实时或计划查询时,结果会自动存储在 Elasticsearch 索引中,以便您可以在 Kibana 中搜索、分析和可视化此数据。有关查询结果中可以返回的 Osquery 字段列表,请参阅导出的字段。如果查询定义了 ECS 映射,则查询结果还可以包括 ECS 字段。

Osquery 响应包括以下信息

  • osquery. 开头的所有内容都是查询响应的一部分。默认情况下,这些字段不会映射到 ECS。
  • 结果默认包括一些 ECS 字段,例如 host.*agent.*,它们提供有关被查询的主机的信息。
  • 对于实时查询,action_data.query 是发送的查询。
  • 对于包中的计划查询,action_id 的格式为 pack_<pack-name>_<query-ID>。您可以使用此信息来查找运行的查询。
  • 默认情况下,所有查询结果都是快照日志,表示某个时间点的结果集,没有差异
  • Osquery 数据存储在 logs-osquery_manager.result-<namespace> 数据流中,结果行数据位于文档中的 osquery 属性下。