> > 新型コロナに便乗するCoronaVirusランサムウェアとKpot情報窃取マルウェア

新型コロナに便乗するCoronaVirusランサムウェアとKpot情報窃取マルウェア

2020.04.03
コンサルティングサービス事業本部
サイバーインテリジェンスグループ
吉川 孝志
title1

新型コロナウイルスの世界的拡大が止まらない中、マルウェアの世界にもそれに便乗する様々な脅威が早い段階から出現しています。今回は新型コロナに便乗するそれらマルウェアの一つであるCoronaVirusランサムウェアの事例を取り上げて解説します。

CoronaVirusランサムウェアは、「WiseCleaner」という(およびそれに付随する)正規アプリケーションを装った偽ダウンロードサイトから配布されている偽インストーラーを実行することで最終的に感染するランサムウェアです。偽サイトは3月末以降すでにアクセス不能になっていますが、少なくとも2月後半頃には存在していたことを確認しています。

上記偽サイトからダウンロードした偽インストーラーは、実行されるとまず初めに様々なパスワードを盗み取るKpotと呼ばれる情報窃取マルウェアに感染させ、その直後にCoronaVirusランサムウェアに感染させます。つまり一連の挙動から、Kpotによる情報窃取を隠蔽するためにCoronaVirusランサムウェアが利用されたとも考えることもでき、これまでのブログ記事でもお伝えしているように、ランサムウェアと情報漏洩は無視できない関連脅威となっている状況がここでも垣間見えます。KpotというマルウェアはVPNやRDPなどを含むPCの中の様々な認証情報を盗み取りますが、新型コロナウイルスの拡大に合わせてリモートワークや在宅が急増する中、そうした認証情報を窃取されることは非常に大きな脅威ともいえるでしょう。

以降では、CoronaVirusランサムウェアを中心にKpotを含めた脅威の全体像とその詳細を解説していきます。


■正規アプリケーションの偽インストーラー「WSHSetup.exe」

CoronaVirusランサムウェアの感染の発端となるのは、wisecleaner[.]bestという偽サイトに配置された正規アプリケーションの偽インストーラー「WSHSetup.exe」から始まります。

図1 正規アプリケーションの偽インストーラー「WSHSetup.exe」

「WSHSetup.exe」をユーザーが偽サイトからダウンロードして実行すると、「WSHSetup.exe」はtrynda[.]xyzという不正ドメインからfile1.exe〜file7.exeという7つのEXEファイルをダウンロード試行し、ダウンロードできたものを順に実行していきます。

この際、file1.exeがKpotマルウェア、file2.exeがCoronaVirusランサムウェアとなっており、それらに多重感染することになります。

(※補足) なおfile3.exe〜file7.exeについては、サーバにファイルが配置されていないことからダウンロード試行されるものの結果的にダウンロードされません。将来的に使用する用途で予め用意している可能性も考えられます。

「WSHSetup.exe」は実行されると、アクセス解析を行うiplogger[.]orgという正規サービスのURLに裏でアクセスする事で、感染者の端末に関わる情報(IPアドレスや国情報等)を攻撃者に知らせます。

図2 正規サービスを利用して感染者を把握

(wisecleaner[.]bestという偽サイトには調査の結果、他にも別の正規アプリケーションを含む、いくつかのEXEファイルが配置されていることを確認しましたが、今回の一連の攻撃との繋がりはわかっていません。)

以上までの解説を図示したものが以下となります。

図3 偽サイトから始まる全体構造

上記の図をさらにシンプルにまとめると、以下のような繋がりになります。KpotとCoronaVirusランサムウェアに同じタイミングで感染することになるため、情報漏洩と暗号化の被害が同時に発生してしまうことを意味します。

図4 偽インストーラーが2つのマルウェアに感染させる

ダウンロードされた2つの実行ファイルは、%AppData%フォルダ配下にランダムなファイル名で作成されて順に実行されていきます。以下は偽インストーラーの該当処理を示すコード部分です。

図5 %AppData%に保存され実行されるfile1.exeとfile2.exe

「WSHSetup.exe」はファイルの構造やコード上においても一見すると一般アプリケーションのように偽装(パッキング)されていますが、偽装を解いた(アンパッキング)後のメインの処理はシンプルであり、上記のダウンロード&実行の処理が終わると、自分自身を削除して終了します。

図6 自分自身を削除して終了する処理

