Image copyright by JAXA
脅威の調査

Dridex ボットで拡散されるランサムウェア「Entropy」

あるランサムウェアに使用されているコードの一部が Dridex マルウェアに使用されているものと類似しており、共通の起源を持っていることを示唆しています。

** 本記事は、Dridex bots deliver Entropy ransomware in recent attacks の翻訳です。最新の情報は英語記事をご覧ください。**

Entropy と呼ばれるランサムウェアが展開されるインシデントが 2 件、それぞれ別の組織において発生しました。これらのインシデントにおいて、攻撃者はランサムウェアを起動する前に、リモートアクセスを提供するツールである Cobalt Strike ビーコンと Dridex マルウェアを標的組織の一部のコンピューターに感染させていました。

ソフォスのアナリストが Entropy ランサムウェアに遭遇したのは、今回のインシデントが初めてでした。注目すべきは、2 件のインシデントの間で攻撃者が採用した手法に大きな違いがあったことです。たとえば、攻撃者が標的組織への足がかりを得る方法、攻撃者が標的組織のネットワーク内に留まった時間、攻撃の最終段階の準備に使用されたマルウェアが異なっていました。

攻撃には同一の部分もありました。どちらの事例においても、攻撃者はより多くのマシンを感染させる手段として Cobalt Strike に大きく依存しており、標的組織のマシンにシステム保護機能がインストールされているかどうかによって攻撃の成功度合いが変化しています。また、攻撃者は複数のクラウドストレージプロバイダーに個人情報を大量に流出させていました。フォレンジック調査を通じて、他のマルウェアの配布に使用される汎用的なマルウェアである Dridex の複数のインスタンスが確認されました。

Entropy のランサムノート (身代金要求文書)

1 件目のインシデントでは、北米の報道機関のネットワークに存在していた ProxyShell の脆弱性を悪用して同機関の Exchange サーバーにリモートシェルがインストールされ、他のコンピューターに Cobalt Strike ビーコンを拡散するのに利用されました。攻撃者は 12 月初めの攻撃開始より前に、4 か月以上にわたって標的組織をじっくりと調査し、データを盗み出していました。攻撃発生後のフォレンジック調査により、いくつかの感染したマシンに複数の Dridex ペイロードが存在することが判明しました。

また、Entropy が用いられた 2 件目のインシデント (この攻撃は地方公共団体を標的としたものでした) の分析が行われました。その結果、攻撃者は悪意のある電子メールの添付ファイルによって標的のコンピューターを Dridex ボットネット上のトロイの木馬に感染させ、Dridex を用いて追加のマルウェア (および商用のリモートアクセスユーティリティ ScreenConnect) を配信していたことが判明しました。さらに、攻撃者は標的組織のネットワークのラテラルムーブメントを行っていました。この 2 件目の攻撃では、あるマシンでの不審なログイン試行が最初に検出されてから、攻撃者が標的組織からデータを流出させ始めるまで、わずか 75 時間ほどしか経過していませんでした。データの流出は、まず WinRAR をインストールして、WinRAR を用いてファイルをアーカイブに圧縮したのち、アーカイブを privatlab.com、dropmefiles.com、mega.nz など複数のクラウドストレージプロバイダーにアップロードするという手順で行われました。

また、被害を受けた両組織のネットワーク上のすべてのマシンにあらかじめエンドポイント保護がインストールされていたわけではありませんが、保護が有効化されていたマシンでは、攻撃者はランサムウェアの実行に失敗しました。その結果、偶然にも興味深い検出シグネチャが出現しました。Entropy ランサムウェアを保護するために使用されていたパッカーコードが、以前 Dridex が使用したパッカーコードを検出するために作成された検出シグネチャ (Mal/EncPk-APX) によって検出されたのです。

