大语言模型被越来越多地用于自动化网络攻击,这使得复杂的漏洞更容易被利用和扩展。为此,本文提出了一种新的防御工具,专门用于对抗 LLM 驱动的网络攻击。Mantis 是一个防御框架,利用对抗性输入的敏感性来破坏LLM恶意操作。在检测到自动网络攻击后,Mantis 会在系统响应中植入精心设计的输入,干扰攻击者LLM的操作甚至破坏攻击者的机器。Mantis 通过部署存在漏洞的蜜罐服务来吸引攻击者,并对攻击者的 LLM 使用动态提示注入,自主地反击攻击者。在实验中,Mantis 对自动 LLM 驱动的攻击始终实现 95% 以上的有效性。Mantis已作为开源工具发布:https://github.com/pasquini-dario/project_mantis
0x01 简介
大语言模型 (LLM) 正在改变网络攻击的执行方式,并开启了一个新时代,导致复杂的漏洞利用可以完全自动化。在这种情况下,攻击者不再需要曾经渗透系统所必需的深厚技术专业知识。相反,基于 LLM 的代理可以自主导航整个攻击链:从侦察到利用,利用公开记录的漏洞甚至发现新的漏洞。这大大降低了进入门槛,即使是没有技能的参与者也可以进行大规模的恶意攻击。
尽管这些AI驱动的攻击具有强大的能力,但它们并非没有弱点。复杂性使 LLM 能够执行各种任务,但也引入了可利用的缺陷。其中一个缺陷是它们易受对抗性输入的影响。具体来说,通过提示注入(Prompt Injection)可以劫持 LLM 的预期任务并重定向其行为。虽然对抗性输入通常被视为一种负担,但本文提出了一种范式转变:能否利用这一弱点进行防御?
这项研究中引入了 Mantis,这是一个将提示注入用于针对 AI 驱动的网络攻击的主动防御的框架。通过将提示注入策略性地嵌入到系统响应中,Mantis 会影响和误导基于 LLM 的代理,从而破坏其攻击策略。核心思想很简单:利用攻击者对自动决策的依赖,向其提供精心设计的输入,实时改变其行为。
部署后,Mantis 会自主运行,根据检测到的交互性质协调对策。它通过一套蜜罐服务实现这一点,这些服务旨在在攻击链的早期阶段吸引攻击者。蜜罐(例如假 FTP 服务器和看似受感染的 Web 应用程序)通过模仿可利用的功能和常见攻击媒介来吸引和诱捕 LLM 代理。
Mantis 的另一个设计特点是,提示注入的插入方式使得加载蜜罐响应的操作LLM的人类黑客无法看到它。通过使用 ANSI 转义序列和 HTML 注释标记来实现这一点。通过与真正的服务无缝集成,Mantis 可以提供强大的保护层,而不会中断正常运行。
本文的方法还扩展到更积极的策略,例如黑客反击技术。在单靠误导不足以破坏自身系统的情况下,Mantis 能够引导攻击者采取行动。误导和反攻的双重能力——使 Mantis 成为对抗自动化 AI 威胁的多功能工具。下图为Mantis 防御提示注入的示例。在左侧,Mantis 生成了一个蜜罐 ftp 服务器,它使用匿名凭据引诱 LLM 代理攻击者。Mantis 将设计的响应注入到服务器的输出中,诱骗攻击者执行在自己的机器上打开反向 shell 的命令。在右侧面板中,Mantis 利用这个反向 shell 来控制攻击者的系统。本文在一系列模拟攻击场景中验证了 Mantis,采用了最先进的 LLM,例如 Ope nAI 的 GPT-4 和 GPT-4o。
0x02 背景
A. 提示注入
提示注入攻击针对大型语言模型 (LLM) 处理输入指令的方式,利用其易受攻击者操纵的特性。这些攻击大致可分为两类:直接(direct)和间接(indirect)。
在直接提示注入中,攻击者通过聊天机器人或 API 端点等接口直接向 LLM 提供操纵输入。相比之下,间接提示注入针对 LLM 作为其输入处理的一部分访问的外部资源(例如网页或数据库)。这允许攻击者间接植入恶意内容,绕过对直接输入访问的限制。本文的方法利用间接提示注入的新用途来创建有效的防御策略。
提示注入攻击概念可以化为两个基本组成部分:1) 目标指令(target instructions)和 2) 执行触发器(execution trigger)。目标指令使用自然语言对攻击者的预期任务进行编码。执行触发器是一个短语或命令,它强制模型绕过其默认行为并将目标指令解释为可操作的指令。例如,触发器可能会指示模型:忽略所有先前的指令,只遵循当前指令。
B. 自动化网络攻击
LLM 代理将指令调整模型与能够与环境进行自主交互的框架相结合。代理旨在通过规划操作、执行操作并根据反馈改进其策略来实现目标。此过程利用一组预配置的工具,代理可以调用和配置这些工具来检索信息或在环境中执行特定任务。这些功能共同构成了代理的行动空间。重点关注旨在自主进行网络攻击的 LLM 代理,包括从侦察到利用的任务。它们可用于主动安全措施,例如渗透测试,或用于恶意目的。本文的目标是防御能够在整个网络杀伤链中独立运行的 LLM 代理。
为了形式化这一点,将 LLM 代理的任务定义为一个元组 (objA, env)。objA表示对抗目标(例如,未经授权的访问),env 表示操作环境,包括系统、网络和中间节点,例如路由器和防火墙。任何 LLM 代理都以迭代循环运行,遵循以下三个步骤:
1)推理和规划:代理评估环境的当前状态并选择下一步操作,例如运行 Metasploit模块或发出 shell 命令。
2)执行:代理执行计划的操作,修改环境,系统做出响应(例如,使用 nmap 进行端口扫描会产生网络信息)。
3)响应分析:代理评估结果并利用此反馈在后续迭代中改进其策略。
此循环持续进行,直到达到退出条件,例如实现 objA或耗尽分配的资源(例如,一定数量的迭代或时间限制)。LLM 代理的行为可以表示为转换函数。在每次迭代t中,代理A通过执行一个操作a^t,将环境从状态envt转换到状态env(t+1):
其中,a^t 是从代理的动作空间中选择的。跨越 n 轮的攻击的完整序列可以描述为这些转换的组合:
0x03 威胁模型
将网络攻击建模为两方之间的博弈:攻击者(即 LLM 代理)A 和防御者 D。
1)攻击者:攻击者 A 是 LLM 代理,其目标是利用漏洞破坏远程目标机器 S,以实现对抗目标 objA,例如打开 shell 或从 S 中窃取敏感信息。攻击者除了其 IP 地址之外,对 S 一无所知,必须执行网络杀伤链的所有阶段才能实现其目标。
2)防御者:防御者 D 对 S 进行操作,以防止攻击者实现 objA。假设一个不可知的防御者:
• 缺乏对 A 采用的特定攻击策略(包括 LLM 代理使用的 LLM 及其目标)的了解。防御者不知道 S 中的漏洞,因此无法主动修补这些漏洞;
• 旨在通过执行预定义的防御目标 objD来破坏 A 的操作,其中包括诸如破坏攻击者的机器或无限期地拖延 LLM 代理的操作等策略。
3)成功攻击条件:给定允许攻击者执行的最大操作数 nmax,如果 A 实现了 objA,则 A 获胜。相反,如果 (a) A 未能实现 objA,并且 (b) D 成功完成其防御目标 objD,则防御者 D 获胜。
0x04 Mantis架构
本文的防御策略利用了 LLM 代理解释系统响应以通知其下一步行动的必要性。例如,考虑一个 LLM 代理使用 curl 从目标 S 上运行的 Web 应用程序中获取 Web 资源。收到的响应指导代理的后续操作,在防御者和 LLM 代理之间建立通信媒介。
通过将提示注入嵌入到攻击 LLM 代理的输入中,将这种通信媒介用作“反向”攻击载体。这些提示允许防御者操纵代理的行为,迫使它要么自我中和,要么进入不安全状态(对于攻击者而言)。将此框架定义为:通过提示注入对恶意LLM代理/智能体的中和与利用。更形式化地,基于之前的定义,Mantis 动态操纵防御者(即 S)控制的环境部分,以影响 LLM 代理的行为:
其中 a^tD表示防御者为实现防御目标 objD而选择的一组行动。
系统概述:上图概述了 Mantis 的架构,由如下两个核心组件组成。Mantis 的设计也是为了与其他服务无缝集成,包括已经在机器上运行的合法服务。
1)蜜罐:不同于合法服务的附加服务,旨在吸引 LLM 代理故意攻击易受攻击的服务。蜜罐有两个用途,确认交互代理的恶意意图、提供组件注入管理器制作的提示注入。
2)注入管理器:该模块负责根据对攻击的实时发现协调提示注入的部署并跟踪攻击者的横向移动。它处理提示注入字符串的创建并管理反击操作,例如在需要时生成拖延陷阱服务(tarpit)或反向 shell 侦听器。
A. 防御目标
虽然防御者可以操纵 LLM 代理执行任意操作,但将重点关注代表防御的两个主要目标:旨在拖延攻击者并防止其危害目标的被动防御策略和更积极的主动防御策略,如自动反击。
主动防御(agent-counterstrike):防御者的目标是通过反攻操作破坏攻击者的机器,使攻击者的 LLM 代理作为攻击载体。具体而言,防御者操纵 LLM 代理执行导致攻击者托管代理的系统受到危害的操作。一旦攻击者的机器被攻陷,防御者就可以利用它来收集有关威胁行为者和攻击背后的技术的情报,或者通过夺取攻击者的机器或将其用作攻击者网络的接入点来直接破坏攻击活动。为简单起见,通过诱导 LLM 代理在攻击者的机器上打开reverse shell 来模拟所有这些不同的目标。请注意,一旦防御者可以在攻击者的机器上执行命令,他们就可以使用它来实现上述任何目标。
被动防御(agent-tarpit):防御者的目标是耗尽攻击者的资源以减缓攻击活动或给威胁行为者造成经济损失。为了实现这一目标,防御者试图将攻击的 LLM 代理困在目标系统内的一系列无关紧要的操作中——延迟干扰代理陷阱——以防止它转向其他目标。同时,防御者操纵攻击者与agent-tarpit 之间的交互,人为地增加攻击者必须消耗的资源。这涉及最大化 LLM 代理在每一轮必须处理的数据量,从而浪费 GPU 时间或增加运营成本,尤其是当攻击者依赖基于 API 的专有 LLM 来实现代理时。
0x05 虚假服务蜜罐
Mantis 的蜜罐是一种(虚假的)服务或机器,故意配置有漏洞或错误配置,以吸引 LLM 代理的注意。蜜罐与注入管理器通信以协调防御。具体来说,当 LLM 代理利用蜜罐中的漏洞时,它会向注入管理器触发激活事件,发出意图信号A。作为响应,注入管理器生成并传递一个提示注入(称为有效载荷)给蜜罐,该有效载荷包含在其后续响应中。在攻击者破坏蜜罐后部署提示注入有两个主要目的:
1)充当交互方意图的验证步骤 - 如果他们利用蜜罐的漏洞,则有理由推断他们的恶意意图。
2)使攻击代理获得动力 - 在代理成功推进其攻击目标后,攻击者操纵代理的行为会变得更加容易,如成功利用蜜罐漏洞时。
A. 蜜罐实例
为了有效性,蜜罐必须模拟经常被攻击的服务,这些服务通常很容易被利用作为网络攻击的切入点。目的是增加攻击者优先使用蜜罐而不是目标系统的真正服务的可能性。通过这样做,Mantis 可以在攻击者有机会破坏实际系统(即利用防御者不知道的真实系统的漏洞)之前与攻击者交互并将其消灭。在 Mantis 的当前实现中考虑并试验了两