会话视图

编辑

会话视图是一个调查工具,允许您根据 Linux 逻辑事件模型以树状结构组织 Linux 进程数据进行检查,其中进程按父子关系和执行时间进行组织。它以受终端启发的易于阅读的格式显示事件。这使其成为监控和调查 Linux 基础设施上的会话活动以及了解用户和服务行为的强大工具。

会话视图具有以下功能

  • 交互式和非交互式进程: 具有或不具有控制终端的进程和服务。
  • 用户信息: 执行每个会话或进程的 Linux 用户,以及任何 exec 用户更改。
  • 进程和事件遥测: Linux 逻辑事件模型中包含的进程信息。
  • 嵌套会话: 由入口会话的后代进程启动的会话。
  • 警报: 在导致警报的事件上下文中出现的进程、文件和网络警报。
  • 终端输出: 与会话中每个进程关联的终端输出。

要查看来自 Kubernetes 基础设施的 Linux 会话数据,您需要设置 Kubernetes 仪表盘

启用会话视图数据

编辑

会话视图使用 Elastic Defend 集成收集的进程数据,但此数据并非始终默认收集。要确认会话视图数据已启用

  1. 在导航菜单中查找 策略,或使用 全局搜索字段
  2. 选择一个或多个要编辑的 Elastic Defend 集成策略。
  3. 选择 策略设置 选项卡,然后向下滚动到底部的 Linux 事件收集部分。
  4. 选中 进程 事件的复选框,并打开 收集会话数据 切换按钮。
  5. 如果要将文件和网络警报包含在会话视图中,请选中 网络文件 事件的复选框。
  6. 如果要启用终端输出捕获,请打开 捕获终端输出 切换按钮。

会话视图只能显示在启用 收集会话数据 时由 Elastic Defend 收集的数据。启用此设置后,Elastic Defend 会在捕获的进程、文件和网络事件中包含其他进程上下文数据。有关启用此设置时收集的其他字段的更多信息,请参阅 Linux 事件模型 RFC

打开会话视图

编辑

可以从 主机警报时间线 页面以及警报详细信息浮出层和 Kubernetes 仪表盘访问会话视图。您可以在会话视图中调查的事件和会话在 操作 列中有一个矩形的 打开会话视图 按钮。例如

  • 在“警报”页面上,向下滚动以查看“警报”表。查找在 操作 列中具有 打开会话视图 按钮的警报

    Detail of the Open Session View button
  • 在“主机”页面 (探索主机) 上,选择 会话事件 选项卡。从这两个选项卡中的任何一个选项卡,单击事件或会话的 打开会话视图 按钮。

会话视图 UI

编辑

会话视图 UI 具有以下功能

Detail of Session view with labeled UI elements
  1. 关闭会话全屏 按钮。
  2. 搜索栏。使用它在当前会话中查找和突出显示搜索词。左右箭头允许您在搜索结果之间导航。
  3. 显示设置 按钮。单击以切换时间戳和详细模式。启用详细模式后,会话视图将显示会话中创建的所有进程,包括 shell 启动、shell 完成以及内置命令引起的 fork。它默认为 关闭 以突出显示最有可能由用户生成且非标准的数据。
  4. 详细信息面板 按钮。单击它以切换详细信息面板,该面板显示在按钮下方,并显示有关所选进程的祖先和主机以及任何关联警报的各种其他信息。要在会话视图中选择一个进程,请单击它。
  5. 启动进程。在此示例中,它显示会话是一个 bash 会话。它还显示 Linux 用户“Ubuntu”启动了会话。
  6. 子进程 按钮。单击以展开或折叠进程的子级。您还可以展开出现处的折叠警报和脚本。折叠的进程将在其内容与搜索匹配时自动展开。
  7. 警报 按钮。单击以显示由父进程引起的警报。在此示例中,(2) 表示有两个警报。请注意导致警报的事件左侧的红线。由此事件引起的两个警报都是 process 警报,如齿轮图标所示。
  8. 终端输出 按钮。悬停以查看已从会话中捕获了多少输出数据。单击以打开终端输出视图,该视图将在下面详细描述。
  9. 刷新会话 按钮。单击以检查当前会话是否有任何新数据。

