2021-12-12
【Log4j】Javaで作成されたほぼ全てのWEBサービスが影響を受ける「Log4Shell」脆弱性(CVE-2021-44228)
参考リンク
https://www.jpcert.or.jp/at/2021/at210050.html
https://www.randori.com/blog/cve-2021-44228/
https://www.lunasec.io/docs/blog/log4j-zero-day/
https://aws.amazon.com/jp/security/security-bulletins/AWS-2021-005/
https://search.yahoo.co.jp/realtime/search?p=CVE-2021-44228&ei=UTF-8&ifr=tl_sc
この記事で紹介していること
Log4j に脆弱性が見つかる
Log4j とは、Java でログを記録するための機能です。
極めてシェアが高く、Javaで作成するWEBサービスのすべてがこれを使っていると言ってもいいくらいメジャーです。
明示的に使うつもりがなくても、Javaのフレームワークやライブラリを使っていれば、ほぼ Log4j を参照していると思われます。
何が起きるか
通常 Log4j にログを記録させる内容は、利用者がどんな要求をしたか、です。
この要求に含まれる文字に、特定の文字が含まれたとき、次のようなことが起きます。
Log4j 脆弱性で何が起きるか
- Log4jの脆弱性を狙った悪意のある要求をサーバに送信
- Log4j が上記入力値をログに記録するとき、入力値を解釈。悪意あるサーバにアクセスされる
- 悪意あるサーバの悪意あるプログラムをダウンロードさせられます
- あなたのサーバ内で、上記悪意あるプログラムが実行されます
- 悪意あるプログラムは好き放題
対応方法
- Log4j 2.15.0 以上に更新(ただし、Java8必須)
- log4j.xml に 【%m】があったら、【%m{nolookups}】に書き換える(Log4j 2.7 以上なら対応可:参考リンク)
- AWSならWAFのマネージドルール「Log4JRCE」を適用する(参考リンク)
何もしなくても大丈夫なケース
いまのところ、以下のケースは大丈夫そう
Log4j 脆弱性 大丈夫そうな利用ケース
- Log4jを使っているサーバが、インターネットに接続できない場合(ただし、悪意あるサーバが内部にあったらアウト)
- Log4j のバージョンが 1 (ただし、他の脆弱性が放置されており、対応されない)
まとめ
この脆弱性の発見は、Log4jのシェアが高いことのほか、2.15 への更新には Java8 以上への更新が必要なことも、厄介です。
複数の対応方法がありますが、恒久対応として、最新版への更新がいつでもできるようにしたほうがよいですね。