Webサーバーを突如として襲った脆弱性「Log4j」とは?

2021年12月10日、突如としてSNSのトレンド入りとなった「Log4j」。本記事では、この「Log4j」が一体何なのか、またその脆弱性(CVE-2021-44228)について解説します。

Log4jとは

「Log4j」は正式には「Apache Log4j」であり、世界的に広く利用されているWebサーバー用ソフトウェア「Apache」の中に搭載されているJavaベースのロギングライブラリです。W3Tecsによると、2021年12月27日現在、31.3%のサーバーがApacheを使用しています。

Apache Log4jの脆弱性(CVE-2021-44228)

「Apache Log4j」にはLookupと呼ばれる機能があり、ログとして記録された文字列から、一部の文字列を変数として置換します。その内、JNDI Lookup機能が悪用されると以下のように攻撃が成立してしまいます。

  1. 攻撃者は、任意の実行したいコードを記載したファイルを用意する
  2. 攻撃者は細工した文字列を脆弱性のあるサーバー等に送信し、Log4jにログとして記録させる
  3. Log4jはLookupにより置換された変数を基に、2で指定されたパスから攻撃者が用意したファイルを取得する。
  4. Log4jはそのファイルを読み込み、任意のコードが実行される

今回発覚した脆弱性(CVE-2021-44228)ですが、様々なシステムで広く使われているJavaで作成されていることもあり、「Apache Log4j」自体を使用していなかった場合でも、開発の際に使用したライブラリ等で使用されていることもあり注意が必要です。

脆弱性の評価

CVE

脆弱性には、CVEと呼ばれる識別子が割り当てられます。

共通脆弱性識別子CVE(Common Vulnerabilities and Exposures)(*1)は、個別製品中の脆弱性を対象として、米国政府の支援を受けた非営利団体のMITRE社(*2)が採番している識別子です。脆弱性検査ツールや脆弱性対策情報提供サービスの多くがCVEを利用しています。
個別製品中の脆弱性に一意の識別番号「CVE識別番号(CVE-ID)」を付与することにより、組織Aの発行する脆弱性対策情報と、組織Xの発行する脆弱性対策情報が同じ脆弱性に関する対策情報であることを判断したり、対策情報同士の相互参照や関連付けなどに利用できます。

尚、今回発覚した脆弱性は「CVE-2021-44228」という識別子で示されています。

CVSS

また、各脆弱性にはCVSSと呼ばれる評価手法があります。

 CVSSは、情報システムの脆弱性に対するオープンで汎用的な評価手法であり、ベンダーに依存しない共通の評価方法を提供しています。CVSSを用いると、脆弱性の深刻度を同一の基準の下で定量的に比較できるようになります。また、ベンダー、セキュリティ専門家、管理者、ユーザ等の間で、脆弱性に関して共通の言葉で議論できるようになります。

CVSSには以下の3つの評価手法があります。

  • 基本評価基準(Base Metrics)
     脆弱性そのものを評価する基準です。機密性、完全性、可用性に対する影響をネットワークから攻撃可能かどうかといった基準で評価し、CVSS基本値(Base Score)を算出します。この基準による評価結果は固定していて、時間の経過や利用環境の異なりによって変化しません。ベンダーや脆弱性を公表する組織などが、脆弱性の固有の深刻度を表すために評価する基準です。
  • 現状評価基準(Temporal Metrics)
     脆弱性の現在の深刻度を評価する基準です。攻撃コードの出現有無や対策情報が利用可能であるかといった基準で評価し、CVSS現状値(Temporal Score)を算出します。この基準による評価結果は、脆弱性への対応状況に応じ、時間が経過すると変化します。ベンダーや脆弱性を公表する組織などが、脆弱性の現状を表すために評価する基準です。
  • 環境評価基準(Environmental Metrics)
     ユーザの利用環境も含め、最終的な脆弱性の深刻度を評価する基準です。脆弱性の対処状況を評価し、CVSS環境値(Environmental Score)を算出します。この基準による評価結果は、脆弱性に対して想定される脅威に応じ、ユーザ毎に変化します。ユーザが脆弱性への対応を決めるために評価する基準です。

CVE-2021-44228では、この基本評価基準のCVSS基本値(Base Score)が最高の10.0となっていました。

CVE-2021-44228図1 CVE-2021-44228 Detail[1]

対策方法

Apache Log4jのバージョンにより異なります。

Log4j バージョン2.10及びそれ以降

次のうちいずれかを実施します。

  • Log4jを実行するJava仮想マシンを起動時に「log4j2.formatMsgNoLookups」というJVMフラグオプションを「true」に指定する
    例: -Dlog4j2.formatMsgNoLookups=true
  • 環境変数「LOG4J_FORMAT_MSG_NO_LOOKUPS」を「true」に設定する

Log4jバージョン2.10より前

  • JndiLookupクラスをクラスパスから削除する

まとめ

今回発覚した「CVE-2021-44228」ですが、現在様々な対策方法が発表されている一方で攻撃手法も公開されています。今回に限らず少しでも脆弱性の疑いがある場合は情報を収集し、迅速に対応していく必要があります。これを機に、今一度セキュリティ対策を見直してみてはいかがでしょうか。

参考サイト:
[1]https://nvd.nist.gov/vuln/detail/CVE-2021-44228
https://w3techs.com/technologies/overview/web_server
https://www.jpcert.or.jp/at/2021/at210050.html
https://www.ipa.go.jp/security/vuln/CVE.html
https://www.ipa.go.jp/security/vuln/CVSSv3.html
https://www.ipa.go.jp/security/ciadr/vul/alert20211213.html

※本記事は掲載時点の情報であり、最新の情報とは異なる場合があります。予めご了承ください。