以上までの挙動を含む「WSHSetup.exe」のアンパッキング後のメインコードの全体像は以下のようになります。

図7 「WSHSetup.exe」のメインコード

■「Kpot」情報窃取マルウェア(http[://]trynda[.]xyz[/]file1.exe)

file1.exeは「WSHSetup.exe」によりダウンロード&実行される最初のマルウェア「Kpot」です。

(以下の図では便宜上ハッシュ値のファイル名に変更していますが、実際の感染時は、上で示したように%AppData%フォルダ内にランダム名のEXEファイルとして作成されます。)

図8 Kpot(情報窃取マルウェア)のEXEファイル

Kpotは近年のサイバー攻撃で利用されるケースが目立ってきている情報窃取を目的としたボット型のマルウェアです。

Kpotは感染すると、以下のようなあらゆるパスワードなどの認証情報を感染端末から盗み取ります。

冒頭にも述べましたが、新型コロナウイルスの拡大に合わせてリモートワークや在宅が急増する中、VPNやRDPなどを含めた認証情報を窃取されることは非常に大きな脅威といえます。

(補足情報) Kpotの内部で使用される文字列の多くはXORで暗号化されており、以下はアンパック後のKpotに対し、ブルートフォースでXOR復号を試みた場合の結果の一部ですが、上記に挙げた様々な情報窃取に関する情報が確認できます。
図9 Kpotマルウェアに確認できる情報窃取に関する情報(一部)

Kpotは様々な認証情報の情報窃取を行ったあと、以下のC&Cに接続します。

その後、自身を終了して削除します。Kpotはシステムに永続的に起動させるような自動起動エントリーは作成しない点から、使い捨ての情報窃取マルウェアとして使用されていることがわかります。

なおKpotは、ロシアのハッカーコミュニティサイトで販売やサポートが以下のように行われており、一つのKpotのEXEファイルにつき85ドルで売買されています。

図10 ロシアのハッカーコミュニティサイトで販売されているKpot

次の図はKpotを操る攻撃者が操作する管理画面(管理パネル)の様子ですが、一般的なボットと同様に簡単な操作でマルウェアを操ることができるようになっています。

図11 Kpotの管理画面

■CoronaVirusランサムウェア(http[://]trynda[.]xyz[/]file2.exe)

ここからがようやく今回の本題となるCoronaVirusランサムウェアの解説となります。

CoronaVirusランサムウェアは、「WSHSetup.exe」によりダウンロード&実行される2つ目の実行ファイルです。

図12 CoronaVirusランサムウェアの実行ファイル

CoronaVirusランサムウェアは実行されると、%Temp%フォルダ内に自身のコピーを作成して実行します。その際、自身が管理者権限で実行されていない場合は管理者権限で実行させようとしますが、その際、cmd.exe を経由させることでcmd.exeに対するUACダイアログとなるため、一見すると署名された正常なアプリケーションである事を示す(警告色ではない)UACが表示され、ユーザーによっては安全であると錯覚する可能性もあります。また、UACダイアログで「いいえ」を押したとしても「はい」を押すまで繰り返しUACが表示されデスクトップに戻れないため、一般ユーザーにとっては結果的に「はい」を押しかねない状況に陥ります。

図13 cmdを挟んだ管理者権限実行

実行後、感染端末の言語設定がロシア語かどうかをチェックする挙動がありますが、例えロシア語の環境であってもその後の挙動に変わりはありません。(一般にマルウェアの中には特定言語の環境には感染しないような挙動を行うケースがあります。)

図14 ロシア語かどうかをチェックする挙動

次に、CoronaVirusランサムウェアは、システムのドライブ名(ドライブレター)を「CoronaVirus」に改変します。

図15 システムのドライブ名をCoronaVirusに変更

■ハードディスクの暗号化と復元

続いて、CoronaVirusランサムウェアはメインの活動である暗号化処理に入りますが、はじめにハードディスクを物理的に暗号化します。

一般的な話となりますが、ハードディスク(物理ディスク)はセクタという最小単位(1セクタ=512 byte)で記録されており、先頭セクタ(第0セクタ)を特別にマスターブートレコード(以降、MBR)と呼び、MBRによってその後最終的にOSがロードされWindowsが起動します。CoronaVirusランサムウェアは、感染端末の物理ディスクにダイレクトアクセスし、先頭セクタであるMBRを暗号化し、脅迫文を表示する不正コードで上書きします。

(補足情報) Windowsにおいて物理ドライブはPhysicalDrive(番号)という名前で内部的に取り扱われており、一般的な環境であれば、例えばCドライブ(論理ドライブ表記)はPhysicalDrive0とという名前で管理されています。Windowsにおいてファイルなどのオブジェクトを開く際に使用するCreateFileというAPIを使用し、開くファイルパスにCドライブではなくPhysicalDrive0を指定することでハードディスクにダイレクトアクセスを行うことができます。
図16 物理ディスクにダイレクトアクセスを行う処理のコード

CoronaVirusランサムウェアはまず初めに、第0セクタにあるMBRを読み込みメモリ上で暗号化しておきます。

図17 MBRをメモリにロードして暗号化している様子

そして物理ディスクの第2セクタと第3セクタに脅迫文の文字列データを書き込みます。

図18 第2セクタと第3セクタに書き込まれた脅迫文

その後、暗号化したMBRを第6セクタに書き込むことで一時的に正規のMBRをバックアップします。

図19 第6セクタに暗号化し保存されたMBR

そして最後に、先ほど第2第3セクタに書き込んだ脅迫文を表示させるためのプログラムコード(ブートコード)を先頭セクタに上書きします。

図20 正常なMBRを不正なブートコードで上書き

これにより、パソコンの起動時に正常なMBRは読み込めなくなり、代わりにCoronaVirusランサムウェアの不正なブートコードが実行されることで、脅迫文が表示されることになります。

以下は実際にCoronaVirusランサムウェアが物理ディスクを改変している最中の動作ログの一部を示した図です。

図21 CoronaVirusランサムウェアがMBRを改変している最中の挙動ログ

不正なブートコードは、脅迫文を数十分間表示させた後、その後MBRを復元して元に戻した上でパソコンを再起動させます。

図22 不正なブートコードにより表示される脅迫文

ここまでの流れで示した物理ドライブの先頭の変化を表したものが以下の図です。

図23 感染前後で変化する物理ドライブ
(補足情報) なお、CoronaVirusランサムウェアはまれにMBRの復号に失敗するケースがあり、復号が失敗した場合は2度と起動できなくなります。
図24 復号に失敗したケースにおける物理ドライブ先頭の比較

どちらにしても、一般的なMBRを暗号化したままにする他のランサムウェアと異なり、しばらく待機すると自らMBRを復元する点がCoronaVirus ランサムウェアの特徴的な点の一つといえるでしょう。


■ネイティブアプリケーションを利用した脅迫文の表示

CoronaVirusランサムウェアにはもう一つ他のランサムウェアと異なる特徴的な挙動があり、それが以降で解説するネイティブアプリケーションを利用した脅迫文の表示です。

CoronaVirusランサムウェアは、%temp%フォルダ内にランダムなファイル名で不正なネイティブアプリケーションを作成し、以下のレジストリキーに登録します。

レジストリキー:HKLM¥SYSTEM¥CurrentControlSet¥Control¥Session Manager

上記のレジストリキーに存在するBootExecuteという値にネイティブアプリケーションのパスを追加することで、Windowsがシステムにロードされる前に実行させることができます。(より細かくはカーネルによって直接処理されるsmss.exeにより登録されたネイティブアプリケーションが間接的に実行されます)

図25 BootExecuteの値に不正なネイティブアプリケーションを登録するコード

ここでいうネイティブアプリケーションとは、Windows上で実行可能な一般的なプログラムではなく、Windowsがロードされる前に動かすことができるよりネイティブなアプリケーションを指します。見た目は同じEXEファイルですが、ダブルクリックしてもWindows上では単純に動作させることはできません。

図26 登録されたレジストリ値と作成されたネイティブアプリケーション

なお、BootExecuteに登録されたネイティブアプリケーションはWindowsのサブシステムがロードされる前に動作するためWindowsが提供するWindows APIが使用できず、Ntdllしかロードされていない状態のため、Ntdllが提供するネイティブAPIしか利用することができません。

以下は、CoronaVirusランサムウェアが作成するネイティブアプリケーションの実際のコードですが、Windows APIを使用すれば1行で済むビープ音を鳴らすだけのコードも、より複雑な処理で実装しなければならない様子がわかります。

図27 CoronaVirusランサムウェアのネイティブアプリケーションのコード

上記のコードでも分かる通り、CoronaVirusランサムウェアが作成するネイティブアプリケーションは脅迫文をディスプレイに表示させて、数分間スリープし終了するだけのプログラムとなっており、実際に脅迫文が表示された際の様子が以下となります。

図28 ネイティブアプリケーションによりWindows起動前に表示される脅迫文

■ファイルの暗号化

CoronaVirusランサムウェアは最後にファイルの暗号化を行いますが、その際、以下の拡張子を持つファイルを暗号化対象とします。

図29 CoronaVirusランサムウェアが暗号化するファイルの種類

暗号化されたファイルは、ファイル名の先頭に「corona」から始まる攻撃者のメールアドレスが追加されます。

図30 CoronaVirusランサムウェアに暗号化されたファイルの名前

なお暗号化された後も上の図の通り拡張子は変化しないため、一見暗号化されたことがわかりづらいですが、以下の通り、ファイルの内容は暗号化されておりファイルを開くことはできません。

図31 暗号化されたファイルの中身の比較(画像ファイルの例)

■脅迫文テキストの作成とレジストリ登録

ファイルの暗号化と同時に、感染端末の各フォルダ内に以下のような脅迫文章テキストを作成しますが、一般的なランサムウェアと比較して少額な要求金額が記載されています。

図32 各フォルダ内に作成される脅迫文テキストの内容

CoronaVirusランサムウェアは上記のテキストファイルを%temp%内にも作成し、レジストリ(HKCU)のRunキーにファイルパスを登録します。

図33 レジストリのRunキーに登録される脅迫文テキスト

これによって、ユーザーがWindowsにログインした時に自動的にテキストファイルが開き脅迫文が表示されるようになります。

図34 Windowsのログイン時に自動的に表示されるテキストファイル

■復旧活動の妨害

CoronaVirusランサムウェアは、システムの復元(ボリュームシャドーコピー)とWindowsバックアップをそれぞれ全て削除し、システムの復旧を妨害する処理を施します。これらの処理はWindowsの正規プログラムを利用して行われ、システムの復元の削除には「vssadmin.exe」を、Windowsバックアップの削除には「wbadmin.exe」をそれぞれ使用します。

図35 CoronaVirusランサムウェアが行う復旧活動の妨害

■その他の動作

以下のレジストリに攻撃者のビットコインアドレスとメールアドレスを登録します。

図36 レジストリに登録される攻撃者の情報

■CoronaVirusランサムウェアの全体動作遷移のまとめ

以上までに解説したCoronaVirusランサムウェアの全体動作の遷移をまとめたものが以下の図です。たとえMBRをなんとか修復してシステム起動にこぎ着けたとしても(または数十分間脅迫文が消えるのを待ち続けたとしても)BootExecuteによりさらに脅迫文が強制的に表示され、その先のWindowsのログイン時にも畳みかけるように脅迫文が表示されるようになっており、こうしてみると脅迫文を執拗に表示させランサムウェアに感染したことを誇示しようとしているようにも見えますが、肝心の脅迫文に記載されている要求金額はかなり少額であり、ランサムウェアとしての本来の意図には依然疑問が残ります。まるで金銭を得ること自体に目的を置いていないようにも見える点が、冒頭にも触れたようにKpotマルウェアによる情報窃取の証拠隠滅の目的を推測させる要素の一つとなります。Kpot→CoronaVirusランサムウェアの感染順もそうした推測を補てんする要素と言えます。

図37 CoronaVirusランサムウェアの全体動作推移

■まとめ

今回は事例の一つとしてCoronaVirusランサムウェアを中心に取り上げましたが、その他にも新型コロナウイルスに便乗した脅威は様々なものが出現している状況下にあります。攻撃者はこうして世界中の人々が注目する事件・事故・イベント・報道を敏感に注目しており、それらに便乗した脅威が並行して発生するという流れは昔から変わっていません。リモートワークや在宅などの普及により、これまで以上にPCを利用する機会が増えており、それに従い様々な脅威もまた身近になるともいえ、今後も引き続きこうした脅威に一層注意していく必要があります。


※ハッシュ値:
5987a6e42c3412086b7c9067dc25f1aaa659b2b123581899e9df92cb7907a3ed
a08db3b44c713a96fe07e0bfc440ca9cf2e3d152a5d13a70d6102c15004c4240
3299f07bc0711b3587fe8a1c6bf3ee6bcbc14cb775f64b28a61d72ebcb8968d3