このリポジトリは、Heartbleed 手法を使用して nginx を簡単に悪用できる環境を作成するためのコンテナ構築に焦点を当てています。内容は以下の通りです:

CVE-2014-0160 の問題は、OpenSSL ライブラリが TLS ハートビート機能を提供する際に、バッファサイズが 64KB であるために余剰が生じ、サーバーメモリの機密情報が漏洩するというものです。
Web アプリは機密メッセージを処理しており、nginx がそれをメモリにキャッシュしています。
まず、環境が TLS ハートビートをサポートしているかどうかを確認します。
openssl s_client -connect : -tlsdebug
注意: 最新の OpenSSL バージョンでは TLS ハートビートプロトコルをサポートしていない場合があります。サポートされているバージョンを使用してください。
Heartbleed はランダム性のあるメモリ読み取りオーバーフロー(out-of-bounds read)バグです。 サーバーは隣接する 64KB のメモリを返します。
ハートビートのヘッダー (RFC6520) 18 03 02 00
docker build を使用して heartbleed ラボをビルドします
docker build -t heartbleed-lab .
docker run heartbleed-lab -p port:8443
Web アプリのデフォルトポートは 8443 でサービスを提供しています。
ペイロード heartbleed.py を使用してテストします。 ペイロードが hexdump 形式で結果を返すことが確認できます。
サンプルダンプでは、送信したリクエストとメモリセルが主に 0x00 であることがわかります。ペイロードはランダム性があるため、目的の結果を漏洩するには複数回実行する必要があります。
memory.py を実行して nginx にリクエストを送りメモリに保存し、その後 result.txt に示されるように漏洩した結果を得ることができます。
攻撃者が heartbeat リクエストを使用してメッセージを漏洩することがわかっているため、
alert tcp any any -> any 443 (msg:"Heartbeat request"; content:"|18 03 02 00|"; rawbytes;sid:100000)
侵入検知に Snort IDS を使用します。