Spragusa/hydroficient-replay-attack-defense

GitHub: Spragusa/hydroficient-replay-attack-defense

演示MQTT协议中重放攻击防御机制的IoT安全实验项目,通过时间戳验证、序列追踪和HMAC签名三层防护确保消息完整性与新鲜度。

Stars: 0 | Forks: 0

# MQTT 重放攻击防御 – Hydroficient 项目 6 ## 概述 本项目演示了重放攻击如何影响 IoT 消息系统,以及分层防御如何防止这些攻击。该系统模拟通过 MQTT 管道发布数据的水流传感器,并评估不同的重放攻击防御措施。 该项目建立在早期工作的基础上,此前 TLS 和双向 TLS 已保护了设备与 Broker 之间的连接。在这个阶段,我们专注于保护消息本身的完整性和新鲜度。 ## 问题所在 即使 TLS 加密了流量并对设备进行了身份验证,攻击者仍然可以捕获合法消息并在稍后重放。 这可能导致不正确的系统行为,例如: - 错误的停机信号 - 不正确的传感器读数 - 重复的命令 重放攻击是 IoT 环境中已知的威胁,因为此类环境中消息传输频繁,且系统依赖实时数据。 ## 实施的防御机制 在订阅者端实施了三层防御。 ### 1. 时间戳验证 拒绝超过允许时间窗口的旧消息。 目的: - 防止延迟重放攻击。 ### 2. 序列计数器 每个设备发送带有递增序列号的消息。 目的: - 检测重复消息。 - 阻止即时重放攻击。 ### 3. HMAC 消息签名 消息包含使用共享密钥生成的加密签名。 目的: - 检测消息篡改。 - 防止修改型重放攻击。 ## 实验设计 针对三种攻击类型测试了四种防御配置。 防御配置: - 无防御 - 仅时间戳验证 - 仅序列计数器 - 组合所有防御 攻击类型: - 即时重放 - 延迟重放 - 修改型重放(篡改传感器值) 每个实验处理五条消息并测量拒绝率。 ## 结果 | 防御措施 | 即时重放 | 延迟重放 | 修改型重放 | |---|---:|---:|---:| | 无防御 | 0% | 0% | 0% | | 仅时间戳 | 0% | 100% | 0% | | 仅计数器 | 100% | 100% | 0% | | 所有防御 | 100% | 100% | 100% | 结果表明,没有单一防御能覆盖所有攻击类型,但结合这三者可提供全面保护。 ## 防御对比图 ![Defense Comparison](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/0a312aacdb155629.png) ## 文件 ### 核心脚本 - [publisher_defended.py](./publisher_defended.py) - [subscriber_defended.py](./subscriber_defended.py) - [replay_attacker.py](./replay_attacker.py) - [defense_tester.py](./defense_tester.py) ### 实验结果 - [experiment_results.json](./experiment_results.json) - [captured_messages.json](./captured_messages.json) - [defense_comparison.png](./defense_comparison.png) ### 截图: - [防御实验截图](./screenshots-defense-experiments) - [重放攻击截图](./screenshots-replay-attack) ## 关键要点 - TLS 保护通信通道,但不能防止重放攻击。 - 重放保护需要消息级验证。 - 分层防御比单一控制提供更强的保护。 - 这三项检查的性能开销可以忽略不计(每条消息不到 1 ms)。 ## 下一步 项目的下一阶段是构建一个实时安全仪表板,将接受和拒绝的消息可视化,并在攻击发生时向操作员发出警报。
标签:HMAC签名, Homebrew安装, IoT安全, MITM防御, TLS/mTLS, 中间人攻击, 协议安全, 发布订阅模型, 安全实验, 嵌入式安全, 序列号追踪, 数据防篡改, 时间戳验证, 水流量传感器, 消息完整性, 消息认证, 物联网, 网络安全, 逆向工具, 重放攻击防御, 隐私保护