正在加载

会话视图

Elastic Stack 无服务器安全

会话视图是一种调查工具,它允许您检查 Linux 进程数据,这些数据按照 Linux 逻辑事件模型以树状结构组织,进程按父进程和执行时间组织。它以一种高度可读的格式显示事件,这种格式的灵感来自终端。这使其成为监控和调查 Linux 基础设施上的会话活动,以及了解用户和服务行为的强大工具。

要求

确保您拥有适当的 Elastic Stack 订阅无服务器项目层

会话视图具有以下功能

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

会话视图使用 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 具有以下功能

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
要求
  • 只能从具有启用 eBPF 的内核版本 5.10.16 或更高版本的 Linux 操作系统收集会话输出。

一般来说,终端输出是在交互式 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 实例而匹配一个大型多行日志文件,而不会识别该实例在文件中的位置。
© . All rights reserved.