さらに厳密なリバースエンジニアリングの結果、このランサムウェアが動作の難読化 (および解析の妨害) のために使用している他のサブルーチンの一部が、Dridex において同様の機能に使用されているサブルーチンと類似していることが SophosLabs のアナリストによって発見されました。この結果は Dridex と Entropy の関係を決定づけるものではありません。しかし、この結果を得るにはコードの比較を複雑化するため施された難読化を、多くの労力をもって突破する必要がありました。

攻撃者の行動および無料/商用ツールの利用

Entropy ランサムウェアの攻撃者は、2 件の事例のいずれにおいても、Windows Sysinternals のツールである PsExecPsKill、IT 管理者が Active Directory サーバーを照会するためのユーティリティである AdFind などの無料ツールを用いていました。また、無料の圧縮ユーティリティ WinRAR を使用して窃取した個人情報をまとめて圧縮し、Chrome ブラウザを使用して複数のクラウドストレージプロバイダーにアップロードしていました。

残念ながら、このような手口はランサムウェアの攻撃者の間ではごく一般的なものです。エンドポイント保護ツールは通常、これらのプログラムやその他のユーティリティプログラムの動作をブロックしません。正規の使い方をされることも多いからです。

今回の 2 件の事例のいずれにおいても、攻撃者は攻撃の最終段階でマシンにリモートコントロールツールである Cobalt Strike をインストールし、実行することを繰り返し試みました (が、失敗に終わっています)。2 件目の事例では、Cobalt Strike の実行に何度も失敗した後、Metasploit の Meterpreter モジュールを一部のマシンにインストールしたようです。最終的に、攻撃者は ScreenConnect という商用リモートアクセスツールのインストールを試みました。ScreenConnect 内のファイル共有ツールを使用して、保護されたマシンに Cobalt Strike をむりやりインストールしようとしましたが、この試みも失敗しています。

最終的に、攻撃者は管理者権限を奪った Active Directory サーバーに以下の一連のファイルをドロップしました。これらのファイルは C:\share$ にドロップされました。

  • comps.txt – 攻撃するホストのリスト
  • pdf.dll – ランサムウェアのペイロード
  • PsExec.exe – Microsoft 製の正規のアプリケーション
  • COPY.bat – PsExec を使用して pdf.dll をすべてのホストにコピーするコマンド
  • EXE.bat – PsExec を使用して pdf.dll を全ホストに実行するコマンド

ファイルをドロップした後、攻撃者は COPY.bat および EXE.bat を続けて実行しました。

Dridex と Entropy のサブルーチンの比較

どちらの事例においても、Entropy ランサムウェアは 32 ビットアーキテクチャ用にコンパイルされた Windows DLL ファイルの形で配信されました。また、Dridex のペイロードは、32 ビットおよび 64 ビットアーキテクチャ用にコンパイルされた EXE ファイルおよび DLL ファイルの両方から復元されました。比較のため、32 ビット用の Dridex ボットに着目しました。

攻撃者は、Entropy ランサムウェアの DLL を標的組織ごとにカスタムされたバージョンにコンパイルしていました。このマルウェアは、感染したマシンにドロップする HTML ランサムノートに使用されるテキストや画像など、標的組織へのハードコードされた参照をコード内に含んでいます。

ランサムノートは、警察や FBI に連絡しないことや (「彼らは相手にしないか、興味を持たないでしょう」)、身代金交渉人やデータ復旧会社を利用しないこと (「彼らは交渉が上手いと自負しているようですが、実際はそうではありません。彼らはあなたのお金を受け取り、彼らの取るに足らないマニュアル (もちろん、私たちはその内容をほとんど知っています) に則って私たちとちょっとした世間話をし、失敗 (FAIL) するでしょう」) を警告しています。「失敗 (FAIL)」という単語は、ProPublica による 2019 年の調査報告から引用されたものです。この報告では、ランサムウェアによって失われたデータの復旧を専門にしているとするいくつかの会社が、実際にはただ身代金を支払っているだけだということが記されています。

