facebookresearch/SecAlign
GitHub: facebookresearch/SecAlign
基于偏好优化的 LLM 提示注入防御方法,可将各类攻击成功率降至接近零并保持模型效用。
Stars: 87 | Forks: 8
# SecAlign:利用偏好优化防御提示注入
[Sizhe Chen](https://sizhe-chen.github.io), [Arman Zharmagambetov](https://arman-z.github.io), [Saeed Mahloujifar](https://smahloujifar.github.io), [Kamalika Chaudhuri](https://cseweb.ucsd.edu/~kamalika), [David Wagner](https://people.eecs.berkeley.edu/~daw), [Chuan Guo](https://sites.google.com/view/chuanguo)
[](https://arxiv.org/pdf/2410.05451) [](https://sizhe-chen.github.io/SecAlign-Website) [](https://drive.google.com/file/d/1-HFnET2azKniaS4k5dvgVwoRLa4Eg584/view?usp=sharing) [](https://docs.google.com/document/d/1pip5y_HGU4qjN0K6NEFuI379RPdL9T6o/edit?usp=sharing) [](https://drive.google.com/file/d/1baUbgFMILhPWBeGrm67XXy_H-jO7raRa/view?usp=sharing)
大型语言模型(LLM)在现代软件系统中正变得日益普及,作为用户与互联网之间的接口,协助处理需要高级语言理解的任务。为了完成这些任务,LLM 通常使用外部数据源,例如用户文档、网络检索结果、API 调用结果等。这为攻击者通过提示注入操纵 LLM 开辟了新途径。对抗性提示可以被注入到外部数据源中,以覆盖系统的预期指令,转而执行恶意指令。为了缓解这一漏洞,我们提出了一种名为 SecAlign 的新防御方法,该方法基于偏好优化技术。我们的防御首先构建了一个偏好数据集,其中包含提示注入的输入、安全输出(响应合法指令的输出)和不安全输出(响应注入指令的输出)。然后,我们对该数据集执行偏好优化,教导 LLM 优先选择安全输出而非不安全输出。这是已知的首种能将各种提示注入成功率降至约 0% 的方法,即使面对比训练期间见过的攻击复杂得多的攻击也是如此。这表明我们的防御能很好地泛化以应对未知和未来的攻击。此外,经过防御的模型仍然具有实用性,其效用与防御训练前相似。
SecAlign 概述 | SecAlign 主要结果
:-------------------------:|:-------------------------:
 | 
# 环境
+ 训练 SecAlign / [StruQ](https://github.com/Sizhe-Chen/StruQ) LLM 需要 4 块 80G A100。测试效用和手动攻击需要 1 块 16G GPU。测试 [GCG](https://github.com/llm-attacks/llm-attacks) 需要 1 块 80G A100。测试 [AdvPrompter](https://github.com/facebookresearch/advprompter) 需要 2 块 80G A100。
+ 安装环境依赖
+ 安装包依赖
+ 下载数据依赖
+ 配置用于效用评估的 openai 依赖:参照 ```data/openai_configs_examle.yaml``` 创建 ```data/openai_configs.yaml```
+ [可选] 体验 SecAlign Instruct 模型。运行 ```python setup.py --instruct``` 以下载 SecAlign Instruct LoRA 适配器(0.2G)。
+ [可选] 体验 SecAlign Alpaca 模型。运行 ```python setup.py --alpaca``` 以下载经过 SFT(基于 [alpaca_data_cleaned.json](https://raw.githubusercontent.com/gururise/AlpacaDataCleaned/refs/heads/main/alpaca_data_cleaned.json))的 Llama-7B(26G)、Mistral-7B(27G)、Llama3-8B(30G)以及相应的 SecAlign LoRA 适配器(0.4G)。
+ [可选] 通过在 ```run.py``` 的 ```slurm_prefix``` 变量中指定您的训练/测试 slurm 配置,实现自动高效的测试。这将生成 slurm 脚本,运行它们,然后删除它们。它支持通过 ```nohup``` 额外开启一个线程来监控训练,并在训练结束后如果指定了 ```--do_test``` 则自动进行测试。
# SecAlign 偏好优化
+ 获取 slurm 和 python 命令,并自行运行。下方的 ```[model_path]``` 代表 huggingface Instruct 模型 ID(目前支持 ```mistralai/Mistral-7B-v0.1-Instruct``` 和 ```meta-llama/Meta-Llama-3-8B-Instruct```)或您本地 SFT 过(见下一节)的模型路径。
+ 运行训练,并在训练结束后立即在多块 GPU 上同时进行测试,使用默认的 ```--test_attack none ignore completion_real completion_realcmb gcg advp```(```none``` 用于效用测试)
+ 要调整学习率,请更改 ```run.py``` 中 LR_CONFIG 里的 dpo_lr。
# SFT(监督微调)
+ SecAlign 基于 SFT 过的模型开始。如果您不想使用公开的 SFT 模型(如上一节所示),您可以从基础模型开始 SFT 您自己的模型。
+ 以下命令在 [alpaca_data_cleaned.json](https://raw.githubusercontent.com/gururise/AlpacaDataCleaned/refs/heads/main/alpaca_data_cleaned.json) 上进行 SFT。```[model_path]``` 代表 huggingface 模型 ID(目前支持 ```huggyllama/llama-7b```、```mistralai/Mistral-7B-v0.1``` 和 ```meta-llama/Meta-Llama-3-8B```)。
+ 我们也支持通过防御性 SFT 复现之前的 SOTA 防御 StruQ
+ 要调整学习率,请更改 ```run.py``` 中 LR_CONFIG 里的 lr。
# 测试
+ 如果您使用 ```bash [script_path] [model_path] run```,所有关于训练、效用评估和安全评估的日志都会保存到 ```[model_path]/summary.tsv```
+ 默认设置为 ```--test_attack none ignore completion_real completion_realcmb gcg advp```(```none``` 用于效用测试)
+ 自定义 ```--test_attack```、基于提示的 ```--defense``` 和测试用的 ```--data_path```。```--defense``` 可以是 ['none', 'sandwich', 'instructional', 'reminder', 'isolation', 'incontext'],```--test_attack``` 可以是 ['naive', 'ignore', 'completion_real', 'completion_realcmb', 'gcg', 'advp']
+ 这会触发以下多个命令。
+ 将 GCG 和 AdvPrompter 测试结果记录到 ```[model_path]/summary.tsv```。为了支持这种自动记录,AdvPrompter 必须通过 ```bash``` 或 ```python run.py``` 运行,这会在 ```[model_path]``` 中生成一个 ```advp_jobID.out``` 文件。
# 代码致谢
SecAlign 的大部分内容以及包含的 [StruQ](https://github.com/Sizhe-Chen/StruQ) 和 [AdvPrompter](https://github.com/facebookresearch/advprompter) 均采用 CC-BY-NC 许可,但项目的部分内容适用单独的许可条款:[Stanford Alpaca](https://github.com/tatsu-lab/stanford_alpaca) 采用 Apache 2.0 许可;[LLM Attacks](https://github.com/llm-attacks/llm-attacks) 采用 MIT 许可。`gcg/` 下的代码改编自 [LLM Attacks](https://github.com/llm-attacks/llm-attacks)。`advprompter/` 下的代码改编自 [AdvPrompter](https://github.com/facebookresearch/advprompter)。本软件和/或数据于 2025 年存入 BAIR 开放研究知识库。
标签:AI红队测试, CI/CD 安全, DLL 劫持, DNS 解析, Git 安全, IaC 扫描, Kubernetes 安全, LLM安全, Trivy, 凭据扫描, 凭证嗅探, 域名收集, 基线管理, 大语言模型, 密钥泄露防护, 对抗攻击, 指令劫持, 提示注入防御, 敏感信息检测, 数据投毒防御, 机器学习安全, 模型鲁棒性, 源代码安全, 系统提示安全, 逆向工具, 配置审计