エクスプロイトチェーン「ToolShell」を活用する脅威アクターを掘り下げる

文●フォーティネットジャパン 編集●ASCII

提供: フォーティネットジャパン

  • この記事をはてなブックマークに追加
  • 本文印刷

本記事はフォーティネットジャパンが提供する「FORTINETブログ」に掲載された「ToolShellキャンペーンの裏側」を再編集したものです。

影響を受けるプラットフォーム:Microsoft SharePoint Enterprise Server 2016、
               Microsoft SharePoint Server 2019、および
               Microsoft SharePoint Server Subscription Edition
影響を受けるユーザー    :あらゆる組織
影響            :リモート攻撃者が脆弱なシステムの制御を取得
深刻度           :クリティカル

 FortiGuard Labsは現在、オンプレミスのMicrosoft SharePointサーバーを標的とする複数の脅威アクターを追跡しています。この攻撃は、新たに特定された「ToolShell」と呼ばれるエクスプロイトチェーンを活用します。

 脅威アクターは、リモートコードの実行を実現するために、過去にパッチが適用されている2つの脆弱性(CVE-2025-49704、CVE-2025-49706)、および新しい2つのゼロデイ亜種(CVE-2025-53770、CVE-2025-53771)を組み合わせています。CISAは、脅威がエスカレートしていることを踏まえて、すでにCVEを「既知の悪用された脆弱性(KEV)」カタログに追加しており、FortiGuard Labsは詳細な脅威シグナルレポートを発行しています。実際のエクスプロイトは、「spinstall0.aspx」を使用した既知の攻撃を除き、加速しています。本ブログでは、進行中の一連の攻撃による現実世界のインシデントについて深く掘り下げます。

図1:「spinstall0.aspx」の悪用

探査活動

 以下は、IPConfig情報をリモートサーバーにアップロードするために使用されるシンプルなCURLコマンドとPowerShellコマンドを示しています。

図2:CURLコマンド

図3:PowerShellコマンド

GhostWebShell

 このASP.NET Webシェルは、リモートコードの実行および永続化アクセス用に設計されている高度なツールです。このツールのコアには、Base64でエンコードされたASP.NETページが埋め込まれています。Webシェルが起動すると、埋め込みページは「?cmd=」パラメータを受け入れるため、攻撃者は、任意のシステムコマンドを渡すことができます。このシェルは次に、指定された命令を実行するために、入力内容を動的にデコードし、「cmd.exe /c <command>」を生成します。

図4:Base64でエンコードされた内容

 重要な点として、本Webシェルは標準出力(STDOUT)と標準エラー(STDERR)の両方をキャプチャし、結果を<pre>タグで囲んだ後、リクエスト者に送り返します。これにより攻撃者は、HTTP経由でコンソールに対話的にアクセスすることが可能で、侵害されたサーバーと直接コマンドライン操作を行うことができます。

図5:デコードされた内容

 Webシェルは、複数の高度な手法を利用することで、特にプリコンパイルされたSharePoint環境においてステルス性を維持し、検知を回避することができます。

 また、リフレクションを使用して、BuildManagerの内部フラグを一時的に操作します。これにより、標準的なアプリケーションのプリコンパイルチェックを迂回して、カスタムVirtualPathProviderを登録することができます。このVirtualPathProviderは、ファイルレス形式の活動の鍵であり、メモリまたは非標準的な場所から、悪意のあるページを注入することができます。

 その後、注入されたページは、正規のSharePointパス(「/_layouts/15/ghostfile<random number>.aspx」など)を装って表示されます。このWebシェルは、Server.Execute()を使用してコマンドを実行し、出力をレンダリングした後、痕跡を最小限に抑えるために、BuildManagerの元のフラグを慎重に復元します。また、例外は、カスタムErrors HTTPヘッダー内でのみ表示されるため、レスポンスの本文内での明示的なエラーメッセージを避けることができます。

 基本的に、このWebシェル「GhostWebShell」は軽量なメモリ常駐コマンドであり、SharePointとASP.NETの内部を巧妙に悪用することで、永続化、実行、高度な回避を行うことが可能で、エクスプロイト後の強力なツールとなっています。

図6:GhostWebShell

