Skip to main content

SnykでLog4Shellの脆弱性をすばやく検出・修正

著者
Headshot of Ariel Ornstein

Ariel Ornstein

blog feature log4j vulnerability red

2021年12月13日

0 分で読めます

編集者注 (2021年12月28日 午後7時35分 GMT): Log4jチームが新たなセキュリティアップデートをリリースしました。このアップデートにより、2.17.0にCVE-2021-44832として特定されたリモートコード実行の脆弱性があることが判明しました。現時点での最新版である2.17.1へのアップグレードを推奨します。詳しくはこちらをご覧ください。

編集者注 (2021年12月18日 午後6時55分 GMT): Log4jをめぐる状況は急速に変化しており、新しい情報が入り次第、ブログを更新しています。2.17.1以降へのアップグレードを推奨します。このバージョンには、2.15.0で修正された2件のリモートコード実行の脆弱性(CVE-2021-44228および2.16.0で修正されたCVE-2021-45046)へのセキュリティ修正に加え、2.17.1で修正された最新のDoS脆弱性(CVE-2021-45105)への修正が含まれています。詳しくはこちらをご覧ください。

静かな週末を過ごそうとどれほど頑張っていても、12月10日(金)に公表された新たなLog4Shellのゼロデイ脆弱性に、少なくとも一度は予定を邪魔されたのではないでしょうか(2021年12月10日)。

この新たな脆弱性は、人気の高いJavaロギングフレームワークの1つであるLog4Jを構成する、オープンソースのJavaライブラリlog4j-coreで見つかりました。CVE-2021-44228が割り当てられ、CVSSスコア10で重大に分類されています。また、実際に悪用されている明確な証拠があることから、悪用の成熟度も高いとされています。

2.0-beta9から2.14.1までのすべてのバージョンがこの新たな脆弱性の影響を受けます。脆弱性は公表と同じ日にリリースされた最新版(2.16.0)で修正されています。

Snykは、新たな脆弱性をすばやくSnyk Intel Vulnerability Databaseに追加しました。お客様、パートナー、コミュニティの皆様は、JVMアプリケーションやコンテナのスキャンに利用し、Snyk Open SourceとSnyk Containerを使ってこの脆弱性に緊急の修正を適用できます。

SnykでLog4Shellを検出・修正する方法

多くの人がまず知りたいのは、「この脆弱性にどの程度さらされているのか?」ということです。

Snykを使えば、脆弱なバージョンのパッケージを使用しているかどうか、またその使用箇所を確認できます。さらに、SDLC全体にわたって脆弱性を修正することもできます。

コーディング時、SCMインテグレーション経由、または継続的なモニタリングサービスによるアラートを通じて、Log4Shellの影響を受けているかどうかをSnykで確認する方法をご紹介します。また、レポートサービスとAPIを使って大規模に確認する方法も解説します。

未管理・未宣言のコードを調べるSnyk CLIコマンド:snyk log4shell

Snyk CLIには、Log4Shell脆弱性の影響を受けるLog4jライブラリの痕跡を検出するための新しいコマンドが追加されました。snyk log4shellはビルド済みのJavaプロジェクトをテストし、マニフェストファイルで宣言されていない場合でも、脆弱なライブラリの痕跡を検出します。snyk log4shellの詳細と、プロジェクトでの使い方をご覧ください。

コーディング時にLog4Shellの脆弱性を検出する

脆弱性をできるだけ早く検出するために、開発者は無料で利用を開始できるIDEプラグインとCLIを使用できます。スキャン結果には、Snykが検出したすべての脆弱性と、それぞれの脆弱性がアプリケーションにどのように持ち込まれたか(直接依存か間接依存か)が表示され、修正方法も明確に示されます。

Snyk IntelliJプラグインがLog4jの任意コード実行の脆弱性を検出し、バージョン2.15.0へのアップグレード手順を表示しています。
脆弱性の修正方法をインラインで示す、SnykのIntelliJ IDEプラグインのスクリーンショット。

Snyk CLI(必ず最新版のv1.792.0をお使いください)では、脆弱性が検出された場合に見落とさないよう、専用の警告メッセージが表示されます。Snyk CLIのインストールとアップデート方法については、ドキュメントをご覧ください。

Log4jの脆弱性が2件表示され、推奨されるアップグレードと修正手順が示されたSnyk CLIのターミナル出力。
Snyk CLIで脆弱性を検出し、修正方法を確認する。

jarとして追加されたlog4j-coreをスキャンする

パッケージマネージャー(Mavenなど)を使用していない場合でも、Snykはjarファイル内の脆弱性を検出できます。現在のフォルダ内のすべてのjarをスキャンするには、snyk test --scan-all-unmanagedコマンドを実行します(プロジェクトを継続的にモニタリングするsnyk monitorコマンドでも利用できます)。

Snykの依存関係スキャン結果を表示するターミナル。Log4jの脆弱性が2件検出され、バージョン2.14.1から2.16.0へのアップグレードが推奨されています。

SnykのSCMインテグレーションでプロジェクトのLog4j脆弱性をテストする

数回クリックするだけで、Snykがサポートするすべてのプロジェクトをインポートし、オープンソースの脆弱性をテストできます。脆弱性の有無や、脆弱性がどのように持ち込まれたか、修正方法などの情報もすぐに確認できます。

