Protect Against Russia-Ukraine Cyber Activity

Wireshark によるパケット解析講座12: Hancitor感染トラフィックの調査

Wireshark Tutorial

This post is also available in: English (英語)

概要

Hancitorは、MAN1、Moskalvzapoe、またはTA511と呼ばれる脅威アクターが使用するマルウェアで、Chanitorという名前でも知られています。このマルウェアは脆弱なWindowsホストへの初期アクセスを確立して追加のマルウェアを送信します。今回のWireshark講座では、最近のHancitor感染で確認したアクティビティをレビューして、Hancitorやそのフォローアップマルウェアのトラフィックを識別するヒントを提供します。本講座は、Hancitorのサンプルのほか、Cobalt StrikeFicker StealerNetSupport Manager RATネットワークpingツールSend-Safeスパムボットマルウェアについてもカバーしています。

本シリーズは、疑わしいネットワークアクティビティの調査やネットワークトラフィックのパケットキャプチャ(pcap)の確認を業務で行っておられるセキュリティ専門家を読者として想定しています。このため本稿での手順説明は読者の皆さんがWiresharkの使いかたをご存知であることを前提としています。また、本稿にて利用するWiresharkのバージョンは主に3.xとなります。

注意: 本チュートリアルは、以前の『Wireshark によるパケット解析講座1: Wiresharkの表示列をカスタマイズする』で設定したカスタマイズ済みの列表示を使います。

また、本チュートリアルで使うpcapファイルの入ったZIPアーカイブを格納しているGithubリポジトリからサンプルファイルをあらかじめ取得しておいてください。解凍用パスワードは「infected」です。

注意: 本稿のチュートリアルに利用する pcap ファイルはWindowsで動作するマルウェアを含んでいます。したがって、Windowsコンピュータを使っている場合感染リスクがあります。できるかぎり BSD系、Linux系、macOSなど、Windows環境以外の環境でpcapファイルを確認することをお勧めします。

Hancitor感染のイベントチェーン

Hancitorは電子メール経由で配布されます。これらのメールにはそれぞれdocs.google.com経由でGoogleドライブのURLにアクセスするHTTPSリンクが含まれています。これらのGoogleドライブのページは、悪意のあるWord文書を返す別のドメインにリンクしています。Word文書でマクロを有効にすると、DLLがドロップされ、感染が開始されます。

感染ホストはまずHancitorのコマンド&コントロール(C2)トラフィックを生成します。続いてFicker StealerなどのフォローアップマルウェアのURLが登場しはじめます。感染ホストがActive Directory(AD)環境の一部であれば、HancitorはCobalt Strikeも送信します。Cobalt Strikeは、ネットワークpingツールやNetSupport Manager RATベースのマルウェアなどの悪意のあるファイルに新たなアクセスチャネルを提供します。なかにはSend-Safeスパムボットマルウェアが観測されるケースもありました。こうしたケースでは感染Windowsホストはスパムボットに変えられてHancitorベースのマルスパムをさらにプッシュします。

Hancitor感染のイベントチェーンは、Google Docsリンクを含むmalspamで始まり、そこからGoogle Docsページ、Wordドキュメントをダウンロードするページ、ダウンロードされたWordドキュメント、マクロの有効化、Hancitorマルウェア、Hancitor C2トラフィック、Ficker Stealer、 Ficker Stealerデータの漏出、Cobalt Strike(AD環境内)、Cobalt Strike C2トラフィック、追加のマルウェア、およびSend-Safeスパムボットマルウェアとつづく。
図1 Hancitorのインベントチェーン

このイベントチェーンを把握しておくこと、Hancitor感染中に生成されるトラフィックを理解しやすくなります。詳細については、最近のHancitor感染に関するブログをご覧ください。

Hancitorによる感染アクティビティのPcap

最近のHancitor感染アクティビティのpcapを含む4つのパスワード付きZIPアーカイブ(パスワードは「infected」)をこちらのGitHubリポジトリから取得してください。Githubページに移動して、ZIPアーカイブのエントリをクリックし、図2と図3に示す手順でダウンロードします。

大きな黒矢印は、Hancitor感染に関するこのWireshark講座で使用される4つのZIPアーカイブの1つをダウンロードするためにクリックする場所を示しています。
図2 このチュートリアルで使用するZIPアーカイブへのリンクを含むGitHubリポジトリ
GitHubリポジトリからZIPアーカイブを選択し、大きな黒矢印がクリックしてダウンロードする場所を示しています。
図3 本講座の最初のZIPアーカイブをダウンロードしているところ

これら4つのZIPアーカイブファイルからpcapを展開するためのパスワードは「infected」です。展開すると次の5つのpcapファイルが作成されます。

  • Example-1-2021-02-17-Hancitor-infection.pcap
  • Example-2-2021-02-10-Hancitor-infection-part-1-of-2.pcap
  • Example-2-2021-02-10-Hancitor-infection-part-2-of-2.pcap
  • Example-3-2021-01-25-Hancitor-infection.pcap
  • Example-4-2021-02-02-Hancitor-infection.pcap

サンプル1:Ficker StealerとCobalt Strikeを伴うHancitor感染

Example-1-2021-02-17-Hancitor-infection.pcapを開いたら、『Wireshark によるパケット解析講座 2: 脅威インテリジェンス調査に役立つフィルタリング設定』のチュートリアルで解説した「basic」の web 用フィルタを適用します。Wireshark 3.xでのbasicフィルタは次のとおりです。

シリーズ初回の『Wireshark によるパケット解析講座 1: Wiresharkの表示列をカスタマイズする』に従ってWiresharkを設定すると、図4のような表示となります。

