Santhosh-2308/Exploiting-Timing-Side-Channels-in-Web-APIs

GitHub: Santhosh-2308/Exploiting-Timing-Side-Channels-in-Web-APIs

演示如何利用 HMAC 逐字节比较的时序泄露恢复签名,并提供恒定时间修复方案的侧信道攻击教学项目。

Stars: 0 | Forks: 0

# 利用 Web API 签名验证中的时序侧信道 ## 概述 本项目演示了针对易受攻击 Web API 的**实际时序侧信道攻击**,该 API 使用不安全的逐字节比较来验证 HMAC 签名。 即使每个正确字节仅导致微小的延迟,也会通过响应时间泄露信息。通过仔细测量这些差异,攻击者可以在**没有直接访问权限的情况下恢复秘密签名**。 ## 漏洞原理 服务器执行了一个简单的比较: ``` for x, y in zip(a, b): if x != y: return False time.sleep(DELAY_PER_BYTE) ``` 这引入了**时序泄露**: * 正确的前缀越长 → 响应时间越长 * 字节不正确 → 提前退出 ## 攻击目标 仅使用以下手段恢复文件的 HMAC 签名: * HTTP 请求 * 响应时序测量 ## 项目结构 timing-attack-web-api/ ├── app.py # 易受攻击的 Flask 服务器 ├── secure_app.py # 修复版(恒定时间)实现 ├── attacker.py # 时序攻击脚本 ├── plot_timings.py # 时序泄露可视化 ├── data.txt # 目标文件 ├── timings.csv # 收集的时序数据 ├── requirements.txt └── README.md ## 设置 安装依赖: ``` pip install --user flask requests matplotlib ``` ## 运行演示 ### 1. 启动易受攻击的服务器 ``` python3 app.py ``` 服务器运行于: ``` http://127.0.0.1:5000 ``` 测试端点: ``` http://127.0.0.1:5000/check?file=data.txt&signature=abc ``` ### 2. 运行时序攻击 ``` python3 attacker.py ``` 示例输出: ``` [+] Recovering position 0... Tried 0 -> 0.0123s Tried 1 -> 0.0187s ... [+] Best so far: 1443d3a4 [+] Recovered prefix: 1443d3a4 ``` ### 3. 验证结果 ``` python3 - << 'PY' import hmac, hashlib SECRET_KEY = b"supersecretkey" filename = "data.txt" sig = hmac.new(SECRET_KEY, filename.encode(), hashlib.sha1).hexdigest() print(sig) PY ``` ### 4. 生成时序图 ``` python3 plot_timings.py ``` 这会生成: ``` timing_position_0.png timing_position_1.png ... ## 结果 Recovered HMAC prefix: * **Recovered:** `1443d3a4` * **Actual:** `1443d3a4` The attack successfully exploits timing leakage. --- ## 可视化 Timing differences clearly show that correct guesses take longer: * Higher latency → correct prefix * Lower latency → incorrect guess Graphs in `timing_position_*.png` illustrate this leakage. ## 安全实现 The fix uses constant-time comparison: ```python hmac.compare_digest(signature, expected) ``` 运行安全服务器: ``` python3 secure_app.py ``` 这消除了时序泄露。 ## 关键要点 * 简单的字符串比较对于**秘密数据是不安全的** * 时序差异可能泄露**加密信息** * 即使是很小的延迟,通过重复测量也会变得可利用 * 恒定时间函数对于安全系统至关重要 ## 未来改进方向 * 恢复完整的 HMAC(不仅仅是前缀) * 添加网络抖动模拟 * 使用统计过滤改进攻击 * 通过网络执行远程攻击 * 扩展到其他侧信道载体(缓存、电源) ## 学习成果 本项目演示了: * 实际侧信道利用 * 基于时序的加密攻击 * 安全编码实践 * 数据收集与分析 * 泄露可视化 ## 作者 Santhosh Kandagatla
标签:CISA项目, Flask, HMAC, Mutation, Python, Web 安全, 侧信道攻击, 可视化, 密码学, 恒定时间编程, 手动系统调用, 无后门, 时间泄露, 签名验证绕过, 网络安全, 计时攻击, 逆向工具, 隐私保护