> > 標的型攻撃ランサムウェア「MegaCortex」の内部構造を紐解く

標的型攻撃ランサムウェア「MegaCortex」の内部構造を紐解く

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

■はじめに

MegaCortexは2019年5月に発見された比較的新しい標的型攻撃ランサムウェアであり、一部ではEmotet、Qakbot(Qbot)に感染した端末からMegaCortexの感染がみられるケースもあると報告されています。最近再び活発になっているEmotetは元々ダウンローダーの性質もあるため、Emotetの感染後にMegaCortexなどのランサムウェアがダウンロードされ多重感染する可能性は十分有り得ます。また、最近のMegaCortex感染事例ではハッキングで侵入した攻撃者のPsExecを用いたリモート実行による感染とみられるケースもあるようです。

MegaCortexは、OSの正規プログラムで実現できる挙動は極力それら正規プログラムに任せることで一般的なセキュリティ対策製品が誤検知を恐れる領域にフィールドを移そうとする動きがあります。ファイルの暗号化の最後には、フォレンジックを困難にさせる操作や、バックアップを不可能にする操作を行うことで、復旧作業自体を困難にする動きもあります。

MegaCortexに特徴的なポイントとして、様々なプロセスやサービスを強制終了させたり停止させたりする動きがありますが、それらの攻撃対象リストには、一般的なアンチウイルス対策製品のみだけでなく、バックアップソリューションや、AIを利用した新興製品、EDR/EPP製品に至るまで1,000以上のサービス/プロセスが含まれていました。バックアップソリューションはランサムウェア対策として最近よく話題にあがりますが、そうしたバックアップ関連製品群のプロセス名/サービス名が強制終了対象に特に多く含まれている点は興味深い点であると言えるでしょう。

詳しくは後述しますが、MegaCortexは進化の早いランサムウェアであり、暗号化の処理におけるファイル操作の実現方法を細かく変化させてくるなど、このブログ記事を執筆している間にも新たに改良された最新バージョンの出現を確認しています。攻撃者は明らかに守る側の対策や製品のロジックに至るまで日々研究・模索しているといえます。

前回LockerGogaの記事を書きましたが、MegaCortexはLockerGogaと不思議と類似する動きが多々あります。あるマルウェアを別のマルウェアに似せて作ることは十分可能なため、同じ攻撃者であると断言することはできませんが、2つのマルウェアの類似点についても本記事では節々で触れています。


■MegaCortexの全体概要

細かい解説に入る前に、MegaCortexの全ての動きを一つの図に示します。

MegaCortexの動きは大きく分けて3つのステージ(以下図の右端、紫色の表記)に分かれており、まず「初動」で不正動作を邪魔するプロセスやサービスを停止させます。次に、「主活動」で、ランサムウェアのメインの動きとなるファイルの暗号化を行います。最後に「終盤処理」として、システムのバックアップの消去や、ドライブの空き領域の抹消など、復旧作業の妨害となる操作を行います。

以下の図では正規プログラムを青色枠で表していますが、ファイルの暗号化以外は全てOS標準搭載の正規プログラムで実現していることがわかります。また、ファイルの暗号化においては複数のプロセスに分散させ、さらに1つのプロセス辺りの暗号化ファイルの数を10個に制限しており、連続性を検知トリガーにする対策製品の挙動検知を避けようとする目的が垣間見えます。

図1 MegaCortexの全体概要図

基本的にMegaCortexの主要な動きは全て上の図にまとめましたので、概要を把握するには以上までの情報で十分ではありますが、以降では、MegaCortexの挙動について、順を追って詳細解説していきます。

(なお、本記事ではMegaCortex V2(バージョン2)についての挙動を中心として解説しており、以降では「MegaCortex」とバージョン無しで表記した場合、V2を表すものとします。また、V3およびV4の情報も適宜含めており、その場合はV3やV4とバージョンを明記しています。)


■MegaCortexの感染の流れと詳細

MegaCortexの本体はEXEファイルであり、以下の図のように、アイコンにユーザーアカウント制御(UAC)の対象プログラムであることを示す盾マークが表示されていることからも分かる通り、管理者権限での実行を前提として作成されています。

