
Heartbleed バグは、OpenSSL ライブラリの脆弱性を悪用するサイバーセキュリティ攻撃の一例です。簡単に言うと、OpenSSL ライブラリの検証ステップが欠落しているため、ハッカーが脆弱なライブラリを使用しているサーバー上の機密情報にアクセスできる可能性があります。クライアントとサーバー間の SSL 接続を確立するためのハンドシェイクプロトコルの一部として、クライアントから heartbeat メッセージが送信され、サーバーから返信されます。また、クライアントは自身のハートビートメッセージの長さを送信する責任があり、サーバーはこの長さを使用してメモリから返す必要のあるバイト数を決定します。サーバーによって検証されない偽の長さの値により、クライアントのハートビートメッセージが保存されているメモリ位置に隣接するバイトが返される可能性があります。
このリポジトリには、Heartbleed バグを悪用してウェブサーバーからセッションクッキーを抽出する方法のデモが含まれています。これにより、ハッカーはウェブサイトの安全でアクセス制御された部分にアクセスできるようになります。
サイバーセキュリティの概念とセキュアコーディングを教えている講師の方は、この例を使って Heartbleed バグに関する実践的な経験を提供し、特権情報がどれほど簡単に取得されるかを示すことができます。
サイバーセキュリティのクラスの学生、あるいは駆け出しのプログラマーであれば、コードの小さなミスがどのように大きなセキュリティ脆弱性につながるかを理解することは有益です。現在クラスで Heartbleed 攻撃について学んでいる場合は、これらの攻撃がどのように動作し、どのような対策を講じれば防止できるかについて、さらに実践的な経験を積むことができます。
このデモは3つのDockerコンテナ(サーバー、ハッカー、被害者用)を使用して設計されています。サーバーコンテナでは、ログイン成功時にウェルカムメッセージを返すシンプルなPython Flaskベースのウェブサイトがホストされています。サーバーコンテナは、Heartbleed脆弱性があるパッチ未適用のOpenSSLライブラリを実行しています。ハッカーと被害者の両方のコンテナは、UbuntuマシンへのVNCインターフェースを提供します。ハッカーコンテナには、Heartbleedバグを悪用してハートビートメッセージに誤ったメッセージ長を送信し、サーバーから返されたデータを解析してセッションクッキーを探すPythonスクリプトも含まれています。ハッカーコンテナのデスクトップにあるHTMLドキュメントに手順が記載されています。
このコンテナセットを実行する推奨方法は、サイバーセキュリティデモのためのウェブプラットフォームであるCHEESEHubを使用することです。CHEESEHubは、コンテナをオンデマンドでオーケストレーションおよび実行するために必要なリソースを提供します。このアプリケーションをCHEESEHubで実行するように設定するには、使用するDockerイメージ、メモリとCPU要件、および3つのコンテナそれぞれに公開するポートを設定するアプリケーション仕様を作成する必要があります。このHeartbleedデモのJSON 仕様はこちらにあります。
CHEESEHubはKubernetesを使用してアプリケーションコンテナをオーケストレーションします。このアプリケーションを独自のKubernetesインストールで実行することもできます。ローカルマシンに最小限のKubernetesクラスターをセットアップする手順については、Minikubeを参照してください。
CHEESEHubまたはKubernetesで実行する前に、3つのアプリケーションコンテナ用のDockerイメージをビルドする必要があります。ハッカー、被害者、サーバーのコンテナ定義は、それぞれheartbleed-hacker、heartbleed-victim、heartbleed-serverディレクトリにあります。これらのコンテナをビルドするには、以下を実行します。
cd heartbleed-hacker
docker build -t <hacker image tag of your choice> .
cd heartbleed-victim
docker build -t <victim image tag of your choice> .
cd heartbleed-server
docker build -t <server image tag of your choice> .
Dockerイメージがビルドされたら、Dockerエンジンのみを使用してコンテナを実行できます。
docker run -d -p 80 <hacker image tag from above>
docker run -d -p 80 <victim image tag from above>
docker run -d <server image tag from above>
ハッカーと被害者のコンテナのユーザー向けインターフェースはVNCインターフェースであるため、ポート80を公開してホストマシンからアクセスできるようにします。サーバーのウェブサイトにはハッカーと被害者のコンテナ内からのみアクセスするため、サーバーコンテナの公開ポートをマッピングする必要はありません。
ブラウザでハッカーコンテナのURLに移動すると、Linuxデスクトップインターフェースが表示されます。デスクトップ上のInstructions.htmlファイルをダブルクリックして、このデモのステップバイステップの手順を確認してください。ハッカーおよび被害者のコンテナでは、左下隅のプログラムメニューを選択して新しいブラウザまたはターミナルウィンドウを起動できます。ハッカーと被害者がサーバーのホストされたウェブサイトにアクセスするために使用するサーバーのIPアドレスは、CHEESEHubのコンテナ一覧ページからサーバーコンテナでコンソールを起動することで取得できます。
このアプリケーションに関する問題を報告したり、機能強化に貢献したりするには、GitHub Issueを作成してください。