Osquery
Elastic Stack 无服务器安全性
Osquery 是一个开源工具,允许您像数据库一样查询操作系统,从而提供对您的基础设施和操作系统的可见性。使用基本的 SQL 命令,您可以查询设备,例如服务器、Docker 容器以及运行 Linux、macOS 或 Windows 的计算机。 广泛的模式 有助于各种用例,包括漏洞检测、合规性监控、事件调查等。
使用 Osquery,您可以
- 为一个或多个代理运行实时查询
- 调度查询包以捕获操作系统状态随时间的变化
- 查看过去查询及其结果的历史记录
- 保存查询并构建用于特定用例的查询库
要使用 Osquery,您必须将 Osquery 管理器集成 添加到 Elastic Agent 策略。完成此步骤后,您可以使用解决方案中可用的 Osquery 功能。
要使用 Osquery Manager,您必须被分配到具有以下权限的角色
logs-osquery_manager.result*
索引的Read
权限。- Osquery Manager 的 Kibana 权限。
All
权限使您可以运行、调度和保存查询。Read
使您可以查看实时和调度的查询结果,但您无法运行实时查询或进行编辑。
要检查主机,请针对一个或多个代理或策略运行查询,然后查看结果。
使用导航菜单或 全局搜索字段 转到 Osquery。
在 实时查询 视图中,单击 新建实时查询。
选择运行单个查询或查询包。
选择一个或多个要查询的代理或组。 在搜索字段中开始键入,您将获得按名称、ID、平台和策略的代理建议。
指定要运行的查询或包
查询:选择一个已保存的查询或在文本框中输入一个新的查询。 输入查询后,您可以展开 高级 部分以设置查询的超时时间,以及查看或设置 映射的 ECS 字段(可选),这些字段包含在实时查询的结果中。
注意覆盖查询的默认超时时间允许您支持需要更多时间才能完成的查询。 超时 字段的默认和最小支持值为
60
。 最大支持值为86400
(24 小时)。包:从可用的查询包中选择。 选择一个包后,将显示该包中的所有查询。
提示请参阅 预构建包,了解有关使用和管理 Elastic 预构建包的信息。
单击 提交。
提示要保存单个查询以供将来使用,请单击 稍后保存 并定义 ID、描述和其他 详细信息。
查看结果并执行以下任何操作
- 单击 在 Discover 中查看 (
) 以在 Discover 中浏览结果。
- 单击 在 Lens 中查看 (
) 以导航到 Lens,您可以在其中使用拖放 Lens 编辑器来创建可视化。
- 单击 添加到案例 (
) 以将查询结果添加到新的或现有的案例。
- 单击查看详细信息图标 (
) 以检查查询 ID 和语句。
- 单击 在 Discover 中查看 (
要查看有关请求的更多信息(例如故障),请打开 状态 选项卡。
实时查询历史记录 部分中的 实时查询 选项卡显示过去 30 天内运行的查询日志。 从实时查询表中,您可以
包是一组分组的查询,它们执行类似的功能或解决常见的用例。 可以下载 预构建的 Elastic 包,它们可以帮助您开始使用 Osquery 集成。
您还可以使用一个或多个查询创建自定义包。 例如,在创建自定义包时,您可以创建一个包来检查 IT 合规性类型的问题,而另一个包则监视恶意软件的证据。
您可以将包作为实时查询运行,或调度包为一个或多个代理策略运行。 调度后,包中的查询会以设定的间隔为这些策略中的所有代理运行。
单击 包 选项卡。
单击 添加包 以创建新包,或单击现有包的名称,然后单击 编辑 以将查询添加到现有包。
为包提供名称。 简短描述是可选的。
计划在指定的代理策略 (策略) 或所有代理策略 (全局) 上部署包。
提示包部署详细信息存储在 Osquery 配置 中。
shard
字段值是在策略中使用包的代理百分比。如果您选择 策略 选项,请配置以下字段
注意定义包部署详细信息时,您不能多次配置同一策略。 换句话说,指定策略后,您可以选择将包部署到策略的所有代理,也可以仅部署到一部分代理。 您不能同时选择两者。
- 调度的 Elastic Agent 策略(可选):允许您将包部署到特定的代理策略。 默认情况下,包将部署到注册到您定义的策略的所有 Elastic Agent。
- 部分部署(分片):允许您将包部署到每个指定代理策略的一部分代理。 定义策略后,使用 分片 滑块来设置部署包的代理数量。 例如,在指定策略后,您可以通过在滑块上选择 50% 来选择将包部署到策略的一半代理。
如果您正在创建新包,请添加要调度的查询
单击 添加查询,然后添加一个已保存的查询或输入一个新的查询。 每个查询都必须包含唯一的查询 ID 和应运行的间隔。 (可选)设置最低 Osquery 版本和平台,指定超时时间或 映射 ECS 字段。 将已保存的查询添加到包时,这会添加查询的副本。 已保存的查询和包之间不会维护连接。
注意覆盖查询的默认超时时间允许您支持需要更多时间才能完成的查询。 超时 字段的默认和最小支持值为
60
。 最大支持值为86400
(24 小时)。通过将包拖到查询表下的放置区域,从
.conf
查询包上传查询。 要浏览 Osquery 发布的社区包,请单击 示例包。
单击 保存包。 查询在策略收到更新时运行。
您可以通过两种方式保存查询
- 运行实时查询后,单击 稍后保存 链接。
- 在 已保存的查询 选项卡中,单击 添加已保存的查询。
保存查询后,您只能从 已保存的查询 选项卡编辑它
转到 已保存的查询,然后单击 添加已保存的查询 或编辑图标。
提供以下字段
唯一标识符(必需)。
简短的描述。
SQL查询(必需)。 Osquery支持多行查询。
超时时间(可选)。 增加查询的默认超时时间,以支持需要更多时间才能完成的查询。 超时字段的默认值和最小支持值为
60
。 最大支持值为86400
(24小时)。运行查询时要填充的 ECS字段(可选)。 将此查询添加到包时,也会复制这些字段。
将查询添加到包时要设置的默认值。
- 运行查询的频率。
- 运行查询所需的最低Osquery版本。
- 运行查询所需的操作系统。 有关每个表支持的平台的信息,请参阅Osquery schema。
点击 测试配置 测试查询和任何映射的字段
- 从 测试查询 面板中,选择代理或组来测试查询,然后点击 提交 运行实时查询。 带有
图标的结果列是映射的。 将鼠标悬停在图标上以查看映射的ECS字段。
- 从 测试查询 面板中,选择代理或组来测试查询,然后点击 提交 运行实时查询。 带有
点击 保存 或 更新。
预构建的Osquery包包含在集成中。 添加包后,您可以激活并安排它。
预构建的Osquery包包含在集成中,可以选择加载。 添加后,您可以激活并安排这些包。
您可以修改预构建包的计划代理策略,但无法编辑包中的查询。 要编辑查询,必须首先创建包的副本。
有关可用的预构建包的信息,请参阅预构建包参考。
按照以下步骤加载并打开新的或更新的预构建包
转到 包,然后点击 加载Elastic预构建包。
对于要激活和安排的每个包
打开 活动 切换开关,以确保该包持续运行。
注意您必须手动运行非活动包。
点击包名称,然后点击 编辑。
更新 计划的代理策略 以指定应运行此包的策略。
点击 更新包。
要修改预构建包中的查询,必须首先创建包的副本。
- 转到 Stack Management → Saved Objects。
- 按名称搜索要修改的Osquery包。
- 选择要导出的包的复选框。
- 点击 导出 x 个对象。
- 点击 导入。
- 选择导入选项 使用随机ID创建新对象,然后点击 导入 导入该包。 这将创建您可以编辑的包的副本。
该集成包含一组已保存的查询,可作为实时查询运行。 请注意以下有关预构建查询的信息
- 这些查询不可编辑。
- 一些查询包括默认的ECS映射以标准化结果。
- 预构建的Elastic查询都遵循相同的命名约定,并标识正在查询的信息类型,如果仅限于一个或多个操作系统,则标识其支持的操作系统,以及这些是Elastic查询。 例如,
firewall_rules_windows_elastic
。
保存查询或将查询添加到包时,您可以选择将Osquery结果或静态值映射到Elastic Common Schema(ECS)中的字段。 这将标准化您的Osquery数据,以便在检测,机器学习和任何其他依赖于符合ECS的数据的领域中使用。 运行查询时,结果包括原始的 osquery.<fields>
和映射的ECS字段。 例如,如果您更新查询以将 osquery.name
映射到 user.name
,则查询结果将同时包含这两个字段。
编辑已保存的查询或包中的查询以映射字段
- 对于已保存的查询:打开 已保存的查询 选项卡,然后点击要映射的查询的编辑图标。
- 对于包:打开 包 选项卡,编辑一个包,然后点击要映射的查询的编辑图标。
在 ECS 映射 部分中,选择要映射的 ECS 字段。
在 值 列中,使用左侧的下拉菜单选择要映射到ECS字段的值类型
- Osquery 值:选择一个 Osquery 字段。 可用的字段基于输入的SQL查询,并且仅包括查询返回的字段。 运行查询时,ECS字段将动态设置为所选Osquery字段的值。
- 静态值:输入一个静态值。 运行查询时,ECS字段将设置为输入的值。 例如,静态字段可用于将
tags
或您喜欢的event.category
应用于查询结果。
根据需要映射更多字段。 要删除任何映射的行,请点击删除图标。
保存更改。
- 某些ECS字段受到限制,无法映射。 这些在ECS下拉列表中不可用。
- 某些ECS字段被限制为一组允许的值,例如event.category。 映射字段时,请使用ECS字段参考获取帮助。
- Osquery日期字段具有多种数据类型(包括整数,文本或bigint)。 将Osquery日期字段映射到ECS日期字段时,您可能需要在查询中使用SQL运算符来获取与Elasticsearch兼容的date类型。
除了Osquery模式之外,Elastic提供的Osquery版本还包括以下表以支持Kubernetes容器。 这些可以通过实时或计划的查询进行查询。
host_users
host_groups
host_processes
查询这些表时,期望 /etc/passwd
, /etc/group
和 /proc
在容器中以 /hostfs
的形式提供: /hostfs/etc/passwd
, /hostfs/etc/group
和 /hostfs/proc
。 有关这些表中可用字段的信息,请参见导出的字段参考。
查询可以具有以下状态
成功 | 查询成功完成。 |
失败 | 查询遇到问题,例如查询问题或代理已断开连接,并且可能失败。 |
尚未响应 | 查询尚未发送到代理。 |
已过期 | 操作请求超时。 代理可能已离线。 |
如果代理处于离线状态,则请求状态将保持 待定,因为Kibana会重试该请求。 默认情况下,查询请求会在一分钟后超时。 当查询未在该时间间隔内完成时,将返回操作超时错误。
当您运行实时或计划的查询时,结果会自动存储在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
属性下。