図2 MegaCortexのEXEファイル(本体)

そのため、ユーザーがMegaCortexの本体(EXEファイル)を手動で実行した場合はUACのダイアログに承諾させるか、攻撃者が遠隔から配布する場合はMegaCortexをPsExec等のツールや権限昇格に関わる脆弱性の利用など何らかの手口を利用して管理者権限で実行させる必要があります。

なお、多くの一般的なランサムウェアで見られるアイコン偽装がされていない点からも、何らかの正規ファイルに偽装してユーザーに手動でダブルクリックさせるような意図はあまり感じられず、どちらかといえば、PsExec等のツールやシステムサービスによる配布、脆弱性の利用等、なんらかの手段でユーザーの操作を介さずに管理者権限で実行させる感染手法を前提にして開発されているように見受けられます。また後述しますが、PsExec(またはその類似ツール)を用いてライブ(実況)動作させる前提であることを匂わす挙動(コンソールウインドウへの出力)も確認しています。

MegaCortexのEXEファイルには以下の通り「ABADAN PIZZA LTD」という企業の有効なデジタル署名が付与されています。(※補足:「ABADAN PIZZA LTD」という企業は2017年に英国で企業登録されていますが、攻撃者がなぜこの企業名の署名を付与したのかその背景はわかりません)

図3 有効なデジタル署名が付与されたMegaCortexのEXEファイル

LockerGogaもそうでしたが、標的型攻撃で使用されるランサムウェアは(攻撃時点で)有効なデジタル署名が付与されるケースが多くなってきており、デジタル署名の有無をEXEファイルの安全性または信頼性の一つの指標にするのはいささか厳しい状況となってきていると言えそうです。

また、MegaCortexは以下のプロパティ情報を持っています。製品名の欄にナポリ風のピザを示す「Pizza Napoletana(ピッツァ・ナポレターナ)」という文字列を含めるなど、攻撃者がデジタル署名で利用した「ABADAN PIZZA LTD」という企業名に紐付けた悪ふざけが垣間見えます。

図4 MegaCortexのEXEファイルに付与されたプロパティ情報

■感染の始まり

MegaCortexは一見するとEXEファイルですが、主たる不正活動を司るコードは全て、EXE内部にSalsa20で暗号化され隠されたDLL(マルウェア内部ではpayload.dllという名前で扱われている)の中にあります。MegaCortexは起動すると、内部に暗号化して保存されているDLLを復号します。

図5 MegaCortexの本来の姿はDLLでありEXEは単なるローダーとなっている

この際、予め確保したメモリ上の領域へ1バイトずつ復号していきます。また、ローカルにDLLファイルとして一切作成することなくメモリ上に直接DLLを展開するため、ファイルレスとなります。

図6 MegaCortexが暗号化されたDLLを1バイトずつメモリ上に復号する様子

MegaCortexのメモリ上に展開された主たる不正活動を司るDLL(以下payload.dll)では「start」と「ss2」という2つのエクスポート関数が提供されており、「start」関数は親プロセスとしての挙動、「ss2」関数は子プロセスとしての挙動を行う際に利用されます(親と子の連携挙動に関する詳細は後述します)。

MegaCortexが実行されると、まずpayload.dllの「start」関数が呼び出されます。

以下は、payload.dllの「start」関数の処理の流れ(一部)です。

図7 Payload.dllのメインの処理の流れ

「start」関数が呼び出されるとまず、ファイルシステムリダイレクタの設定を無効にし、この後の暗号化ファイル対象のスキャン時等に意図したファイルパスにより全てのファイルにアクセスできるように準備します。

次に、自身にSeDebugPrivilege特権を付与したのち、OS標準プログラムを利用して、以降説明するように多数のサービスとプロセスを停止させます。


■サービスの停止

OS標準プログラムである「net.exe」とそのコマンドである「net stop」を使用して、多数のサービスを次々と停止させていきます。その際、以下のコマンドを使用します。

実行するコマンド:net stop <サービス名> /y