KeySiphon

 最初に、現在の「HttpContext」を取得して保留中のサーバーエラーおよびレスポンスのバッファーを消去することで、注意を引かないクリーンなレスポンスを行う準備をします。次に、プレーンテキストの偵察レポートを作成します。「System.Environment」を使用して、ホストの詳細情報(論理ドライブの数とリスト、マシン名、システムおよび作業ディレクトリ、CPUコア数、システム稼働時間、ユーザー名、オペレーティングシステム、およびCLRバージョン)を取得します。

図7:システム情報の収集

 KeySiphonは実行時に「System.Web」を読み込み、プライベートメソッドの「MachineKeySection.GetApplicationConfig()」を呼び出すことで、アプリケーションの検証キー、復号化キー、および選択されている暗号化モードを取得します。攻撃者は、これらの秘密情報を所持することで、認証トークンの偽造、逆シリアル化やデータ操作のためのViewStateメッセージ認証コード(MAC)の改ざん、および同じアプリケーションドメイン内の保護されているデータの復号化を行うことができます。

 最後に、インテリジェンスバンドル(収集データ)全体をHTTPレスポンスに書き込み、「Response.End()」を使用して実行を終了することで、正規ページの内容が後に続かないようにします。

図8:設定の収集

結論

 SharePointが活発に悪用されていることは、依然として価値の高い標的であることの証明であり、攻撃者は、欠陥を迅速に武器化することで、リモートコードの実行を実現することができます。FortiGuard Labは、IPSシグネチャをリリースしており、既知のIOC(Indicators of Compromise:侵害指標)をブロックします。ユーザーは、このエクスポージャー期間(WoE)を終わらせるために、迅速なパッチの適用、多層的なネットワークおよびエンドポイント検知、および厳密なログレビューを組み合わせる必要があります。

フォーティネットのソリューション

 本レポートに記述されているマルウェアは、FortiGuardアンチウイルスによって次のように検知されブロックされます。

 MSIL/Agent.NEM!tr
 MSIL/Agent.EME!tr
 HTML/MalWebshell.C434!tr
 HTML/Webshell.231A!tr

 FortiGuardアンチウイルスサービスは、FortiGate、FortiMail、FortiClient、およびFortiEDでサポートされています。FortiGuardアンチウイルスエンジンは、これらの各ソリューションに含まれています。その結果、最新の保護を備えたこれらの製品を利用するお客様は保護されます。

 FortiGuard Labsは、この攻撃に対して以下のIPSシグネチャを提供します。

 MS.SharePoint.ToolShell.Remote.Code.Execution

 また、フォーティネットの無償のトレーニングモジュールであるサイバーセキュリティのFortinet Certified Fundamentals(FCF)を受講することをおすすめします。このモジュールは、エンドユーザーが各種のフィッシング攻撃を識別して自らを保護する方法を学習できるよう設計されています。

 FortiGuard IPレピュテーションおよびアンチボットネットセキュリティサービスは、フォーティネット分散ネットワークからの不正送信元IPデータを集約することで、これらの攻撃をプロアクティブにブロックします。この分散ネットワークは、脅威センサー、CERT、MITER、協力関係にある他社、その他のグローバルソースが連携し、悪意ある送信元に関する最新の脅威インテリジェンスを提供しています。
本件の脅威またはその他のサイバーセキュリティ脅威がお客様の組織に影響を与えていると思われる場合は、当社のグローバルFortiGuardインシデントレスポンスチームまでお問い合わせください。

IOC(Indicators of Compromise:侵害指標)

IP
157[.]245[.]126[.]186
159[.]203[.]88[.]182
146[.]190[.]224[.]250
203[.]160[.]80[.]77
203[.]160[.]86[.]111
205[.]198[.]84[.]197
159[.]89[.]10[.]213
165[.]232[.]162[.]99
185[.]169[.]0[.]111
146[.]70[.]41[.]178
165[.]154[.]196[.]91

ファイル
10e01ce96889c7b4366cfa1e7d99759e4e2b6e5dfe378087d9e836b7278abfb6
7e3fff35ef909c556bdf6d9a63f0403718bf09fecf4e03037238176e86cf4e98
0548fad567c22ccf19031671f7ec1f53b735abf93dc11245bc9ea4dfd463fe40
3adbebbc2093615bb9210bfdb8ebb0841c62426bee8820f86ff0a64d15206041

■関連サイト