Kirti SodhiSusan ChangApoorva Joshi

使用 LLM 和 ESRE 查找相似的用户会话

在之前的文章中,我们探讨了使用 GPT-4 大型语言模型 (LLM) 来精简 Linux 用户会话。在同一实验的背景下,我们花了一些时间来检查具有相似性的会话。这些相似的会话随后可以帮助分析师识别相关的可疑活动。

Using LLMs and ESRE to find similar user sessions

使用 LLM 和 ESRE 查找相似的用户会话

在我们的上一篇文章中,我们探讨了使用 GPT-4 大型语言模型 (LLM) 将复杂的 Linux 用户会话精简为简洁的摘要。我们重点介绍了我们实验中的主要发现,揭示了数据预处理、提示调整和模型参数调整的细微差别。在同一实验的背景下,我们花了一些时间来检查具有相似性的会话。这些相似的会话随后可以帮助分析师识别相关的可疑活动。我们探索了以下方法来查找用户会话中的相似性

  • 为了发现相似的用户配置文件和会话,我们采取的一种方法是根据用户执行的操作对会话进行分类;我们通过指示语言模型 (LLM) 将用户会话分类为预定义的类别来完成此操作
  • 此外,我们还利用了 ELSER(Elastic 的用于语义搜索的检索模型)的功能,对从会话摘要实验中得出的模型摘要执行语义搜索

这项研究重点介绍了我们使用 GPT-4 进行会话分类和使用 ESRE 进行语义搜索的实验。

利用 GPT 进行会话分类

我们咨询了一位具有领域专业知识的安全研究同事,为我们的 75 个会话数据集定义了九个类别。这些类别概括了会话中观察到的主要行为和重要特征。它们包括以下活动

  • Docker 执行
  • 网络操作
  • 文件搜索
  • Linux 命令行使用
  • Linux 沙盒应用程序使用
  • Pip 安装
  • 软件包安装
  • 脚本执行
  • 进程执行

经验教训

在我们的实验中,我们使用了 Azure AI Studio 中部署的 GPT-4,令牌限制为 32k。为了探索 GPT 模型在会话分类方面的潜力,我们进行了一系列实验,指示模型通过输入我们用于会话摘要过程的同一 JSON 摘要文档来对会话进行分类。

这项工作包括多次迭代,在此期间我们专注于增强提示和少样本学习。至于模型参数,我们保持温度为 0,以努力使输出多样性降低。

提示工程

要点:在提示中包含类别的解释不会影响模型的性能。

会话分类组件作为会话摘要提示的扩展引入。我们探讨了将每个类别的上下文解释与提示结合在一起的效果。有趣的是,我们的发现表明,与缺少此类补充信息的提示相比,附加说明性上下文并没有显着影响模型的性能。

以下是我们用来指导模型分类过程的模板

You are a cybersecurity assistant, who helps Security analysts in summarizing activities that transpired in a Linux session. A summary of events that occurred in the session will be provided in JSON format. No need to explicitly list out process names and file paths. Summarize the session in ~3 paragraphs, focusing on the following: 
- Entities involved in the session: host name and user names.
- Overview of any network activity. What major source and destination ips are involved? Any malicious port activity?
- Overview of any file activity. Were any sensitive files or directories accessed?
- Highlight any other important process activity
- Looking at the process, network, and file activity, what is the user trying to do in the session? Does the activity indicate malicious behavior?

Also, categorize the below Linux session in one of the following 9 categories: Network, Script Execution, Linux Command Line Utility, File search, Docker Execution, Package Installations, Pip Installations, Process Execution and Linux Sandbox Application.

A brief description for each Linux session category is provided below. Refer to these explanations while categorizing the sessions.
- Docker Execution: The session involves command with docker operations, such as docker-run and others
- Network: The session involves commands with network operations
- File Search: The session involves file operations, pertaining to search
- Linux Command Line Utility: The session involves linux command executions
- Linux Sandbox Application: The session involves a sandbox application activity. 
- Pip Installations: The session involves python pip installations
- Package Installations: The session involves package installations or removal activities. This is more of apt-get, yum, dpkg and general command line installers as opposed to any software wrapper
- Script Execution: The session involves bash script invocations. All of these have pointed custom infrastructure script invocations
- Process Execution: The session focuses on other process executions and is not limited to linux commands. 
 ###
 Text: {your input here}