以下の図はその一例として、Windowsのアクセス権やセキュリティ設定を司る重要なサービスであるSecurity Accounts Managerのサービス「SamSs」を停止しようとした際の挙動ログです。

図8 MegaCortexがnet stopコマンドでサービスを停止させる様子(一例)

MegaCortexが停止させるサービスは、全てのサービスを対象にしているわけではなく、明確に予め狙ったサービスを停止対象とします。

具体的には、停止させるサービスのリストをマルウェア内に暗号化して保有しており、以下のサービスがMegaCortexの停止対象となります(これらはマルウェアの内部から抽出した順に記載しています)。これらのリストに合致する対象サービスが見つかった場合、該当サービスを停止させます。

図9 MegaCortexが停止させるサービスのリスト(コーディングされていた順に記載)

狙われたサービスの総数は567であり、OS標準サービスやウイルス対策製品はもちろんのこと、比較的新しい企業向けエンドポイントセキュリティ(EPP/EDR)製品、多くのバックアップソリューションのサービスも含まれていました。バックアップソリューションはランサムウェア対策としてしばしば活用されていますが、そうしたバックアップ関連製品群のサービス名が停止対象に特に多く含まれている点は興味深い点であると言えるでしょう。

MegaCortex はnet stopコマンドでサービスを停止させたのち、さらに念入りにSCコマンドを利用して、各サービスの開始状態をDisabledにしていきます。その際、以下のコマンドを使用します。

実行するコマンド:sc config <サービス名> start=disabled

以下の図はその一例として、Windowsのアクセス権やセキュリティ設定を司る重要なサービスであるSecurity Accounts Managerのサービス「SamSs」の開始状態をDisabledに設定しようとした際の挙動ログです。

図10 MegaCortexがSCコマンドを利用してサービスの開始状態をDisabledにする様子(一例)

■プロセスの強制終了

MegaCortexはサービスの停止に続いて、プロセスの強制終了を行います。

サービスの際と同じくMegaCortexは暗号化した状態のプロセスリストを内部に保有しており、プロセスリストに合致した対象プロセスが存在した場合は、強制終了させようとします。

以下はその一例として、あるアンチウイルス製品のプロセスを強制終了させようとした際の様子です。

図11 MegaCortexが正規プログラムを利用して攻撃対象プロセスを強制終了させる様子

MegaCortexが保有している強制終了対象プロセスのリストは以下となります。今回解析で確認したプロセスの総数は773にものぼり、老舗のアンチウイルベンダー各社の製品からAIを利用する新興製品、バックアップソリューションや端末調査ツールに至るまで多数のセキュリティ関連のプロセス名が組み込まれていることがわかりました。

図12 MegaCortexが強制終了させるプロセスリスト(コーディングされていた順に記載)

暗号化処理を実施する前に、一通りこうして不正活動の邪魔となるサービスとプロセスを一掃することで、より暗号化処理が成功する確実性の高い状態にします。

また、サービスにしてもプロセスにしても、本来はランサムウェア本体からWin32APIなどを使用して直接的に停止なり強制終了できるところをあえてせず、正規プログラムを間に介して利用するのは、万一挙動検知により検知&駆除されそうになった際の影響をランサムウェア本体にまで及ぼさないように考慮している意図も考えられます。


■リモートからライブ(実況)で実行する設計

なお、MegaCortexの動きでみられるユニークな特徴として、そのままローカル上でEXEファイルを実行すると、以下のようにコンソール画面が表示され、スキャン中の様子や、ファイルの暗号化の進捗状況がリアルタイムに表示されます。これは一般的なランサムウェアにはあまり見られない動きです。

図13 MegaCortexのEXEをローカルで実行した際の様子

この動きから考えられる背景としては、例えば、PsExecを利用しリモートコンピューター上でコンソールプログラムを実行した場合、リモートコンピューターで実行された出力がローカルコンピューターに転送され標準出力にリダイレクトされるため、結果的に攻撃者がこの出力画面を見ることになります。

