このリポジトリは、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ビルドを使用してheartbleedラボを構築します
docker build -t heartbleed-lab .
docker run heartbleed-lab -p port:8443
Webアプリのデフォルトポートは8443で提供されます。
heartbleed.pyペイロードを使用してテストします。
ペイロードがhexdump形式で結果を返すことが観察できます。
ダンプの例では、送信したリクエストとメモリセルが主に0x00であることがわかります。ペイロードはランダムであるため、目的の結果をリークするには数回実行する必要があります。
memory.pyを実行してnginxにリクエストを送信しメモリに保存し、その後result.txtで見られるようにリーク結果を取得できます。
攻撃者がハートビートリクエストを使用してメッセージをリークすることがわかっているため
alert tcp any any -> any 443 (msg:"Heartbeat request"; content:"|18 03 02 00|"; rawbytes;sid:100000)
侵入検知にSnort IDSを使用します。