攻撃者は、DLL に 2 件のパラメータを渡すコマンドラインを使ってランサムウェアを実行します。最初のパラメータは標準的な関数の呼び出しである DllRegisterServer ですが、2 件目のパラメータは、一種のパスワードとして機能する、一見ランダムな文字列でした。この文字列無しではランサムウェアは正しく動作しません。

幸いなことに、攻撃者がマルウェアの起動に使用したコマンドそのものを発見できたので、管理環境下でサンプルを調査できました。Entropy の実行コマンドは次のようなものでした。

regsvr32 c:\users\public\xyz.dll DllRegisterServer 

ランサムウェア自体は、Dridex のような汎用的なボットネット構築ボットとは必然的に機能が大きく異なるため、一行ごとの比較は困難です。その代わりに、解析を妨害するために使用されていると見られるコードの一部分を分析しました。具体的には、マルウェア本体の静的解析を妨げるパッカーコード、プログラムが実行する API コールを隠すために使用されるサブルーチン、マルウェアに埋め込まれた暗号化テキスト文字列を復号するサブルーチンなどです。

Entropy のパッカーコード

Entropy のパッカーコードは、二段階でプログラムコードを解凍します。第一層では、必要なメモリを確保し、暗号化されたデータを確保したメモリ領域にコピーしたのち、第一層に転送して実行します。次に、パッカーコードは暗号化されたデータを保存したのと同じメモリ領域の別の部分にコードを復号し、第二層に転送して実行します。

Entropy が解凍コードの最初の「層」をどのように実行するかを指示する部分は Dridex のものと類似しています。パッカーコードや、LdrLoadDll という API を参照するコード内の部分、およびそのサブルーチンを調査したアナリストは、このパッカーコードについて「Dridex v4 ローダーと非常によく似ている」と記しており、2018 年の Dridex サンプルで使用されている同種のローダーと比較しています。問題の動作は、Dridex に関する他のベンダーの調査でも注目されています。具体的には、他社のエンドポイントセキュリティ製品のメモリ保護コンポーネントである snxhk.dll という DLL を探し出し、システム保護を妨害するものです。

注目すべきは、ソフォスのエンドポイント製品には、以前から Dridex パッカーに対する静的検出機能が搭載されていることです。検出シグネチャは Mal/EncPk-APX ですが、ソフォス製品で保護されたマシンは Dridex ではなく Entropy のパッカーに対して検出を行ったことがテレメトリに示されています。

また、SophosLabs の別のマネージャーは、ソフォス製品に保護されたマシン上で攻撃者が DoppelPaymer というランサムウェアを実行しようとして失敗した際に、このパッカーコードが検出されたのを確認しています。DoppelPaymer は、(Dridex と同様) Evil Corp という犯罪集団によって作られたものであるとされており、2019 年 4 月頃から 2021 年 5 月まで使用されていました。米国財務省外国資産管理局 (OFAC) が 2019 年 12 月に Dridex を巡って Evil Corp を制裁した後この集団はランサムウェアの名前とブランディングの変更を急速に、何度も行いました。WastedLocker、Hades、Phoenix、Grief、Macaw など多くの名前を経由した後、現在はおそらく Entropy と呼ばれているようです。

ベクタ化された例外処理サブルーチン

マルウェアが自己解凍されると、パッカーは最後にエントリーポイントと呼ばれるメモリ位置でマルウェアを起動します。エントリーポイントとは、マルウェアが最初に実行する命令を開始する位置のことを指します。Dridex と Entropy の両方の場合において、エントリーポイントで起動されたコードはベクタ化された例外処理 (VEH) と呼ばれるプロセスをセットアップするものでした。このプロセスは、マルウェアの製作者がマルウェア本体に挿入する、上記のものとは別の解析妨害プロセスの一種です。VEH は、プログラムが OS の API コールを呼び出すための代替手段を設定し、コードがどのような命令で何を行っているのか正確に解析するのを難しくしています。

