Javaで使われるログ出力ライブラリ「Apache Log4j」に特定の文字列を記録させることで、任意のリモートコードを実行できるようになる (Remote Code Execution, RCE) 脆弱性が、12月10日に判明しました。

「Apache Log4j」と言われても文系インターン生の筆者にはイマイチよく分かりませんでしたが、この脆弱性が公表されてからは社内にも緊張が走り、自社製品への影響を確認するのに追われました。

※検証の結果、幸いなことに弊社製品ではいずれも「Apache Log4j」の利用がなく、直接的な影響は無いことを確認済みです。

しかしながら、今回の件が世界中の企業に与えた衝撃やその影響の大きさから、IT業界でサービスを展開する事業者として弊社でもApache Log4jの脆弱性問題を取り上げようという話が持ち上がりました。

当問題の全貌を調査・記事化する上でITに疎い筆者に白羽の矢が立ち、今回の騒動をIT知識が豊富でない人でもわかるように説明する」というミッションが与えられました。

目次

「Apache Log4j」 騒動の簡潔なまとめ

「Apache Log4j」 (Java利用者) が多く影響が大きいこと
・プログラムはほとんどがログを内部で出力・保存すること
・任意のコードを入力するだけで、ログを改竄したり抜き出せてしまうこと

Apache Log4jってなに?

Apache Log4j(以下Log4j)とは、プログラミング言語Javaにおいて、ログ出力に使われるライブラリのことを指します。

そもそも「ログとは何なのか?」という疑問から始まると思いますが、ログとは簡潔に言うならば記録のことです。

「log」という言葉は本来、船旅の模様を記録する航海日誌のことを指します。

コンピュータの世界で使われる「log」は、機器やソフトウェア、システム上で起こった出来事に関する情報を特定の形式で時系列に記録・蓄積したデータのことを言います。

このログを管理するために使われるフレームワークがLog4jであり、実に世界の約3分の1のWebサーバーで用いられています。

Apacheは広く普及しており、世界中のWebサーバーの約3分の1を占めているため、この欠陥は大惨事につながる可能性があります。

サイバーリーズン「サイバーリーズン、Log4j2(Log4Shell)脆弱性(CVE-2021-44228)をついた攻撃(エクスプロイト)防止のために、ワクチンを提供開始」 https://www.cybereason.co.jp/blog/cyberattack/7301/

全世界に数億台存在すると言われるWebサーバーのうち、30%以上が今回明らかになった脆弱性を抱えていることを考えると、非常に重い事態であることは容易に想像できます。

意外に身近な存在 Log4j

Log4jがどこで・どのように使われているのかという疑問を持つ方も多いのではないでしょうか。

脆弱性と聞いても、具体的なイメージが湧かなければ「そんなに深刻な問題なの?」、「海外に限定した話じゃないの?」と思ってしまいがちですが、私たちにとってLog4jは間違いなく身近なものです。

例えば、毎日多くの人が利用するWebサイトのログイン画面。

IDやパスワードを入力する際に目に留まるのはログイン画面のUIだけかもしれませんが、実はログインの管理はLog4jがバックグラウンドで行っています。

さらに身近な例を挙げるとすれば、誰もが知っているサンドボックスビデオゲーム 「Minecraft」。

日本国内では「マイクラ」とも呼ばれるMinecraftは、無限に広がるゲーム世界の中でサバイバル生活や建築を楽しむことが出来るマルチプラットフォームなゲームですが、PC向けのパッケージ Minecraft Java EditionにはLog4jが用いられています。

Minecraftのゲーム画面には他のプレイヤーと会話を楽しんだり、特定のイベントを強制的に発生させるためのコマンドを入力するためのチャットウィンドウが設置されていますが、このチャットウィンドウに出力されるログをLog4jが管理しているのです。

さらにLog4jは、個人や組織が管理する物理的なサーバーだけでなく、AWSやMicrosoft Azureといったクラウドサービス上に構築されたWebサーバーにも使われています。

Log4jの脆弱性 具体的に何が問題なのか

これまでの説明で、Log4jがコンピューターの世界で幅広く使われていることがイメージできたのではないでしょうか。

ここでは、今回発見されたLog4jの脆弱性がなぜ深刻なものなのかを説明したいと思います。

端的に言えば、Log4jが用いられているアプリケーションに対して特定のコードを送信することで、攻撃者の望む動作をアプリケーションに指示することが出来てしまいます。

