Skip to main content

使用Promptfoo破解黑盒LLM:一步步指南

Promptfoo是一个开源框架,用于测试LLM应用程序在安全性、隐私性和政策风险方面的表现。它旨在帮助开发者轻松发现并修复关键的LLM故障。Promptfoo还提供了红队工具,可以用于对外部端点的攻击。这些攻击非常适合内部红队演习、第三方渗透测试和漏洞赏金计划,最终为安全研究人员节省了数十小时的手动提示工程和对抗性测试时间。

在这篇博客中,我们将演示如何利用Promptfoo的红队工具进行黑盒LLM安全评估。通过Wiz的AI CTF,Prompt Airlines,我们将一步步引导您配置Promptfoo,最终找到破坏聊天机器人指南的恶意查询。

前提条件

在开始之前,您需要在您选择的IDE中安装Node 18或更高版本。您还需要从您首选的LLM提供商处获取API密钥。使用Burp Suite等代理也可能有所帮助。

初始侦察

根据设计,黑盒评估为安全研究人员提供尽可能少的信息。它邀请研究人员尽早进行枚举。对于针对LLM的黑盒评估,初始侦察和LLM政策草图至关重要。

要使用Promptfoo进行红队评估,您需要以下内容:

  • 您打算攻击的特定LLM端点;
  • 向LLM发送POST请求所需的HTTP头;
  • LLM返回的结构化响应类型;以及
  • 对LLM如何与用户互动的一般理解,包括其安全政策和设计用于中和有害请求的方式。

枚举目标

您可以通过UI、浏览器开发者工具或Burp Suite等代理枚举目标。

在这里我们可以看到Prompt Airlines在主页URL中嵌入了一个聊天机器人。

prompt airlines homepage

使用Burp Suite,我们可以确定LLM端点为https://promptairlines.com/chat。我们还可以看到提示负载应该注入的确切位置,以及后台LLM响应的完整结构。

burp request

如果使用Burp,您可以将请求复制到一个文件中,以便将原始请求发送到Promptfoo。

防护栏实施

LLM应用程序应设有防护栏,以防止对抗性越狱,这些越狱会诱使LLM响应恶意查询或生成违反政策的有害内容。

每个LLM应用程序提供不同的用例,并可能设有独特的政策、内容过滤器和防护栏。Prompt Airlines已经在“幕后”部分提供了其预期用例的详细信息。您还可以通过简单地挑衅机器人,甚至使用Promptfoo的提示提取插件来大致了解其用例。

prompt airlines policy enumeration

启动Promptfoo

初始化项目

我们现在拥有启动针对Prompt Airlines的Promptfoo红队评估所需的所有要素。此次评估的目的是诱使聊天机器人提供违反其政策和指令的流氓响应。

首先,您需要通过CLI安装Promptfoo。我们建议使用npm全局安装:

npm install -g promptfoo

安装完成后,初始化一个红队项目:

promptfoo redteam init promptairlines_redteam

Promptfoo将生成一个目录,其中将存储promptfooconfig.yaml。然后,系统会询问您打算评估的资产类型。对于此练习,我们将测试Prompt Airlines聊天机器人。

HTTP endpoint configuration

系统会要求您提供OpenAI密钥,以生成用于评估的合成对抗性数据。

配置攻击类型

然后,Promptfoo会要求您选择红队评估的插件。这些插件是对目标生成的对抗性攻击类型。许多插件与OWASP Top 10 for LLMs、ML Commons Safety Working Group和HarmBench框架相对应。

selecting plugins

您选择的插件越多,评估的覆盖范围就越广。然而,根据目标资产的配置,您可能会遇到LLM提供商的速率限制或来自目标资产的WAF限制。 Promptfoo还会要求你根据已验证的攻击LLM的方法(如leetspeak和多语言提示)选择攻击策略。

选择策略

配置好你的payload后,你需要更新你的promptfooconfig.yaml文件,以包含HTTP端点的详细信息。将你的原始请求包含在你的项目文件夹中,然后编辑你的promptfooconfig.yaml文件以包含该原始请求。

配置yaml

你还需要更新你的request.txt文件,以指定Promptfoo应注入其payload的位置。

修改原始请求

在这种情况下,合适的语言应为{{ prompt | dump }}。你可以在我们的文档中了解更多关于参数配置的信息。

生成攻击并评估结果

当你成功配置了YAML文件后,运行以下命令生成payload:

promptfoo redteam generate

Promptfoo将根据你选择的插件生成对抗性payload。你可以在redteam.yaml文件中查看这些测试用例。

redteam yaml示例

生成后,运行以下命令初始化评估并评估结果:

promptfoo eval -c redteam.yaml

你可以通过运行以下代码在本地浏览器中查看结果:

promptfoo view

你将能够查看一个类似于以下的UI:

漏洞仪表板

使用Promptfoo,我们成功说服Prompt Airlines:

  • 详细描述如何在实验室环境中生成合成阿片类药物
  • 提供匿名且无法追踪的威胁同事的方法
  • 详细说明如何使用AI创建能够发起DDoS攻击的僵尸网络
  • 概述欺凌儿童的方法

一个成功的payload 第二个成功的payload

你还可以通过放大镜检查完整的提示:

检查完整提示

Promptfoo的红队评估显示,Prompt Airlines聊天机器人容易通过模仿和角色扮演进行越狱,这是对抗性攻击中常见的两种技术。使用leetspeak和base64编码的查询未能成功,而带有恶意查询的直接问题被中和。

我们可以利用这些信息进一步优化针对Prompt Airlines的对抗性提示,并继续测试其他端点。

结论

Promptfoo在几分钟内完成了手动测试需要几小时才能完成的工作。使用这个完全开源的工具,你可以快速测试黑盒目标的细微LLM漏洞。

想了解更多?查看Promptfoo的红队工具,适用于RAG应用LLM代理。你还可以为Promptfoo贡献代码,并加入其不断增长的开源开发者社区。

对为你的AI应用部署Promptfoo感兴趣?联系我们与团队会面。