少样本调优

要点:为每个类别添加示例可以提高准确性。

同时,我们调查了通过在上述提示中包含每个类别的一个示例来提高模型性能的有效性。该策略带来了显着提升,特别是将模型的准确性提高了 20%。

评估 GPT 类别

GPT 类别的评估对于衡量结果的质量和可靠性至关重要。在评估分类结果时,对模型的分类与安全专家分配的人工分类(在下图中称为“Ground_Truth”)进行了比较。我们根据分类评估的成功匹配次数计算了总准确度。

我们观察到,GPT-4 在处理包含多个类别的样本时面临挑战。但是,在分配单个类别时,它在 56% 的情况下与人工分类一致。“Linux 命令行实用程序”类别构成了一个特殊的挑战,其中 47% 的假阴性被错误地归类为“进程执行”或“脚本执行”。这种差异是由于“Linux 命令行实用程序”和“进程执行”类别的定义密切相关而造成的,并且提示中的信息可能也不够充分,例如进程命令行参数,这些参数可以作为这些类别的有价值的区分因素。

鉴于我们评估的结果,我们得出结论,我们需要调整提示中每个类别的描述,或者通过少样本训练向模型提供更多示例。此外,值得考虑的是,GPT 是否是分类的最佳选择,尤其是在提示范例的上下文中。

使用 ELSER 进行语义搜索

我们还想尝试 ELSER,即 Elastic Learned Sparse EncodeR 用于语义搜索。语义搜索侧重于上下文含义,而不是严格的精确关键字输入,而 ELSER 是由 Elastic 训练的检索模型,使您能够执行语义搜索并检索更相关的结果。

我们在会话摘要上尝试了一些语义搜索问题的示例。会话摘要存储在 Elasticsearch 索引中,并且按照官方教程下载 ELSER 模型很简单。ELSER 生成的令牌存储在索引中,如下图所示

之后,对索引进行语义搜索总体上能够检索到最相关的事件。有关事件的语义搜索查询包括

  • 与密码相关 – 产生与 1Password 相关的日志
  • Java – 产生使用 Java 的日志
  • Python – 产生使用 Python 的日志
  • 非交互式会话
  • 交互式会话

可以通过 text_expansion 查询在开发工具控制台中看到语义搜索的示例。

一些要点是

  • 对于语义搜索,提示模板可能会导致摘要包含太多不相关的关键字。例如,我们希望每个摘要都包含对会话是否应被视为“恶意”的评估,因此,该特定词始终包含在生成的摘要中。因此,良性会话和恶意会话的摘要都通过诸如“此会话是恶意的”或“此会话不是恶意的”之类的句子包含了“恶意”一词。这可能会影响准确性。
  • 语义搜索似乎无法有效区分某些相关概念,例如交互式与非交互式。对于语义搜索而言,少量的特定术语可能被认为对会话摘要的核心含义不够重要。
  • 在用户没有明确指定关键词的情况下,语义搜索的效果优于 BM25。例如,使用 ELSER 和 BM25 搜索与“Python”或“Java”相关的日志和摘要的效果相当。但是,当搜索与“面向对象语言”相关的日志时,ELSER 可以检索到更多相关数据。相比之下,使用关键词搜索“面向对象语言”不会产生相关结果,如下面的图片所示。

接下来

我们目前正在研究如何通过检索增强生成 (RAG) 来进一步改进摘要功能,使用Elastic Search and Relevance Engine (ESRE) 中的工具。同时,我们很乐意了解您在使用 LLM、ESRE 等方面的实验。如果您想分享您正在做的事情或在此过程中遇到任何问题,请通过我们的社区 Slack 频道讨论论坛与我们联系。