このスクリーンショットは、Wireshark表示カスタマイズに関する以前の講座に従ってセットアップした場合に、Wiresharkでの表示がどのようになるかを示しています。
図4 本講座1つ目のpcapをWiresharkでフィルタリングしたところ

このpcapは次の特徴を持つActive Directory環境で採取したものです。

  • LANセグメントの範囲: 10.2.17.0/24
  • ドメイン: bean-genie.com
  • ドメインコントローラ: 10.2.17.2 - Bean-Genie-DC
  • LANセグメントのゲートウェイ: 10.2.17.1
  • LANセグメントのブロードキャストアドレス: 10.2.17.255
  • 感染WindowsホストのIPアドレス: 10.2.17.101
  • 感染Windowsホストのホスト名: DESKTOP-GBW8K4N
  • 感染Windowsホストのユーザーアカウント名: frankie.muntz

Hancitorをプッシュする電子メールはdocs.google.comへのHTTPSリンクを使用します。最初のpcapでは、列表示にリストされている13番目のフレームがこのドメイン名を使用しています。以下の図5はWiresharkの列表示でdocs.google.comをハイライトしています。

赤い矩形で、pcapでdocs.google.comへのHTTPSトラフィックを示す行を示しています。
図5 最初のpcapからdocs.google.comへのHTTPSトラフィック

なお、docs.google.comは正当なドメインで、本質的に悪意のあるドメインではありません。ですがHancitorの背後にいる犯罪者はGoogleドライブを頻繁に悪用しています。以下の図6は、Hancitor用にMAN1/Moskalvzapoe/TA511が作成したこれらURLの1つからのWebページを示しています。

Hancitorの背後にいる犯罪者はGoogleドライブのURLを頻繁に悪用します。ここで示されているスクリーンショットでは、Googleドキュメントのリンクから次のテキストを含むWordドキュメントの画像が表示されます。「プレビューは無効になっています。ドキュメントをダウンロードするには、ここをクリックしてください。」
図6 HancitorのページをホストしているGoogleドライブURLの例

上記の図6の「Click here to download the document(ドキュメントをダウンロードするには、ここをクリックしてください)」のリンクから、悪意のあるWordドキュメントを提示するページが表示されます。これらのページのURLは.phpで終わっています。多くの場合、これらのURLもHTTPSを使用します。幸い、本稿では4つのサンプルすべてで、Word文書のURLとして、暗号化されていないHTTPが使用されています。おかげで今回のpcapで見つけやすくなっています。

「basic」Webフィルタを適用したら、下にスクロールしていって、.phpで終わる同じドメイン宛の2つのHTTP GETリクエストを見つけてください。以下の図7は、Wiresharkの列表示でこれら2つのHTTP GETリクエストを見たところです。これらは両方次の内容です。

赤い矢印で.phpで終わるURLを表示するpcap内の2つの行を示したところ。これらがHancitorに悪意のあるWord文書を配信する
図7 Hancitorに悪意のあるWord文書を配信する.phpで終わる2つのURL

次のWiresharkフィルタを使うとこれら2つのURLがさらにすばやく見つかります。

以下の図8は、このフィルタの結果を示しています。

この画像は、Wiresharkフィルタを使用して悪意のあるURLを特定した結果を示しています。
図8 この特定の2つのURLをフィルタリングしたところ

列表示でslickness.php宛のHTTP GETリクエストどちらか1つを選んで右クリックし、コンテキストメニューから [Follow(追跡)]、[HTTP Stream(HTTPストリーム)] の順にクリックしてHTTPストリームを追跡します(図9参照)。

大きな黒い矢印は、Hancitorの悪意のあるWord文書がホストされているsomdeeppalace[.]comへのトラフィックのHTTPストリームを追跡するために行う選択を示しています。
図9 somdeeppalace[.]comへのトラフィックのHTTPストリームを追跡する
HTTPストリームのウィンドウで、2組目のHTTPリクエストヘッダとレスポンスヘッダの下までスクロールしていって、最初の<body>タグの後のHTMLスクリプトを調べます。saveAsのスクリプト関数のすぐ後ろに、長いbase64テキストが見つかるはずです。このテキストの始まりの部分を下の図10に示します。

赤い矢印は、saveAsのスクリプト関数と、悪意のあるWord文書のbase64テキストがどこにあるかを示しています。
図10 saveAs関数とそれに続くbase64テキストを示すHTTPストリーム

このHTTPストリームを最後までスクロールダウンしてください。このbase64テキストから作成される0217_2857682888090.doc という名前のファイルを提示し、保存させるスクリプトが見つかるはずです。これが悪意のあるWord文書となります。また、閉じ</body>タグの後ろに追加されているスクリプトは、Webページをリフレッシュして別のURLにリダイレクトします。詳細は図11を参照してください。

赤い矢印は、Webページがbase64テキストからの悪意のあるWord文書をダウンロードできる場所を示しています。またダウンロード用のファイルを提示後、別のURLにリダイレクトするスクリプト行も赤で強調表示されています。
図11 悪意のあるWord文書のファイル名を提示しブラウザを別のURLに更新するスクリプト

この悪意のあるWord文書のコピーは、pcapからWebページをエクスポートし、Webブラウザで開くと取得できます。これはマルウェアですので、できればコントロールされたラボ環境などのWindows環境以外でやることをお勧めします。

これには、図12に示す手順でメニューを開いてWebページをエクスポートしてください。

[File(ファイル)]、[Export Objects(オブジェクトをエクスポート)]、[HTTP] の順にクリックします。

大きな黒矢印は、pcapからHTTPオブジェクトをエクスポートするためにクリックする場所を示しています。
図12 Wiresharkを使用してpcapからHTTPオブジェクトをエクスポートする

somdeeppalace[.]comからのslickness.phpの2つ目のエントリを確認します。これは534kBの大きさがあります(図13参照)。見つけたら、.htmまたは.htmlという拡張子をもつファイル名でWebページとして保存してください。

