Log4Jの脆弱性(Log4Shell)は、2021年11月にApache Log4Jロギング・ライブラリーで発見された重大な脆弱性です。Log4Shellは基本的に、パッチが適用されていないバージョンのLog4Jを実行しているデバイスの制御をハッカーに完全に委ねるものです。
悪意のある攻撃者はこのLog4jの脆弱性を利用して、脆弱なシステム上でほぼ任意のコードを実行することができます。
Log4Jは世界で最も広く導入されているオープンソース・プログラムのひとつで、使いやすいことから、研究者たちはこれを「破壊的な」セキュリティー脆弱性と考えています。米国サイバーセキュリティー・社会基盤安全保安庁(CISA)のJen Easterly,長官は、これを「最も深刻ではないにしても、これまでのキャリアの中で見てきた中で最も深刻なものの1つ」と述べました。
Log4Shellは2021年12月にサイバー攻撃の急増を引き起こしました。IBMのX-Force脅威インテリジェンス・インデックスによると、2020年から2021年にかけて脆弱性のエクスプロイテーションが34%増加したことが記録されており、その主な原因はLog4Shellとなっています。
Log4Shellは発見後すぐにパッチが適用されましたが、Log4Jはソフトウェア・サプライチェーンに深く組み込まれているため、今後数年間はリスクが生じることになります。米国国土安全保障省は、脆弱な事例を発見して修正するには少なくとも10年はかかると見積もっています。
Log4j は、Apache Software Foundation によって開発されたロギング フレームワークです。名前が示すように、Log4Jはロガーです。 プログラム内のエラー メッセージやユーザー入力などの重要な情報を記録します。
Log4Jはオープンソースのソフトウェア・ライブラリで、開発者が自由に使用できるよう事前に作成されたコードのパッケージです。開発者は独自のロガーを作成する代わりに、Log4Jライブラリをアプリにプラグインできます。この利便性が、Log4Jが広く普及しており、2、3例を挙げると、MicrosoftやAmazonなどの大手組織の製品に組み込まれている理由です。
Log4Shell—Common Vulnerability and Exposure(CVE)識別子、CVE-2021-44228 —Log4Jの一部のバージョンに存在するリモート・コード実行(RCE)の脆弱性です。この欠陥は、Apache Log4J 2バージョン 2.14.1以前に影響します。Log4J 2.15以降、およびApache Log4J 1のすべてのバージョンは影響を受けません。
Log4Shellは、古いバージョンのLog4J 2がJava Naming and Directory Interface(JNDI)ルックアップを処理する方法から生まれました。JNDIは、Javaアプリケーションが外部サーバーにホストされているリソースにアクセスするために使用するアプリケーション・プログラミング・インターフェース(API)です。JNDIルックアップは、サーバーにアクセスしてデータやスクリプトなどの特定のオブジェクトをダウンロードするようにアプリに指示するコマンドです。Log4J 2の古いバージョンでは、この方法でダウンロードされたコードはすべて自動的に実行されます。
ユーザーは、ログ メッセージに JNDI ルックアップを含めることで、脆弱なバージョンの Log4J に JNDI ルックアップを送信できます。やり方は簡単です。たとえば、Log4J を使用してユーザー メッセージを記録する古いバージョンの Minecraft Java Edition では、ユーザーはパブリック チャット ウィンドウに JNDI ルックアップを入力できます。
ハッカーはこのJNDI機能を利用して、悪意のある任意のコードをリモートで実行できます。まず、ハッカーは注目されないように、LDAP(Lightweight Directory Access Protocol)などの一般的なプロトコルを使用するサーバーをセットアップします。次に、マルウェア・ファイルなどの悪意のあるペイロードをそのサーバーに保管します。最後に、彼らはプログラムにJNDIルックアップを送信し、攻撃者のLDAPサーバーにアクセスしてペイロードをダウンロードし、コードを実行するように指示します。
テクノロジー大手アリババのセキュリティ研究者は、2021 年 11 月 24 日に Log4Shell を発見しました。すぐに共通脆弱性評価システム (CVSS) の最高スコアである 10 点中 10 点を獲得しました。この評価にはいくつかの要因が寄与しました。
2021年12月9日までに、Log4Shellの利用方法に関する概念実証コードがGitHubに投稿され、ハッカーによる攻撃が開始されました。Minecraft社、Twitter社、Cisco社などの大手企業やサービスが危険にさらされました。Log4Shellの活動がピークに達したとき、Check Pointは1分間に100件を超える攻撃を観測し、世界中のビジネス・ネットワークの40%以上が影響を受けました。
最も初期の攻撃では、ボットネットとクリプトマイニング・マルウェアが拡散されました。一部のハッカーはこの脆弱性を利用してファイルレス攻撃を開始し、悪意のあるスクリプトをWindowsやLinuxのコンピュータに送信して、パスワードやその他の機密情報を漏洩させました。
複数のランサムウェア攻撃者がLog4Shellを悪用しました。特に、ハッカーはMinecraftを通じてKhonsariランサムウェア株を拡散させました。Night Skyランサムウェアは、VMware Horizonを実行しているシステムをターゲットにしました。
国家機関までもがこれに加わりました。中国、イラン、北朝鮮、トルコに関連するハッカーがこの脆弱性を利用したことが確認されています。
Apache社は、2021年12月10日に最初のパッチ(Log4Jバージョン 2.15.0)を公開しました。しかし、このパッチにより別の脆弱性—CVE-2021-45046—が露出したままとなり、ハッカーが特定のデフォルト以外の設定でログに悪意のあるコマンドを送信できるようになりました。
Apache社は、2021年12月14日に2つ目のパッチ(Log4Jバージョン2.16.0)をリリースしました。これにも—CVE-2021-45105—という欠陥があり、ハッカーがサービス拒否(DoS)攻撃を開始できる状態になっていました。
3番目のパッチであるLog4Jバージョン 2.17では、DoS欠陥は修正されましたが、最後の脆弱性、CVE-2021-44832が残り、ハッカーが「アペンダー」と呼ばれるLog4Jコンポーネントの制御を掌握してリモート・コードを実行できるようになりました。Apache社は、最後のパッチとして4番目のパッチであるLog4Jバージョン 2.17.1でこの問題を解決しました。
Log4J 2.17.1は、Apache社側のLog4Shellとそれに関連するすべての脆弱性を解決しましたが、サイバー脅威は依然としてこの欠陥を利用しています。2023年5月現在でも、Log4Shellは最もよく利用される脆弱性のひとつです。
Log4Shell は、いくつかの理由で存続します。
まず、多くの企業のソフトウェア・サプライチェーンにLog4Jが深く埋め込まれていることです。現在、多くのアプリは既存のオープンソース・ソフトウェライブラリを組み立てて構築されています。このプロセスは便利ですが、組織がアプリを構成するすべてのコンポーネントを十分に把握できないという側面もあります。Log4Jの古いバージョンは見落とされがちです。
脆弱性のあるバージョンのLog4Jにパッチが適用されても、常にパッチが適用された状態を維持できるとは限りません。2022年11月、Tenable社の報告によると、Log4Shellに依然として脆弱な資産のうち29%が「再発」となりました。これらには過去にパッチが適用されましたが、欠陥が再び現れたのです。このシナリオは、ユーザーがアプリを構築または更新する際に、パッチ未適用のバージョンのLog4Jがまだ含まれているソフトウェア・ライブラリーを誤って使用することがあるために発生します。
最後に、ハッカーたちは痕跡を消す巧妙な方法を開発しました。CISAによると、一部のハッカーはLog4Shellを利用してネットワークに侵入し、その資産にパッチを適用しています。企業は安全だと考えていますが、ハッカーはすでに「侵入」しています。
Log4J の最新バージョンには Log4Shell が含まれていません。サイバーセキュリティの専門家は、セキュリティ チームがシステム内の Log4J のすべてのインスタンスが最新であることを確認することに重点を置くことを推奨しています。
多くの場合、企業は資産を見つけるために資産を深く掘り下げる必要があるため、Log4Jの更新は時間がかかるプロセスになる可能性があります。一方、セキュリティチームは、継続的な脆弱性スキャンや、攻撃対象領域管理(ASM)やエンドポイントの検知と対応(EDR) プラットフォームなどの脅威検知ツールを使用して、インターネットに面した資産を監視することができる。専門家は、インシデント対応チームがLog4Shellアクティビティーの兆候を徹底的に調査することを推奨しています。
Log4Shellが公開された後、多くのファイアウォール、侵入検知システム(IDS)、侵入防御システム(IPS)が、 Log4Shellの悪用を検知するルールを追加しました。これらのツールは、セキュリティー・チームが攻撃者が管理するサーバーからのトラフィックを検知し、ブロックするのに役立ちます。
2013 年 7 月 18 日: Apache は、JNDI プラグインをサポートする最初のバージョンである Log4J 2.0-beta9 をリリースしました。この脆弱性は数年後まで発見されませんが、Log4Shell はこの瞬間から存在します。
2021 年 11 月 24 日: Alibaba のセキュリティ研究者が Log4Shell を発見し、Apache に報告しました。Apache はパッチの作業を開始しましたが、パブリック セキュリティ勧告はリリースしませんでした。
2021 年 12 月 9 日: Alibaba のセキュリティ研究者が、Log4Shell が実際に議論されている証拠を発見し、概念実証のエクスプロイト コードが GitHub に投稿されました。
2021 年 12 月 10 日: Apache が最初のパッチを発行し、Minecraft 開発者が Minecraft Java Edition で Log4Shell を発見しました。サイバーセキュリティ コミュニティは状況の深刻さをすぐに認識し、組織はシステムのロックダウンをスクランブルし始めます。
2021年12月11日:Cloudflare社は、脅威アクターが当初考えられていたより早く、12月1日にはLog4Shellを悪用し始めたという証拠を発見しました。
2021 年 12 月 14 日: CVE-2021-45046 が発見され、Apache がそれに対処するパッチをリリースしました。
2021 年 12 月 17 日: CVE-2021-45105 が発見され、Apache がそれに対処するパッチをリリースしました。
2021 年 12 月 28 日: CVE-2021-44832 が発見され、Apache が最終パッチをリリースしました。Log4J バージョン 2.17.1 以降、Log4Shell は完全に修復されています。
2022年1月4日:米国連邦取引委員会(FTC)は、Log4Shellに対処しななかったために消費者データをハッカーに公開した企業を追及する意向を発表しました。
2023年5月:Check Pointは、Log4Shellが依然として2番目に多く悪用されている脆弱性であることを発見しました。