ElasticセキュリティでCVE-2021-44228(Log4j2)のエクスプロイトを検知する

blog-security-detection-720x420.png

重要な注意点:

  • Elasticは自社プロダクトの脆弱性について内部リスク評価を実施しています。評価の最新の状況と結果については、こちらの勧告をご確認ください。
  • この記事は、2021年12月14日に更新されました。当初公開した記事に、検知とハンティングを強化する手法を追記しています。

概要

本ブログ記事はCVE-2021-44228の概要を説明するほか、Elasticセキュリティのユーザー向けに、環境内の脆弱性を利用するアクティブなエクスプロイトの検知ルールを提供します。

Elasticは新たな情報を把握次第、本記事を更新する予定です。この記事のバージョンは、2021年12月14日(火)時点での正確な情報をお伝えします。Apacheのアップデートについては、セキュリティページのLog4j2に関する記述から直接確認できる可能性があります。

CVE-2021-44228(Log4Shell)の概要

Log4j2はオープンソースのロギングフレームワークであり、エンドユーザーシステム上とサーバー上の両方で、多数のJavaベースアプリケーションに組み込まれています。2021年11月末、Alibabaのチェン・シャオジュン氏がリモートコード実行の脆弱性を特定し、報告しました。この脆弱性に付与されたCVE IDはCVE-2021-44228で、2021年12月10日より一般公開されています。この脆弱性のエクスプロイトは、フレームワークにパスされるユーザー入力を不正にデシリアライズして行われます。これによりリモートコードの実行が可能となるほか、攻撃者が環境変数などのセンシティブデータをリークする、あるいはターゲットシステム上で悪意のあるソフトウェアを実行するといった操作が可能となっています。

特定された脆弱性の影響は、Log4j2 version 2.0-beta9からversion 2.14.1までの、すべてのバージョンに及びます。この問題修正の初期メソッドとして多数のリリース候補が登場していますが、本記事の執筆時点では、フレームワークをLog4j2 2.15.0-rc2にアップグレードする対応が推奨されています。

複雑性が低く、かつ広範なエクスプロイトが見られることから、Log4j2の脆弱なバージョンを利用するソフトウェアが特定されたすべての環境において緩和策の実施は不可欠と考えるべきです。

ElasticセキュリティでLog4Shellのエクスプロイトを検知する

Elasticセキュリティのユーザーは、以下のイベント相関付け検知ルールを使用してLog4j2の脆弱性を狙うアクティブなエクスプロイトを特定することができます。 ホストベースのイベントデータの形式によって、以下の検知ルールを修正し、データフィールドと一致させる作業が必要となる場合があります。

エンドポイントデータを使用するユースケース向けの検知ルール

sequence by host.id with maxspan=1m
 [network where event.action == "connection_attempted" and 
  process.name : "java" and
  /* 
     outbound connection attempt to 
     LDAP, RMI or DNS standard ports 
     by JAVA process 
   */ 
  destination.port in (1389, 389, 1099, 53, 5353)] by process.pid
 [process where event.type == "start" and 

  /* Suspicious JAVA child process */
  process.parent.name : "java" and
   process.name : ("sh", 
                   "bash", 
                   "dash", 
                   "ksh", 
                   "tcsh", 
                   "zsh", 
                   "curl",
                   "perl*",
                   "python*",
                   "ruby*",
                   "php*", 
                   "wget")] by process.parent.pidさらに詳しく

Auditbeatデータを使用するユースケース向けの検知ルール

sequence by agent.id with maxspan=1m
 [network where event.action == "connected-to" and 
  process.name : "java" and
  /* 
     outbound connection attempt to 
     LDAP, RMI or DNS standard ports 
     by JAVA process 
   */ 
  destination.port in (1389, 389, 1099, 53, 5353)] by process.pid
 [process where event.type == "start" and 

  /* Suspicious JAVA child process */
  process.parent.name : "java" and
   process.name : ("sh", 
                   "bash", 
                   "dash", 
                   "ksh", 
                   "tcsh", 
                   "zsh", 
                   "curl",
                   "perl*",
                   "python*",
                   "ruby*",
                   "php*", 
                   "wget")] by process.parent.pidさらに詳しく

Endgameがストリーミングするイベントを使用するユースケース向けの検知ルール

sequence by agent.id with maxspan=1m
 [network where event.category == "network" and 
  process.name : "java" and
  /* 
     outbound connection attempt to 
     LDAP, RMI or DNS standard ports 
     by JAVA process 
   */ 
  destination.port in (1389, 389, 1099, 53, 5353)] by process.pid
 [process where event.type == "start" and 

  /* Suspicious JAVA child process */
  process.parent.name : "java" and
   process.name : ("sh", 
                   "bash", 
                   "dash", 
                   "ksh", 
                   "tcsh", 
                   "zsh", 
                   "curl",
                   "perl*",
                   "python*",
                   "ruby*",
                   "php*", 
                   "wget")] by process.parent.pidさらに詳しく

この検知ルールは、LDAP、RMI、DNS向けの標準ポートに対する連続のアウトバウンド接続試行(最近見られるJAVA/JNDIインジェクション攻撃を経由した悪用が多い)の後に、同じJavaプロセスインスタンスのチャイルドプロセスがくるパターンを探します。

次に、このルールが実際にlog4j2の脆弱性エクスプロイトをどのように検知するかを示します。

攻撃者がBase64でエンコードしたペイロードで脆弱性を悪用していることを示すスクリーンショット

上のスクリーンショットでは、攻撃者が脆弱性を悪用し、Base64でエンコードしたペイロードでクリストフ・タファニデリーパー氏が作成した脆弱なアプリのサンプルを標的としていることがわかります。

これは、ElasticセキュリティがCVE-2021-44228のアクティブなエクスプロイトを検知し、悪用をアラートとタイムラインのビューで詳細に表示した際のスクリーンショットです。

これは、ElasticセキュリティがCVE-2021-44228のアクティブなエクスプロイトを検知し、悪用をアラートとタイムラインのビューで詳細に表示した際のスクリーンショットです。

上のスクリーンショットは、Javaがバッシュスクリプトをダウンロード、および実行するためのシェルスクリプトを実行したことを示す検知アラートの調査です。
  • We're hiring

    Work for a global, distributed team where finding someone like you is just a Zoom meeting away. Flexible work with impact? Development opportunities from the start?