つまりこの挙動から、MegaCortexのEXEファイルはリモートから攻撃者がPsExec(またはその類似ツール)で実行する(実況/ライブ)前提の作りである可能性が高いと考えられます(もしその他の一般的な配布方法を取った場合、感染時にこの画面を被害者が見ることになり、攻撃者にとっては暗号化が途中で失敗するリスクがあるといえます)。


■ファイルの暗号化

MegaCortexがファイルの暗号化を行う際、どのファイルを暗号化するかというファイルのスキャンは親プロセスが行いますが、暗号化作業そのものは自身では行わず、子プロセスに処理させます。この手口(MasterとSlaveに分担するMaster/Slave方式)はLockerGogaでも見られたテクニックです。

具体的には、親プロセス(Master)は上記の通りセキュリティ関連&バックアップ関連のサービスおよびプロセスの強制終了を終えると、自身のフルパスに対し以下に示す特定文字列を実行引数として渡し子プロセスとして起動させます。

特定文字列:E9Ql0G9gSiXqlyWa7sdT6LX2O//TIQq9msLQUuBsLcg=

この文字列は、MegaCortexを子プロセスとして動作させるためのパスワードとなります。MegaCortexのV1(バージョン1)では、文字列をバッチファイルなどにより外部から手動で引数として渡さないといけませんでしたが、MegaCortex V2(バージョン2)では、以下のようにEXE本体にハードコーディングされるようになりました。V1では感染時にバッチファイルを多用していましたが、V2ではそれらのバッチファイルで行っていた処理を全てEXEに組み込む変更が加えられています。

図14 MegaCortexの本体にハードコーディングされた子プロセスの為の特定文字列

以下は実際に、親プロセスが子プロセスを起動させようとした際の挙動ログです。

図15 MegaCortexの親プロセスが子プロセスを起動させる際の挙動ログ

また、親プロセスが子プロセスにファイルの暗号化を指示する際、共有メモリを介してファイルのフルパスを受け渡します。これはBoost Interpocess(プロセス間通信)C++ライブラリのShared Memoryの機能により実装されており、LockerGogaもまさに同じライブラリを使用していることを確認しています。MegaCortexはこの際「nxahoft_G9」という文字列を共有メモリ名に指定します。

以下の図はその仕組みを概念図として表したものです。

図16 MegaCortexが暗号化するファイルのパスを共有メモリを介して受け渡す概念図

この共有メモリを介して親プロセスと子プロセスが「暗号化対象ファイルのパスをやり取りする」という手口についても、LockerGogaが採用したものと全く同じ手口です。ただし、LockerGogaは書き込む文字列をBase64で符号化していましたが、MegaCortexは以下の図のようにそのままの文字列でファイルパスをやりとりします。

図17 MegaCortexの仮想メモリ内に確認できる暗号化対象のファイルパス文字列

起動した子プロセス(Slave)がファイルの暗号化を行う際、一つの子プロセス(Slave)は10個のファイルのみを暗号化し終了します。また、親プロセス(Master)は一度に2つの子プロセス(Slave)を同時に起動させます。つまり並列して一度に20ファイルずつ暗号化されていくことになります。

以下の図は、MegaCortexの一つの子プロセスが起動し暗号化を実施したのち終了した直後の、あるフォルダ内の様子ですが、全てのファイルが暗号化されているわけではなく、数えられる個数しか暗号化されていない様子が実際にわかります。以下の図では9つのファイルが暗号化されていますが、このフォルダ外のファイルが同時に一つ暗号化されており、合計10個のファイルが暗号化されていました。また、アルファベット順に暗号化しているわけではなくある程度ランダム性を持って暗号化されていることもわかります。(当然この後、複数の子プロセスが次々と起動していき、最終的にこのフォルダ内のファイルは全て暗号化されることになります)

図18 1つの子プロセスが暗号化を終了した瞬間のあるフォルダの様子