大きな黒い矢印は、slickness.phpの2つ目のエントリの場所と、それをWebページとして保存する方法を示しています。
図13 HTTPオブジェクトのリストからsickness.phpの2番目のエントリを保存しているところ

保存したHTMLページをWebブラウザで開いてください。悪意のあるWord文書を保存するオプションを含むポップアップメニューが表示されるはずです。また、Webブラウザが文字列cashplusで終わるURLに更新されていることも確認できます。詳細については、以下の図14を参照してください。

赤い矢印で、WebブラウザがリダイレクトされたことがはっきりわかるURLと、悪意のあるWord文書の保存を提案している様子を示しています。この悪意のあるWord文書は検証中にHancitorのC2トラフィックを引き起こしました。
図14 保存したHTMLページをWebブラウザで表示したところ

この悪意のあるWord文書により、その後2分以下でpcapにHancitorのC2トラフィックが現れはじめました。

HancitorのC2トラフィックはどのようなものか

Hancitorはまず、感染Windowsホストからapi.ipify.orgへのIPアドレスチェックを行います。その後、C2トラフィックが発生します。HancitorのC2トラフィックは末尾が/8/forum.phpで終わるHTTP POST URLで構成されています。

1点注意していただきたいのが、api.ipify.orgは指標ではあるものの、これ自体は本質的に悪意のあるものではないということです。

「basic」Webフィルタを適用して下にスクロールしていき、api.ipify.orgへのIPアドレスのチェックの後、HancitorのC2に対する最初のHTTP POSTリクエストがthavelede[.]ruに対して出されているところまで下りていってください。以下の図15は、これら2つの行を示しています。

赤い矢印は、Wireshark列のどこにIPアドレスチェックが表示されているかと、HancitorのC2トラフィックが表示されるかとを示しています。
図15 Wireshark列表示でIPアドレスのチェックに続いて起こるHancitorのC2トラフィックを表示したところ

2020年11月以降、HancitorのC2トラフィックのURLは常に/8/forum.phpの形で終わっています。ですので、WiresharkでHancitor固有のトラフィックをチェックする最も簡単な方法は、次のフィルタを使用することです。

上記のWiresharkフィルタを実行すると、次の図16が示すように、HancitorのIPアドレスチェックとそれに続くHancitor C2トラフィックのHTTP POSTリクエストが表示されるはずです。

このスクリーンショットは、Hancitorの既知の指標を使ってHancitor固有のトラフィックを検索するフィルタを適用した後、Wiresharkの列表示がどのように見えるかを示しています。
図16 WiresharkでのHancitor固有のトラフィックをフィルタリング
  • api.ipify.org - GET /
  • thavelde[.]ru - POST /8/forum.php
  • zinsubtal[.]ru - POST /8/forum.php

この結果には、Ficker Stealerマルウェアが生成した次のHTTP GETリクエストも含まれます。

  • api.ipify.org - GET /?format=xml

Ficker Stealerのトラフィックについては後で説明しますので、まずはHancitorがフォローアップマルウェアを送信する方法を調べてみましょう。

Hancitorは特定のドメインを使って、フォローアップマルウェアとしてFicker StealerやCobalt Strikeを送信します。このドメインはHancitorがアクティブになときは毎日変更されますが、フォローアップマルウェアのための同一ドメインへのHTTP GETリクエストが3つ表示されるはずです。これらのURLのうちの1つは.exeで終わるものでこれがFicker Stealer用です。2つのURLは.binで終わるものでCobalt Strike用です。

次のWiresharkフィルタを使用して、Ficker StealerとCobalt StrikeのURLを検索します。

結果を図17に示します。

このスクリーンショットは、フィルタを使用してFicker StealerとCobalt StrikeのURLを検索した後、Wiresharkの列表示がどのように見えるかを示しています。
図17 Ficker StealerとCobalt Strikeを送信するHancitorのためのフィルタを適用したところ

上記の図17に示すように、Hancitorからのフォローアップマルウェアをフィルタリングすると、最初のpcapから次のトラフィックが明らかになるでしょう。

  • belcineloweek[.]ru - GET /6sufiuerfdvc.exe
  • belcineloweek[.]ru - GET /1602s.bin
  • belcineloweek[.]ru - GET /1602s.bin

最初のHTTP GETリクエストは、Ficker StealerのEXEファイルを返しています。次の2つのHTTP GETリクエストは、被害者をCobalt Strikeに感染させるために使用するエンコード済みデータを返しています。

Ficker Stealerの感染トラフィックはどのようなものか

Ficker Stealerの場合、1回につき数週間は同じWindows実行可能ファイルが使われます。2021-01-20から直近の2021-03-04までのFicker StealerのSHA256ハッシュ値は次のようになっています。

94e60de577c84625da69f785ffe7e24c889bfa6923dc7b017c21e8a313e4e8e1

Ficker Stealerの上記Windows実行可能ファイルはapi.ipifiy.org/?format=xmlに対するIPアドレスのチェックを引き起こしますが、これ自体は本質的に悪意のあるものではありません。次にFicker Stealerはsweyblidian[.]com に対するDNSクエリを生成して80/tcp経由でHTTPではないトラフィックをそのドメインに送信します。このトラフィックは感染Windowsホストから窃取されたデータで構成されています。

sweyblidian[.]comに使用されたIPアドレスを見つけるにはまず次のWiresharkフィルタを使用して関連するDNSクエリを検索します。

このクエリに対するAnswerはIPv4アドレス185.100.65[.]29です(図18参照)。

赤い矢印は、sweyblidian[.]comに使用されるIPアドレスを示しています
図18 sweyblidian[.]comに使用されているIPアドレスを検索
次のWiresharkフィルタを使用して、そのIPアドレスに対するTCPストリームをどれでもよいので検索します。

