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 版本。

posted @ 2026-09-24 22:14  嵌入式孙老师  阅读(2)  评论(0)    收藏  举报