このようにプロセスごとに暗号化対象ファイルを小分けし暗号化していくテクニックについても、まさにLockerGogaが採用した手法と同じです。一般に、一つのプロセスから大量(十数〜数十程度)の連続した暗号化処理が実施されることをランサムウェアの検知トリガーとしているアンチウイルス製品が存在するため、暗号化するファイルを小分けにすることはそうした手法の検知逃れ(対策)となりえます。また、子プロセスに暗号化挙動を担当させることで、万一いずれかの子プロセスが検知&駆除されても、親プロセスが駆除されない限り、暗号化全体プロセスの流れを食い止めることはできません。つまり、検知逃れ、処理の効率化、検知された場合のリスク分散という攻撃者の意図がここから見えます。

図19 MegaCortexのMaster/Slave方式による暗号化
図20 常に2つのプロセスが起動して暗号化を並列処理する様子

子プロセス(slave)は、暗号化する前に、自身のプロセスに以下の複数の特権を付与することで、様々な不正活動に必要な権限を得ます。これらの特権により、アクセス制御されているようなファイルもACLをバイパスして暗号化できるようになります。また、SeRestorePrivilege特権によりシステムファイルでさえも書き換えることが可能となります。LockerGogaはこの特権付与のため、システムファイルを書き換えてしまい感染後にはPCの起動が不可能になっていましたが、MegaCortexはシステムファイルを明確に除外しています(除外リストは後述)。

図21 MegaCortexが自身に付与する複数の特権

■MegaCortexにおける暗号化時のファイル操作

MegaCortexはファイルの暗号化の処理における「ファイルの書き込み」と、脅迫文テキストやその他のファイルを作成する際の「ファイルの書き込み」の実現方法を明確に作り分けています。

脅迫文章テキストなどはライブラリのファイル出力を使用しており内部的にはWriteFileというWin32APIが呼び出されますが、ファイルの暗号化の際は、ライブラリ等を一切使用せず、マイクロソフト非公開のネイティブAPI(NtWriteFile, NtReadFile)を意図的に呼び出して利用します。

ここから攻撃者が暗号化の挙動検知を避けようとする意図が伝わります。

図22 ネイティブAPIを利用できるように準備している様子(挙動ログ)

以下は、実際にMegaCortexがファイルの暗号化時に上記で準備したネイティブAPIを呼び出している挙動ログです。

図23 MegaCortexがネイティブAPIのみでファイルの暗号化を行っている様子

なお、LockerGogaも同じくネイティブAPIをファイルの書き込み部分で利用しましたが、LockerGogaはLoadLibraryでntdllをロードするのに対し、MegaCortexはGetModuleHandleでntdllのハンドルを取得して使用しています(その後、GetProcAddressでAPIのアドレスを取得)。

【補足情報】

補足となりますが、MegaCortexのV3(バージョン3)からはこの部分に更に複雑な改良をおこなっています。V3以降では、V2のように既存のロードされている「ntdll.dll」から各APIのアドレスを取得するGetProcAddressを使用せず、GetModuleFileNameにより「ntdll.dll」のフルパスを取得し、CreateFileMappingを使用しメモリ上に「ntdll.dll」全体を手動マッピングして使用していることを確認しました。そのため、通常の手順でロードされたDLLのAPIをフックしAPI呼び出しを監視するようなツールではファイルを暗号化する際の読み込み/書き込みのAPIの呼び出しを捉えられなくなっています。一部の間では、ntdll等をメモリ上にファイルごとマッピングしPEヘッダから各APIのアドレスを手動で計算し取得、利用することでユーザーモードフックを回避する手法を「ラゴス島の手法(Lagos Island method)」と呼んでいます。

図24 MegaCortex V3(バージョン3)のntdllのマッピング挙動

また、MegaCortexはファイルの暗号化処理にGitHubで公開されている「mbedcrypto」というオープンソースの暗号化ライブラリを使用しています。このように、ランサムウェアに限らず近年のマルウェアはGitHubなどですぐに完成度の高いコードを容易に入手できるため、オープンソースで公開されている転用可能なライブラリやツールをしばしば転用するケースが見られます。


■MegaCortexに暗号化されたファイルにみえる特徴