この結果、以下の図19に示すように、2つのTCPストリームのための3つのTCP SYNセグメントが表示されるはずです(TCP SYNセグメントの1つはTCP Retransmission)。

このスクリーンショットは、sweyblidian[.]comに使用されているIPアドレスへのTCPストリームをフィルタリングした後のWireshark列表示がどのように表示されるかを示しています。
図19 sweyblidian[.]comのIPアドレスへの2つのTCPストリームのTCP SYNセグメント
TCPの送信元ポート番号が49807のセグメントを選び、右クリックしてコンテキストメニューから [Follow(追跡)]、[TCP Stream(TCPストリーム)] をクリックしてTCPストリームを追跡します。これにより、約1.16MBのデータが表示されます。以下の図20に示すように、その大部分はエンコードされているか、難読化されているように見えます。

このスクリーンショットは、TCPストリームからのデータの大部分がエンコードされているか難読化されているように見えることを示しています。
図20 Ficker Stealerにデータ漏出の始まり位置を示したTCPストリーム

データを漏出するとFicker Stealerは鳴りを潜めてそれ以降は動きが見えなくなります。感染コンピュータがスタンドアロンのWindowsホストの場合、この時点で、HancitorのC2トラフィックのみを目にするようになります。ただし感染コンピュータがAD環境の一部である場合、Cobalt Strikeも観測することになるはずです。

次のWiresharkフィルタを使用し、HancitorによるCobalt Strikeの最初のリクエストを見てみましょう。

これにより、次の行が返されます。

  • belcineloweek[.]ru - GET /1602s.bin
  • belcineloweek[.]ru - GET /1602s.bin

これらHTTP GETリクエストのいずれかについて、先ほどと同じ手順でTCPストリームを追跡してください。このTCPストリームには、belcineloweek[.]ruとの間のHTTP GETリクエストとレスポンスが3つすべて含まれています。したがって、Ficker Stealerの実行ファイルを表す大量のデータを一番下あたりまでスクロールダウンする必要があります。TCPストリームの終わり近くに、1602s.binへの同一のHTTP GETリクエストが2つ見つかるはずです。どちらのリクエストも同じ682バイトのデータを返しています(図21参照)。このデータが被害者をCobalt Strikeに感染させるために使用されます。

このスクリーンショットは、AD環境でHancitor感染被害者をCobalt Strikeに感染させるために使用される682バイトのデータを示しています。
図21 Cobalt Strike用にbelcineloweek[.]ruから返された682バイト分のデータをあらわすTCPストリーム

Cobalt Strikeのトラフィックはどのようなものか

Cobalt StrikeのトラフィックはHTTPの場合もあればHTTPSの場合もあります。このpcapでは、HancitorによるCobalt StrikeのHTTP GETリクエストのURLには文字「s」が使われています。1602s.binへのリクエストは、この感染のCobalt StrikeがHTTPSトラフィックを使用することを示しています。

ここでは実際、そのとおりになっていますので見てみましょう。Wiresharkに戻り「basic」Webフィルタを再度適用してから下へスクロールしていきます。すると、192.99.250[.]2に対する宛先ポート443/tcpのフレームが複数表示されるはずです(図22参照、フレーム番号4348)。これがCobalt Strikeのトラフィックです。このIPアドレスに対するCobalt Strikeトラフィックにはドメインが関連付けられていないので、列表示のホスト名は空白になります。

赤い矢印は、Cobalt Strikeによって引き起こされた感染Windowsホストからのトラフィックに関連するWireshark列表示の行を示しています。
図22 Cobalt Strikeが引き起こした感染Windowsホストからのトラフィック

Cobalt StrikeのHTTPSトラフィックに含まれる証明書発行者のデータ形式には問題があります。なぜなら国、地域、組織などすべての識別用フィールドが空だからです。Cobalt StrikeのHTTPSトラフィックの証明書データをフィルタリングし、フレームの詳細を展開するとこれを確認できます。

まず、次のWiresharkフィルタを使ってCobalt StrikeトラフィックのIPアドレスからの証明書データを検索します。

これにより、列表示に2つのフレームが表示されます。証明書発行者データのフィールドが見つかるまで、これらのフレームのいずれかでフレームの詳細を展開していきます。これらのフィールドは空白になっているはずです。以下図23にその例を示します。

赤い矢印と矩形でハイライトしたのはCobalt StrikeによるHTTPSトラフィックの空白になった証明書発行者データです。
図23 Cobalt Strikeトラフィックの証明書発行者データ

このpcapの残りの部分からは、HancitorのC2のHTTP GETリクエストとCobalt StrikeのHTTPSトラフィックが確認できます。HancitorのC2トラフィックは約2分ごとに発生します。Cobalt StrikeのHTTPSトラフィックは、ほぼ毎秒発生します。

サンプル2 パート1: Ficker StealerとCobalt Strikeを伴うHancitor感染

Example-2-2021-02-10-Hancitor-infection-part-1-of-2.pcapをWiresharkで開いて、「basic」Webフィルタを適用します(図24参照)。

このスクリーンショットは、サンプル2 パート1のpcapを開き、「basic」Webフィルタを適用した後のWireshark列表示がどのように見えるかを示しています。Googleドキュメントのリンクを青でハイライト表示しています。
図24 Wiresharkでサンプル2パート1のpcapのトラフィックを開いて「basic」Webフィルタでフィルタリングした内容

