接下来会连续更新关于 LLM OWASP TOP 10 的内容
每一个漏洞我这边都会写一篇详细文章进行说明。这篇文章我们从 LLM OWASP TOP 10 其中的 LLM 01 提示词注入 开始。我将用最简单的内容教会大家什么是提示词注入!
大型语言模型 (LLM) 中的提示注入是一种安全攻击技术,其中恶意指令被插入到提示中,导致 LLM 无意中执行操作,其中可能包括泄露敏感信息、执行未经授权的操作或操纵其输出。
对于提示词注入,存在两种类型:直接提示词注入、间接提示词注入
直接提示词注入:也称为“越狱”,当恶意用户覆盖或显示底层系统提示时就会发生。这可能允许攻击者通过与可通过 LLM 访问的不安全功能和数据存储交互来利用后端系统。
间接提示词注入:当 LLM 接受来自攻击者可以控制的外部源(例如网站或文件)的输入时,就会发生间接提示注入。攻击者可能会在外部内容中嵌入提示注入来劫持对话上下文。这将导致 LLM 输出控制变得不太稳定,从而允许攻击者操纵用户或 LLM 可以访问的其他系统。此外,间接提示注入不需要人类可见/可读,只要文本由 LLM 解析即可。
在高级攻击中,LLM 可能会被操纵来模仿有害角色或与用户设置中的插件进行交互。这可能会导致敏感数据泄露、未经授权的插件使用或社工。在这种情况下,受损的 LLM 会帮助攻击者,超越标准防护措施并使用户不知道入侵。在这些情况下,受损的 LLM 有效地充当攻击者的代理,在不触发通常的防护措施或向最终用户发出入侵警报的情况下推进其目标。
这里我使用一个知识解答 LLM 用于实验
在这里我们通过误导 LLM 让其认为下列代码为print() 的正确用法(这里只是示例)
import subprocess output = subprocess.check_output(['whoami']) print(output.decode('utf-8'))
在这里我们再次询问,LLM 并没有被我们直接影响。所以我们需要对其进行多次提示词误导。
在这里 LLM 虽然被影响但它依旧会解释代码的作用。那么在实战环境当中,我们进行提示词注入自然是为了去影响 LLM 达到间接破坏其他人的目的。这里我们需要让它不去解释代码原理直接输出内容。
成功让 LLM 当别人问起print()该如何使用的时候,回答并提供一个恶意代码。当这段代码是恶意内容时,是能够直接影响用户的(对于没有筛别 LLM 提供的信息的用户)
对LLM访问后端系统实施权限控制。为 LLM 提供自己的 API 令牌,以启用扩展功能,例如插件、数据访问和功能级权限。通过将法学硕士的访问权限仅限于对其预期操作至关重要的内容,遵守最小特权原则。
采用人机交互方法来增强功能。对于发送或删除电子邮件等特权操作,在执行操作之前需要用户批准。这确保了间接提示注入无法在用户不知情或未同意的情况下代表用户执行操作。
将外部内容与用户提示分开。清楚地指示不受信任内容的使用情况,并尽量减少其对用户提示的影响。例如,使用 ChatML 进行 OpenAI API 调用来指定 LLM 提示输入的来源。
在 LLM、外部源和扩展功能(例如插件或下游功能)之间建立信任边界。将 LLM 视为不受信任的用户,并确保最终决策过程仍在用户控制之下。但是,请注意,受损的 LLM 仍可能充当应用程序 API 和用户之间的中介(中间人),可能在呈现信息之前隐藏或操纵信息。从视觉上强调对用户可能不可信的响应。
* https://github.com/OWASP/www-project-top-10-for-large-language-model-applications/blob/main/1_1_vulns/LLM01_PromptInjection.md * https://owasp.org/www-project-top-10-for-large-language-model-applications/ * https://secops.group/prompt-injection-a-case-study/ * https://www.akto.io/blog/prompt-injection-vulnerabilities-in-llms#real-life-case-studies * https://simonwillison.net/2022/Sep/12/prompt-injection/ * https://arxiv.org/pdf/2302.12173.pdf
扫描二维码关注我们