MegaCortexは暗号化したファイルの末尾に、MegaCortexに暗号化されたことを示すフッター(以降、MegaCortexフッター)を追記します。またMegaCortexフッターの先頭には「MEGA-」(またはその類似)で始まるマーカー(以降、MEGAマーカー)が付与されます。今回解析したMegaCortexでは「MEGA-G9=」で始まるMEGAマーカーが確認できます(下図参照)。

図25 MegaCortexに暗号化されたファイルに確認できるMEGAマーカー

なお、上図にも記載している通り、MEGAマーカーを見ることによってMegaCortexの種類やバージョンがある程度把握できます。「=」の前のアルファベットとナンバリングは攻撃された企業によって異なるため、ターゲットとなる企業の識別に使用されている可能性があります。


■暗号化から除外されるファイル

MegaCortexは以下のファイルおよび拡張子を暗号化対象から除外します。以下のリストに「.megac0rtx」が含まれていることから分かる通り、自身が暗号化したファイルを多重に暗号化しないようにしています。また、LockerGogaと異なり、「bootmgr」等のシステムファイルの暗号化を明確に避けており、被害PCがLockerGogaの感染時のように起動不可能な状況に陥らないようにしているようにみえます。

図26 MegaCortexの暗号化処理における除外対象(ファイル、拡張子)

また、以下に示す文字列が含まれる特定のフォルダ内のファイルも暗号化対象から除外されます。これらのフォルダ内にはシステムが動作するための重要なファイルなどが含まれており、MegaCortexはそれらの暗号化を避けできるだけシステム動作へ影響を及ぼさないようにしていることが同じく伺えます。

図27 MegaCortexの暗号化処理における除外対象(フォルダ)

以下の図はその一例としてMegaCortexに暗号化されたピクチャライブラリのフォルダ内の様子ですが、画像ファイルが全て暗号化されている状況で「desktop.ini」だけは暗号化されずに残っていることがわかります。この「desktop.ini」というファイルは上に示した通り除外対象のファイルに該当します。

図28 MegaCortexにより暗号化されるファイルとされないファイルの様子(一例)

■暗号化処理のログ出力

MegaCortexは、暗号化処理の最中、暗号化できなかったファイルのリストおよび暗号化処理の結果を以下のログファイルに随時出力していきます。

作成されるログファイル:C:¥nxahoft_G9.log
図29 MegaCortexが作成する暗号化処理のログ

MegaCortexの子プロセスは、自身が暗号化すべき対象範囲の10個のファイルを全て暗号化した後、自身を終了します。

図30 子プロセスが自身のハンドルを取得し自身を終了する様子(挙動ログ)

以上までに解説した挙動がその後、子プロセスが起動するたびに繰り返され、感染端末内の多くのファイルは暗号化されていきます。


■復旧作業の妨害

MegaCortexの親プロセスは、全ての子プロセスによる暗号化が終わると、OSの正規プログラムを利用して、感染端末の復旧作業を妨害する処理を最後に行います。

まず、「vssadmin.exe」を利用してボリュームシャドーコピーを削除し、バックアップからの復元を不可能にします。さらに、「cipher.exe」を利用して、ディスクの空き領域を消去し、フォレンジックによる削除されたファイルの復元作業を困難にします。

以下の図は、子プロセスによる暗号化が全て終了し、親プロセスが終了する前の終盤処理のMegaCortexの挙動ログですが、vssadmin.exeおよびcipher.exeの呼び出しが確認できます。

図31 MegaCortexが全ての暗号化を終え終了する前の終盤処理(復旧作業の妨害)

この終盤にcipher.exeを利用する点などもLockerGogaで見られた動きの一つです。


■脅迫文テキストの作成

MegaCortexは暗号化が完了したのち、脅迫文テキストをデスクトップに作成します。

図32 MegaCortexが作成する脅迫文テキスト

以下は作成された脅迫文テキストをメモ帳で開いた様子ですが、一般的なランサムウェアと比較して攻撃者のより強気な文言がいくらか並んでいます。

図33 MegaCortexの脅迫文テキストの文面(デスクトップに作成される)