このpcapは次の特徴を持つActive Directory環境で採取したものです。

  • LANセグメントの範囲: 10.2.17.0/24
  • ドメイン: pizzawithapples.food
  • ドメインコントローラ: 10.2.10.10 - Apples-DC
  • LANセグメントのゲートウェイ: 10.2.17.1
  • LANセグメントのブロードキャストアドレス: 10.2.10.255
  • 感染WindowsホストのIPアドレス: 10.2.10.101
  • 感染Windowsホストのホスト名: DESKTOP-TRH50EJ
  • 感染Windowsホストのユーザーアカウント名: dave.thomas

上の図24は、docs.google.comへのリンクとそれに続くb2b.ebike-your-life[.]com/commemorative.phpへのHTTP GETリクエストを表示しています。最初のサンプルで行ったように、この2つ目のサンプルからb2b.ebike-your-life[.]comのHTMLページをエクスポートできます。 エクスポートしたら、Webブラウザで開いて、悪意のあるWord文書を取得します。

Word文書のSHA256ハッシュ値は793d134cdb4bcba47e1f678d052c4d7747b93ea4199714efb8b614321b58dca7で、ファイル名は0210_1723194332604.docになっているはずです。

最初のサンプルで行ったように次のWiresharkフィルタでHancitorのC2アクティビティを見つけてください。

これによりHancitorとFickerStealerによるIPアドレスのチェックとHancitorのC2トラフィックがまとめて返ります(以下のリストと図25参照)。

  • api.ipify.org - GET /
  • anumessensan[.]ru - POST /8/forum.php
  • api.ipify.org - GET /?format=xml
このスクリーンショットは、HancitorとFicker StealerによるIPアドレスのチェックとHancitorのC2トラフィックのフィルタリング結果を示しています。
図25 IPアドレスのチェックとHancitorのC2トラフィック

次のWiresharkフィルタでHancitorが送信したフォローアップマルウェアをフィルタリングします。

これにより、HancitorがCobalt StrikeとFicker Stealer用のフォローアップマルウェアを送信している様子が明らかになります(以下のリストと図26参照)。

  • backupez[.]com - GET /0902.bin
  • backupez[.]com - GET /0902s.bin
  • backupez[.]com - GET /6yudfgh.exe
このスクリーンショットは、Hancitorが送信したフォローアップマルウェアをWiresharkでフィルタリングした結果の列表示です。
図26 HancitorがCobalt StrikeとFicker Stealerのフォローアップマルウェアを送信している

今回はCobalt StrikeのGETリクエストの1つはURLに「s」を含み、もう1つは「s」を含んでいないので、Cobalt Strikeによって発生したHTTPトラフィックとHTTPSトラフィックの両方が表示されています。

「basic」フィルタを再度適用して下にスクロールしていき、backupez[.]comへのトラフィック後に発生するHTTPリクエストのタイプを確認します。この結果、1080/tcpを介したHTTPトラフィックと、4443/tcpを介したHTTPSトラフィックが表示されるはずです。

Wiresharkの設定によっては、1080/tcpを介したHTTPトラフィックが表示されないことがありますので、その場合は設定を変更して表示させてやる必要があります。そのためには、Wiresharkのメニューで[Analyze(分析)]、[Decode As (としてデコード)]の順にクリックします(図27参照)。[Decode as]ウィンドウが表示されます。

大きな黒矢印は、[Decode as]ウィンドウを表示するためにクリックすべき場所を示しています。
図27 [Decode As]ウィンドウへのパス
[Decode As]ウィンドウが表示されたら、下の図28に示すように、1080/tcpをHTTPとしてデコードするための新しいエントリを作成します。

大きな黒い矢印は、1080/tcpをHTTPとしてデコードするために新しいエントリを作成するさいにクリックすべき場所を示しています。
図28 [Decode As]ウィンドウで1080/tcpをHTTPとしてデコードするための新しいエントリを作成
新しいエントリを作成したら、[OK]ボタンをクリックするか、[Save]ボタンをクリックします。[Save]ボタンは文字通りエントリを保存するので、Wiresharkをいったん閉じて開いても機能します。[OK]ボタンは、現在のWiresharkセッションが開いている間にかぎり、そのデコードを適用します。

ここでは[Save]ボタンをクリックする必要があります。

エントリを保存後、Wiresharkの列表示に戻り、「basic」のWebフィルタを使用します。下にスクロールすると、下の図29で強調表示したように、Cobalt StrikeのHTTPトラフィックとHTTPSトラフィックの両方が表示されます。

赤い矢印と矩形でハイライトしたのは、2番目のサンプルのCobalt Strikeによって引き起こされたトラフィックです。
図29 2番目のサンプルのCobalt Strikeによって引き起こされたトラフィック

Cobalt Strikeによって発生するトラフィックは次の通りです(上記図29参照)。

  • 104.160.190[.]114:8080 - GET /WWFh
  • 104.160.190[.]114:8080 - GET /fwlink
  • 104.160.190[.]114 port 4443 - HTTPS traffic

WWFhで終わる最初のHTTP GETリクエストは、エンコードされた208,473バイトのバイナリを返しています。これがおそらくはCobalt Strike用のWindowsバイナリにデコードされるものでしょう。このHTTPリクエストのTCPストリームを追跡すると以下の図30に示す情報が表示されます。

ここで示されている情報は、2番目のサンプルで見つかった最初のHTTP GETリクエスト(WWFhで終わるもの)のTCPストリームを追跡することで取得できます。
図30 104.160.190[.]114:8080への最初のHTTP GETリクエストのTCPストリーム
この後に続くfwlinkを要求する104.160.190[.]114:8080へのHTTPトラフィックがCobalt StrikeのC2トラフィックです。このトラフィックはデータを返すことがありますが、その場合はエンコードされたデータが返ります。ほとんどの場合、0バイトのコンテンツが返されます。fwlinkを要求する104.160.190[.]114:8080への最初のHTTPリクエストは、以下の図31に示すように、48バイトのエンコードされたデータを返していました。

