Log4jは、Apache Software Foundationによって管理されているJavaベースのログライブラリです。無数のエンタープライズアプリケーション、フレームワーク、クラウドサービスで使用されているライブラリで、システムイベント、デバッグメッセージ、アプリケーションエラーをログに記録するのが目的です。
柔軟性があって統合が容易であるため、多くのJavaアプリケーションでデフォルトのロギングフレームワークとなっていました。また、推移的依存関係によってソフトウェアスタックの奥深くにバンドルされることがよくありました。2021年後半に重大なセキュリティ上の欠陥が見つかり、その普及は重大な負債となりました。
Log4Shellとは
Log4Shellは、2021年12月に見つかったLog4jの重大なゼロデイ脆弱性(CVE-2021-44228)です。その影響を受けるシステム上で攻撃者が任意のコードをリモートから実行できるという脆弱性です。Log4jのJNDI (Java Naming and Directory Interface) 検索機能で入力検証が不適切であることに起因します。
エクスプロイトの仕組み
この脆弱性を悪用する場合、Log4jのJNDI検索のサポートを利用します。JNDIを使用すると、アプリケーションからLDAP、RMI、DNS URLなどのURLを使用してリソースを取得できます。Log4jの脆弱なバージョンでは、信頼できないソースからの入力であっても、特定のログメッセージをJNDI検索を実行するための指示として解釈します。
これを利用して、攻撃者は特別に細工したログメッセージを送信します。Log4jがリモートサーバーからコードを取得して実行し、RCE(リモートコード実行)を引き起こす可能性があります。
ロギング呼び出しの多くがユーザー制御のデータ(HTTPヘッダーやユーザー入力など)をログに記録するため、悪意のある文字列を脆弱なWebアプリケーションに送信するだけで簡単に悪用される可能性があります。
シンプルさ、攻撃範囲、潜在的な影響という特徴から、この欠陥はすぐに近年で最も深刻なソフトウェア脆弱性の1つになりました。
Log4Shellの重大度
Log4Shellの脆弱性は、CVSSスコアで10.0(最高ランク)に位置づけられました。その影響は、エンタープライズグレードのクラウドアプリケーションから消費者向けIoT(モノのインターネット)デバイスに至るまで幅広いシステムに及びました。
Log4Shellを極めて危険なものにしている要因は次のとおりです。
- Log4jがJavaソフトウェアエコシステム全体にわたって深く統合されていること
- 脆弱性を簡単に悪用できること
- 多くの組織が脆弱なコードを実行していたことに気づいてさえいなかったという事実
詳細
進化し続ける脅威に対するアプリケーションのレジリエンスを確保し、潜在的な損害を軽減し、全体的なセキュリティポスチャを強化するための7つのベストプラクティスについて説明します。
Log4Shellの実際のエクスプロイト例
Log4Shellの重大度により、実際に感染報告があるエクスプロイトがすぐに発生しました。CrowdStrike Intelligenceは、国家主導型グループから金銭目的の犯罪者まで、複数の脅威アクターがこの脆弱性を武器化していることを確認しました。
AQUATIC PANDA
AQUATIC PANDAは、インテリジェンス収集と産業スパイという二重の使命を持った中国拠点の脅威アクターであり、Log4Shellの使用が特定された最初の攻撃者の1つです。CrowdStrike Falcon® Adversary OverWatch™チームによると、AQUATIC PANDAは脆弱なVMware Horizonサーバーを悪用しようとしました。
脆弱性が公開された直後に偵察活動を開始し、公開されているLog4Shellエクスプロイトツールを使用して初期アクセスを獲得しました。侵入すると、さらに偵察コマンドを実行し、PowerShell経由で追加のペイロードをダウンロードしようとしました。Falcon Adversary OverWatchチームは、ペイロードの配信前にグループの活動を阻止することに成功し、継続的な脅威ハンティングとリアルタイムの検知がいかに重要であるかを浮き彫りにしました。
その他の犯罪グループ
ランサムウェア関連企業などの犯罪グループは、すぐにLog4Shellを攻撃戦略に取り入れました。多くの場合、脅威アクターはインターネットをスキャンしてパッチが適用されていないシステムを探し、その脆弱性を初期アクセスベクトルとして利用して、ランサムウェアの展開、データの窃取、企業環境内での永続的アクセスの確立を行います。
クラウドストライクは、テクノロジー、製造、金融サービスなど、複数のセクターにわたって脆弱なシステムを悪用しようとする試みを確認しました。こうした試みの多くは、高度な洗練さを必要としない自動エクスプロイトツールを利用しており、スキルの低い攻撃者でもアクセス可能でした。
これらの例は、攻撃者がいかに迅速かつ広範囲にこの脆弱性を悪用したかを示しています。
Log4Shellの検知と緩和策
Log4Shellに効果的に対応するには、検知と緩和の両方を含めた多層アプローチが必要です。多くの組織は脆弱性を見つけるとすぐに脆弱なシステムにパッチを適用しますが、侵害の兆候を検知し、防御を強化することも同様に重要です。次に、セキュリティチームがLog4Shell関連の脅威を特定して無効化する場合に役立つ主な戦略を示します。
検知手法
CAST (CrowdStrike Archive Scanning Tool) などの専用のセキュリティツールを使用して、Log4jの脆弱なバージョンがないかシステムをスキャンする必要があります。
セキュリティチームは、ログとネットワークトラフィックを分析して、エクスプロイトの試みを示す兆候を探すこともできます。疑わしいJNDI検索パターンや、LDAPやRMIへの予期しないアウトバウンド接続があれば、エクスプロイトの試みや成功を示している可能性があります。
緩和戦略
検知されたら、迅速かつ効果的な緩和策を講じることが、エクスプロイトを防ぎ、潜在的な損害を抑える鍵となります。
- 即時パッチ適用:最も安全で効果的な対応は、Log4j 2.17.1(またはそれ以降)に更新して、脆弱なJNDI機能を完全に排除することです。
- 一時的な修正:パッチをすぐには適用できない場合は、設定ファイルでJNDI検索を無効にすると、リスクを軽減できます。ただし、長期的な解決策とは見なされません。
- ネットワーク防御:WAF(Webアプリケーションファイアウォール)と、CrowdStrike Falcon®プラットフォームなどのエンドポイント保護プラットフォームを使用すると、エクスプロイトの試みをリアルタイムで検出してブロックできるようになります。パッチを適用しつつ、防御層を重ねることができます。
詳細
コンテナ、仮想マシン、API、サーバーレス関数といったクラウドネイティブなアプリケーションのセキュリティを確保し保護するには、セキュリティを実現するために多くの組織が取っているアプローチを見直す必要があります。詳細をご覧ください。
Log4Shellから学んだ教訓
Log4Shellは、単なる1回限りの危機ではなく、ソフトウェア業界に対する警鐘となりました。可視性、依存関係の追跡、対応の準備に潜むギャップが明らかになりました。次のレッスンでは、将来の脆弱性に備え、セキュリティポスチャを全体的に強化するために何ができるかを説明します。
SBOM(ソフトウェア部品表)の必要性
Log4Shellへの初期対応における最大の課題の1つは可視性でした。Log4jがサードパーティのコンポーネントに組み込まれていたため、多くの組織がLog4jを使用していることにさえ気づいていませんでした。
SBOMを導入することで、アプリケーション内に存在するライブラリと依存関係を明確に把握して、新たな脆弱性が出現しても迅速に対応できるようになります。
安全なソフトウェア開発プラクティスの強化
将来同じような問題が発生しないようにするには、セキュアコーディングプラクティス、依存関係の管理、脆弱性スキャンをCI/CD(継続的インテグレーション/継続的デリバリー)パイプラインに統合する必要があります。
定期的な更新、自動化ツール、セキュリティファーストの考え方により、SDLC(ソフトウェア開発ライフサイクル)全体のリスクを最小限に抑えることができます。
今日の企業を守るうえでのクラウドストライクの役割
Log4Shellは、エンタープライズアプリケーションに潜むオープンソースソフトウェアの脆弱性の広範なリスクを浮き彫りにしました。クラウドストライクは、検知ルール、スキャンツール、リアルタイムの脅威インテリジェンスで迅速に対応して、組織によるリスク緩和を支援しました。
このインシデントは、プロアクティブセキュリティの重要性を改めて認識させるものでした。新たな脅威に効果的に対応するためには、堅牢なモニタリングを維持し、脆弱性管理に投資して、クラウドストライクなどの信頼できる情報源を通じて常に最新情報を入手する必要があります。