脅迫文テキストの冒頭に「この文章を読んでいるということは、我々が貴方の企業ネットワークをハッキングしたことを意味する」とあるように、MegaCortexが企業を狙った標的型攻撃を目的として開発されたランサムウェアである点や、感染源についても、メール等を経由した感染源よりは、どちらかというと攻撃者自身による手動の感染を匂わせています。これは解析でも見えてきたPsExec等によるライブ(実況)実行による感染にも通じるものがあります。

【補足情報】

ランサムウェアの脅迫文の提示方法は大きく分けて2種類あり、一つはこうしてテキストファイルを作成して被害者に読ませる方法と、2つ目は目立つGUIを表示して脅迫する方法です。後者は見た目が派手でありインパクトはありますが、GUIを表示しないといけないためランサムウェア本体がGUIの作成に有利なC#で作成されているケースが多く、C++で作成されているランサムウェアの多くは前者の方法(テキストファイルでの脅迫)を取ります。C#で作成されている一般的なランサムウェアは、開発に使用された.NET frameworkのバージョンが感染環境にインストールされていないと実行エラーが出るなどのケースが少なくなく、また、デコンパイルできるケースが多く解析しやすいため、C++で作成されたランサムウェアのほうが比較的洗練された印象を持ちます。なお、LockerGogaやMegaCortexはC++で開発されています。

なお、暗号化処理の解説でも記載したように、MegaCortexは暗号化処理のみ特殊なファイルの書き込み(ネイティブAPIの利用)を採用していますが、脅迫文テキストなどのファイル作成に関しては一般的なプログラムと同様の出力(WriteFileが内部的に呼び出されるライブラリなどを利用したファイル書き込み)を行っています。

図34 MegaCortexが脅迫文テキストを出力する際の挙動ログ

以上の復旧作業の妨害操作と脅迫文テキストの作成を終えると、MegaCortexは自身を終了し目的を達成します。

なお、MegaCortexは横展開も自動起動エントリーの作成も行いません。つまり、LockerGoga等と同じく、一度きりの使い捨てランサムウェアとなります。


■ログイン画面をロックする新型MegaCortex V4の出現

本記事を執筆している最中(2019年11月初旬)、早くもMegaCortexの新しいバージョンV4が出現しました。MegaCortex V4であることの証は暗号化されたファイルの拡張子に含まれます。

図35 MegaCortex V4に暗号化されたファイルの拡張子

MegaCortex V4はこれまでのMegaCortexと比較しさらに更に大きな変更が加えられていました。

MegaCortex V4の1つ目の大きな特徴は、「ログイン画面のロック(ログインパスワードの強制変更)」です。MegaCortex V4は実行されると以下のコマンドにより、ログインパスワードを強制的に変更します。

実行されるコマンド:net.exe net user <アカウント名> ojvpPzFWF/wAr+eF
図36 MegaCortex V4がアカウントのパスワードを変更する挙動ログ

また、以下の2つのregコマンドによりログイン画面にメッセージを追加します。

実行されるコマンド1:
reg.exe reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /f /t REG_SZ /v legalnoticecaption /d "Locked By MegaCortex"
実行されるコマンド2:
reg.exe reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /f /t REG_SZ /v legalnoticetext /d "Contact: Victoriareimann@mail.com or Casiuslerman@mail.com

以下は、上記操作における実際の挙動ログの様子です。

図37 MegaCortex V4がログイン画面にメッセージを追加する挙動ログ

これらの操作により、ユーザーがログオフまたはPCを再起動させると、以下のような状態になり、従来のパスワードではログインすることができなくなります。

図38 MegaCortex V4に書き換えられたログイン画面

この「net.exe」を利用したパスワード変更によるアカウントの締め出しは、LockerGogaでも見られた手口ですが、LockerGogaの記事でも言及したように、LockerGogaはユーザーが脅迫文を見る暇もなくログオフさせてしまっていたため、ユーザーが攻撃者に接触する機会を損失していましたが、MegaCortexは上記のようにログイン画面に攻撃者の連絡先メールアドレスを表示させるという策をとることで、ユーザーがログオフ(または再起動)しても攻撃者に接触できる機会を残すことに成功しています。

