This post is also available in: English (英語)
概要
本シリーズは、疑わしいネットワークアクティビティの調査やネットワークトラフィックのパケットキャプチャ(pcap)の確認を業務で行っておられるセキュリティ専門家を読者として想定しています。このため本稿での手順説明は読者の皆さんがWiresharkの使いかたをご存知であることを前提としています。また、本稿にて利用するWiresharkのバージョンは主に3.xとなります。
Dridexはバンキング型トロイの木馬とも呼ばれることもある、情報窃取型マルウェアファミリの一種です。このマルウェアは2014年に初めて出現し、それ以降、アクティブな状態が続いています。
今回のパケット解析講座では、Dridexのアクティビティを確認し、トラフィック分析から本ファミリを特定するのに役立つヒントを提供していきます。
注意: 本チュートリアルは、以前の『Wireshark によるパケット解析講座1: Wiresharkの表示列をカスタマイズする』で設定したカスタマイズ済みの列表示を使います。
また、本チュートリアルで使うpcapファイルの入ったZIPアーカイブを格納しているGithubリポジトリからサンプルファイルをあらかじめ取得しておいてください。解凍用パスワードは「infected」です。
注意: 本稿のチュートリアルに利用するpcapファイルはWindowsで動作するマルウェアを含んでいます。したがって、Windowsコンピュータを使っている場合感染リスクがあります。できるかぎり BSD系、Linux系、macOSなど、Windows環境以外の環境でpcapを確認することをお勧めします。
Dridexの配布
Dridexのネットワークトラフィックを理解するには、感染につながる一連のイベントを理解する必要があります。Dridexはたいてい悪意のあるスパム(マルスパム)を介して配布されており、このマルスパムの波は、少なくとも週に2〜3回は発生するのが普通です。Dridexを配布する電子メールにはMicrosoft Officeドキュメントが添付されていることもありますし、悪意のあるファイルをダウンロードするリンクが含まれていることもあります。図1〜4に最近のサンプルをいくつか示します。
最初の悪意のあるファイルは、悪意のあるマクロを含むMicrosoft Officeドキュメントの場合もあれば、ある種のドキュメントを装ったWindows実行可能ファイル(EXE)の場合もあります。いずれにせよ、この最初のファイルをクリックすることで感染にいたります。ここでは初期ファイルがDridexインストーラを取得してきますが、初期ファイル自体がDridexインストーラであることもあります。Dridexインストーラは、暗号化されたコマンド&コントロール(C2)ネットワークトラフィックを介して、64ビットのDridexDLLファイルを取得します。図5と図6に最近のDridexアクティビティの感染チェーンでよく見られるサンプルを示します。
図7にやはりマルスパムを使った別種のDridexによる感染チェーンを示します。こちらは、図5と図6で使用されていたOfficeドキュメントほど一般的な配布方法ではありません。2020年9月24日のDridexをプッシュするマルスパムのリンクでは、Officeドキュメントを返す代わりにWindowsの実行可能ファイルを返していました。詳細は図7を参照してください。
図5〜図7に示したように配布トラフィックはほとんどの場合HTTPSです。暗号化されているので、初期ファイルやDridexインストーラの検出が難しくなっていますが、DridexのC2のアクティビティがトリガーする感染後トラフィックは特徴的なので識別は可能です。
証明書とHTTPSトラフィック
Dridexの感染アクティビティを理解するには、HTTPSトラフィックに使用されるデジタル証明書も理解しなければなりません。
HTTPSトラフィックのSSL/TLS暗号化にはデジタル証明書が使用されます。HTTPSを使っているWebサイトを表示するさいは、WebサーバーからクライアントのWebブラウザに証明書が送信されます。このデジタル証明書のデータがHTTPS接続確立に利用されます。この証明書にWebサイトの公開鍵が含まれていて、これで対象Webサイトの身元を確認するわけです。
さまざまな認証局(CA)が、やはりさまざまなWebサイトのデジタル証明書を発行していて、商用サイト用に有料で企業相手に販売する認証局もあれば、Let’s Encryptのように証明書を無料で提供している認証局もあります。
証明書の情報はWiresharkのHTTPSトラフィックに表示させることができます。ここでは次の2つのセクションを主に確認します。
- 認証局の「Issuer(発行者)」データ
- webサイトに関する「Subject」データ
「Issuer」のデータからはデジタル証明書を発行した認証局がわかります。また「Subject」のデータからはWebサイトの身元が確認できます。図8に弊社(www.paloaltonetworks.com)のHTTPSトラフィックをサンプルとして証明書の「Issuer」と「Subject」のデータを確認する方法を示します。
ただしWebサーバーをセットアップするさい、管理者は自己署名証明書を生成することもできます。自己署名証明書はローカルで生成されるもので、認証局が発行したものではありません。Firefoxなど最新のブラウザで表示すると、自己署名証明書を利用しているサーバーのHTTPSトラフィックではエラーメッセージが生成されることがよくあります(図9参照)。
マルウェア開発者はC2サーバーに自己署名証明書をよく利用します。なぜなら自己署名証明書はすばやく簡単に作成できるからです。くわえて、マルウェアのHTTPS C2トラフィックにはWebブラウザを使わないので、暗号化されたトラフィックはエラーや警告が表示されることもなく機能します。
自己署名証明書を生成するときは、以下のフィールドに値を入力します(ただし一部空白のままにされることもよくあります)。
- Country name (国名、2文字のコード)
- State or province name (州名や都道府県名)
- Locality name (通常は市区町村名)
- Organization name (組織名)
- Organizational unit name (部門名)
- Common name (たとえば完全修飾ホスト名)
- Email address (電子メールアドレス)
これらのフィールドは、Webサイトを識別するSubjectデータに使用されます。ただし、この証明書はWebサーバー上でローカルに生成されているので、Issuer (発行者) にも同じフィールドと値が使用されます。
マルウェアの作成者は、自己署名証明書のこれらのフィールドにランダムな値や、デフォルト値、偽の値を使用することがよくあります。たとえば、TrickbotのHTTPSC2トラフィックは「example.com」をCommon Nameフィールドの値としてよく使用します。このほか最近のIcedIDマルウェア感染によるHTTPSC2トラフィックでは、証明書のIssuerフィールドに次の値を使用していました。
- Country name: AU
- State or province name: Some-State
- Organization name: Internet Widgits Pty Ltd
- Common name: localhost
DridexのHTTPS C2トラフィックの証明書Issuerデータのパターンは、他のマルウェアファミリと比べてやや特徴的です。このためこうしたパターンをDridex感染特定の鍵に使えることがあります。
Dridex感染アクティビティのPcapファイル
最近のDridexネットワークトラフィックのpcapを含む5つのパスワード付きZIPアーカイブ(パスワードは「infected」)をこちらのGitHubリポジトリから取得してください。Githubページに移動してZIPアーカイブのエントリをクリックし、図10と図11に示す手順でダウンロードします。
本ZIPアーカイブファイルを解凍するパスワードは「infected」です。展開すると次の5つのpcapファイルが作成されます。
- 2020-06-03-Dridex-infection-traffic.pcap
- 2020-09-24-Dridex-infection-traffic.pcap
- 2020-09-29-Dridex-infection-traffic.pcap
- 2020-10-05-Dridex-infection-traffic.pcap
- 2020-10-07-Dridex-infection-traffic.pcap
例1: 2020-06-03-Dridex-infection-traffic.pcap
2020-06-03-Dridex-infection-traffic.pcapを開いたら、『Wireshark によるパケット解析講座 2: 脅威インテリジェンス調査に役立つフィルタリング設定』のチュートリアルで解説した「basic」の web 用フィルタを適用します。Wireshark 3.xでのbasicフィルタは次のとおりです。
(http.request or tls.handshake.type eq 1) and !(ssdp)
Dridexの感染トラフィックは、次の二段構えになっています。
- 初期感染アクティビティ
- 感染後C2トラフィック
初期感染アクティビティは被害者が電子メールのリンクからの悪意のあるファイルをダウンロードした段階で発生します。初期感染アクティビティにはDridexのインストーラをロードする悪意のあるファイルが含まれます。なお、最初のダウンロードについては、確認できない場合もあります。たとえば悪意のあるファイルが電子メールの添付ファイルだった場合などです。このほか、初期ファイル自体がインストーラだったためにDridexインストーラのロードが確認されない場合もあります。たいていこのアクティビティはHTTPS経由で行われるので、URLは表示されずドメイン名のみが表示されます。
感染後のアクティビティは、被害者が感染した後に発生するHTTPSC2トラフィックです。このアクティビティはDridex感染が続いているかぎり発生します。このC2トラフィックはIPアドレスを使って直接通信するので関連付けられたドメイン名は存在しません。また以下に詳述するとおり、証明書のIssuerデータも普通の内容とは違っています。
図12はWiresharkで開いた最初のサンプルに「basic」Webフィルタを適用したものです。ドメイン名の表示されていない行がDridexのHTTPSC2トラフィックです。
図12に示した最初のpcapには、ドメイン名ではなくIPアドレスで直接接続している次のトラフィックが示されています。これがおそらくDridexによるHTTPSC2トラフィックでしょう。
- 185.86.148[.]68 443/tcp
- 212.95.153[.]36 453/tcp
「basic」Webフィルタで表示される他のドメインは、microsoft.comやoffice.net、windows.comなどのよく知られた名前で終わるドメインを使用しているシステムのトラフィックです。唯一の例外がtruepenesonga[.]comへのHTTPSトラフィックで、これは19:38:18 UTCのpcapのはじめあたりで確認できます。これがおそらくDridexインストーラーでしょう。ちょっとGoogleで検索した結果からは、truepenesonga[.]comがマルウェアに関連付けられていることがわかります。
では感染後のDridexC2トラフィックに注目してみましょう。Wiresharkで次のフィルタで、これら2つのIPアドレス宛のHTTPSトラフィックの証明書のIssuerデータを確認してみます。
tls.handshake.type eq 11 and (ip.addr eq 185.86.148.68 or ip.addr eq 212.95.153.36)
フィルタを適用したら、Wiresharkの列表示で最初のフレームを選択して、フレームの詳細パネルに移動します。次に図13に示したとおりに値をクリックして展開していき、RDNSequence item:で始まる行のリストに移動します。
ここでは185.86.148[.]68へのHTTPSトラフィックのRDNSequence itemとその値に注目してみましょう。
- id-at-countryName=Vu
- id-at-stateOrProvinceName=Uererarnk4
- id-at-localityName=Port Vila
- id-at-organizationName=Whensean Imegdtc SICAV
- id-at-organizationUnitName=6Tbuthinalq
- id-at-commonName=1andfhtittbly.fan
Dridexの証明書のIssuerフィールドには、1つか2つ数字を含ませたランダム文字列が設定されることがよくありますが、Country NameとLocalityの値は一致することが多いです。上記の例では、Vuというのがバヌアツを表す2文字の国コードで、Port Vilaというのはバヌアツの首都です。
212.95.153[.]36のHTTPSトラフィックを同様の手順で確認すると、次の情報が見つかります。
- id-at-countryName=AO
- id-at-localityName=Luanda
- id-at-organizationName=Msorest KGaA
- id-at-organizationUnitName=aghat@yongd
- id-at-commonName=arashrinwearc.Ourontizes.ly
LuandaというLocalityはアンゴラの首都で、AOというのがアンゴラを表す国コードです。ただし他のフィールドはランダムな値のようです。この手の証明書Issuerデータが見つかれば、それはDridexのC2トラフィックであることを示す強力な指標といえます。
例2: 2020-09-24-Dridex-infection-traffic.pcap
2020-09-24-Dridex-infection-traffic.pcapをWiresharkで開いて、「basic」Webフィルタを適用します(図14参照)。
最初の3行が暗号化されていないHTTPのGETリクエストである点に注目してください。これは図3で示した電子メールからのリンクです。このリンクからは、図7の感染チェーンのZIPアーカイブが返されました。
ここではTCPストリームではなくHTTPストリームの追跡をしてみましょう。図15と図16に示すとおり画面下にスクロールし、返されたスクリプトを確認します。
adv.epostoday[.]ukへの3つのHTTP GETリクエストはすべて同じTCPストリーム内にあります。一番下あたりまでスクロールしていき、favicon.icoへの最後のHTTP GETリクエストの前までスクロールしてください。すると、ASCII文字の長い文字列の終わりが見つかります。この文字列がblobに変換され、Ref_Sep24-2020.zipとして被害者に送信されます(図17参照)。
HTTPオブジェクトのエクスポート機能を使えばこれらのスクリプトをエクスポートすることができます(図18参照)。
ここでも感染後のDridexC2トラフィックに着目しましょう。Wiresharkで次のフィルタを使い、HTTPSトラフィックのうち、ドメイン名をもたないこれら2つのIPアドレス宛のHTTPSトラフィックの証明書のIssuerデータを確認してみます。
tls.handshake.type eq 11 and (ip.addr eq 151.236.219.181 or ip.addr eq 62.98.109.30)
フィルタを適用後、最初のフレームを選択し、フレームの詳細セクションに移動します。1つ目のpcapで行ったようにRDNSequence itemで始まる行のリストを探します。図19に、2つ目のpcapで、151.236.219[.]181をRDNSequence itemまでドリルダウンした様子を示します。
証明書のIssuerのデータは1つ目のサンプルのデータと似ています。両方のIPアドレスの証明書のIssuerデータで以下のデータを確認しましょう。
151.236.219[.]181へのDridexによるHTTPS C2トラフィックの証明書Issuerデータは次のようになっていました。
- id-at-countryName=IL
- id-at-stateOrProvinceName=Anourd Thiolaved Thersile5 Fteda8
- id-at-LocalityName=Tel Aviv
- id-at-organizationName=Wemadd Hixchac GmBH
- id-at-organizationUnitName=moasn@emanc
- id-at-commonName=heardbellith.Icanwepeh.nagoya
62.98.109[.]30へのDridexによるHTTPS C2トラフィックの証明書Issuerデータは次のようになっていました。
- id-at-countryName=SS
- id-at-LocalityName=Khartoum
- id-at-organizationName=Hedanpr S.p.a.
- id-at-commonName=psprponounst.aquarelle
両方ともLocalityとCountry Nameは合致しているようですが、他のフィールドはランダムな値のようです。これは1つ目のpcapで見たDridexによるHTTPS C2トラフィックのパターンとも一致しています。
例3: 2020-09-29-Dridex-infection-traffic.pcap
2020-09-29-Dridex-infection-traffic.pcapをWiresharkで開いて、「basic」Webフィルタを適用します(図20参照)。
ドメインを確認すると、HTTPSトラフィックを使用しているMicrosoft以外のドメインが3つあり、これらは初期感染アクティビティに関連したものである可能性があります。
- dsimportaciones[.]com
- murfreesboro.fairwayconcierge[.]com
- ryner.net[.]au
これらはそのURL特有のもので内容は表示されないので、Dridex C2の感染後トラフィックに注目してみます。Wiresharkで次のフィルタを使い、HTTPSトラフィックのうち、ドメイン名をもたないこれら2つのIPアドレス宛のHTTPSトラフィックの証明書のIssuerデータを確認してみます。
tls.handshake.type eq 11 and (ip.addr eq 67.79.105.174 or ip.addr eq 144.202.31.138)
フィルタを適用後、最初のフレームを選択してフレームの詳細セクションに移動し、1つ目と2つ目のpcapで行ったようにRDNSequence itemで始まる行のリストを探します。図21に、3つ目のpcapで、67.79.105[.]174をRDNSequence itemまでドリルダウンした様子を示します。
証明書のIssuerのデータは最初の2つのサンプルのデータと似ています。両方のIPアドレスのIssuerデータで以下のデータを確認しましょう。
67.79.105[.]174へのDridexによるHTTPS C2トラフィックの証明書Issuerデータは次のようになっていました。
- id-at-countryName=MN
- id-at-stateOrProvinceName=Listth Thearere8 berponedt tithsalet
- id-at-LocalityName=Ulaanbaatar
- id-at-organizationName=Massol SE
- id-at-commonName=Atid7brere.Speso_misetr.stada
144.202.31[.]138へのDridexによるHTTPS C2トラフィックの証明書Issuerデータは次のようになっていました。
- id-at-countryName=SS
- id-at-LocalityName=Khartoum
- id-at-organizationName=Hedanpr S.p.a.
- id-at-commonName=psprponounst.aquarelle
2020-09-29の3つ目のサンプルの144.202.31[.]138の証明書Issuerデータは、2020-09-24の2つ目のサンプルの62.98.109[.]30のそれと同じである点に注意してください。
例4: 2020-10-05-Dridex-infection-traffic.pcap
2020-10-05-Dridex-infection-traffic.pcapをWiresharkで開いて、「basic」Webフィルタを適用します(図22参照)。
ドメインを確認すると、HTTPSトラフィックを使用しているMicrosoft以外のドメインが1つあり、これは初期感染アクティビティに関連したものである可能性があります。
- vardhmanproducts[.]com
ここでも感染後のDridexC2トラフィックに着目しましょう。Wiresharkで次のフィルタを使い、HTTPSトラフィックのうち、ドメイン名をもたないこれら2つのIPアドレス宛のHTTPSトラフィックの証明書のIssuerデータを確認してみます。
tls.handshake.type eq 11 and (ip.addr eq 85.114.134.25 or ip.addr eq 85.211.162.44)
フィルタを適用後、最初のフレームを選択してフレームの詳細セクションに移動し、これまでの3つのpcapで行ったようにRDNSequence itemで始まる行のリストを探します。
証明書のIssuerのデータは最初の3つのサンプルのデータと似ています。両方のIPアドレスのIssuerデータで以下のデータを確認しましょう。
85.114.134[.]25へのDridexによるHTTPS C2トラフィックの証明書Issuerデータは次のようになっていました。
- id-at-countryName=NZ
- id-at-stateOrProvinceName=Cepli thade0 ithentha temsorer
- id-at-LocalityName=Wellington
- id-at-organizationName=Lling Lovisq NL
- id-at-organizationalUnitName=Punddtln
- id-at-commonName=Onshthonese.vyrda-npeces.post
85.211.162[.]44へのDridexによるHTTPS C2トラフィックの証明書Issuerデータは次のようになっていました。
- id-at-countryName=MY
- id-at-LocalityName=Kuala Lumpur
- id-at-organizationName=Ointavi Tagate Unltd.
- id-at-commonName=Ateei7thapom.statonrc.loan
例5: 2020-10-07-Dridex-infection-traffic.pcap
2020-10-07-Dridex-infection-traffic.pcapをWiresharkで開いて、「basic」Webフィルタを適用します(図23参照)。
ドメインを確認すると、HTTPSトラフィックを使用しているMicrosoft以外のドメインが1つあり、これは初期感染アクティビティに関連したものである可能性があります。
- newmg532.wordswideweb[.]com
感染後のDridexC2トラフィックを確認してみましょう。Wiresharkで次のフィルタを使い、HTTPSトラフィックのうち、ドメイン名をもたないこれら2つのIPアドレス宛のHTTPSトラフィックの証明書のIssuerデータを確認してみます。
tls.handshake.type eq 11 and (ip.addr eq 177.87.70.3 or ip.addr eq 188.250.8.142)
フィルタを適用後、最初のフレームを選択してフレームの詳細セクションに移動し、これまでの4つのpcapで行ったようにRDNSequence itemで始まる行のリストを探します。
証明書のIssuerのデータは最初の4つのサンプルのデータと似ています。両方のIPアドレスのIssuerデータで以下のデータを確認しましょう。
177.87.70[.]3へのDridexによるHTTPS C2トラフィックの証明書Issuerデータは次のようになっていました。
- id-at-countryName=BS
- id-at-stateOrProvinceName=Sshopedts Inccofrew
- id-at-LocalityName=Nassau
- id-at-organizationName=Mesureder S.p.a.
- id-at-commonName=avothelyop.thedai9neasysb.author
188.250.8[.]142へのDridexによるHTTPS C2トラフィックの証明書Issuerデータは次のようになっていました。
- id-at-countryName=UA
- id-at-stateOrProvinceName=avandi0
- id-at-LocalityName=Kiev
- id-at-organizationName=Icccodiso Icloneedb Oyj
- id-at-organizationalUnitName=4Zenyfea
- id-at-commonName=rebydustat.tci
これら5つのサンプルから、DridexのHTTPS C2トラフィックの証明書Issuerデータがどのように見えるかについてだいたい予想がつくようになったと思います。これらのパターンは他の多くのマルウェアファミリとは異なるものの、HTTPS C2からの証明書Issuerデータは多少Qakbotネットワークトラフィックのそれに似ています。
ただしQakbotの場合stateOrProvinceNameは常に2文字の値でLocalityNameはランダムな文字で構成されます。
Dridexの場合はstateOrProvinceNameはランダムな文字で、LocalityNameにはCountryNameに使用されたいずれかの国の首都が利用されます。
結論
今回はDridexのネットワークトラフィックを含むpcapを使って、Dridexのアクティビティを識別する方法を確認しました。Dridex感染の最近の5つのpcapを確認し、感染後のC2トラフィックを見ることで、証明書のIssuerデータに特定のパターンがあることを確認できました。これらのパターンはおそらくDridexに特有のものなので、証明書のIssuerデータの確認はDridex感染の識別の鍵となります。
『Wiresharkによるパケット解析講座』シリーズの以前の講座は以下から確認してください。
- Wireshark によるパケット解析講座 1: Wiresharkの表示列をカスタマイズする
- Wireshark によるパケット解析講座 2: 脅威インテリジェンス調査に役立つフィルタリング設定
- Wireshark によるパケット解析講座 3: ホストとユーザーを特定する
- Wireshark によるパケット解析講座 4: Pcapからのオブジェクトのエクスポート
- Wireshark によるパケット解析講座 5: Trickbot感染の調査
- Wireshark によるパケット解析講座 6: Ursnif感染の調査
- Wireshark によるパケット解析講座 7: Qakbot感染の調査
- Wireshark によるパケット解析講座 8: HTTPSトラフィックの復号