This post is also available in: English (英語)
概要: SpringShell攻撃をブロックするCortex XDRのアプローチ
最近、エンタープライズ向けJavaアプリケーション構築用オープンソースフレームワークのSpring FrameworkとSpring Cloud Functionにおける2つの脆弱性が開示されました。本稿では、Cortex XDRがSpringShellおよび関連するSpring Cloud FunctionのRCE(リモートコード実行)の両方に対して提供しているカバレッジについて掘り下げます。
Cortex XDRはSpringShell攻撃を含むエンドポイント攻撃に対する包括的保護を提供します。Windows、Linux、Macの各システムにおいて、BTP (Behavioral Threat Protection)、AIによるローカル分析、クラウドベースのマルウェア分析その他のセキュリティエンジンにより、SpringShellとその他の関連エクスプロイトのエクスプロイト後のアクティビティのブロックを支援します。
Cortex XDRは、偵察・エクスプロイトの初期兆候からプロセスが起動後に示す振る舞いにいたるまで、攻撃ライフサイクルのできるだけ多くのステップをブロックするように設計されています。しかしCortex XDRは、たとえばエクスプロイト段階などの攻撃ライフサイクルの初期段階で攻撃をブロックし、その後の感染や被害を防ぐことにも重点を置いています。たとえばSpringShellに対し、Cortex XDRエージェントはWindows、Linux、Macシステム上でエクスプロイト後のアクティビティを止めるほか、WindowsとLinuxシステム上ではエクスプロイト自体をプロアクティブにブロックするのに役立ちます。
本稿では、Cortex XDRがJava Deserialization Exploit Protectionを使い、Linux・Windows環境におけるSpringShellエクスプロイトをブロックする方法について詳しく説明します。Cortex XDRがSpringShellに対してWindows、Linux、Macのエンドポイントを保護する方法については、Unit 42が公開したこちらのSpringShellブログをご覧ください。Javaエクスプロイトの詳細についてはLog4Shellのブログポストをご覧ください。
Cortex XDR 対 SpringShell
SpringShellへの対応としてCortex XDRのリサーチチームは、エクスプロイトの発見から数日内に、Linuxエージェント用の関連エクスプロイトCVE-2022-22963を緩和する緊急コンテンツアップデートを発行しました。さらにCortex XDR 7.7とコンテンツバージョン460-88346のリリースにより、WindowsおよびLinuxデバイスに対するJava Deserialization Endpoint Protection Module (EPM)も追加し、公開時点で既知であった概念実証(PoC)用にCVE-2022-22963およびCVE-2022-22965の両方のカバレッジを提供しました。
本稿ではCortex XDRがこのアクティビティを最初期段階でブロックするその方法について掘り下げます。
これらのエクスプロイトはデシリアライゼーションか
正確に言えばこれらはデシリアライゼーションのエクスプロイトではなく、入力検証の問題です。1つめのエクスプロイト(CVE-2022-22963用)は、「攻撃者がリクエストヘッダに特定のフィールドを指定すれば、それを使って後でjavaコマンドを実行させられる」というものです。このエクスプロイトに対しては「リクエストヘッダからのこの特定フィールドの実行を許可しない」という修正がなされました。
2つめのエクスプロイトは、「Springの機能により、HTTPリクエストパラメータを使えば、特定のjavaクラス属性にアクセスできてしまい、そのクラス属性のアクセス・変更が可能になる」というものです。このエクスプロイトは「隠された」クラス属性(たとえば「class」属性)へのアクセスによって引き起こされます。これにより、それまではアクセスできなかったべつのクラスや領域にアクセスできるようになり、攻撃者がさまざまなエクスプロイト方法を選べるようになります。これらのエクスプロイトに対し、Springチームは「開発者のクラスの名前付きプロパティに対してのみアクセスできるようにする」ことで修正しました。このエクスプロイトについての詳細は、Unit42による根本原因分析をご覧ください。
Cortex XDR 対 CVE-2022-22965 (別名 SpringShell、Spring4Shell)
Unit 42のブログで詳しく説明されているように、公開されているエクスプロイトは、Springの動いているTomcatサーバーのログ出力用ディレクトリを変更し、サーバー提供ディレクトリに攻撃者がWebシェルを書き込むことで、攻撃者がホストを完全な制御下におけるようにします。
Windows・Linux両ホスト上のJava Deserializationモジュールは、関連する関数をフックし、サーバー属性の変更が、悪意のあるコードのパスからかどうかを検証します。その場合、Cortex XDRはこのアクティビティを検出します。
WindowsホストでSpringShellのエクスプロイト試行がブロックされる
Cortex XDR 対 CVE-2022-22963 (別名 Spring Cloud Function RCE)
Spring Cloud Functionのエクスプロイトは、悪意のあるリクエストを作成することでjava コマンドのインジェクションを引き起こすリモートコマンド実行脆弱性(RCE)のエクスプロイトです。この製品はあまり一般的ではありませんが、エクスプロイト方法の実装は容易で、SpringShellとはちがい、現在公開されているPoCのエクスプロイトにWARファイルをデプロイしたApache Tomcatサーバーは必要ありません。
Cortex XDRのJava Deserializationモジュールはjavaのプロセス実行関数をフックし、その関数が脆弱なチェーンから呼び出されていないか検証します。その場合プロセス作成がブロックされてjavaが終了し、エクスプロイト試行がブロックされます。
Spring Cloud Functionのリモートコード実行のエクスプロイト試行がLinuxホストでブロックされる
エクスプロイト後の保護
SpringShellやこれと似た多くの攻撃によるWebサーバー侵害への対応の一環として、弊社はエクスプロイト後のアクティビティに関連した汎用ルールやカスタムルールを作成しています。そうしたエクスプロイト後のアクティビティには、Webシェルのドロップや、エクスプロイトで得たアクセスを使ってのさらなるラテラルムーブなどがあげられます。
BTPとAnalyticsの両スイートがもつ検出機能は汎用的な攻撃手法を緩和しますが、これらと似たアクティビティをブロック・検出するのに役立つ以下のカスタムルールも追加しました。
対象 | 説明 |
---|---|
Cortex XDRエージェント | BTP:
|
Cortex XDR Analytics BIOC | Process execution with a suspicious command line indicative of the Spring4Shell exploit (Spring4Shellエクスプロイトを示唆する疑わしいコマンドラインでのプロセス実行) |
Cortex XDR Analytics BIOC | Suspicious HTTP Request to a vulnerable Java class (脆弱なJavaクラスへの不審なHTTPリクエスト) |
Cortex XDR Analytics BIOC | Uncommon jsp file write by a Java process (Javaプロセスによる一般的でないjspファイルの書き込み) |
結論
Cortex XDRエージェントを最新バージョン・最新コンテンツバージョンに更新してください。とくにこれらのエクスプロイトに対しては、Cortex XDRエージェントをバージョン7.7またはそれ以降、コンテンツアップデート460-88346またはそれ以降にアップグレードすることをお勧めします。さらに、エクスプロイト保護ポリシーを使ってWindowsホスト上のJava Deserializationモジュールを有効にすることをお勧めします。
高度な攻撃者がこのエクスプロイトを利用する可能性があります。これを防ぐには、最新エージェントバージョン・コンテンツの更新、SpringShell関連Unit 42ブログに記載の緩和策活用を強く推奨します。
また、Log4jのインシデント対応シミュレーションシステムを使うと、新たな脆弱性が発見された場合の侵害兆候のハンティング、アラート調査、脆弱なソフトウェアの発見方法を学べます。