なおこの際、MegaCortexがパスワードを追加または変更するアカウントは、管理者アカウント(Administrator)のみに限定しています。以下は、MegaCortex V4に感染する前と後の端末のアカウント一覧ですが、管理者アカウントのみに対しパスワードが強制変更(追加)されていることがわかります。この辺りの特徴もLockerGogaによく似た部分の一つです。

図39 MegaCrotex V4がパスワードを強制変更する前後の比較の様子

MegaCortex V4の2つ目の特徴は、V3まで本体EXEが実施していた暗号化ファイルのスキャン(暗号化すべきファイルのリスト作成)を独立したDLLに分離しています。また、ファイルの暗号化操作についても独立したDLLに分離させており、攻撃者が単一EXE内に機能を集中させず、できるだけ機能分離させようとしてきていることや、さらに(Rundll32をホストプロセスにする等)正規プログラムの多用により、OS標準の正規プログラムができることはあえて極力正規プログラムにまかせることで、本体EXEと不正な挙動との動線を隠し、検知逃れを試みようとしている背景が伺い知れます。

図40 ファイルのスキャンと暗号化処理をDLLで分離させるMegaCortexV4

MegaCortex V4の3つめの特徴は、脅迫文の変化です。

上に確認した挙動の通り、本文中にはアカウントのパスワードを変更した旨の記載などが見られ、特に注目すべき点として、ユーザーのデータをダウンロードしており暗号化に対する身代金を払わなければそれらのデータを公開(流出)させるという趣旨の脅迫が新たに確認されました。

図41 MegaCortex V4 が作成する脅迫文テキスト

これまで多くのランサムウェアを見てきましたが、こうしたファイルの流出を匂わすランサムウェアはあまり見かけません。
実際には、今回のMegaCortex V4の検体からはデータを流出させる挙動は現時点で確認していませんが、今回のこの脅迫文の変化は非常に注意すべき状況にあると感じます。
攻撃者がMegaCortexに感染させることに成功しているということは、その環境はすでに何らかの別の脅威リスクに侵されている可能性が高く、攻撃者が手動のハッキングによりすでにユーザーのデータを盗み出せている可能性や、MegaCortex以外のマルウェアを利用してユーザーのデータを入手できている可能性も十分ありえます。
今後、もしランサムウェア本体が情報流出の付加機能を持ち始めた場合、これまでとは性質が異なるさらに大きな脅威に発展するかもしれません。
そうなった場合、たとえランサムウェアに感染しても暗号化されたファイルの復旧は最悪諦めることはできるが、データの流出だけは困るというユーザー層は一定以上いると想定され、そうしたケースのランサムウェア感染インパクトはより高くなります。攻撃者にとっては、これまでランサムウェアの身代金支払いを諦めていた層からも身代金を巻き上げられる可能性を含んでいるため、世界中のランサムウェア開発者がいずれその辺りに着目し始めるのは時間の問題かも知れません。

今回のMegaCortexというランサムウェア一つを見ても、こうして解析記事を執筆している合間に次々と新しい機能を持ち改良された亜種が休むまもなく出現している状況にあり、攻撃者はあきらかに防御製品の詳細な検知テクニックや攻撃アイデアを日々研究・模索していると考えられ、引き続きランサムウェア動向には注視が必要であるといえそうです。


※今回使用した検体のハッシュ値:

86aeea7b383e35d4eec0219f031935648ddcf0b257196d3b60e44091ac4e99c2
2fc0512083ca44f2669815a8ce8fdcf1eaac63a282fbbc4c1c0892422816251f
7CE65E84FE4161B8610C93345352C12A6A311251B0FA27576FF3E10B43664BA5
0858bc69e02c730a55f760f01374bdc378aaff806478d1c18f9e587d7121b56a
932f74715272fe7517bdb26318835e77d46c64517f83cc92580dec8cba3ac286
f5d39e20d406c846041343fe8fbd30069fd50886d7d3d0cce07c44008925d434
ca0d1e770ca8b36f6945a707be7ff1588c3df2fd47031aa471792a1480b8dd53