
CVE-2014-0160 (Heartbleed) と TLS ハートビート処理におけるフレーミングの不整合を学ぶための教育用ラボ。
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
以下の観点から:
計画されている次のステップは以下のとおりです:
このリポジトリは以下の目的のみで存在します: