Rust で書かれた自己複製型ピアツーピア ワーム P2PInfect

A pictorial representation of threats to the cloud such as P2PInfect, the P2P worm written in Rust

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

概要

2023 年 7 月 11 日、パロアルトネットワークス脅威インテリジェンス調査チーム Unit 42 は、P2PInfect と呼ばれる新しいピアツーピア (P2P) ワームを発見しました。このワームは、拡張性が高くクラウドと親和性の高いプログラミング言語、Rust で書かれています。クロスプラットフォーム感染が可能で、クラウド環境で重用されている人気オープンソース データベース アプリケーション Redis を標的とします。Redis インスタンスは Linux、Windows 両オペレーティング システムで実行可能です。Unit 42 のリサーチャーは過去 2 週間、重複なしで 30万7,000 台を超える Redis システムがインターネット上で通信していることを確認しました。このうち 934 台はこの P2P ワーム亜種に対し脆弱である可能性があります。これら 30万7,000 台の Redis インスタンスすべてが脆弱というわけではないものの、このワームはそれらのシステムを標的に侵害を試みるでしょう。

P2PInfect ワームは、Lua におけるサンドボックス エスケープの脆弱性 (CVE-2022-0543) を悪用して脆弱な Redis インスタンスに感染します。この脆弱性は 2022 年に公開されましたが、現時点でそのスコープは完全にはわかっていません。ただし米国国立標準技術研究所 (NIST) の脆弱性データベース National Vulnerability Database (NVD) で、これは「緊急 (critical)」の CVSS スコア 10.0 と評価されています。さらに P2PInfect は Linux と Windows の両オペレーティング システムで実行されている Redis サーバーを悪用することから、他のワームよりも拡張性・性能が高くなっています。Unit 42 のリサーチャーが観測したこの P2P ワームは、攻撃者がこの脆弱性を利用して実行しうる深刻な攻撃の一例を示すものといえます。

P2PInfect は初期アクセスに CVE-2022-0543 を悪用したのち、大規模な P2P ネットワークへの P2P 通信を確立する初期ペイロードをドロップします。P2P 接続が確立されると、ワームは特定 OS 用のスクリプトやスキャン ソフトウェアなどの追加の悪意のあるバイナリーをダウンロードします。その後、感染したインスタンスは P2P ネットワークに参加し、今後侵害される Redis インスタンスに対し、他のペイロードへのアクセスを提供します。

この方法で CVE-2022-0543 をエクスプロイトすることで、P2PInfect ワームはより効果的にクラウド コンテナー環境内で動作・拡散できるようになります。Unit 42 のリサーチャーは、このワームが自社 HoneyCloud 環境内の Redis コンテナー インスタンスを侵害していたところを捕捉しました。HoneyCloud 環境というのは弊社が使っているハニーポット群のことで、この環境で私たちはパブリック クラウド環境全体におよぶ新たなクラウドベース攻撃を特定・研究しています。

Unit 42 は、この P2PInfect キャンペーンが、この堅牢な P2P コマンド & コントロール (C2) ネットワークを利用した、より強力な攻撃の第 1 段階であると考えています。P2PInfect の悪意のあるツールキット内には「マイナー (miner)」という単語が何度か出現します。ただしリサーチャーはクリプトマイニング オペレーションが行われていたという決定的な証拠は何も発見していません。またこの P2P ネットワークは「自動更新」など複数の C2 機能を備えているようです。この機能を使って、P2P ネットワークのコントローラーが新たなペイロードをネットワークにプッシュし、悪意のあるオペレーションのパフォーマンスを変更・強化していた可能性があります。Unit 42 のリサーチャーは監視を続け、必要に応じて最新状況を提供します。

パロアルトネットワークスのお客様は、以下の製品を通じ、本稿で説明した種類の脅威に対する保護を受けています。

P2PInfect による侵害の懸念があり弊社にインシデントレスポンスに関するご相談をなさりたい場合は、こちらのフォームからお問い合わせください(ご相談は弊社製品のお客様には限定されません)。

関連するUnit 42のトピック Cloud, Worm, P2P

目次

自己複製型ピアツーピア ワーム
CVE-2022-0543 の悪用
P2PInfect が CVE-2022-0543 を利用して脆弱な Redis インスタンスに感染する方法
ネットワーク通信動作
ノード通信
スキャン動作
P2PInfect におけるその他の観測
Monitor プロセス
結論
IoC
SHA256 サンプル
IP
CNC リクエスト

自己複製型ピアツーピア ワーム