fwlinkを要求する104.160.190[.]114:8080への最初のHTTPリクエストは、以下の図31に示すように、48バイトのエンコードされたデータを返しました。
図31 Cobalt StrikeのC2トラフィックの最初のHTTPリクエストは48バイトのデータを返す
これらCobalt Strike C2用のHTTPSトラフィックは、ほぼ毎秒ごとに発生します。Cobalt Strike C2用のHTTPSトラフィックも同様に頻繁に発生し、4443/tcpを介した104.160.190[.]114 へのトラフィックがほぼ1秒に1回表れます。

次に見ていくpcapは、この2つ目のサンプルで見られた感染の後半部分にあたります。このなかではSend-Safeスパムボットマルウェアの指標が確認できます。

サンプル2 パート2: HancitorのC2、Cobalt StrikeのC2、Send-Safe スパムボットマルウェア

Example-2-2021-02-10-Hancitor-infection-part-2-of-2.pcapをWiresharkで開いて、「basic」Webフィルタを適用します(図32参照)。

このスクリーンショットは、2つ目のサンプルのパート2からのトラフィックに「basic」のWebフィルタを適用した後のWireshark列表示がどのように見えるかを示しています。
図32 Wiresharkでサンプル2パート2のpcapのトラフィックを開いて「basic」Webフィルタでフィルタリングした内容

このpcapは、ひとつ前で見たpcapの感染の後半に発生したトラフィックです。ときおり、同一秒のなかで、Cobalt StrikeC2トラフィック用のHTTP GETリクエストを最大3つか4つ確認できます。

ただしこのpcapは、Hancitorが別のWindows実行可能ファイルを送信したことと、その実行可能ファイルがSend-Safeベースのスパムボットマルウェアであることを示しています。

このWindows実行可能ファイルを見つけるには、次のWiresharkフィルタを使用します。

この結果、backupez[.]comへの別のHTTP GETリクエストが表示されます。これは、このサンプルのパート1でフォローアップマルウェアをプッシュするためにHancitorが使用しているドメインです。このURLは47.exeで終わります。以下の図33の結果を参照してください。

.exeファイルを識別するように設計されたWiresharkフィルターを使用して、ここに示すSend-SafeスパムボットマルウェアのWindows実行可能ファイルを取得します。
図33 HancitorがSend-SafeスパムボットマルウェアのWindows実行可能ファイルを取得

このファイルはpcapからエクスポートできます。エクスポートするには、[File (ファイル)]メニュー、[Export Objects (オブジェクトのエクスポート)]、[HTTP]の順にクリックします。backupez[.]comからの47.exeの項目を選んでください(図34参照)。

赤い矢印は、Send-SafeスパムボットマルウェアのWindows実行可能ファイルをpcapからエクスポートするために必要な手順を示しています。
図34 Send-SafeスパムボットのWindows実行可能ファイルをpcapからエクスポートする

47.exeのSHA256ハッシュ値は次の通りです。

51ca66a8ac7f4e072b39ef886d7d414d6c6868d0d67a46150835297e65493dc6

Send-Safeは商用プログラムとしてsend-safe[.]comというWebサイトで販売されていました(現在はすでに利用できません)。その宣伝文句は「...a bulk-emailing program that allows you to send email from your own computer, or a remote computer with or without the use of proxies.(ローカルコンピュータないしリモートコンピュータからプロキシの有無を問わず一括でメールを送信できるプログラム)」というものでした。

このプログラムは、感染したWindowsコンピュータをスパムボットホストに変えるマルウェアとして、さまざまな脅威アクターに利用されています。

Send-Safeスパムボットのトラフィックはどのようなものか

検証では、感染Windowsホストは以下のトラフィックを生成しました。

  • 31.44.184[.]47への50025/tcp経由のHTTPSトラフィック
  • 31.44.184[.]47への50025/udp経由のトラフィック
  • Hancitorをプッシュするマルスパムを送信するSMTPトラフィック

Send-SafeのUDPトラフィックを見つけるには、Wiresharkフィルタに udp.port eq 50026 を使います。結果は次の図35のようになります。

このスクリーンショットは、Send-SafeのUDPトラフィックを見つけるためにフィルタ処理した後のWiresharkの列表示がどのようになるかを示しています。
図35 Send-Safeベースのスパムボットマルウェアによって引き起こされるUDPトラフィック

Send-SafeのSMTPトラフィックとHTTPSトラフィックを表示するには、次のWiresharkフィルタを使用します。

結果は図36のようになります。

これは、Hancitor感染後のSend-SafeのSMTPトラフィックとHTTPSトラフィックのフィルタリング結果の例を示しています。
図36 Send-Safeベースのマルウェアによって引き起こされるHTTPSおよびスパムボットトラフィック

Send-Safeによって引き起こされたTCPポート50025経由のHTTPSトラフィックは、証明書発行者データのorganizationNamecommonNameSend-Safeを使用しています(図37参照)。

Send-Safeによって引き起こされたTCPポート50025経由のHTTPSトラフィックは、証明書発行者データのorganizationNameとcommonNameにSend-Safeを使用しています。
図37 Send-Safeマルウェアによって引き起こされたHTTPSトラフィックで見られるSend-Safe特有の証明書発行者データ

このpcapのSMTPトラフィックは暗号化されていないので、Wiresharkでメールを抽出することができます。そのためには、Wiresharkのメニューで[File (ファイル)]、[Export Objects (オブジェクトをエクスポート)]、[IMF] の順にクリックします(図38参照)。

赤い矢印は、このサンプルではSend-Safeスパムボットマルウェアによって引き起こされたマルスパムの抽出のために行う選択を示しています。
図38 Send-Safeスパムボットマルウェアによって引き起こされたメールのエクスポート