会话视图包含上面未显示的其他徽章

  • 当单个事件导致多种类型的警报时,将显示多个警报的警报徽章 (齿轮图标 用于 process 警报,页面图标 用于 file 警报,以及 页面图标 用于 network 警报)

    The alert badge for a command with all three alert types
  • Exec 用户更改 徽章突出显示 exec 用户更改,例如当用户提升到 root 权限时

    The Exec user change badge
  • 输出 徽章显示在生成终端输出的命令旁边。单击它以在终端输出视图中查看该命令的输出。

    The Output badge

终端输出视图 UI

编辑

通常,终端输出是在交互式 Linux shell 会话中显示的文本。这通常包括用户输入的文本(终端输入),作为输出出现以方便编辑命令,以及执行程序的文本输出。在某些情况下,例如密码输入,终端输入不会作为输出捕获。

从安全角度来看,终端输出非常重要,因为它提供了一种泄露数据的方法。例如,类似 cat tls-private-key.pem 的命令可能会输出 Web 服务器的私钥。因此,终端输出视图可以帮助您更好地了解用户或攻击者执行的命令,并协助审计和合规性。

要启用终端输出数据捕获

  1. 在导航菜单中查找 策略,或使用 全局搜索字段
  2. 选择一个或多个要编辑的 Elastic Defend 集成策略。
  3. 策略设置 选项卡上,向下滚动到页面底部的 Linux 事件收集部分,然后选择 收集会话数据捕获终端输出 选项。

您可以通过单击页面底部的 高级设置 来配置其他几个设置

  • linux.advanced.tty_io.max_kilobytes_per_process:要从单个进程记录的输出的最大千字节数。默认值:512 KB。超过此值的进程输出将不会记录。
  • linux.advanced.tty_io.max_kilobytes_per_event:作为单个事件发送到 Elasticsearch 的输出的最大千字节数。默认值:512 KB。其他数据将作为新事件捕获。
  • linux.advanced.tty_io.max_event_interval_seconds:输出分批处理的最大间隔(以秒为单位)。默认值:30 秒。输出将在此间隔内发送到 Elasticsearch(除非它首先超过 max_kilobytes_per_event 值,在这种情况下,它可能会更早发送)。
Terminal output view
  1. 搜索栏。用于在当前会话中查找和突出显示搜索词。左右箭头允许您在搜索结果之间导航。
  2. 右侧滚动条。与底部滚动条一起使用以导航不适合单个屏幕的输出数据。
  3. 播放控件和进度条。用于推进或倒回会话的命令和输出。单击进度条上的任意位置以跳转到会话的该部分。条形上的标记表示生成输出的进程。单击它们或 上一个下一个 按钮可在进程之间跳过。
  4. 适合屏幕放大缩小 按钮。用于调整文本大小。

使用会话视图的 全屏 按钮(位于 关闭会话查看器 按钮旁边)以更好地适应具有长行的输出,例如图形程序(如 vim)。

搜索和警报的终端输出限制

编辑

在基于终端输出数据构建规则之前,您应该了解一些当前限制

  • 出现在 process.io.text 字段中的终端输出包含 ANSI 代码,这些代码表示文本颜色、文本粗细和转义序列等内容。这可能会阻止 EKS 查询按预期匹配。此数据查询将比更复杂的字符串更成功地匹配单个单词。
  • 此数据查询应包含前导和尾随通配符(例如 process where process.io.text : "*sudo*"),因为输出事件通常包含多行输出。
  • 终端输出视图中内置的搜索功能也存在类似的限制。例如,如果用户意外输入了 sdo 而不是 sudo,然后按了退格键两次以更正错别字,则记录的输出将为 sdo\b\budo。这将在终端输出视图中显示为 sudo,但搜索终端输出视图中的 sudo 不会导致匹配。
  • 看似应该连续的输出可能由于上述高级设置而被拆分为多个事件,这可能会导致查询或搜索结果与预期不符。
  • 基于输出数据的规则将识别哪个输出事件的 process.io.text 值匹配了警报查询,但不会识别该值中匹配的具体部分。例如,规则查询 process.io.text: "*test*" 可能会匹配一个大型的多行日志文件,因为其中包含一个 test 实例,但不会识别该实例在文件中的位置。