2021年12月にオープンソースソフトウェアであるApache Log4jに任意のコードをリモートで実行できる深刻な脆弱性が発見されました。Log4jはJavaプログラムのログ出力で使用され、さまざまなソフトウェアやサービスに組込まれているため、脆弱性対策の影響は広い範囲にわたっており、かつ一刻も早い対策が求められます。迅速なセキュリティ対策を実現する方法として、システムの改修を伴わずに導入可能なWAF(Webアプリケーションファイアウォール)の利用が検討されるケースも少なくないと思います。本記事では、Log4j脆弱性の危険性と、Log4j脆弱性に対して行われるサイバー攻撃への対策としてのWAFのメリットについて解説していきます。
Log4jとはなにか?
Apache Log4j(以下、Log4j)とはJavaプログラムのログ収集ソフトウェアとしてApache Software Foundationから提供されているライブラリです。Log4jはApache License, Version 2.0というライセンスが適用されており、利用に際してライセンス費用が発生しません。Javaを使って開発されたシステムは非常に多く、Javaベースのシステムのログ収集機能として導入がしやすいLog4jもまた多くのシステムに組み込まれています。
Log4jは非常に幅広く利用されているライブラリであるため、2021年12月に一般公開されたLog4Shellと呼ばれる深刻な脆弱性(CVE-2021-44228を始めとして複数の脆弱性が公開されていますが、本文書ではCVE-2021-44228について主に記載します)はすみやかに対策を講じる必要があるとIPA(情報処理推進機構)等より警告が発出されました。Log4jはバージョン1系(Log4j 1)とバージョン2系(Log4j 2)とに分かれており、脆弱性の影響を受けるのはバージョン2系のLog4j 2.15.0より前のバージョン(Log4j 2.12系のうち2.12.2以降を除く)となります。
Log4jのライブラリをアップデートして脆弱性対応を行う場合、以下のバージョンアップを実施してください。
Java8以降の場合⇒Log4j 2.17.1以降へバージョンアップする
Java7の場合⇒Log4j 2.12.4以降へバージョンアップする
Java6の場合⇒Log4j 2.3.2以降へバージョンアップする
参考URL:
https://www.ipa.go.jp/security/security-alert/2021/alert20211213.html
https://www.jpcert.or.jp/newsflash/2021122401.html
なぜLog4jの脆弱性を放置してはいけないのか
Log4jをバージョンアップすれば脆弱性を解消できますが、稼働中システムのLog4jに対してバージョンアップを行う場合はシステムの改修を伴う作業になる場合が予想されます。もし、Log4jバージョンアップのためのシステム改修予算が確保できないなどで脆弱性が放置された場合、サイバー攻撃によってどのような被害が出るのでしょうか。
まず、攻撃者はLog4jの脆弱性を利用して、以下のような攻撃を実行します。
①攻撃者が${jndi:<scheme>://<domain name>(:<port>)/~}の形式でリクエストを送信し、Log4jに処理させる。「jndi:」以降の部分には、攻撃者が用意したサーバーのURLが記載されている。
②Log4jはJNDI Lookup機能により、①のリクエストに含まれる攻撃者サーバーへアクセスして攻撃者が用意したJavaコードをダウンロードする。
③ダウンロードしたJavaコードがシステム内で実行される。
Log4jの脆弱性が対策されていない場合に②③が実行されるため、攻撃者は任意のJavaコードを攻撃対象のシステム内で実行可能となります。任意のJavaコードが実行できてしまうので、管理者権限が奪われる、社外秘のファイルが盗まれる等さまざまな攻撃を仕掛けられるおそれがあります。
上記で紹介しているLog4Shellと呼ばれるLog4jの脆弱性については米国連邦取引委員会(FTC)が企業に警告を発しており、Log4Shellの対策を未実施の状態で放置し、サイバー攻撃による個人情報の流出など消費者に不利益が生じるリスクを回避しない企業が法律に抵触する可能性について言及しています。また、Log4Shellによるものではありませんが、脆弱性対応を行わずに個人情報が流出した結果、数億ドルという巨額な罰金が企業に科せられた例もあります。
WAFを導入してLog4jの脆弱性をカバーする
「Log4jの脆弱性対策をできるだけ早く実施したいと考えているが、Log4jのバージョンアップを行うと広範囲にわたるシステム改修を伴うのでなかなか実行に移せない・・」というケースがあると思います。
このような場合に、WAFを導入すると稼働中のシステム改修を伴わずに効果的に脆弱性攻撃からシステムを守ることができます。Javaで動作しているシステムをひとつひとつ確認してバージョンアップ作業を行っていくのは時間もコストもかかる作業となります。よって、まずはWAFでLog4jの脆弱性に対する攻撃を無効化した状態にしてからシステム側の対応を別途行うといった方法もとれます。
Log4jの脆弱性を根本的に解消する対策はLog4jのバージョンアップになりますが、一部のバージョンでは暫定的な回避策としてJndiLookupクラスをクラスパスから削除する方法もあります。クラスパスの削除方法の詳細は参考URLをご参照ください。
まとめ
Javaで作成され、Log4jが組み込まれているシステムは非常に多く、Log4jの脆弱性であるLog4Shellはシステムやその利用者に深刻な被害をもたらす可能性があります。放置せずにすみやかな対策をお勧めします。
【 Log4jの脆弱性を防御する対策】
- Log4jのバージョンアップ(恒久対策)
- JndiLookupクラスをクラスパスから削除する(暫定対応)
- WAFの導入(恒久対策)
WAFを導入する、導入しないに関係なく、最終的には恒久対策としてLog4jのバージョンアップを行うのが望ましいですが、また新たな脆弱性が発見されないとも限りません。WAFを導入しておけば、常に最新のセキュリティルールが適用されるため、新たな脆弱性が発見された場合でもセキュリティ対策の為にシステム改修をすぐに行わなくても済みむメリットがあります。Log4jの脆弱性対策を機会に、WAFの導入を検討してみるのもよいかもしれません。
Log4jの脆弱性はセキュリティ脆弱性の一部分にすぎません。日々発見されているすべてのセキュリティ脆弱性に対して、ひとつひとつのシステムに対策のためのメンテナンスを行っていくのは、システムの数や規模にもよりますが、現実的ではない場合が多いと思われます。優先順位を付けて対応していくとしても、非常に大変な作業になることが容易に想像できます。
一方で、システムがサイバー攻撃の標的となった場合は機密情報の漏洩だけでなく、経済的制裁のリスクに加え、社会的な信用の失墜、ブランドイメージの毀損など、企業にとっては大きな痛手となりえます。将来的なセキュリティ対策のリスクを軽減するためにWAFの活用は効果的な一手と言えるでしょう。
当サイトでは、サイバー攻撃を防ぐためのWAFに興味がある方へ、参考になるダウンロード資料をご用意しております。「サイバー攻撃可視化ツールPrimeWAF 基本ガイドブック」は、WAF選定時に抑えるべき機能やポイントがわかる資料になっています。ぜひ資料をダウンロードください。
※本記事は2022年11月30日の情報を基に作成しています。本情報の詳しい確認は、記載している参照元URLをご覧ください。