欢迎来到我们关于 openai 和 microsoft sentinel 的系列!大型语言模型或 llm,例如 openai 的 gpt3 系列,正在通过文本摘要、类人对话、代码解析和调试以及许多其他示例等创新用例接管公众的想象力。我们已经看到 chatgpt 编写剧本和诗歌、创作音乐、撰写论文,甚至将计算机代码从一种语言翻译成另一种语言。
如果我们可以利用这种不可思议的潜力来帮助安全运营中心的事件响应人员,会怎样?好吧,我们当然可以——而且很简单!Microsoft Sentinel 已经包含一个用于 OpenAI GPT3 模型的内置连接器,我们可以在由 Azure Logic Apps 提供支持的自动化剧本中实施。这些强大的工作流易于编写并集成到 SOC 操作中。今天,我们将了解 OpenAI 连接器,并使用一个简单的用例探索其一些可配置参数:描述与 Sentinel 事件相关的 MITRE ATT&CK 策略。
在我们开始之前,让我们先了解一些先决条件:
- 如果您还没有 Microsoft Sentinel 实例,您可以使用免费的 Azure 帐户创建一个实例并按照Sentinel 入门快速入门进行操作。
- 我们将使用来自Microsoft Sentinel Training Lab的预先记录的数据来测试我们的剧本。
- 您还需要一个带有用于 GPT3 连接的 API 密钥的个人 OpenAI 帐户。
- 我还强烈建议查看 Antonio Formato 关于使用 ChatGPT 和 Sentinel 处理事件的优秀博客,其中 Antonio 介绍了一个非常有用的多用途手册,它已成为迄今为止在 Sentinel 中几乎所有 OpenAI 模型实现的参考。
我们将从一个基本的事件触发剧本开始(Sentinel > Automation > Create > Playbook with incident trigger)。
选择订阅和资源组,添加剧本名称,然后移至“连接”选项卡。您应该会看到带有一个或两个身份验证选项的 Microsoft Sentinel - 我在此示例中使用的是托管身份 - 但如果您还没有任何连接,您也可以在逻辑应用程序设计器中添加 Sentinel 连接.
查看并创建剧本,几秒钟后,资源将成功部署并将我们带到逻辑应用程序设计器画布:
让我们添加我们的 OpenAI 连接器。单击“新建步骤”并在搜索框中键入“OpenAI”。您会在顶部窗格中看到连接器,并在其下方看到两个操作:“创建图像”和“GPT3 完成您的提示”:
选择“GPT3 完成您的提示”。然后,系统会要求您在以下对话框中创建与 OpenAI API 的连接。如果您还没有,请在https://platform.openai.com/account/api-keys上创建一个密钥,并确保将其保存在安全位置!
确保在添加 OpenAI API 密钥时完全按照说明进行操作 - 它需要单词“Bearer”,后跟一个空格,然后是密钥本身:
成功!我们现在已经为我们的提示准备好 GPT3 文本完成操作。我们想要让 AI 模型解释与 Sentinel 事件相关的 MITRE ATT&CK 策略和技术,所以让我们使用动态内容编写一个简单的提示来插入来自 Sentinel 的事件策略。
我们快完成了!保存逻辑应用并转到 Microsoft Sentinel 事件以对其进行测试运行。我的实例中有来自 Microsoft Sentinel Training Lab 的测试数据,因此我将针对恶意收件箱规则警报触发的事件运行此剧本。
您可能想知道为什么我们没有在我们的剧本中配置第二个操作来添加带有结果的评论或任务。我们会到达那里 - 但首先我们要确保我们的提示从 AI 模型返回好的内容。返回 Playbook 并在新选项卡中打开 Overview。您应该在运行历史记录中看到一个项目,希望带有绿色复选标记:
单击该项目可查看有关逻辑应用运行的详细信息。我们可以展开任何操作块以查看详细的输入和输出参数:
我们的 GPT3 操作只用了两秒钟就成功完成了。让我们单击操作块将其展开并查看其输入和输出的完整详细信息:
让我们仔细看看“输出”部分中的“选择”字段。这是 GPT3 返回其完成的文本以及完成状态和任何错误代码的地方。我已将 Choices 输出的全文复制到 Visual Studio Code 中:
目前看起来还不错!GPT3 正确扩展了“防御规避”的 MITRE 定义。在我们向剧本添加逻辑操作以使用此答案文本创建事件评论之前,让我们再看一下 GPT3 操作本身的参数。OpenAI文本补全动作中一共有九个参数,不算引擎选择和提示:
这些是什么意思,我们如何调整它们以获得最佳结果?为了帮助我们了解每个参数对结果的影响,让我们转到OpenAI API Playground。我们可以在逻辑应用程序运行的输入字段中粘贴准确的提示,但在单击“提交”之前,我们要确保参数匹配。下面是一个快速表格,用于比较 Azure Logic App OpenAI 连接器和 OpenAI Playground 之间的参数名称:
让我们使用以下 OpenAI API Playground 设置来匹配我们的逻辑应用程序操作:
- 型号:text-davinci-003
- 温度:1
- 最大长度:100
这是我们从 GPT3 引擎得到的结果。
看起来响应在句子中间被截断了,所以我们应该增加最大长度参数。否则,此响应看起来还不错。我们正在使用最高可能的温度值——如果我们降低温度以获得更确定的响应,会发生什么?以温度为零为例:
在 temperature=0 时,无论我们重新生成此提示多少次,我们都会得到几乎完全相同的结果。当我们要求 GPT3 定义技术术语时,这很有效;作为 MITRE ATT&CK 战术的“防御规避”的含义应该没有太大差异。我们可以通过添加频率惩罚来提高响应的可读性,以降低模型重复使用相同词的倾向(“技术如”)。让我们将频率惩罚增加到最大值 2:
到目前为止,我们只使用了最新的达芬奇模型来快速完成任务。如果我们下降到 OpenAI 更快、更便宜的模型之一,例如 Curie、Babbage 或 Ada,会发生什么?让我们将模型更改为“text-ada-001”并比较结果:
嗯……不完全是。让我们试试巴贝奇:
Babbage 似乎也没有返回我们正在寻找的结果。也许居里会过得更好?
可悲的是,居里也不符合达芬奇设定的标准。它们当然很快,但我们为安全事件添加上下文的用例并不依赖于亚秒级响应时间 - 摘要的准确性更为重要。我们将继续使用达芬奇模型、低温和高频惩罚的成功组合。
回到我们的逻辑应用程序,让我们将我们从 Playground 发现的设置传输到 OpenAI 操作块:
我们的逻辑应用程序还需要能够为我们的事件写评论。单击“新建步骤”并从 Microsoft Sentinel 连接器中选择“向事件添加注释”:
我们只需要指定事件 ARM 标识符并撰写我们的评论消息。首先,在动态内容弹出菜单中搜索“事件 ARM ID”:
接下来,找到我们上一步输出的“文本”。您可能需要单击“查看更多”才能查看输出。逻辑应用程序设计器会自动将我们的评论操作包装在“For each”逻辑块中,以处理为同一提示生成多个完成的情况。
我们完成的逻辑应用应类似于以下内容:
让我们再测试一下!回到那个 Microsoft Sentinel 事件并运行剧本。我们应该在我们的逻辑应用程序运行历史记录中获得另一个成功完成,并在我们的事件活动日志中获得一个新评论。
如果到目前为止,您一直与我们保持联系,那么您现在可以将 OpenAI GPT3 与 Microsoft Sentinel 集成在一起,这可以为您的安全调查增加价值。请继续关注我们的下一部分,我们将讨论更多将 OpenAI 模型与 Sentinel 集成的方法,解锁可以帮助您充分利用安全平台的工作流程!