このpcapにはエクスポート可能なメールが167通含まれています。このSend-Safeに感染したWindowsホストからは、平均で毎秒2-3通のメッセージがプッシュされていました。

以下図39は、エクスポートしたHancitorスパムのうちの1通をメールクライアントのThunderbirdで見たときの様子です。この特定Hancitorスパム攻撃波のテンプレートは、ある有名銀行を偽装していました。

pcapからエクスポートされたHancitorメールは有名銀行を偽装するように設計されていました。
図39 pcapからエクスポートされたHancitorメールの例

サンプル3: Ficker Stealer、Cobalt Strike、ネットワークpingツールを伴うHancitor感染

Example-3-2021-01-25-Hancitor-infection.pcapをWiresharkで開いて、「basic」Webフィルタを適用します(図40参照)。

このスクリーンショットは、サンプル3のトラフィックを開き、「basic」Webフィルタを適用した後のWireshark列表示がどのように見えるかを示しています。
図40 Wiresharkで4つ目のpcapのトラフィックを開いて「basic」Webフィルタでフィルタリングした内容

このpcapは次の特徴を持つActive Directory環境で採取したものです。

  • LANセグメントの範囲: 10.1.25.0/24
  • ドメイン: permafrostie.com
  • ドメインコントローラ: 10.1.25.2 - Permafrostie-DC
  • LANセグメントのゲートウェイ: 10.1.25.1
  • LANセグメントのブロードキャストアドレス: 10.1.25.255
  • 感染WindowsホストのIPアドレス: 10.1.25.101
  • 感染Windowsホストのホスト名: DESKTOP-GAL3OV5
  • 感染Windowsホストのユーザーアカウント名: barry.paulsen

最初のWord文書を配信したページはwww.nuicala.inspia[.]net/mars.phpです。前の2つのサンプルで行ったように、Webページをエクスポートしてブラウザで開くと、このHancitor感染を開始するために使用された悪意のあるWord文書を取得できます。

エクスポートした悪意のあるWordドキュメントのSHA256ハッシュ値とファイル名は次のとおりです。

8922dbb1e7f157c62fe64d03278757d78d136eb94d00ac2df101789d602f1224 0125_206410993.doc

最初の2つのサンプルの手法に基づいて、このHancitor感染から次の情報を見つけることができます。

Hancitorのトラフィック:

  • port 80 - api.ipify.org - GET /
  • 83.220.169[.]45 port 80 - wasintodese[.]ru - POST /8/forum.php

Cobalt Strikeのフォローアップマルウェア:

  • 8.209.78[.]68 port 80 - drivewaysnowservice[.]com - GET /2101.bin
  • 8.209.78[.]68 port 80 - drivewaysnowservice[.]com - GET /2101s.bin

Ficker Stealerのフォローアップマルウェア:

  • 8.209.78[.]68 port 80 - drivewaysnowservice[.]com - GET /6gfbd5ws.exe

Cobalt Strikeのトラフィック:

  • 23.106.80[.]14 port 1080 - 23.106.80[.]14:1080 - GET /JdHf
  • 23.106.80[.]14 port 1080 - 23.106.80[.]14:1080 - GET /match
  • 23.106.80[.]14 port 1080 - 23.106.80[.]14:1080 - POST /submit.php?id=2612103345
  • 23.106.80[.]14 port 4443 - HTTPS traffic

Ficker Stealerのトラフィック:

  • port 80 - api.ipify.org - GET /?format=xml
  • 185.100.65[.]29 port 80 - sweyblidian[.]com - TCP traffic

1点言及しておくと、今回の講座のサンプルのFicker Stealerはすべて同一バイナリなので、このマルウェアによる感染後のトラフィックは同じ内容のはずです。Cobalt Strikeの場合、/submit.php?id=を含むHTTP POSTリクエストは、感染Windowsホストごとに一意の識別番号を振られています。

/submit.php?id=を含むHTTP POSTリクエストが Cobalt Strikeから出ていたら追加のマルウェアの指標に注意してください。

Cobalt Strikeを介して送信されるマルウェアは、エンコードされたバイナリとして表示され、これが被害端末上でデコードされます。ですのでpcap内には実際のマルウェアのバイナリは見つかりません。そのかわり、Cobalt Strikeを介して送信されたフォローアップマルウェアは、感染後トラフィックで識別されます。

今回の場合、感染後トラフィックとしてICMPスキャンが確認できますが、これはCobalt Strikeを介してネットワークpingツールが送信された指標となります。pcapにWiresharkフィルタのicmpを適用してください。列表示は下の図41のようになるはずです。

このスクリーンショットは、サンプルのpcapにWiresharkフィルタのicmpを適用した後、Cobalt Strikeを介して送信されたネットワークpingツールからのICMPトラフィックがどのように見えるかの例を示しています。
図41 Cobalt Strike経由で送信されたネットワークpingツールからのICMPトラフィック

Hancitorに関する最近のブログでも説明しましたが、感染Windowsホストから復元したこのネットワークpingツールのサンプルは、内部のルーティング不能なIPv4アドレス空間を宛先として1,700万個を超えるIPアドレスにpingを実行することから、約1.5GBのICMPトラフィックを生成します。

私たちの検証ではこれらのネットワークpingツールは次のアドレス空間を対象としていました。

  • 192.168.0.0 から 192.168.254.254
  • 172.16.0.0 から 172.31.254.254
  • 10.0.0.0 から 10.254.254.254

これだけpingトラフィックがあるとWiresharkでの表示は非常に遅くなります。Hancitorの3番目のサンプルのpcapには、192.168.0.0/16へのpingトラフィックが含まれています。また、キャプチャを停止する前の172.16.0.0/12アドレス空間へのpingトラフィックの一部も含んでいます。

