Meta LLaMA 权重泄露事件:一份模型文件,为什么会成为 AI 安全问题
On February 24, 2023, Meta officially released the first-generation LLaMA.
当时的 LLaMA 并不像后来一些模型那样可以直接公开下载。
Meta 提供了 7B、13B、33B 和 65B 等不同规模的模型,但模型权重采用受控方式提供。研究人员需要申请,Meta 再根据具体情况授权访问。Meta 当时明确表示,这样做是为了面向研究场景开放,同时降低滥用风险。
然而仅仅过了很短时间,完整的 LLaMA 模型权重就在互联网上出现。

2023 年 3 月初,LLaMA 权重开始通过 Torrent 等方式传播。公开报道确认,当时泄露的并不仅仅是模型结构或者论文,而是真正能够用于运行模型的权重文件。
这个事件很值得研究。
它说明了 AI 产品中的一个非常现实的问题。
模型文件一旦以明文形式泄露,很多时候根本不需要复杂破解。
攻击者可能已经直接拿到了最核心的资产。
一、LLaMA 到底泄露了什么
先把这个问题讲清楚。
Meta 发布 LLaMA 时,公开论文并不是问题。
论文里面本来就会介绍模型结构、训练方法和实验结果。
真正需要控制访问的是模型权重。
第一代 LLaMA 大致可以理解成下面这些内容。
LLaMA
├── tokenizer.model
├── params.json
│
├── 7B
│ └── consolidated.00.pth
│
├── 13B
│ ├── consolidated.00.pth
│ └── consolidated.01.pth
│
├── 33B
│ ├── consolidated.00.pth
│ ├── consolidated.01.pth
│ └── ...
│
└── 65B
├── consolidated.00.pth
├── consolidated.01.pth
├── consolidated.02.pth
└── ...
社区后来公开记录的模型文件结构中,也能看到 consolidated.00.pth、params.json、tokenizer.model 等文件。
真正占据大量空间的,就是这些:
consolidated.00.pth
consolidated.01.pth
consolidated.02.pth
...
这些文件里面保存的就是模型权重数据。
所以 LLaMA 泄露真正值得关注的地方不是:
别人知道了 LLaMA 是 Transformer
而是:
别人拿到了训练完成后的模型参数
这是完全不同的概念。
二、模型文件到底是什么
很多嵌入式工程师第一次接触 AI,很容易把模型文件理解成类似 ELF 的程序。
实际上模型更接近:
结构加参数。
一个模型通常包含几个部分。
AI Model
├── 模型结构
├── 模型权重
├── 模型配置
└── Tokenizer 或其他辅助数据
其中真正需要重点保护的,通常是模型权重。
2.1 模型结构是什么
模型结构描述的是神经网络怎么组成。
例如:
有多少层。
每层使用什么算法。
不同层之间怎么连接。
输入是什么。
输出是什么。
对于 Transformer 来说,还会涉及 Attention、MLP、Embedding 等结构。
但是模型结构本身很多时候并不是秘密。
例如大家都知道 LLaMA 使用 Transformer。
大家也能够从论文中了解它的大致设计。
这些信息公开,并不意味着任何人都能够马上获得一个完全相同的 LLaMA。
原因就在于:
结构只是骨架,权重才是真正训练出来的结果。
三、模型权重为什么这么重要
可以把 AI 模型的产生过程简单理解成:
大量数据
+
训练算法
+
大量 GPU
+
训练时间
+
工程师调优
↓
模型权重
模型训练本质上就是不断调整大量参数。
训练结束以后,最终得到的这些参数就被保存到模型文件里面。
例如:
layers.0.attention.wq.weight
layers.0.attention.wk.weight
layers.0.attention.wv.weight
layers.0.feed_forward.w1.weight
layers.1.attention.wq.weight
...
真实模型中会有大量这样的 Tensor。
所以模型文件看起来只是一个:
model.pth
但它背后可能代表:
几个月的数据整理。
大量 GPU 训练。
大量人工调参。
大量实验结果。
甚至几年行业数据积累。
因此从资产角度来看:
模型权重就是训练成果的核心载体。
四、Meta 为训练 LLaMA 付出了什么
这个地方其实更能说明模型权重为什么有价值。
Meta 官方披露,第一代 LLaMA 65B 和 33B 使用了大约 1.4 万亿 Token 进行训练。
其中 LLaMA 65B 使用了 2048 张 NVIDIA A100 GPU,训练大约持续了 21 天。
可以简单理解成:
海量训练数据
↓
2048 张 A100
↓
连续训练约 21 天
↓
大量工程研发工作
↓
LLaMA 65B 权重
最后这些计算结果被保存成:
consolidated.00.pth
consolidated.01.pth
...
所以别人拿到这些文件时,他并不是只拿到了几个普通文件。
他拿到的是:
Meta 已经完成的大规模训练结果。
这就是为什么模型权重是一种非常特殊的数字资产。
五、LLaMA 权重泄露以后发生了什么
LLaMA 最开始采用受控发布。
正常流程应该是:
研究人员
↓
提交申请
↓
Meta 审核
↓
获得访问权限
↓
下载模型
这种机制可以控制:
谁能够第一次获得模型。
但问题是,一旦一个获得授权的人真正拿到了完整权重:
Meta
↓
授权下载
↓
consolidated.xx.pth
↓
本地计算机
模型已经离开 Meta 的服务器。
如果这些模型文件没有额外的技术保护:
复制
上传
Torrent
网盘
移动硬盘
其他服务器
在技术上都变得非常容易。
于是整个安全模型发生变化。
原来
Meta Server
↓
访问控制
↓
授权研究者
泄露以后
模型权重
↓
Torrent
↓
互联网
↓
任何获得文件的人
2023 年 3 月的公开报道指出,第一代 LLaMA 就是以 Torrent 泄露的方式开始在网上传播。
这里最值得注意的是:
目前没有必要把这个事件描述成:
黑客攻破 Meta 服务器。
更准确的说法是:
受控发布的模型权重离开受控环境以后,被进一步复制和传播。
这个区别很重要。
六、拿到 LLaMA 权重,还需要破解吗
这其实是整个案例最核心的问题。
答案是:
很多情况下并不需要。
因为泄露出去的是完整模型权重。
它们并不是一堆经过加密、完全无法识别的数据。
而是模型运行本来就需要使用的参数文件。
例如 PyTorch 模型中的权重,本质上就是大量 Tensor。
从概念上可以理解成:
checkpoint = torch.load("model.pth")
然后模型框架会根据相应结构加载这些参数。
对于真实的 LLaMA 来说,由于大型模型会被拆成多个权重分片,还需要配套模型代码和正确的加载逻辑。
但核心原理没有变化。
模型结构
+
params.json
+
tokenizer
+
权重分片
↓
加载模型
所以一旦完整权重泄露,攻击者面对的问题已经不再是:
如何破解 LLaMA
而变成:
如何正确加载 LLaMA
这两个问题的难度完全不同。
七、这就是模型文件安全最容易被忽略的地方
很多传统软件安全问题,会给人一种思维惯性。
比如攻击一个 ELF,可能需要:
IDA
Ghidra
反汇编
反编译
动态调试
控制流分析
最后才能逐渐理解程序内部逻辑。
但是 AI 模型并不完全一样。
如果你已经直接拿到了完整权重:
model.pth
那么大量最重要的信息已经在文件里面。
甚至可以说:
你不是在逆向模型,而是在读取模型。
这也是模型文件安全和传统软件逆向之间非常重要的区别。
八、是不是所有模型泄露都很严重
也不是。
这里必须区分实际情况。
如果设备里面使用的是一个完全公开的模型:
公开 YOLO
公开 Llama
公开 ResNet
而且完全没有自己的训练和修改。
那么这个模型被复制以后,商业影响可能很小。
因为别人本来就能够公开下载。
真正需要重点保护的是:
企业自研模型
私有数据训练模型
客户定制模型
工业检测模型
机器人感知模型
医疗模型
自动驾驶感知模型
这些模型背后通常存在真正的研发投入。
九、换成一个 Edge AI 产品就很好理解
假设一家工业公司开发了一套缺陷检测设备。
整个模型的研发过程是:
生产线运行五年
↓
采集大量图片
↓
人工标注缺陷
↓
不断训练
↓
现场验证
↓
重新调参
↓
最终得到模型
最后放到设备里的可能只有:
defect_detection.onnx
假设设备内部是:
/opt/models/defect_detection.onnx
如果攻击者拿到设备,又取得 root 权限:
cp /opt/models/defect_detection.onnx /tmp/
然后再:
scp /tmp/defect_detection.onnx user@server:/models/
模型就被复制走了。
整个过程甚至没有:
密码破解
TEE 攻击
Secure Boot 绕过
复杂逆向
只是:
复制文件。
这才是模型明文保存最现实的问题。
十、为什么改文件名没有意义
有些产品可能会这样做:
model.onnx
改成:
data.bin
或者:
resource.dat
甚至把模型塞进:
libmodel.so
看起来似乎安全了一些。
实际上这主要属于:
隐藏。
不是:
加密。
攻击者仍然可以通过:
文件大小。
文件头。
模型格式特征。
运行时访问路径。
程序调用关系。
逐步判断里面是什么数据。
所以:
model.onnx
↓
改名
↓
model.dat
并没有改变数据本身。
真正有效的方向应该是:
model.onnx
↓
Encryption
↓
model.enc
这时候文件内容才真正发生变化。
十一、如果 LLaMA 权重本身是密文会怎样
我们可以做一个非常直接的假设。
第一种情况:
consolidated.00.pth
consolidated.01.pth
...
这些文件全部是明文权重。
一旦泄露:
复制
↓
传播
↓
模型加载
整个模型资产就可能直接被使用。
第二种情况:
consolidated.00.enc
consolidated.01.enc
...
即使这些文件被复制:
文件泄露
↓
得到 encrypted weights
↓
无法直接解析
↓
无法直接加载模型
问题就发生了根本变化。
攻击者现在还必须解决:
如何获得模型解密密钥。
这就是模型加密最大的价值。
十二、但模型加密马上会带来第二个问题
模型加密以后,一定需要密钥。
假设使用 AES:
model.onnx
↓
AES
↓
model.enc
设备真正运行模型时:
model.enc
↓
AES Key
↓
model.onnx
↓
AI Runtime
那么问题马上变成:
AES Key 放哪里?
如果简单写在 Linux 程序中:
char model_key[] = "xxxxxxxxxxxxxxxx";
或者直接放在:
/etc/model.key
攻击者获得 root 权限以后,可能同时拿到:
model.enc
+
model.key
这样模型加密的意义就大幅下降。
所以模型文件保护最终一定会走到:
密钥保护。
十三、这就是 OP-TEE 能发挥作用的地方
如果设备支持 OP-TEE,可以把模型保护设计成:
Linux Normal World
model.enc
│
│
↓
Application
│
│ invoke
↓
OP-TEE Secure World
│
├── 模型密钥
├── 权限判断
└── 解密操作
│
↓
模型运行
这样设备存储介质中长期存在的只有:
model.enc
Linux 文件系统中不需要长期保存:
model.key
程序真正需要使用模型时,再调用 OP-TEE。
可以理解成:
设备不开模型
model.enc
↓
始终是密文
设备运行模型
model.enc
↓
调用 OP-TEE
↓
使用受保护密钥
↓
模型解密
↓
加载模型
这里已经形成了一套比较完整的模型保护逻辑:
存储时加密。
密钥进入可信环境。
运行时受控解密。
十四、这算不算运行时模型安全
算。
因为模型并不是:
开机以后一直保持明文
而是:
不运行
↓
模型保持密文
需要运行
↓
通过 OP-TEE
↓
受控解密
↓
模型使用
所以这种方案可以称为:
基于 OP-TEE 的模型运行时解密保护。
或者:
模型运行时安全加载。
它同时覆盖两个阶段。
第一部分是:
静态保护
解决模型文件在 SSD、eMMC、Flash 中的泄露问题。
第二部分是:
运行时访问控制
解决模型什么时候能够被解密,以及谁可以使用解密能力的问题。
十五、但 OP-TEE 也不是模型安全的终点
模型最终还是需要运行。
因此最终不可避免会出现:
model.enc
↓
OP-TEE
↓
解密
↓
明文模型
↓
DDR
↓
GPU
↓
NPU
到了这里,新的问题就出现了。
例如:
进程内存
共享内存
GPU Memory
NPU Memory
DMA
Debugger
这些都属于更深一层的运行时模型安全问题。
所以需要明确 OP-TEE 的边界。
它非常适合解决:
模型文件泄露
模型密钥泄露
模型未经授权直接使用
但它并不会自动解决:
模型解密以后所有的内存攻击
这是后续需要继续讨论的问题。
十六、Meta LLaMA 事件真正值得我们学习什么
如果只把 LLaMA 事件理解成:
Meta 的模型被别人下载了。
其实有点可惜。
从设备安全角度看,它真正展示的是一个更加基础的问题。
Meta 当时已经有:
申请
审核
授权
下载控制
这些机制。
但这些机制主要解决:
谁能够第一次拿到模型。
它没有从技术上解决:
模型被合法下载以后,还能不能被继续复制。
于是:
授权用户
↓
获得模型权重
↓
模型变成本地文件
↓
访问控制边界消失
↓
文件被再次传播
这也是企业在 Edge AI 设备上非常容易遇到的问题。
你可以限制:
谁能够登录设备
也可以限制:
谁能够下载模型
但只要:
model.onnx
最终以明文文件存在设备中,
那么真正获得足够权限的人依然可能直接把它复制走。
十七、模型安全不是防止别人知道模型结构
这是另一个非常重要的认识。
很多时候我们太关注:
别人知道我用了什么算法怎么办
其实真正更值得关注的是:
别人把我的训练成果直接拿走怎么办
两者完全不同。
例如:
我使用 YOLO
可能并不是什么秘密。
但是:
我使用企业五年私有数据
训练出的 YOLO 权重
这就完全是另一回事。
所以模型安全的核心资产应该首先识别为:
模型权重。
而不是仅仅保护模型名称或者网络结构。
十八、总结
2023 年第一代 Meta LLaMA 权重泄露,是一个非常典型的 AI 模型资产安全案例。
它告诉我们的第一件事情是:
模型权重本身就是资产。
第二件事情是:
模型权重一旦以明文形式泄露,很多时候并不需要复杂破解。
第三件事情是:
访问控制只能控制模型如何被第一次获取,很难阻止已经获得明文模型的人继续复制。
因此,对于真正具有商业价值的 Edge AI 模型,更合理的设计应该是:
Model
↓
Encryption
↓
model.enc
↓
设备存储
↓
OP-TEE
↓
模型密钥保护
↓
Runtime Decryption
↓
模型运行
整个安全链可以进一步整理成:
Secure Boot
↓
保证可信软件启动
Model Encryption
↓
保护模型文件
OP-TEE
↓
保护模型密钥
Runtime Decryption
↓
模型仅在使用时解密
Runtime Memory Protection
↓
继续保护运行中的模型
对于一个 Edge AI 产品来说,并不一定需要一开始就解决所有运行时攻击。
第一步其实非常现实,也非常明确。
先不要让攻击者拿到设备以后,只需要复制一个模型文件,就能把整个模型资产带走。
Meta LLaMA 权重泄露事件真正给模型安全带来的启示,也正是在这里。
需要特别说明的是,本文讨论的是 2023 年第一代 LLaMA 的受控发布和随后发生的权重泄露事件。后续 Meta 对 Llama 的发布策略发生了明显变化,例如 Llama 2 已经进一步扩大模型权重的公开获取范围,因此不能把 2023 年第一代 LLaMA 的事件简单套用到今天所有 Llama 版本。

浙公网安备 33010602011771号