目次

  1. Apache Log4j(Log4j)とは
  2. Log4jの機能「JNDI Lookup」で見つかった脆弱性「Log4Shell」とは
  3. Lookup機能を使った攻撃の手口
  4. 攻撃高度化も観測
  5. 新たに見つかった脆弱性
    1. CVE-2021-45046
    2. CVE-2021-45105
  6. クラウドサービスに影響 各社が対策状況を公表
  7. 脆弱性が関係する対象のバージョン
  8. 脆弱性への対策

 Log4jとは、プログラミング言語Javaでログ出力に使われるライブラリのことを指します。名前を聞いてピンとこなくても、Webサービスの開発者やプログラマーがサービス上で起きていることを記録するのに利用していることがあります。

 たとえば、間違ったパスワードでサービスにログインしようとしたときの状況についてトラブルシューティングするために使っていることもあります。

 アメリカの情報セキュリティ会社「サイバーリーズン」のセキュリティブログで「世界中のWebサーバーの約3分の1が使用している」と紹介しています。

 このLog4jに、「CVE-2021-44228」と名づけられた深刻な脆弱性「Log4Shell」が見つかりました。多数のベンダーの製品やクラウドサービスが影響を受けるとみられ、その深刻度は最高レベルに位置づけられています。

 今回のLog4jで見つかった脆弱性は、ログとして記録された文字列から、一部の文字列を変数として置きかえる機能「JNDI Lookup」を悪用したものです。

 具体的な攻撃の手口は、JPCERTコーディネーションセンター(JPCERT/CC)が公開しています。

 脆弱なLog4j2が稼働しているシステムに、攻撃者はある文字列を含むデータを送り、処理させます。この攻撃文字列を処理しようとしたLog4j2は、JNDI Lookup機能により、攻撃文字列によって指定されたURLにアクセスしようとします。Log4jは、攻撃者が用意した悪意のあるJavaコードをダウンロードし、システム内で実行してしまうというものです。

 その結果、プログラムの実行、サーバーに保存されているデータの改ざん・情報盗み出しなどができてしまうおそれがあります。

 JPCERT/CCの公式サイトによると、この脆弱性を悪用する実証コードがすでに公開され、国内での悪用が確認されています。

 JPCERT/CCによると、Webサイト上のアプリケーションのセキュリティ対策の一つ、WAF(Webアプリケーションファイアウォール)の網に引っかからないように高度化された攻撃文字列がすでに観測されているといいます。

 JPCERTコーディネーションセンター(JPCERT/CC)の公式サイトによれば「CVE-2021-44228」のほかにも、2つの脆弱性が見つかりました。

 特定条件下で任意のコード実行が可能な脆弱性です。Apache Log4j-core 2.16.0より前の2系のバージョンが影響を受けます。

 自己参照による制御不能な再帰から保護されていないことに起因し、Log4jの特定設定のみ影響を受けるサービス運用妨害攻撃の脆弱性です。Apache Log4j-core 2.17.0より前の2系のバージョンが影響を受けます。

 この脆弱性はクラウドサービスなどに影響する範囲が広いため、各社が影響の有無や対応状況を公表しています。いくつか例を紹介します。

 とくにAWSについては、アクセスキー情報を盗み出そうという攻撃が観測されています。常に最新の情報を入手するようにしてください。

 対象となるバージョンは、Apache Log4j 2.0以上、2.15.0-rc1 およびそれ以前です。

 JPCERT/CCによると、Apache Log4j 1系のバージョンについては、第三者がこの脆弱性を悪用するためにLog4jの設定ファイルを変更することができれば影響を受けるとの情報が公開されています。しかし、攻撃を行うためには何らかの方法で事前にシステムに不正にアクセスする必要があり、遠隔からの脆弱性を悪用した攻撃の影響は受けないと説明しています。

 対策としては、Log4jを最新のバージョンに更新してください。Apacheソフトウェア財団が公開しているバージョンは次の通りです。米国時間で12月17日に最新バージョン「Log4j 2.17.0」が公開されました。Apacheソフトウェア財団の公式サイト「Download Apache Log4j 2」から更新できます。

  • Apache Log4j 2.17.0(Java 8以降のユーザー向け)
  • Apache Log4j 2.12.3(Java 7のユーザー向け)
  • Apache Log4j 2.3.1(Java 6のユーザー向け)

 特定の構成において不正なJNDI検索パターンを入力値とする場合にサービス運用妨害(DoS)が生じる可能性があることが判明し、Message Lookup機能が削除され、JNDIへのアクセスがデフォルトで無効になっています。

 バージョンアップができない場合は、情報処理推進機構(IPA)が回避策を紹介しています。

Log4jバージョン2.10及びそれ以降 - 次のいずれかを実施する

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

・環境変数「LOG4J_FORMAT_MSG_NO_LOOKUPS」を「true」に設定する

Log4jバージョン2.10より前 - JndiLookupクラスをクラスパスから削除する

 また、本脆弱性を悪用する攻撃の影響を軽減するため、システムから外部への接続を制限するための可能な限りのアクセス制御の見直しや強化もご検討ください。

更新:Apache Log4j の脆弱性対策について(CVE-2021-44228)

 このほか、Apacheソフトウェア財団は、一部の回避策が特定の手法を用いた攻撃を回避するには不十分であることが判明したと明らかにし、有効な回避策として、JndiLookup.classをクラスパスから削除する回避策の実施を呼びかけています。