サンプル4: Ficker Stealer、Cobalt Strike、NetSupport Manager RATを伴うHancitor感染

Example-4-2021-02-02-Hancitor-infection.pcapをWiresharkで開いて、「basic」Webフィルタを適用します(図42参照)。

このスクリーンショットは、サンプル4のトラフィックを開き、「basic」Webフィルタを適用した後のWireshark列表示がどのように見えるかを示しています。
図42 Wiresharkで5つ目のpcapのトラフィックを開いて「basic」Webフィルタでフィルタリングした内容

このpcapは次の特徴を持つActive Directory環境で採取したものです。

  • LANセグメントの範囲: 10.2.2.0/24
  • ドメイン: sillybobcat.com
  • ドメインコントローラ: 10.2.2.2 - Cats-DC
  • LANセグメントのゲートウェイ: 10.2.2.1
  • LANセグメントのブロードキャストアドレス: 10.2.2.255
  • 感染WindowsホストのIPアドレス: 10.2.2.101
  • 感染Windowsホストのホスト名: DESKTOP-NDGEE4D
  • 感染Windowsホストのユーザーアカウント名: baxter.murdoch

最初のWord文書を配信したページはpremierpt.co[.]uk/footage.phpです。前のサンプルで行ったように、Webページをエクスポートしてブラウザで開くと、このHancitor感染を開始するために使用された悪意のあるWord文書を取得できます。

エクスポートした悪意のあるWordドキュメントのSHA256ハッシュ値とファイル名は次のとおりです。

b60431e0fe5bf2b5c7cd5e01add62d24cd6ad2c99eb6a23fb5a2967d812cbf08 0202_10846666250132.doc

先のサンプルの手法に基づいて、このHancitor感染から次の情報を見つけることができます。

Hancitorのトラフィック:

  • port 80 - api.ipify.org - GET /
  • 45.9.191[.]107 port 80 - knorshand[.]ru - POST /8/forum.php

Cobalt Strikeのフォローアップマルウェア:

  • 8.209.78[.]68 port 80 - bobcatofredding[.]com - GET /0102.bin
  • 8.209.78[.]68 port 80 - bobcatofredding[.]com - GET /0102s.bin

Ficker Stealerのフォローアップマルウェア:

  • 8.209.78[.]68 port 80 - bobcatofredding[.]com - GET /6lavfdk.exe

Cobalt Strikeのトラフィック:

  • 192.254.79[.]71 port 8080 - 23.106.80[.]14:1080 - GET /EbHm
  • 192.254.79[.]71 port 8080 - 23.106.80[.]14:1080 - GET /ptj
  • 192.254.79[.]71 port 8080 - 23.106.80[.]14:1080 - POST /submit.php?id=242569267
  • 192.254.79[.]71 port 443 - HTTPS traffic

Ficker Stealerのトラフィック:

  • port 80 - api.ipify.org - GET /?format=xml
  • 185.100.65[.]29 port 80 - sweyblidian[.]com - TCP traffic

先のサンプルでも説明しましたが、/submit.php?id=を含むHTTP POSTリクエストが Cobalt Strikeから出ていたら追加のマルウェアの指標に注意してください。今回も先程と同じでpcapにはマルウェアのバイナリが見つからないので、フォローアップマルウェアは感染後のトラフィックから特定する必要があります。

ここではNetSupport Manager RATマルウェアの指標が見つかります。

このRATは、最初にドメイン geo.netsupportsoftware[.]com へのIPアドレスのチェックを行います。次にHTTPリクエストヘッダUser-Agent文字列の一部としてNetSupportManagerのトラフィックを生成します。

次のWireshark表示フィルタを使ってこのトラフィックを検索します。

この結果は以下の図43のようになるはずです。

これは、NetSupport Manager RATによって生成されるトラフィックが指定された「NetSupport Manager」フィルタを適用後にWireshark上でどのように見えるかを示しています。
図43 NetSupport Manager RATが生成したトラフィック

上記の図43に示されているトラフィックは次のとおりです。

  • 62.172.138[.]35 port 80 - geo.netsupportsoftware[.]com - GET /location/loca.asp
  • 46.17.106[.]230 port 3543 - 46.17.106[.]230 - POST hxxp://46.17.106[.]230/fakeurl.htm

HTTP POSTリクエストのTCPストリームを追跡してNetSupport ManagerのC2トラフィックがどのように見えるかを確認します。この結果は以下の図44のようになるはずです。

このスクリーンショットは、NetSupport Manager RATのC2トラフィックのTCPストリームのデータの例を示しています。
図44 NetSupport Manager RATのC2トラフィックのTCPストリーム

1点注意していただきたいのは、本講座ではHancitor感染後のCobalt Strikeからのフォローアップトラフィックのサンプルは2つしか扱いませんでしたが、Cobalt StrikeではネットワークpingツールやNetSupport Manager RATなど以外にもさまざまな種類のマルウェアを送信できます。

したがってCobalt StrikeによるHancitor感染のアクティビティを調べるのであれば、他の種類のマルウェア指標も合わせて検索することをお勧めします。

結論

今回は感染トラフィックを含むpcapからHancitorのアクティビティとそのフォローアップマルウェアを特定する方法について確認しました。また、最近の4つのサンプルから5つのpcapを確認し、ネットワークトラフィックから一貫したパターンを見つけました。これらのパターンは同マルウェアについてかなり特徴的なものなので、これらを使えばネットワーク内のHancitorのアクティビティや関連マルウェアを識別することができます。

疑わしいネットワークアクティビティをセキュリティ専門家が確認するさいにこうした知識があれば、Hancitorをよりうまく検出・捕捉できるようになります。

『Wiresharkによるパケット解析講座』シリーズの以前の講座は以下から確認してください。