マルウェア
静かに忍び寄る脅威:Atlassian Confluenceを狙うファイルレスバックドア「ゴジラ」
トレンドマイクロでは、脆弱性CVE-2023-22527の影響を受けた古いバージョンのAtlassian Confluenceが、新たなメモリ内ファイルレスバックドアの攻撃を受けていることを突き止めました。
- トレンドマイクロのリサーチャーたちは、「ゴジラ」Webシェルと呼ばれるメモリ内ファイルレスバックドアを使用して脆弱性「CVE-2023-22527」を悪用する新たな攻撃手法を特定しました。
- CVE-2023-22527は、Atlassian Confluence Data CenterとServerの古いバージョンが影響を受けており、悪用されるとリモートコード実行が可能となります。
- この攻撃では、侵害されたAtlassianサーバにローダーが仕掛けられ、その後ゴジラWebシェルが起動します。
- このゴジラWebシェルは、通信にAES暗号化を使用し、ディスクベースの検出を避けるためにメモリ内に留まる高度な中国語のバックドアです。
- 従来型のアンチウイルスソフトはファイルレス型マルウェアの検出に弱いため、この新種の攻撃の発見は、サーバへの定期的なパッチ適用と、より高度なセキュリティ対策の重要性を浮き彫りにしています。
トレンドマイクロでは「ゴジラ」という名称のバックドア型マルウェアが脆弱性「CVE-2023-22527」を悪用する新たな攻撃手法を確認しました。最初の攻撃の後、被害を受けたAtlassian Serverにローダーが仕込まれ、このローダーが「ゴジラ」Webシェルを読み込みます。2024年1月16日、Atlassianは、Confluence Data CenterとConfluence Server製品に影響を与える脆弱性CVE-2023-22527に関する注意喚起を発表しました。これを受けてトレンドマイクロでも独自の技術分析と対策を公開していました。この脆弱性は暗号資産マイニング活動との関連も指摘されています。
この脆弱性は、共通脆弱性評価システム(CVSS)で最高スコアの10と評価される「緊急」の深刻度に分類されています。この脆弱性が悪用されると、未認証の攻撃者が、Confluence Data CenterとServerの古いバージョンに存在するテンプレート・インジェクションの不具合を利用し、影響を受けるシステム上でリモートコード実行が可能となります。
「ゴジラ」Webシェル
このバックドア型マルウェアを詳しく調べた結果、中国語で開発された「Godzilla(ゴジラ)」という名前のインメモリバックドアであることが分かりました。これは「BeichenDream」と名乗るユーザが作ったもので、GitHubで公開されています。開発者がこれを作った理由は、レッドチーム(セキュリティ対応)の運営において、既存のWebシェルではセキュリティソフトにすぐ見つかってしまうことが多かったからだといいます。一方、この「ゴジラ」Webシェルの場合、ネットワーク通信にAES暗号化を使うことで検出を避け、多くのセキュリティ製品でほとんど見つからないと開発者は主張しています。なお、ここで使用されたTomcatなどのミドルウェアのためのサーブレットベースのインメモリシェルというアイデアは、もともと「feihong-cs」というユーザが最初に提案したものです。
マルウェアのファイルレス手法が特に問題なのは、従来型のアンチウイルスソフトではほとんど検出できないことです。古いタイプのセキュリティ対策製品は、マルウェアの特徴(シグネチャ)を使った検出や、サンドボックス、ホワイトリスト、時には機械学習などの方法を使っていますが、ファイルレスの手法に対しては効果が限られています。
初期侵入
この攻撃は、脆弱性CVE-2023-22527を悪用することから始まります。攻撃者はvelocity.struts2.contextを使って、OGNLオブジェクトを実行します(図1と図2を参照)。
そして不正なペイロード(図3)を詳しく分析したところ、以下のことが分かりました:
- 攻撃者は、OGNLオブジェクトを使ってxというパラメータを読み取っています。このパラメータの値の中で、ScriptEngineManagerを利用してJavaScriptコードを実行しています。攻撃者がこのような複雑な方法を取っているのは、OGNLテンプレートの制限を回避するためだと考えられます。通常、約200文字以上の長さのテンプレートは、struts.ognl.expressionMaxLength設定によってブロックされるからです。
- JavaScriptコードの中で、攻撃者はx_evc_ecneulfnocというヘッダーを追加しています。これは、オブジェクトが正しくロードされたかどうかを確認するためのもので、成功した場合はレスポンスに表示されます(図4参照)。
- JavaScriptコードの後半部分には、dataというオブジェクトがあります。このオブジェクトにはBase64でエンコードされたデータが含まれており、sun.misc.Unsafeを使ってメモリ上に匿名クラスとしてロードされます。
図5を見ると、MemGodValueShellクラスには4つの属性があります:uri、serverName、standardContext、valveStringです。これらの属性は、クラスのメソッドが実行される際にさまざまな情報を保存するために使われます。
MemGodValueShellには3つのメソッドがあります。1つ目のgetFieldメソッドは、リフレクションという技術を使ってオブジェクトの非公開フィールドの値を取得します(図6参照)。このメソッドは、クラスの継承関係をたどってフィールドを探し出します。
2つ目のメソッドはgetStandardContextです(図7参照)。このメソッドは、現在動いているすべてのスレッドを調べてStandardContextオブジェクトを見つけ出そうとします。具体的には、TomcatのStandardEngineやAcceptorというコンポーネントに関連するスレッドを探します。そして、リフレクションを使ってサーバの内部構造を深く掘り下げ、さまざまな内部フィールドの情報を取得します。
最後に、このクラスの中心となるメソッドは、コンストラクタのMemGodValueShellです(図8参照)。このコンストラクタは以下のような重要な役割を果たします:
- まず、現在実行中のスレッドのクラスローダーからValveクラスを読み込みます。
- 次に、getStandardContextメソッドを使ってStandardContextオブジェクトを取得します。
- そして、現在動いているすべてのスレッドを順番にチェックします。
- 各スレッドについて、名前が"exec"でない場合、次の処理を行います。
- スレッドの対象となるオブジェクトを取得します。
- そのオブジェクトがRunnableインターフェースを実装しているかを確認します。
- オブジェクトからグローバル変数を取得します。
- プロセッサを順に調べ、リクエスト(req)オブジェクトを取得します。
- リクエストオブジェクトからserverPort、serverNameMB、decodedUriMBの情報を取り出します。
- valveStringをBase64形式から通常のバイト列に変換します。
- ClassLoaderのdefineClassメソッドを使って新しいクラスを定義します。
- 新しく定義したクラスのインスタンスを作成し、StandardContextのパイプラインにバルブとして追加します。
動作を確認しやすくするため、図9と図10に示すように、いくつかの情報を出力するようにしました。
まとめると、MemGodValueShellは以下のような動作をします
- リフレクションの活用 – このコードは、クラスの非公開フィールドやメソッドにアクセスするために、Javaのリフレクション機能を頻繁に使用しています。
- スレッドの調査 – TomcatのStandardEngineとAcceptorに関連する特定のスレッドを見つけるため、実行中のスレッドを詳しく調べます。
- 動的クラスの読み込み – Base64でエンコードされた文字列から、実行時にクラスを読み込み、定義します。
- バルブの挿入 – Tomcatの処理パイプラインにカスタムバルブを挿入します。これは、バックドアや不正アクセスの手段を提供することが目的です。
動的クラスの読み込みについて、MemGodValueShellのコンストラクタには、valveStringという変数に長いBase64エンコードされた文字列が含まれています。これは実際にはコンパイルされたJavaクラスGodzillaValueです(図11参照)。これをデコンパイルすると、以下で説明するJavaコードが得られました。
GodzillaValueクラスはValveBaseを拡張しており、これがカスタムTomcatバルブであることを示しています。このクラスにはxc、pass、md5、payloadという4つのフィールドがあります。xcとpassは暗号化に使用され、xcはAES128の鍵として使われます。md5はMD5ハッシュを保存し、payloadは動的に読み込まれるクラスを保存します。GodzillaValueクラスには、ハードコードされたxc文字列"3c6e0b8a9c15224a"とpass文字列"pass"が含まれており、これらは認証や暗号化に使用されると考えられます。
メソッドには以下のものがあります。
- md5 – MD5ハッシュを計算します。
- base64Encode – Base64エンコードを行います。
- base64Decode – Base64デコードを行います。
- x – AES暗号化/復号化を行うメソッドです。
- Invoke – HTTPリクエストとレスポンスを処理する、オーバーライドされたバルブクラスのメソッドです(図12参照)。
Invokeメソッドは、攻撃の次の段階となるペイロードを待っているようです。これが攻撃の一連の流れを完成させます。しかし、トレンドマイクロのハニーポットではこの部分を受け取ることはありませんでした。つまり、このシェルはペイロードクラスを受け取るまで待機状態のままであるようです。この点から、攻撃者は独自のボットネットワークを構築しようとしている可能性があります。
Godzillaのソースコード(図12)を分析すると、ペイロードクラスは以下のような構造になると推測できます(図13)。
この推測に基づいて、次のような試みを行いました。Accept-Languageヘッダーに以下を設定し、passパラメータにxcパラメータで暗号化したペイロードクラスのコンパイルデータを含めたPOSTリクエストを送信しました。
"zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2"
これによりペイロードクラスが初期化されるはずです。図14はこの試みを示し、図15では実際にペイロードオブジェクトが正常に読み込まれたことがログで確認できます。
これで、シェルが実際に機能するか確認できます。コマンドを準備するには、以下の形式で暗号化し、AES鍵にはGodzillaValueクラスのxcパラメータを使用します(図16)。
AES128(Base64encoded(command))
この方法は成功しましたが、GodzillaValueクラスを再度確認すると、結果の最初と最後の16文字が「md5(pass+xc)」であることがわかりました。また、コマンド実行の結果は、以下の形式でxc鍵を使って暗号化されています(図17)。これらの暗号化処理を逆に行うことで、元の結果を得ることができます(図18)。
AES128(base64encode(result))
Vision Oneのハンティングクエリ
Atlassian Java環境でコマンド実行があった場合を検出するクエリ:
(eventSubId:2 AND processCmd:atlassian AND parentCmd:atlassian AND parentCmd:java AND (objectName:*\Windows\System32* OR objectName:bin/))
まとめ
CVE-2023-22527の脆弱性は、今なお多くの攻撃者によって悪用され続けています。攻撃者はこの脆弱性を利用して様々な悪意ある活動を行っており、世界中の組織にとって深刻なセキュリティ上の脅威となっています。Atlassian Confluenceを使用している組織は、直ちにサーバにセキュリティパッチを適用し、この攻撃によるリスクを最小限に抑えることが強く推奨されます。Trend Vision One™️のような高度なセキュリティソリューションを導入することで、組織は本文で説明したような初期段階の攻撃や脅威から効果的に環境を守ることができます。
Trend Vision One™ – Endpoint Securityは、以下のディープパケットインスペクション(DPI)ルールを通じて、この脆弱性を狙う脅威から保護します:
1011954 - Atlassian Confluence Data Center and Server Template Injection Vulnerability (CVE-2023-22527)
TippingPointは、この脆弱性に対応するCustomer Shield Writer(CSW)ファイルを公開しています。顧客はThreat Management Center (TMC)からこのファイルをダウンロードできます。適用可能なルールは次の通りです:
43721 - HTTP: Atlassian Confluence Data Center and Server Template Injection Vulnerability
クラウドワークロードセキュリティソリューション - Trend Vision Oneは、以下のルールを用いて、仮想環境、物理環境、クラウド、コンテナなど多様な環境をこの脅威から守ります:
1011954 - Atlassian Confluence Data Center and Server Template Injection Vulnerability (CVE-2023-22527)
Trend Micro Deep Discovery Inspectorをご利用の顧客は、以下のルールによって保護されています:
DDI RULE 4990 - CVE-2023-22527 - Atlassian OGNL Injection Exploit - HTTP (Request)
参考記事:
Silent Intrusions: Godzilla Fileless Backdoors Targeting Atlassian Confluence
By: Abdelrahman Esmail, Sunil Bharti
翻訳:与那城 務(Core Technology Marketing, Trend Micro™ Research)