免責事項
こちらの記事で紹介する内容は、教育目的または脆弱性について仕組みを理解し周知、啓発を行うためだけに作成しております。
ぜったいに、悪用しないでください。
記載されているコードを実行した場合に発生した損害には一切責任を負いません。
理解される方のみ下にスクロールしてください。
経緯
2021/12/9にて、超有名なログ出力ライブラリであるlog4j
の第2世代で任意コードが実行可能であると報告されました。
※上記は特定の文字列をログ出力させることで、ペイントツール(draw.exe)を実行しているApache Log4j2 jndi RCE#apache #rcehttps://t.co/ZDmc7S9WW7 pic.twitter.com/CdSlSCytaD
— p0rz9 (@P0rZ9) December 9, 2021
Minecraft(Java版)のチャット機能にてこの脆弱性を利用した攻撃があり、修正パッチの適用に追われているそうです。
【Minecraft・重要・拡散希望】
— SaziumR (@SaziumR) December 10, 2021
Minecraft 1.8〜1.18をご利用の方全員にお知らせ致します。
Minecraftに大変重大な脆弱性が発見されました。攻撃は始まっています。今のところ、どんなサーバーも参加しないでください。サーバーは停止させてください。必ず安全を確認してから復帰してください。 https://t.co/FypiEhclAI
log4jとは
Java言語でWebアプリケーションやシステムを構築する際のロガーライブラリである。
Apache財団というOSSを支援する団体が提供・メンテナンスをしている。
導入も容易でかつ設定ファイル次第では細かなログ設定が可能となっており、日本以外にも世界中のシステム内で利用されている1。
原因
文字列を出力するログの機能がなぜ問題になっているのかと言うと、
log4j2
は他のログライブラリと違い、文字列の中を確認し、特定の文字列の場合は、変数に置き換える機能がある。(lookupというらしい)
上記だけなら問題ないのだが、今回悪用されているのはJdni Lookup
という仕組みであり、変数をネットワーク越しに検索する仕組みである。
検索して見つけた値は、サーバ内で実行されるため、任意のプログラムをサーバ内で実行することが可能というわけである。
仕組み
⓪ 前提2
- ユーザが入力した文字列をそのままログ出力するようなシステム
- システムプロパティの
log4j2.formatMsgNoLookups
が無効になっていること - システムプロパティの
com.sun.jndi.ldap.object.trustURLCodebase
が有効になっていること
① 攻撃(任意)コードの注入
チャットなどログに入力値がそのまま出力される機能に対して、任意のコードを入力します。
② 中間サーバへアクセス
サーバ(Minecraft)はJndi Lookup
機能にて、変数を攻撃者が用意した中継サーバに検索しに行きます。
中継サーバは、さらに攻撃者が用意したWebサーバへリダイレクトします。
③ Webサーバへリダイレクト
Webサーバではリクエストパスに記載されている値に該当する任意のプログラムファイルを返却します。Javaの場合は.class
ファイルでしょう。
④ 悪意のあるプログラムの実行
.class
ファイルに記載された内容をサーバが実行します。ここまで来てしまうと何をされるか分かったもんじゃありません。
検証
上記の仕組みを利用し、ローカル環境上にて脆弱性の検証を行いました。
- 利用環境(OS):MacBook
- Mincraft^3:Eclipse 2021-03 (4.19.0)
- 中継サーバ(右上):marshalsec.jndi.LDAPRefServer
- Webサーバ(右下):PythonのHTTP.Serverモジュール
- 悪意のあるプログラム(左下):サーバ内ある(と想定)Calculator.app(電卓)を起動
対策
この脆弱性はCVE-2021-44228と定義されました。記事の内容を要約すると。
-
log4j-api
およびlog4j-core
のバージョンを2.15.0
にする - システムプロパティの
log4j2.formatMsgNoLookups
を有効にする - システムプロパティの
com.sun.jndi.ldap.object.trustURLCodebase
を無効にする - クラスパスからJndiLookupクラスを削除する
log4jを使わないようシステム改修する方法は現実的ではないと思いますので、いずれかの方法をとって対策する必要があります。
マイクラで遊んでいる子ども達、もしくは上記に関わるサーバ運営の方。
早急に対応の程よろしくお願い致します。
まとめ
ここまで熱を入れて記事を書くことになると思いませんでした。
Javaを愛するIT講師として、ITエンジニアを育成するものとして、この騒動は早く収まって安心して授業できるといいなぁ
(「だからJavaは..」とか言われたくないな..)
-
iCloudやSteamなど世界規模でユーザが多いサービスにも影響 https://www.itmedia.co.jp/news/articles/2112/10/news157.html ↩