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 安全, 侧信道攻击, 可视化, 密码学, 恒定时间编程, 手动系统调用, 无后门, 时间泄露, 签名验证绕过, 网络安全, 计时攻击, 逆向工具, 隐私保护