用于研究 Heartbleed 漏洞的教育实验室
(CVE-2014-0160)通过 Docker 内真实的易受攻击 OpenSSL 环境进行实验。
本项目使用 OpenSSL 1.0.1f 复现了一个易受攻击的 TLS 服务器,并实现了一个自定义的原始 TLS 心跳客户端,用于演示畸形心跳数据包如何触发内存泄露。
该实验室专为教育和研究目的而创建,尤其适用于研究:
heartbleed-lab/
├── client/
│ ├── attacker.py
│ └── Dockerfile
│
├── vulnerable/
│ ├── Dockerfile
│ └── server/
│
├── fixed/
│ ├── Dockerfile
│ └── server/
│
├── docs/
│ └── diagrams/
│
├── notes/
│
├── docker-compose.yml
├── .gitignore
└── README.md
heartbleed-client
↓
Docker internal network
↓
vulnerable-heartbleed
其中:
heartbleed-client 发送原始 TLS 记录vulnerable-heartbleed 运行 OpenSSL 1.0.1f易受攻击的服务器使用:
openssl s_server该环境特意配置为复现原始 Heartbleed 行为。
该客户端的实现:
当前实现通过发送一个畸形心跳数据包来复现原始 Heartbleed 行为,其中:
payload_length > real payload size
示例:
Declared payload length: 0x4000
Real payload: 1 byte ("A")
易受攻击的服务器错误地信任声明长度,并返回超出实际载荷边界的内存内容。
sudo COMPOSE_HTTP_TIMEOUT=300 docker-compose up --build
sudo docker exec -it heartbleed-client bash
python attacker.py
[+] Sending malformed heartbeat
[+] Got TLS record: type=24 version=(3, 2) length=16384
[!!!] Heartbeat response received
这表明易受攻击的服务器返回了超出合法心跳载荷范围的内存内容。
本项目探讨以下概念之间的关系:
本实验室的主要研究兴趣之一是比较:
HTTP Request Smuggling
vs
TLS Heartbeat Parsing Failures
从以下角度:
计划中的后续步骤包括:
本仓库仅用于: