現代のネットワークでは、データ転送のセキュリティ保護が最も重要であり、データのプライバシーとセキュリティを確保するために、Secure Sockets Layer (SSL) と Transport Layer Security (TLS) が広く使用されているプロトコルです。ただし、トラブルシューティング、フォレンジック分析、またはネットワーク監視のために、暗号化されたトラフィックを分析する必要がある場合もあります。この技術記事では、強力なネットワーク分析ツールである Wireshark と tcpdump を使用して SSL/TLS トラフィックを復号化する方法について説明します。Wireshark と tcpdump の概要、SSL と TLS の暗号化について説明し、プレマスター シークレット キーまたは RSA 秘密キーを使用して SSL トラフィックを復号化する方法を示します。
Wireshark と tcpdump とは何ですか? #
Wiresharkの #
Wireshark は、コンピュータ ネットワーク上で実行されているトラフィックをキャプチャし、インタラクティブに参照できるオープン ソースのネットワーク プロトコル アナライザーです。詳細なレベルでデータを検査し、送信されているプロトコルとデータ パケットを可視化できます。Wireshark は、ネットワークのトラブルシューティング、プロトコルの開発、セキュリティ分析に広く使用されています。
tcpdump #
tcpdump は、ネットワーク トラフィックをキャプチャしてリアルタイムで表示するコマンド ライン パケット アナライザー ツールです。ライブ ネットワークからデータをキャプチャするのに非常に効率的で、パケットをファイル (キャプチャ ファイル) に保存して後で分析することができます。tcpdump には Wireshark のようなグラフィカル インターフェイスはありませんが、迅速な分析、パケットのフィルタリング、リモート システムでのデータ収集には強力です。
SSL 暗号化とは何ですか? #
SSL (Secure Sockets Layer) は、インターネット経由でプライベート文書を送信するために Netscape が開発したプロトコルです。SSL は暗号化アルゴリズムを使用して、クライアント (Web ブラウザなど) とサーバー間で送信されるデータが、送信を傍受した者によって読み取られないことを保証します。
TLS (トランスポート層セキュリティ) は SSL の後継であり、より安全です。TLS は技術的には SSL とは異なりますが、SSL という用語は両方のプロトコルを指すために使用されることがよくあります。
SSL/TLS は、2 つのシステム間に安全な通信チャネルを確立することによって機能します。SSL/TLS 暗号化の主要な概念は次のとおりです。
- 対称暗号化: データの暗号化と復号化には単一のキーが使用されます。
- 非対称暗号化: 2 つのキー (公開キーと秘密キー) が使用されます。公開キーで暗号化されたデータは、対応する秘密キーでのみ復号化できます。
- 証明書: SSL/TLS は証明書を使用して、サーバー (場合によってはクライアント) の ID を検証します。
- ハンドシェイク: クライアントとサーバーが安全な接続を確立し、キーを交換し、暗号化方法について合意するプロセス。
プレマスターシークレットキーによる SSL の復号化 #
プレマスター シークレット キーは、SSL/TLS ハンドシェイク プロセスの重要なコンポーネントです。このキーはセッション キーを生成するために使用され、その後、ネットワーク経由で転送される実際のデータを暗号化するために使用されます。プレマスター シークレット キーを取得することで、セッション データを復号化できます。
プレマスターシークレットキーを使用して SSL を復号化する基本的な手順 #
プレマスターシークレットキーを使用して SSL トラフィックを復号化するには、次の手順に従います。
1. ログファイル環境変数を設定する
2. tcpdump でキャプチャし、ログファイルを検証する
3. SSL復号化用にWiresharkを設定する
ログファイル環境変数を設定する #
Setting SSLKEYLOGFILE Windows上で #
Windowsシステムでは、ログファイルにプレマスターシークレットキーを保存するための環境変数を設定する必要があります。この変数は、 SSLKEYLOGFILEは、これらのキーが保存されるパスを定義します。
1. まず右クリックして [マイコンピュータ] そして、 特性 メニューからシステムメニューを開きます。
2. ソフトウェアの制限をクリック 高度なシステム設定 左側のリストで、システムのプロパティ ウィンドウを開きます。
3. 高機能 タブで、「環境変数」ボタンをクリックします。
4. ユーザー変数、クリック 新着… ボタンの下にこの変数を作成することもできます システム変数 システム上のすべてのユーザーの SSL キーをログに記録する場合。ただし、通常は自分のプロファイルに限定しておくのが最適です。
5. 変数名 フィールド、入力 SSLKEYLOGFILE.
可変値 フィールドに、ログファイルを保存するパスを入力します。または、 ファイルを参照… ファイルピッカーを使用してパスを選択します。
これをシステム全体の変数として設定する場合は、ファイルがすべてのユーザーからアクセス可能であることを確認するか、ワイルドカードを使用してください。たとえば、次のように使用できます。 %USERPROFILE%\AppData\ssl-keys.log or C:\ssl-keys.log .
6. 完了したら、をクリックします。 OK 変更を適用して次の手順に進みます。
Setting SSLKEYLOGFILE LinuxまたはMacの場合 #
LinuxとMacでは、 SSLKEYLOGFILE を使用した環境変数 export同じターミナルで、 tcpdump SSL 接続が検出されると、指定されたキー ログ ファイルが生成されます。
root@noid-01:~# SSLKEYLOGFILE=~/.ssl-key.log をエクスポートします。 root@noid-01:~# tcpdump ...
永続的な環境変数の設定を維持するには、次のようなテキストエディタでユーザープロファイルを編集します。 ドワーフLinuxの場合、この変数は 〜/ .bashrc、Macでは、 〜/ .bash_profile次に、 export コマンド SSLKEYLOGFILE ファイルの末尾に変数を追加し、変更を保存します。
tcpdump でキャプチャし、ログファイルを検証する #
ログファイルの生成をテストするには、ブラウザを開いて、 tcpdump または、HTTPS サーバーに対して curl コマンドを実行して、ファイルが正しく生成されたことを確認します。
例えば、環境変数が作成された同じターミナルで、 tcpdump トラフィックをキャプチャし、HTTPS サービスへの curl が起動されて復号化されます。
root@noid-01:~# export SSLKEYLOGFILE=~/.ssl-key.log root@noid-01:~# tcpdump -i 任意のポート 443 -w ~/capture.pcap & root@noid-01:~# curl https://(その後、tcpdump コマンドを閉じます)
ログファイルを確認する ~/.ssl-key.log そして、交通キャプチャ ~/キャプチャ.pcap 生成されます。最後に、最後の手順を参照して、Wireshark で暗号化されたトラフィックを確認します。
あなたが ssl-key.log ファイルには次のような内容が表示されます。
root@noid-01:~# cat ~/.ssl-key.log CLIENT_HANDSHAKE_TRAFFIC_SECRET 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a db6f3d27b40b7c8e10ed415281b39e45ca6ef2b59468f943dbe6e81e1f82e0f0 SERVER_HANDSHAKE_TRAFFIC_SECRET 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a d819660e194d9439e7152ceac2a439b41584afbeb5d719663cecb3c63b5c2eb1 CLIENT_TRAFFIC_SECRET_0 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a 71d4806141cb1b247c1d1f3f7747a804fcc5e06c4192d8f53fc763a27b92316c SERVER_TRAFFIC_SECRET_0 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a 2ca17b0f7ff708fb3001be17a1c85163219221a4595462415e9e9e6653daf1fa EXPORTER_SECRET 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a 3f74b0cbe802d3e3dd3b5f6dee4114f928ec936a0cd388643d146cfb606f62a4
SSL復号化用にWiresharkを設定する #
キャプチャ システムがプレマスター キーをログに記録すると、キャプチャされたパケットとともにキー ログ ファイルを使用して、Wireshark で SSL トラフィックを復号化できます。
1. キー ログとキャプチャ ファイルを、Wireshark がインストールされているシステムにアップロードします。
2. Wireshark でトラフィック キャプチャ ファイルを開きます。
3. SSLプロトコルを設定します。 編集、その後、選択し 環境設定設定ダイアログが開き、左側に項目のリストが表示されます。 プロトコル セクションを下にスクロールしてクリックします SSL。 の中に SSL プロトコルオプションについては、 (プレ)マスターシークレットログファイル名以前に設定したログ ファイルを参照するか、パスをこのフィールドに直接貼り付けます。
4. 設定を適用します。 (プレ)マスターシークレットログファイル名、クリック OK 変更を保存してWiresharkに戻ります。これでキャプチャしたトラフィックを復号する準備ができました。暗号化されたデータフレームを選択したら、パケットバイトビューを確認してください。ビューの下に、 復号化されたSSLデータ とりわけ。
セッションデータがまだ判読不能でHTMLが表示されない場合は、Apacheなどのウェブサーバーでよく使用されるGZIP圧縮が原因である可能性があります。この場合、 非圧縮エンティティ本体 タブは、SSL 復号化が有効になっている場合にのみ使用できます。ここでは、デフォルトの Apache ページのタイトル要素など、サイトの圧縮されていないソース コードをプレーンテキストで表示できます。
RSA キーを使用して SSL を復号化する #
Wireshark には、SSL トラフィックを復号化するための RSA キーをアップロードできる機能がありますが、実際には、RSA キーの復号化は時代遅れになっています。
この使用率の低下は、Perfect Forward Secrecy (PFS) の採用によるもので、これにより従来の RSA キー復号化は時代遅れになりました。PFS では、Diffie-Hellman を使用してネゴシエートされたセッションは RSA キーを直接使用しません。代わりに、RAM にのみ保存され、ディスク上のキーを使用して暗号化されるワンタイム キーを生成します。
以前にトラフィックの復号化に RSA キーを使用していて、それが機能しなくなった場合は、ターゲット マシンが Diffie-Hellman キー交換を使用している可能性があります。これは、Wireshark で SSL ログ記録を有効にすることで確認できます。
ログ記録を有効にするには:
1. ソフトウェアの制限をクリック 編集 ツールバーメニューで 環境設定.
2. 拡大する プロトコル 左側のセクションで下にスクロールし、 SSL.
3. SSLログファイルの場所を設定するには、 ブラウズ
ログ記録が有効になったら、SSL 対応ホストとのセッションをキャプチャし、ログを確認します。TLS ハンドシェイク ネゴシエーション フレームを探します。暗号文字列に DHE (または楕円曲線キーの場合は ECDHE) エントリが表示される可能性があり、これは Diffie-Hellman キー交換が使用されていることを示します。
マスター シークレットが見つからないことを示すメッセージが表示され、RSA キーの復号化に失敗した場合は、復号化のためにプレマスター シークレット方式に切り替える必要があります。
PFS が普及するにつれて、特に TLS 1.3 の登場により、従来の RSA キー復号化は非推奨となり、今後は依存しなくなります。
もっと知る #
TLS の SSLKEYLOGFILE 形式 #
その SSLキーログファイル 形式は、TLS接続を復号化するためのプレマスターシークレットキーを格納するために使用されるテキストファイルです。ファイルはUTF-8でエンコードされており、各行にはラベルで識別されるシークレット、クライアントのランダム値、シークレット自体がスペースで区切られて含まれています。この形式では、さまざまな行末(CRLF、CR、LF)と、 # コメントとして扱われます。
TLS 1.3では、いくつかのラベルが鍵スケジュールのさまざまな段階に対応しています。 クライアント_ハンドシェイク_トラフィック_シークレット およびSERVER_TRAFFIC_SECRET_0。TLS 1.2以前の場合、 クライアント_ランダム ラベルは マスター 秘密。
セキュリティに関する考慮事項:
のアクセス SSLキーログファイル TLS トラフィックの復号化が可能になり、重大なセキュリティ リスクが生じます。不正アクセスや権限の昇格を防ぐには、適切なアクセス制御が不可欠です。ログ記録は許可されたユーザーのみが有効化し、厳格なファイル権限を適用する必要があります。ログに記録されたシークレットにより、復号化が可能になるだけでなく、攻撃者がアクティブな接続にデータを変更または挿入したり、場合によってはエンドポイントを偽装したり、メッセージを偽造したりすることもできます。
双方向 SSL ハンドシェイクはどのように機能しますか? #
双方向 SSL ハンドシェイクは、サーバーとクライアントの両方を認証します。プロセスの流れは次のとおりです。
1. クライアントこんにちは: クライアントは、サーバーに「Client Hello」メッセージを送信してハンドシェイクを開始します。このメッセージには、クライアントがサポートする暗号スイートと TLS バージョンの互換性が含まれます。
2. サーバーこんにちはサーバーは、サーバーの公開証明書とクライアントの証明書の要求を含む「Server Hello」メッセージで応答します。
3. クライアント証明書の検証: クライアントはサーバーの証明書を検証します。有効な場合、クライアントは自身の証明書をサーバーに送り返します。
4. サーバー証明書の検証: サーバーはクライアントの証明書をチェックします。クライアントの証明書が有効な場合、セッションの確立が続行され、両者間の安全な通信が可能になります。
パッシブにスニッフィングされた SSL/TLS トラフィックを復号化することは可能ですか? #
はい、受動的にスニッフィングされた SSL/TLS トラフィックを復号化することは可能ですが、そのためには RSA キーが必要です。このキーは、適切な承認を得た合法的な手段で取得するか、倫理的には問題ですが、「中間者」攻撃を使用して傍受することで取得できます。