Unit 42 は 2023 年 7 月 11 日、それまでには知られていなかった P2PInfect の最初のインスタンスを自社 HoneyCloud 環境内で発見しました。HoneyCloud 環境というのは弊社が社内で使っているハニーポット群のことで、この環境で私たちはパブリック クラウド環境全体におよぶ新たなクラウドベース攻撃を特定・研究しています。

P2PInfect ワームは P2P ネットワークを使って悪意のあるバイナリーの送信を支援しています。漏えいしたシンボルにマルウェア作者のプロジェクト構造が反映されていて、そのなかに P2PInfect という用語が出現することから、この名前が選ばれました (図 1)。

画像 1 は、名前と Redis モジュールを含む、Windows バージョンのアーティファクトのスクリーンショットです。
図1. Windows バージョン、名前、Redis モジュールのアーティファクト (痕跡)

収集された P2P ワームのサンプルはすべて、拡張性が高くクラウドに適したプログラミング言語である Rust で書かれています。これにより、このワームは、Linux と Windows の両方のオペレーティング システム上の Redis インスタンスを標的としてクロスプラットフォームで感染できます (Redis が公式には Windows オペレーティング システムをサポートしていない点に注意してください)。

P2PInfect ワームは、Lua におけるサンドボックス エスケープの脆弱性 (CVE-2022-0543) を悪用して脆弱な Redis インスタンスに感染します。この特定の脆弱性に対する最初のエクスプロイトは 2022 年 3 月に公開され、感染した Redis インスタンスがMuhstik ボットネットに結びつけられる結果になりました。ただし、P2PInfect ワームは、Muhstik ボットネットとの関連性が知られていない、別の悪意のあるネットワークと紐づいているようです。

Lua の脆弱性を悪用した最初の感染の後、初期ペイロードが実行され、より大規模な C2 ボットネットとの P2P 通信が確立されます。これは、今後侵害される Redis インスタンスに他のペイロードを配信する P2P ネットワークとして機能します。P2P 接続が確立されると、ワームはスキャナーなどの追加のペイロードをダウンロードします。その後、新たに感染したインスタンスは P2P ネットワークに仲間入りし、今後侵害される Redis インスタンスにスキャン ペイロードを提供します。

CVE-2022-0543 を悪用することで P2PInfect は効率的にクラウド コンテナー環境を侵害できます。コンテナーが使える機能は限られていて、たとえば「cron」サービスは存在しません。Redis を悪用する最も活発なワームの多くは、cron サービスをリモート コード実行 (RCE) の実現手段として使いますが、この手法はコンテナーでは使えません。P2PInfect には、CVE-2022-0543 のエクスプロイトが組み込まれていて、これによって、クラウド コンテナー環境を含め、可能な限り多くの脆弱性シナリオをカバーしようとしています。

次のセクションでは、エクスプロイトのペイロードP2PInfect の動作P2P ネットワーク プロトコルの一部詳細を解説します。

この P2PInfect ワームはまだ発見されたばかりなので、本稿ではその動作概要やサポートされる P2P アーキテクチャ、基礎的なサンプル分析の提供を中心に取り上げますが、いずれ必ず追加の分析と研究を提供します。

CVE-2022-0543 の悪用

P2PInfect は現在、初期アクセスに Lua におけるサンドボックス エスケープの脆弱性 (CVE-2022-0543) を悪用しています。この脆弱性はこれまで MuhstikRedigo といった攻撃で悪用されてきましたが、いずれの場合も侵害された Redis インスタンスが他のシステムに対するサービス拒否 (DoS)、フラッディング、ブルートフォースなどの攻撃に参加する結果となりました。

このエクスプロイト ベクトルは、これまでに確認されたものと似たパターンを踏襲しています。ただし P2PInfect のエクスプロイト後のオペレーションは本脆弱性のこれまでの悪用とは大きく異なります。この脆弱性は Redis アプリケーション側の脆弱性ではなく、Lua サンドボックス側の脆弱性であることに注意することが重要です。

このキャンペーンは脆弱な Redis インスタンスを標的にし、ワームのようなオペレーションを実行しますが、Redis を標的にしてワームを展開することで知られる他の脅威グループ (Automated Libra 別名 PurpleUrchinAdept Libra 別名 TeamTNTThief Libra 別名 WatchDogMoney Libra 別名 KinsingAged Libra 別名 RockeReturned Libra 別名 8220) との関連性は知られていません。

P2PInfect が CVE-2022-0543 を利用して脆弱な Redis インスタンスに感染する方法

