邪恶女佣攻击:物理安全的最薄弱环节
2009 年,安全研究员 Joanna Rutkowska 首次定义了 "邪恶女佣攻击"(Evil Maid Attack)—— 攻击者利用物理接触目标设备的机会,篡改系统固件或安装硬件后门,从而绕过磁盘加密等软件防护措施。这种攻击之所以得名,是因为酒店清洁人员(女佣)有机会在客人外出时接触其笔记本电脑,实施物理层面的入侵。
传统的软件安全措施,如全盘加密、安全启动(Secure Boot)和可信平台模块(TPM),在面对物理访问时显得力不从心。攻击者可以安装硬件键盘记录器、替换 BIOS/UEFI 固件,甚至在内存中植入恶意代码。正如 Tripwire 项目文档所指出的:"目前没有任何软件或固件解决方案能有效防御邪恶女佣攻击。"
Tripwire 系统架构:从概念到实现
Tripwire 是一个开源的物理安全监控系统,基于 Raspberry Pi 5 构建,通过摄像头模块和被动红外(PIR)运动传感器检测入侵。系统的核心设计理念是不可篡改的检测证据和抗网络中断的恢复机制。
硬件组件清单
- Raspberry Pi 5:作为监控服务器
- 官方摄像头模块 3:用于视觉监控
- PIR 运动传感器:检测红外热源变化
- 不间断电源(UPS):应对电源中断
- 128GB 以上 microSD 卡:存储照片日志
- 面包板和跳线:连接传感器
软件架构
系统采用客户端 - 服务器架构,Web 客户端通过 HTTPS 访问服务器,支持渐进式 Web 应用(PWA)安装,可在移动设备上接收推送通知。
随机秘密共享:不可篡改的检测核心
Tripwire 的核心安全机制基于预共享随机秘密和加密签名的双重验证:
1. 秘密共享流程
- 部署前:服务器(RPi)与 Web 客户端共享随机秘密
- 监控中:服务器每秒发送当前秘密给客户端
- 检测时:一旦检测到运动,服务器立即删除对应秘密
- 验证时:客户端比较存储秘密与接收秘密的匹配性
2. 加密签名机制
服务器维护独立的加密密钥对:
- 公钥:部署前共享给客户端
- 私钥:用于签名检测前的所有照片
- 密钥删除:检测发生后特定时间窗口内删除私钥
这种设计确保攻击者即使同时入侵目标设备和监控系统,也无法伪造检测前的历史记录。
网络中断与电源中断:工程化恢复策略
网络中断处理
- 临时中断:客户端通过 "重新获取缺失照片" 按钮恢复数据
- 持久中断:用户需物理检查 SD 卡,使用验证脚本手动验证签名
- 验证脚本:
verify_photo_log.sh脚本使用保存的公钥验证照片签名链
电源中断应对
- UPS 支持:系统设计兼容不间断电源
- 恢复机制:电源恢复后系统自动重启监控
- 数据完整性:照片按时间顺序存储,支持断点续传
结构相似性指数(SSIM):智能运动检测
Tripwire 使用结构相似性指数(SSIM)进行视觉运动检测,而非简单的像素差异比较。SSIM 考虑了亮度、对比度和结构信息,能更好地区分环境光照变化和真实运动。
SSIM 参数配置
# config.yaml 关键参数
MIN_SSIM_VS_INIT: 0.75 # 与初始照片的最小SSIM阈值
MIN_SSIM_VS_NEXT: 0.80 # 与上一张照片的最小SSIM阈值
摄像头调优流程
- 在部署区域运行测试脚本,获取基准 SSIM 值
- 根据环境光照和摄像头角度调整阈值
- 建议 SSIM 阈值比实测值低 0.5-1.0,平衡灵敏度与误报率
与 TPM+Secure Boot 的深度防御集成
虽然 Tripwire 主要解决物理监控问题,但可以与传统的安全启动链形成深度防御:
三层防御架构
- 物理层(Tripwire):检测物理入侵和篡改企图
- 固件层(Secure Boot):验证启动链完整性
- 硬件层(TPM):存储度量值和加密密钥
集成部署建议
- 设备保护:对需要保护的设备启用全盘加密 + TPM 绑定
- 监控部署:Tripwire 监控设备所在区域的唯一入口
- 启动验证:配置 UEFI 安全启动,仅允许签名内核启动
- 定期审计:结合 TPM 远程证明验证系统完整性
部署参数与监控清单
环境要求清单
- 单一入口,无其他进出路径
- 无窗户,避免环境光变化干扰
- 无移动物体(宠物、悬挂物等)
- 稳定照明,建议使用常明灯
- 无热源,避免 PIR 传感器误报
关键时间参数
POST_DETECTION.SECS_DEL_KEYS: 2 # 检测后删除密钥的秒数
KEEPS_PHOTOS_IN_MEM_FOR: 30 # 内存保留照片秒数
KEEPS_PHOTOS_IN_DISK_FOR: 86400 # 磁盘保留照片秒数(24小时)
SECS_DEL_KEYS 计算逻辑:假设攻击者 0.5 秒开门(触发检测),3 秒跑到 RPi,设置 2 秒删除窗口确保密钥在攻击者接触设备前销毁。
网络配置要点
- 端口转发:使用非标准端口(1024-65535)
- 动态 DNS:配置 Caddy 支持动态域名更新
- TLS 证书:必须启用 HTTPS,否则系统易受中间人攻击
- 基本认证:使用强密码短语,避免简单密码
局限性分析与应对策略
已知局限性
- 环境限制:需要严格控制部署环境条件
- 虚假阳性:可能触发密钥删除,给攻击者伪造机会
- 酒店部署:当前版本需要端口转发,酒店网络难以支持
- 数据擦除:无法保证秘密从内存和磁盘完全不可恢复
风险缓解措施
- 环境模拟测试:部署前进行充分的环境测试
- 多重传感器:结合摄像头和 PIR 传感器减少误报
- 继电器开发:计划中的中继服务器将解决酒店部署问题
- 物理安全增强:结合 "随机马赛克" 等物理篡改证据技术
浏览器兼容性警告
- 避免使用:Brave Browser(Linux 桌面版)存在 ed25519 签名验证问题
- 推荐使用:Chrome、Firefox、Safari 等主流浏览器
- 必须支持:Web Push API 和 ed25519 签名验证
实战部署检查清单
部署前准备
- Raspberry Pi 5 刷写 Raspberry Pi OS Lite(64 位)
- 安装摄像头模块和 PIR 传感器(断电操作!)
- 配置 SSH 访问和网络连接
- 获取域名并配置动态 DNS
- 生成 Caddy 基本认证哈希密码
软件安装
- 安装 Picamera2(通过 APT,非 pip)
- 构建带 DNS 插件的 Caddy 自定义版本
- 创建 Python 虚拟环境并安装依赖
- 生成 VAPID 密钥对用于 Web 推送
系统调优
- 运行摄像头测试脚本,获取基准 SSIM 值
- 根据环境配置 SSIM 阈值
- 设置合理的照片保留时间
- 测试入侵检测和推送通知
日常监控
- 定期检查秘密匹配状态
- 验证照片签名完整性
- 监控网络连接状态
- 备份服务器公钥和初始秘密
总结:物理安全的新范式
Tripwire 代表了物理安全监控的新思路 —— 通过密码学原语确保检测证据的不可篡改性,而非依赖封闭的专有系统。开源特性允许安全专家审计代码,消除供应商后门风险。
对于高价值目标保护,建议采用深度防御策略:Tripwire 物理监控 + TPM 硬件完整性验证 + Secure Boot 启动链保护。这种多层防护能显著提高攻击者的成本和风险,为敏感设备和数据提供真正有效的物理安全保护。
正如项目文档强调的:"Tripwire 应该只是你深度防御中的一个工具。" 在物理安全领域,没有银弹解决方案,只有通过精心设计和多层防护,才能构建真正可靠的防御体系。
资料来源:
- Tripwire GitHub 仓库:https://github.com/fr33-sh/tripwire
- 邪恶女佣攻击定义:Joanna Rutkowska 原始博客文章