This post is also available in: English (英語)
概要
本シリーズは、疑わしいネットワークアクティビティの調査やネットワークトラフィックのパケットキャプチャ(pcap)の確認を業務で行っておられるセキュリティ専門家を読者として想定しています。このため本稿での手順説明は読者の皆さんがWiresharkの使いかたをご存知であることを前提としています。また、本稿にて利用するWiresharkのバージョンは主に3.xとなります。
昨今、対象となる疑わしいネットワークアクティビティのトラフィックが暗号化されていることは珍しくありません。今はほとんどのWebサイトが Hypertext Transfer Protocol Secure(HTTPS)プロトコルを使用しており、そうした通常の Webサイトと同様にさまざまなマルウェアもまた HTTPS を利用しています。ですから、マルウェアのアクティビティを pcap で確認するさいは、感染後の HTTPS トラフィックに何が含まれているかがわかれば調査の役に立ちます。
そこで本チュートリアルでは、pcap ファイルから HTTPS トラフィックを復号する方法を解説していきます。ただしこの復号は pcap を取得する前段で、暗号化に使われたTLS セッションキーをテキストベースのキーログファイルとして保存しておくことで可能になるものです。ここではこのキーログファイルを使い、pcap の HTTPS 通信内のアクティビティを復号し、内容を確認していくことになります。
今回サンプルとして利用するのは、HTTPSでのアクティビティを含む Dridex によるマルウェア感染です。
注意 1: 本チュートリアルは、以前の『Wireshark によるパケット解析講座 1: Wiresharkの表示列をカスタマイズする』で設定したカスタマイズ済みの列表示を使いますので、まだお済みでないかたはこちらのチュートリアルを済ませてから行ってください。また、本チュートリアルで使うpcapファイル、キーログファイルの入ったZIPアーカイブは、Githubリポジトリからあらかじめ取得しておいてください(解凍用パスワードは「infected」です)。
注意 2: 本稿のチュートリアルに利用する pcap ファイルには、Windowsで動作するマルウェアが含まれています。したがって、Windowsコンピュータを使って解析すると感染リスクがともないます。できるかぎり BSD 系、Linux 系、Mac OS など、Windows 環境以外の環境で pcap を確認することをお勧めします。
トラフィックが暗号化されるようになった経緯
1990年代半ばから後半にかけてWebサイトに最も一般的に使用されていたプロトコルは平文のWebトラフィックを生成するハイパーテキスト転送プロトコル(HTTP)でした。その後、セキュリティ懸念の高まりにともない、Webサイトで利用するプロトコルはHTTPSに切り替わり始めました。今ではWebブラウジングにおいてはほとんどHTTPトラフィックを見なくなりました。
HTTPS はつまるところ暗号化された通信トンネルに HTTP トラフィックを入れたものです。これら通信トンネルは、最初は Secure Sockets Layer(SSL)を暗号化プロトコルとして使用していましたが、今ではほとんどの HTTPS トラフィックが Transport Layer Security (TLS)を利用しています。
HTTPS Webトラフィック
さて、HTTPSトラフィックでドメイン名がわかるケースはよくあります。たとえば https://www.wireshark.orgを Webブラウザで閲覧すれば、pcap にはwww.wireshark.orgがこのトラフィックのサーバー名として表示されます (ここでは、チュートリアル1でカスタマイズしたWiresharkカラム表示を前提としています)。ただ残念ながら、実際のURLやサーバーから返されたデータなどのその他の詳細はわかりません。pcapでTransmission Control Protocol(TCP)のストリームを追跡しても、暗号化されているのでトラフィックの内容がわからないのです。
暗号化用のキー ログ ファイル
今回復号に使う暗号化用キー ログ ファイルはテキストファイルです。図3にそのサンプルを示します。
このキー ログ ファイルは、pcapの取得を開始するタイミングで Man in the Middle(MitM)技術を使って作成するものです。このため、pcap 取得開始時時にこれらのファイルを作成していなかった場合は、取得したpcap内のHTTPSトラフィックを復号することはできません。
Pcap のキャプチャ開始時にキー ログ ファイルを取得したサンプル
冒頭でもふれましたが、pcapと対応するキー ログ ファイルを含むZIPアーカイブ(パスワードは「infected」)はこちらのGithubリポジトリにありますので、チュートリアルを始める前に取得しておいてください。Githubページに移動してZIPアーカイブのエントリをクリックし、図4と図5に示す手順でダウンロードします。一点注意していただきたいのですが、この ZIP アーカイブに含まれている pcap をキー ログで復号すると、そのなかには Windows ベースのマルウェア サンプルが含まれています。繰り返しになりますが、本チュートリアルの手順はWindows 以外の環境で慎重に行うようにしてください。
なお、本ZIPアーカイブファイルを解凍してpcapファイルとキー ログ ファイルを取り出すためのパスワードは「infected」となります。解凍すると図6に示した2つのファイルが出てきます。
- Wireshark-tutorial-KeysLogFile.txt
- Wireshark-tutorial-on-decrypting-HTTPS-SSL-TLS-traffic.pcap
キー ログ ファイルを使わない状態で見た HTTPS トラフィック
さて、Wireshark-tutorial-on-decrypting-HTTPS-SSL-TLS-traffic.pcapファイルを Wireshark で開いたら、『Wireshark によるパケット解析講座 2: 脅威インテリジェンス調査に役立つフィルタリング設定』のチュートリアルで解説した web 用フィルタを適用してください。Wireshark 3.xの基本フィルタは次の内容です。
(http.request or tls.handshake.type eq 1) and !(ssdp)
この pcap は Windows 10ホスト上で Dridex マルウェア感染のトラフィックをキャプチャしたものです。このサンプルでは感染活動を含めたすべての Web トラフィックが HTTPS で行われています。したがって、キー ログ ファイルがないかぎり、IPアドレス、TCPポート、ドメイン名以外は判明せずトラフィックの詳細を確認することはできません(図7参照)。
キー ログ ファイルを読み込む
では、Wireshark-tutorial-on-decrypting-HTTPS-SSL-TLS-traffic.pcapファイルを Wireshark で開いた状態で、Linux / Windows 系環境では続けて[編集]、[Preferences] を、Mac OS 系の環境では [Wireshark]、[Preferences] の順にクリックします(図 8 参照)。
[Preferences] メニューの左ペインにある [Protocols] の左にある三角形をクリックして開きます(図 9 参照)。
なお Wireshark のバージョン 2.x を使用している場合は、「SSL」という項目が出てくるまでずっと下にスクロールして選択してください。Wireshark のバージョン 3.x を使用している場合は、同様に「TLS」を選択します。SSLないしTLSを選択すると(Pre)-Master-Secret log filenameという項目が表示されますので、その右下にある [Browse] ボタンをクリックし、解凍済みキー ログ ファイル(Wireshark-tutorial-KeysLogFile.txt)を図 10 から 12 に示した手順で選択してください。
キー ログ ファイルを使った状態で見た HTTPS トラフィック
ここで [OK] をクリックすると、基本フィルターを使っている環境であれば、各 HTTPS 行の下に、復号された HTTP リクエストが Wireshark カラムに一覧表示されます(図 13 参照)。
この pcap の場合、キー ログ ファイルを適用する前は HTTPS トラフィックに隠されていた microsoft.com と skype.com への HTTP リクエストが確認できるようになります。このほかに Dridex 感染によって引き起こされた次のトラフィックも確認できます。
- foodsgoodforliver[.]com – GET /invest_20.dll
- 105711[.]com – POST /docs.php
foodsgoodforliver[.]com への GET リクエストが Dridex の DLL ファイルを返しています。そして 105711[.]com への POST リクエストは、Dridex に感染した Windows ホストからのコマンド & コントロール(C2)トラフィックです。
このトラフィックは HTTP ストリームを追跡することで確認できます。この行を右クリックして選択し、さらに左クリックしてメニューを表示し、HTTP ストリームを追跡してください。図14と図15は foodsgoodforliver[.]com への HTTP GET リクエストの HTTP ストリームを追跡した様子を示しています。
このトラフィックにはキー ログ ファイルがあるので、pcap からマルウェア自体をエクスポートすることができます。Wireshark のメニューで [ファイル]、[オブジェクトをエクスポート]、[HTTP] の順にクリックし、図 16 に示すようにこのファイルを pcap からエクスポートしましょう。
BSD 系、Linux 系、Mac OS 系の環境で実行している場合はターミナル ウィンドウを開いて file コマンドを実行し、このファイルが DLL であることを確認してください。そののち、shasum -a 256 を実行し、ファイルの SHA256 ハッシュ値を取得します(図 17 参照)。
このマルウェアのSHA256ハッシュ:
31cf42b2a7c5c558f44cfc67684cc344c17d4946d3a1e0b2cecb8eb58173cb2f
このハッシュをオンラインで検索すれば、一般利用可能なオンライン サンドボックス環境での結果が少なくとも2つ見つかるでしょう。
これで、この特定Dridex感染のC2トラフィックを確認することができるようになりました。基本Webフィルタを使用し、POSTリクエストの1つを選んで、105711[.]comへの HTTP ストリームを追跡しましょう。HTTP ストリームの 1 つを選んで追跡した例を図 18 に示します。
結論
本チュートリアルでは、キー ログ ファイルを使って Wireshark の pcap ファイルから HTTPS トラフィックを復号する方法について見ていきました。なお、pcap 取得開始時時にこれらのファイルを作成していなかった場合は、取得したpcap内のHTTPSトラフィックを復号することはできません。
『Wiresharkによるパケット解析講座』シリーズの以前の講座は以下から確認してください。