「CVE-2022-0543 経由で Redis を悪用する」というこの P2PInfect ワームの初期感染ベクトルは、Redis インスタンスを標的とすることで知られ、クリプトジャックを重点的に行っている他のワームではあまり見られません。たとえば Adept Libra (別名 TeamTnT) や Thief Libra (別名 WatchDog) などの脅威アクターが作成したワームや、Money Libra (別名 Kinsing) の亜種を配布しているアクターらは、そうした初期感染ベクトルは使っていません。そのかわりこれらのグループは Redis の脆弱性か構成ミスを使ってオペレーションを行います。

CVE-2022-0543 は、Debian の Linux パッケージ管理によって Redis がパッケージ化/配信される方法に関連する Lua ライブラリの脆弱性です。そのためこの脆弱性は Debian ないしその派生ディストリビューション (Ubuntu など) を使っている Redis ユーザーにのみ影響します。. OS に重点を置いて Redis のサブコンポーネントを使って侵害するため、 P2PInfect のエクスプロイト作業は複雑になります。図 2 は、捕捉された CVE-2022-0543 のエクスプロイトのサンプルです。

画像 2 は、数行のコードのスクリーンショットです。これは、Debian OS 上の P2PInfect エクスプロイトです。
図2. Debian OS 上で捕捉された P2PInfect のエクスプロイトのサンプル

上の画像から、この脆弱性がどのように兵器化されているかがわかります。4 行目から確認できるとおり、この脅威アクターは /dev/tcp を通じたネットワーク リクエストを使い、ip-cnc と書かれている C2 の IP アドレスに 60100/tcp 経由で接続します。60100/tcp は、P2PInfect が C2 通信の維持に使う P2P 通信ポートの 1 つです。やはり 4 行目に表示されている初期ペイロードは /linux ディレクトリーへの GET リクエストを設定していますが、これが P2PInfect ワームの中核機能を維持するメインのドロッパーです。本稿後半で説明しますが、他のバイナリーは P2P ネットワーク内で配布されます。

ネットワーク通信動作

P2PInfect は P2P ネットワークを使って新たに感染したシステムやクラウド インスタンスにフォローアップ用のマルウェアを配布します。最初の侵害時にはシステムから P2P ネットワークへのネットワーク接続が確立され、使用されるカスタム プロトコル用のサンプルがダウンロードされます。図 3 に示すように、GET /linux コマンドに続いて、P2PInfect の中核機能のイメージがダウンロードされます。

画像 3 は Wireshark のスクリーンショットです。上に表示されているウィンドウの最初の行に PTPInfect のダウンロードを示す GET linux が表示されています。
図3. P2PInfect のダウンロードを示すネットワーク通信プロトコル

Linux と Windows OS の P2PInfect サンプルはどちらも同じ方法で通信します。linuxminerwinminerwindows (図 4) といったサンプルが、P2P ネットワークから平文でダウンロードされていました。

画像 4 は、P2P ネットワークから平文でダウンロードされたマルウェア サンプル (合計 8 つ) のスクリーンショットです。黄色でハイライト表示されています。
図4. P2P ネットワークからダウンロードされたマルウェア サンプルの一覧

中核となる P2PInfect サンプルの実行が完了すると、追加の侵害対象ホストを探してペイロードがスキャンを開始します。このスキャン オペレーションは主に公開済みの Redis ホストを狙って行われます。ただしリサーチャーは、侵害された Redis インスタンスがポート 22、SSH 経由でもスキャンを試行していたことを発見しています。SSH の侵害を狙った P2PInfect によるエクスプロイト試行はこれまで知られておらず、このスキャン オペレーションが行われている理由は不明ですが、侵害後に他の既知のワームが 22/tcp をスキャンすることはとくに珍しいことではありません。詳細はスキャン動作のセクションを参照してください。

ノード通信

このメインのドロッパーは、構成済みノードの現在のリストに記載されている他の P2P メンバーがリッスン中であればそれらと TLS 1.3 で通信します。侵害されたノードが既知の全ノードを含む json リクエストを P2P ネットワークに送信すると、C2 のインフラが更新されます。C2 インフラの更新は自動的にダウンロードされます。次の図 (図 5) は、ノードの更新の例を示しています。

画像 5 は、コード行のスクリーンショットです。nodes には合計 7 つのノードがあります。
図5. P2P ノードの更新

x.x.x.xの形式で書かれた値は現在ないし新しく学習されたノードの IP アドレスです。

スキャン動作

図 6 は、感染したホストがネットワークをスキャンして露出した SSH インスタンスを探している動作を示しています。これらのスキャン オペレーションは、P2PInfect の機能が選んだランダムなネットワーク範囲全体に発生します。