arielorn-demosプロジェクトと、distributed-app、java-goof、goof、java-reachability-playgroundなどの選択されたリポジトリを表示するリポジトリのインターフェース
Apache Log4jの脆弱性レポート。任意コード実行、重大度「クリティカル」、スコア1000、修正方法の詳細を表示。

Snykは、検出された脆弱性に関する豊富な情報を提供します。脆弱性の修正方法を把握し、緊急性の高いものを優先して対処するうえで役立ちます。

Snykの優先度スコアは、脆弱性が実際に悪用されているか、修正プログラムが提供されているか、Twitterで話題になっているかなど、さまざまなシグナルをもとに算出されます。このスコアを使えば、脆弱性の一覧をすばやく確認し、適切な優先順位を付けて修正できます。Log4Shellの場合、スコアにカーソルを合わせるとわかるように、優先度スコアは非常に高くなっています。

プロジェクトの依存関係ツリーを見ると、脆弱性がアプリケーションに直接持ち込まれたのか、間接依存によって持ち込まれたのかを正確に把握できます。

脆弱性で絞り込まれた依存関係ツリー。脆弱なJava依存関係の中から、org.apache.logging.log4j:log4j-core@2.3が強調表示されています。

継続的なモニタリングで、今後のLog4j脆弱性に備える

新たな脆弱性の公表前にプロジェクトをインポートしていた場合、デフォルト設定を変更していない限り、毎日のテストサイクルでプロジェクトが自動的にテストされています。通知を有効にしていれば、プロジェクトのいずれかで脆弱性が見つかったかどうかを知らせる通知がすでに届いているはずです。

Log4Shellを自動修正するPR/MR

新たな脆弱性が公表される前からSnykでリポジトリをモニタリングしていた場合、Snykはすでにlog4j-coreを脆弱性のないバージョンにアップグレードする修正プルリクエスト/マージリクエストを自動で作成しています。

Log4jのリモートコード実行の脆弱性を修正するため、Mavenの依存関係をバージョン2.3から2.15.0にアップグレードするSnykのプルリクエスト。

新規にインポートしたプロジェクトの場合、または自動修正PRを有効にしていない場合は、プロジェクトページから修正PRを手動で作成できます。

Apache Log4jの任意コード実行の脆弱性を表示するダッシュボード。重大度は「重大」で、「この脆弱性を修正」ボタンが強調表示されています。

ビジネス全体のサービスでLog4Shellを検出・修正する

APIとレポートサービスを利用できるお客様は、モニタリング対象のオープンソースプロジェクト全体でlog4j-core依存関係がどこで使用されているかを把握するうえで、これらの機能が役立ちます。

Snykのレポートでlog4j-coreを使用するプロジェクトを見つける

Snykの部品表(グループおよび組織レベルのレポートの依存関係タブにあります)を使って、log4j-coreの使用箇所を検索できます。Dependenciesフィルターを開いて依存関係名(log4j-core)を入力し、選択すると、このパッケージに絞り込んだ結果が表示されます。結果が表示されない場合、Snykでモニタリングしているプロジェクトにこの依存関係は含まれていないことを示します。

「log4j」で絞り込まれ、org.apache.logging.log4j:log4j-core@2.3が選択されたSnyk Reportsの依存関係タブ
Snykのレポートの依存関係タブで「log4j-core」を検索している画面のスクリーンショット。

依存関係が見つかった場合は、使用箇所を正確に確認できます。Projectsリンクをクリックすると、依存関係としてlog4j-coreを使用しているすべてのプロジェクトが一覧表示されます。対象のプロジェクトをクリックすると修正方法が表示されます。アップグレード可能な場合は、修正プルリクエスト/マージリクエストを作成できます。

org.apache.logging.log4j:log4j-core@2.3 の依存関係プロジェクトパネル。GitHub および CI/CLI のソースと課題数が表示された2つのプロジェクトが一覧表示されています。

Snyk APIでlog4j-coreを使用するプロジェクトを見つける

APIを使ってlog4j-core依存関係の使用箇所を検索することもできます。組織別の依存関係エンドポイントでは、使用されている依存関係をすべて一覧表示し、それぞれの使用箇所を取得できます。言語(この場合はJavaが該当)、深刻度など、結果を絞り込むためのフィルターも複数用意されています。複数の組織があるグループのすべての組織を順に確認する場合は、グループ内の全組織を一覧表示エンドポイントを使用してください。

Apache Log4j バージョン 2.3 の JSON レコードを表示し、重大な問題の件数と関連する Maven プロジェクトを強調表示したコードのスクリーンショット

レスポンスには、該当するパッケージを含むすべてのプロジェクトが一覧表示されます。ここから、UIでプロジェクトを確認して脆弱性を修正するか、ほかのAPIを使って修正方法を取得できます。

Snykにお任せください!

Snykは無料で、すぐに簡単に始められます。今すぐご利用ください。脆弱なlog4j-coreパッケージ(その他のパッケージも含む)が使われている箇所を見つけ、簡単に修正できるようサポートします。安心して週末をお過ごしください!

Capture the Flagを始めよう

オンデマンドのバーチャル入門ワークショップを見て、Capture the Flagの課題の解き方を学びましょう。