このような目的での VEH の利用は正規のプログラムにとって標準的な動作ではありません。そのため、VEH の利用自体が悪意のあるプログラムの存在を示す弱い証拠です。Dridex は以前から VEH の仕組みを利用していたため、より強い証拠となります。しかし、ソフォスのアナリストは、Dridex と Entropy の VEH コードがまったく同じであるとしている反面、「奇妙なことに、私は Entropy において VEH コードが使用されているのは確認していない」と指摘しています。

Entropy の文字列復号および API 解決サブルーチン

また、ランサムウェアの他の 2 つの機能を調べ、Dridex に見られる類似のサブルーチンと比較しました。まず分析されたサブルーチンは、マルウェアに埋め込まれた、暗号化された文字列を復号するために利用されるものです。

上記のスクリーンショットの左側が Dridex、右側が Entropy のサブルーチンです。これらの例のコードは、比較対照を容易にするため、アナリストによって大幅に整理されています。彼らは、文字列復号の仕組みがコードフローと論理構造の両面で 2 つとも基本的には同じであるとした上で、Entropy の方が「少しだけ最適化されている」と指摘しています。

同様に、アナリストは Dridex と Entropy が API コールを解決するために使用するサブルーチンのソースコードも比較しました。小さな違い (たとえば、Dridex は 2 つのハッシュ値を入力として受け取るのに対して、Entropy は 1 つしか受け取りません) は存在するものの、「ウォーキング (利用可能なすべての API を探索すること)」を行い、プロセス環境ブロック (PEB) およびモジュールリストを解析する仕組みは非常によく似ていることが指摘されています。

簡潔に言うと、ベース DLL 名とその関数アドレスを取得するために PEB_LDR_DATALDR_DATA_TABLE_ENTRY を用いて内部を探索するという動作は、Entropy と Dridex に共通する特徴です。

些細なことですが、もう一つ注目すべき点があります。ランサムウェアによって復号された文字列が標的組織の名前で始まり、「…falls apart. Entropy Increases. ((標的組織は) ばらばらになる。Entropy は増え続ける。)」と続く一節を含んでいることです。この一節はランサムノートのメモにもどこにも書かれておらず、バイナリ内部にのみ現れます。これはどうやら、2005 年に発表された John Green の青年小説である『アラスカを追いかけて (Looking For Alaska)』の一節を引用しているようです。「Entropy increases. Things fall apart. (エントロピーは増大する。物事はばらばらになる。)」

検出とガイダンス

どちらの事例においても、攻撃者は被害組織の警戒不足につけ込んでいました。どちらの被害組織にも、最新のパッチやアップデートが適用されていない脆弱な Windows システムが存在していました。Exchange サーバーなどに適切なパッチが適用されていれば、攻撃者は侵入した組織への初期アクセスを成功させるのにさらなる労力を要したでしょう。多要素認証が導入されていれば、これらのマシンやネットワーク上の他のマシンに不正にログインするのはさらに困難だったはずです。

Entropy ランサムウェアに感染するより前に、Cobalt Strike ビーコン (ATK/Tlaboc-A)、Dridex マルウェア (Mal/EncPk-APXTroj/Dridex-AIZ)、およびランサムウェアの他のマシンへの拡散に利用されるバッチスクリプト (Troj/Agent-BCJY) が検出されます。ランサムウェアのコンポーネントはメモリ内検出、動的検出、およびランタイムパッカーの静的検出など、さまざまな方法で検出されます。)

SophosLabs は Dridex と Entropy、およびこれらによる攻撃の分析に対して、Anand Ajjan、Colin Cowie、Abhijit Gupta、Steven Lott、Rahil Shah、Vikas Singh、Felix Weyne、Syed Zaidi、Xiaochuan Zhang の各氏の貢献に謝意を表します。