画像 6 は、Wireshark トラフィックのスクリーンショットです。これは SSH インスタンスをスキャンしているトラフィックです。No.、Time、Source、Destination、Protocol、Length、Info の各列が表示されています。
図6. SSH インスタンスを探すスキャン トラフィック

図 7 は、露出した Redis インスタンスに対する P2PInfect のスキャン オペレーションを示しています。

画像 7 は、Wireshark トラフィックのスクリーンショットです。これは Redis インスタンスをスキャンしているトラフィックです。No.、Time、Source、Destination、Protocol、Length、Info の各列が表示されています。
図7. Redis インスタンスを探すスキャン トラフィック

P2PInfect におけるその他の観測

P2PInfect サンプルが侵害したシステムに配布した初期ペイロードの一部は UPX でパックされていましたが、第 2 段階のマルウェア サンプル (minerwinminer) は UPX ではパックされていませんでした。

最初のドロッパーが実行されると、P2P ネットワーク内の他のノードに関する情報を含む、コマンド ラインから受け取った設定の復号が始まります。この P2P ポートは可変であることがわかりました。これは、ブロックやネットワーク ファイアウォールによる緩和技術に対し、攻撃が耐性をもてるようにする設計上の選択です (図 8 参照)。

画像 8 は、ワームが可変のポートを使うようすを示したスクリーンショットです。
図8. P2PInfect の可変ポート使用例

Unit 42 のリサーチャーが特定したサンプルはすべて Rust で書かれていました。このなかには内部で「シンボルが漏えい」しているものもありました。漏えいしたシンボルからは、マルウェア作者のプロジェクト構造に関するインジケーター (指標) を得られます。たとえば、windows というサンプルのメインの実行スレッドからは、プロジェクト名と脅威アクターのファイル ディレクトリーの使用状況が漏えいしています (図 9 参照)。

画像 9 は、多数のコード行のスクリーンショットです。これは、Windows 版の中核 P2PInfect サンプルの分析です。複数の場所で「void」という単語が黄色でハイライト表示されています。
図9. 中核となる Windows P2PInfect サンプルから引き出された分析

このほか、侵害されたホストと P2P ネットワーク間の通信を確立・維持するよう設計された PowerShell スクリプトも特定されました。この PowerShell スクリプトは、encode コマンドを使って通信の開始を難読化します (図 10 参照)。

画像 10 は、P2P ネットワーク接続を確立するための難読化された PowerShell コマンドのスクリーンショットです。CreateProcessW から始まっています。
図10. P2P ネットワーク接続を確立するための難読化された PowerShell コマンド

この PowerShell コマンドが実行する最初のオペレーションの 1 つが、ローカル システムのファイアウォールを設定し、侵害した Redis アプリケーションに発着する正当なアクセスをブロックすることです (図 11 の 5 行目)。次に (図 11 の 17 行目から) このスクリプトは通信ポートを開き、侵害したインスタンスに脅威アクターがアクセスできるようにします。これは永続化の一種で、これによって攻撃者は感染ホストへのアクセスを維持し、動作可能な状態に保つことができます。

画像 11 は、多数のコード行のスクリーンショットです。この 5 行目で PowerShell コマンドがローカル システムのファイアウォールを設定し、正規のアクセスをブロックしています。11 行目でこのスクリプトは通信ポートを開いています。
図11 侵害した Windows インスタンスのネットワーク トラフィック ルールを変更

復号された PowerShell (図 11) で注目すべきポイントは、次のファイアウォール構成内容です。

  • ピアツーピアのポート番号は 60102 だがこのポート番号は可変。一部のノードは同じポートを使わない
  • Redis のポート 6379 は既知の C2 の IP アドレスへの接続のみを許可
  • ファイアウォールのルール名は Microsoft Sync

Monitor プロセス

Windows OS で実行される初期 P2PInfect ペイロードで、もう 1 点興味深いのが Monitor と呼ばれるプロセスです。この Monitor プロセスは、感染ホスト上で P2PInfect の実行中プロセスの機能を維持する役割を果たします。Monitor は C:\Users\username\AppData\Local\Temp\cmd.exe にダンプされます。システム上で実行中のプロセスを列挙している Monitor (cmd.exe) のサンプルは図 12 を参照してください。

画像 12 は、P2PInfect の Monitor のサンプルである cmd.exe のプロセス ツリーのスクリーンショットです。全部で16行あります。
図12. P2PInfect の Monitor (cmd.exe) のサンプルのプロセスツリー

Monitor (cmd.exe) を起動後、最初の P2PInfect ペイロードが P2P ネットワークから自分自身の新しいバージョンをダウンロードし、それらをランダムな名前で同じ元のフォルダーに保存します。その後、暗号化された構成 (.conf) がドロップされます (図 13 参照)。