ソフトウェアの分野では、人工言語を用いてコンピュータに解釈あるいは実行させることを目的として作成された命令やデータなどをコードということが多い。

https://e-words.jp/w/%E3%82%B3%E3%83%BC%E3%83%89.html

詳しく書くと、 Log4j には一部の文字列を変数として置き換える「JNDI Lookup」という機能があります。 今回はこのLookup機能が悪用されてしまいました。 

具体的には、攻撃者がJNDI Lookupを悪用して攻撃対象のサーバーに悪意のコードを送信することで、プログラムの強制実行だけでなく、サーバーに保存されているデータの改ざんや出力なども出来てしまうのです。

このような欠陥がなぜ存在するのかというと、Log4jに対して「ログに記録した文字列に特定の命令が書いてあったら外部からプログラムを読み込みます」という実装が為されていたことに原因があります。

つまり、ログデータの中に読み取り可能な文字列があれば実行してしまうということです。

先ほど例に挙げたMinecraftのようなオンラインゲームでは、プレイヤーが入力したコメントもログとして保存されます。

今回の脆弱性に乗じてオンラインゲームのホストサーバーを標的にするのであれば、特定の文字列をチャット画面に入力するだけで攻撃が成立してしまうわけです。

弊社が運営する”テックスクエア”では、
システムの脆弱性などによって引き起こされる「システム障害がもたらす損失」について説明している記事を公開しております。
是非、併せてご覧ください。

被害を受けないために、なにをするべきか

2021年11月末にLog4jの脆弱性が公表された際には世界中で大きな話題となりましたが、本記事執筆時点 (2021年12月20日) では、脆弱性をカバーするための解決策が既に示されています。

最も簡単に取れる対策は、アップデートを行うことでしょう。

今回脆弱性が発見されたApache Log4jは、2021年12月14日に最新バージョンの「Apache Log4j 2.16.0」がリリースされました。

米Apacheソフトウェア財団は12月13日(現地時間)、Java向けログ出力ライブラリ「Apache Log4j」(Log4j)のバージョン2.16.0をリリースした。変更点は、JNDI機能をデフォルトで無効にしたことと、Message Lookup機能を削除したことの2点で、問題となっていた脆弱性に対応した形になる。


ITメディア「Log4j、バージョン2.16.0が登場 問題の機能を削除やデフォルト無効」https://www.itmedia.co.jp/news/articles/2112/14/news098.html

アップデートが行えない場合でも、各種設定で対策を行うことが重要です。

例えば、情報処理推進機構 (IPA) はサーバー管理者に対して以下のような回避策を公開しています。

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

2,Log4jバージョン2.10より前⁻jindilookupクラスをクラスパスから削除する

情報処理機構「更新:Apache Log4j の脆弱性対策について(CVE-2021-44228)」https://www.ipa.go.jp/security/ciadr/vul/alert20211213.html

今回の騒動を通じて思うこと

日常生活とデジタルの結びつきが強くなるにつれて、ソフトウェアの脆弱性やサイバー攻撃といった言葉も珍しいものではなくなりつつあります。

ITに疎い人にとっては耳で聞いただけではピンと来ない話でも、日頃利用しているWebサイトやアプリケーションへの影響を知ることで、意外と身近な出来事であることがわかります。

例えば、今回のApache Log4jの脆弱性に乗じて企業のデータベースから自分自身の個人情報が抜き取られていたら・・・

個人情報の流出に気づかないまま、そのサービスを利用し続けていたら・・・

こんな想像をしてみると、恐怖すら覚えます。

ただ、今回のようなサイバーセキュリティの欠陥は、インターネットユーザーが個人レベルでどうにかできるものではないのが現実です。

だからこそ、WebサイトやWebサービスを提供する事業者は、常に高いセキュリティ意識を持ち続けなければいけません。

Log4jの脆弱性が発覚した際には、ベンダーやサービス提供者が即座に修正パッチを配布したり、ユーザーへの注意喚起をする様子が目立ちました。

本記事の執筆を通じて、サービスを絶やさずに安定することは勿論、有事の際に素早く対応する姿勢が、ユーザーからの信頼に繋がるのだろうと感じました。

コムスクエアが運営するメディア「テックスクエア」では、情報システム部門が知っておくべき「トレンドニュース」や「業務知識」などを、非エンジニアでも分かるように翻訳し、ブログ記事としてお届けしております。

そんな情シス必見のブログ記事を定期的にメルマガとして配信中。
是非、弊社のメルマガにご登録ください。

関連記事