ericyoc/3d_printer_sidechannel_poc
GitHub: ericyoc/3d_printer_sidechannel_poc
该项目提供了一套完整的研究流水线,用于评估FDM 3D打印机在开启AMNC防护后,声学与振动旁路通道的信息泄露风险。
Stars: 0 | Forks: 0
# 3D 打印机中的旁路攻击绕过防护
[](https://www.python.org/)
[](https://colab.research.google.com/)
[](https://zenodo.org/records/13329934)
## 概述
本代码库包含了论文 **"Side-Channel Attacks Bypass Protection in 3D Printers"** 的完整研究 pipeline —— 这是对 Active Motor Noise Cancellation (AMNC) 作为抵御 FDM 3D 打印机声学和振动旁路分析的硬件对策的首次实证评估。
**核心发现:** AMNC 中和了声学旁路(12.50% 的准确率,处于 8.33% 的随机基线水平),但未能覆盖振动通道。振动通道仍然能够对打印对象进行分类:**使用汇总统计约为 31%**,而**使用全序列时间模型约为 61%**。该信号是由 amplitude 驱动的,且具有设备特异性,不支持完整的几何重建。
## 结果摘要
| 方法 | 准确率 | 备注 |
|---|---|---|
| 随机猜测 (1/12) | 8.33% | 基线 |
| 声学 (开启 AMNC) | 12.50% | ≈ 随机水平 —— AMNC 中和了声学 |
| 振动 —— 汇总,混合 | 31.25% | 置换 *p* = 0.005 |
| 振动 —— A1 Mini 内部 | 36.11% | 设备特异性 |
| 振动 —— P1P 内部 | 47.22% | 设备特异性 |
| 振动 —— 全序列时间(有序) | **60.65%** | 最强结果 |
| 时间 —— 乱序控制 | 32.64% | 证实了序列结构 |
有序(60.65%)与乱序(32.64%)时间模型之间约 28 个百分点的差距,证实了存在与打印进程相关的真实序列成分。
## 振动通道携带的信息
特征消融实验将信号定位到振动 **amplitude**,而非波形形状:
| 特征子集 | 准确率 |
|---|---|
| 全部 15 个汇总特征 | 31.25% |
| 仅幅度 (12) | 29.17% |
| 仅频率 (3) | 6.25% |
| 仅 std + rms (6) | 27.08% |
Top 特征 (RF,平均不纯度减少):`Z_mean`, `Z_rms`, `Y_p2p`, `Y_std`, `Z_p2p` —— 全部为 amplitude 统计量。
## 数据集
我们使用了 **Madamopoulos–Tsoutsou 2024 数据集**(开放获取):
- **打印机:** Bambu Lab P1P (core-XY) 和 A1 Mini (bed-slinger) —— 均配备了 AMNC
- **对象:** 12 个几何形状多样化的模型(直线、圆形、圆弧 toolpaths)
- **记录:** 144 组同步的音频 + 加速度计数据对(每台打印机 72 组)
- **格式:** `.mp3` / `.caf` 音频,`.csv` 加速度计(X, Y, Z 轴),`.gcode` ground truth
## 代码库结构
```
├── 3D_Printer_SideChannel_Study.ipynb # Main Google Colab notebook
└── figures/ # Publication figures (PNG, 300 DPI)
├── fig1_accuracy.png # Accuracy by method
├── fig2_amplitude_vs_shape.png # Amplitude vs frequency ablation
├── fig3_temporal_order.png # Ordered vs order-shuffled temporal
├── fig4_feature_importance.png # Top vibration features
├── fig5_confusion.png # Confusion matrix (pooled vibration)
└── fig6_crossprinter.png # Cross-printer transfer
```
## 实验设计
该 pipeline 运行了五项分析:
1. **AMNC 下的声学** —— 在激活 AMNC 的情况下对声学特征进行分类,外加一个模拟陷波滤波器和品质因数扫描
2. **振动 —— 汇总特征** —— 混合及单打印机内部的对象分类
3. **特征消融** —— 将 amplitude 与频率内容隔离
4. **全序列时间模型** —— 有序与乱序的准确率对比
5. **跨打印机迁移** —— 在一台打印机上训练,在另一台上测试
## 方法
### 记录配对
每次记录会话将其音频与自身的加速度计捕获数据存储在一起。每个音频文件都与其 **自身会话文件夹中** 的 `.csv` 捕获数据配对,产生 144 组独立的音频-振动数据对(每台打印机的每个对象 6 组)。每次记录被视为一个带标签的样本,并且源自同一次记录的所有样本都被分在一组,以确保同一次记录不会被拆分到不同的交叉验证 fold 中。
### 特征提取
| 通道 | 特征 | 维度 |
|---|---|---|
| 声学 | 13 个 MFCC + 频谱质心/带宽/滚降点/ZCR (mean + std) | 32 |
| 振动(汇总) | mean、std、RMS、peak-to-peak、主导 FFT 频率 × 3 个轴 | 15 |
| 振动(时间) | 分段 std/RMS/p2p/主导频率 × 3 个轴,120 个有序分段 | 120 × 12 |
### AMNC 防御模拟
AMNC 被建模为针对步进电机谐振的陷波滤波器组:
- **中心频率:** 120, 180, 240, 300, 360 Hz
- **品质因数:** Q = 30(在 Q ∈ {15, 30, 60} 处检查灵敏度)
- **实现:** `scipy.signal.iirnotch` (二阶 IIR)
AMNC 滤波器灵敏度(声学准确率):Q15 = 13.19%, Q30 = 9.72%, Q60 = 10.42% —— 在所有设置下均接近随机水平。
### 分类
- **汇总特征:** Random Forest(200 个估计器),StandardScaler pipeline
- **时间特征:** 在完整的 120 步序列上应用膨胀 1D-CNN,在 3 个随机种子上取平均值
- **消融:** Gradient Boosting, SVM (RBF, C=10), KNN (k=5)
- **验证:** 分组 5-fold 交叉验证(每次记录一个样本)
### 统计检验
- 比例的 Wilson 置信区间
- 针对 8.33% 随机基线(1/12 个类别)的单侧二项式检验
- 标签置换零假设(200 次置换)
- 时间模型的乱序控制
## 消融结果
在振动汇总特征(混合)上的分类器消融:
| 分类器 | 准确率 (%) |
|---|---|
| Random Forest | 31.25 |
| Gradient Boosting | 21.53 |
| SVM (RBF) | 9.03 |
| KNN (k=5) | 11.11 |
跨打印机迁移(振动):A1 Mini → P1P = 11.11%,P1P → A1 Mini = 12.50% —— 接近随机水平,证实了其设备特异性。
## 应用与安全影响
- **AMNC 仅是一项针对声学的防御措施。** 它中和了其目标通道,但对结构振动毫无影响。要缓解振动通道,需要采取专门的措施 —— 底盘级别的隔离(阻尼脚垫、防振支架)、使运动与 toolpath 几何形状去相关的随机化步进加速曲线,或者主动振动掩盖 —— 每种措施都会在打印质量、速度或硬件成本之间进行权衡。
- **设备特异性是一种防御手段。** 振动特征无法在不同打印机架构之间迁移(跨打印机准确率为 11–12.5%),因此异构打印机群会增加攻击者的单设备校准成本,并提供同构打印机群所不具备的天然部分保护。
- **有限的威胁。** 所展示的能力是封闭集的*识别* —— 确认已知设计集合中的哪一个位于打印床上 —— 而非对未知几何形状的重建。这支持针对已知设计目录的监控或间谍活动。时间结果表明,与几何相关的信息留存到了振动通道中,这使得重建(例如,利用 AMNC 未能抑制的磁性/电源通道)成为自然的攻击升级路径。
## 环境配置与复现
### 依赖要求
```
pip install librosa scikit-learn pandas numpy matplotlib seaborn scipy pydub statsmodels zenodo-get pymupdf torch
```
### Google Colab(推荐)
1. 在 Google Colab 中打开 `3D_Printer_SideChannel_Study.ipynb`
2. 挂载你的 Google Drive
3. notebook 会将数据集从 Zenodo 下载到 `MyDrive/3dprinter_sidechannel/`
4. 结果和图表将保存到 `MyDrive/3dprinter_sidechannel/results_v2/`
5. 按顺序运行所有单元格
### 本地执行
```
git clone https://github.com//3dprinter-sidechannel
cd 3dprinter-sidechannel
pip install -r requirements.txt
# 从 https://zenodo.org/records/13329934 手动下载 dataset
# 在 notebook cell 2 中更新 DRIVE_BASE path
jupyter notebook 3D_Printer_SideChannel_Study.ipynb
```
## 引用
请引用该数据集:
```
@misc{madamopoulos2024_zenodo,
author = {Madamopoulos, Christos and Tsoutsos, Nektarios Georgios},
title = {{3D} Printer Audio and Vibration Side Channels},
year = {2024},
publisher = {Zenodo},
doi = {10.5281/zenodo.13329934}
}
```
## 许可证
该数据集在 Zenodo 上受其自身的 CC BY 4.0 许可证约束。
标签:3D打印, Apex, NoSQL, Python, 侧信道攻击, 信号处理, 凭据扫描, 无后门, 机器学习, 硬件安全, 逆向工具