画像 13 は、フォルダー内のランダムなファイル名のスクリーンショットです。P2PInfect の新しいバージョンはこの方法で永続化を行っています。
図13. ランダムなファイル名の例

ダウンロードされた新しいバージョンの P2PInfect が実行され、脆弱な Redis インスタンスが他にもないかを探すスキャン オペレーションを開始します。最初の P2PInfect ドロッパーは、自分自身の削除を試みます (図 14 参照)。

画像 14 は P2PInfect ドロッパー自体を削除しようとする試みのスクリーンショットです。
図14 中核となる P2PInfect ペイロードの削除

結論

P2PInfect は最新の開発技法を複数選んで上手に設計されたワームのようです。とりわけ重要なのが Rust 言語の使用です。Rust を使うことで回復力と柔軟性が高まり、複数のオペレーティング システムをまたいだ急速な拡散が可能になります。

クラウドを狙う攻撃やクリプトジャッキングをめぐる脅威概況において、マルウェアの自動拡散を行う P2P ネットワークを設計・構築するというのは、それほどよくあることではありません。同時にこれは、複数のプラットフォームをまたぎ、可能な限り多く脆弱な Redis インスタンスを対象に加えて侵害することを目的として構築されたものと考えられます。

地理的に異なるリージョンにある HoneyCloud プラットフォーム内で複数のサンプルが捕捉されていることから、高い確度で P2P ノード数は増加していると考えられます。その理由は、潜在的な標的の多さ (過去 2 週間でインターネット上で通信を行った 30万7,000 台を超える Redis インスタンス) と、このワームが異なるリージョンにまたがる複数の Redis ハニーポットを侵害していたためです。ただし既存ノード数や P2PInfect に関連する悪意のあるネットワークの成長速度についての推定はまだありません。

各組織には、オンプレミス環境・クラウド環境の両方で、全 Redis アプリケーションを監視し、/tmp ディレクトリー内にランダムなファイル名が存在していないか確認することを推奨します。さらに DevOps の担当者は、Redis インスタンスを継続的に監視し、正当なオペレーションとネットワーク アクセスが維持されていることを確認する必要があります。すべての Redis インスタンスを最新バージョンか redis/5:6.0.16-1+deb11u2、 redis/5:5.0.14-1+deb10u2、redis/5:6.0.16-2、redis/5:7.0~rc2-2 より新しいバージョンに更新する必要があります。

パロアルトネットワークスのお客様は、次の方法でさまざまな種類の脅威に対する保護を受けられます。

侵害の懸念があり弊社にインシデントレスポンスに関するご相談をなさりたい場合は、こちらのフォームからご連絡いただくか、infojapan@paloaltonetworks.comまでメールにてご連絡いただくか、下記の電話番号までお問い合わせください(ご相談は弊社製品のお客様には限定されません)。

  • 北米フリーダイヤル: 866.486.4842 (866.4.UNIT42)
  • 欧州: +31.20.299.3130
  • アジア太平洋: +65.6983.8730
  • 日本: +81.50.1790.0200

パロアルトネットワークスはファイル サンプルや侵害の兆候などをふくむこれらの調査結果をCyber Threat Alliance (CTA) のメンバーと共有しました。CTA のメンバーはこのインテリジェンスを使って、お客様に保護を迅速に提供し、悪意のあるサイバー攻撃者を体系的に阻害できます。詳細についてはCyber Threat Allianceにてご確認ください。

IoC (侵害指標)

SHA256 サンプル

Linux:

  • 88601359222a47671ea6f010a670a35347214d8592bceaf9d2e8d1b303fe26d7

Miner:

  • b1fab9d92a29ca7e8c0b0c4c45f759adf69b7387da9aebb1d1e90ea9ab7de76c

Windows:

  • 68eaccf15a96fdc9a4961daffec5e42878b5924c3c72d6e7d7a9b143ba2bbfa9

WinMiner:

  • 89be7d1d2526c22f127c9351c0b9eafccd811e617939e029b757db66dadc8f93

IP アドレス

  • 35.183.81[.]182
  • 66.154.127[.]38
  • 66.154.127[.]39
  • 8.218.44[.]75
  • 97.107.96[.]14

CNC リクエスト

  • GET /linux
  • GET /linux_sign
  • GET /miner
  • GET /miner_sigg
  • GET /winminer
  • GET /winminer_sign
  • GET /windows_sign
  • GET /windows

2023-07-21 11:00 JST 英語版更新日 2023-07-20 13:08 PDT の内容を反映