JFrog OSS スキャンツールによる Log4j 検出
ユビキタスな Apache Log4j パッケージに Log4Shell が発見されたことは、その影響と深刻さの両面において特異な出来事です。Log4Shell への攻撃は、脆弱性が公表されてから数日のうちに 100 万回以上検出されており、その影響が完全に把握できるまでは数年かかると思われます。
このような極端な状況から一般的な教訓を得ることは困難ですが、既存のソフトウェア開発、テスト、リリースの方法論を評価し、同じような状況を防ぐために今後何をすべきかを検討する機会を与えてくれています。
また、Log4j の脆弱性は、こうした大きな脆弱性が公表されたときに開発者が直面する課題を熟慮し、どのようなツールを使えばより迅速かつ容易に状況に対処できるかを検討する機会にもなります。状況を改善するために必要な適切なツールを選択するには、実際の問題をしっかりと理解することが重要です。場合によっては、複雑な汎用ツールよりも、タスクに特化したシンプルなツールの方が効果的なこともあります。
CVE-2021-44228 が公表された後、JFrog のセキュリティリサーチチームは、開発者コミュニティをどのようにサポートすべきかを適切に判断するために、この脆弱性を徹底的に調査する作業にすぐに取り掛かりました。 Log4Shell に関する調査と提言の発表に加えて、開発者がソースコードとバイナリの両方で Log4j の使用状況とリスクを検出するために、専用の Log4j オープンソース・スキャンツールのセットを設計し、公開しました。このツールは様々なオプションがあり、開発者がそれぞれのタスクに合わせて容易に使用することができます。
このブログでは、Log4j スキャンツールを作成する際に必要であった思考プロセスと考慮事項を紹介します。
最初に決定したことは、パッシブなスキャンツールを作ることでした。他の人が公開している利用可能なツールを調査したところ、その多くがアクティブなものでした。つまり、実行中のサービスに脆弱性が存在するかどうかをテストしようとしたり、なかには Log4Shell を利用してパッチを当てようとするものもありました。私たちは、2つの理由から、パッシブな方法によるソース及びバイナリのスキャンツールがベストであると判断しました。
- 稼働中のシステム上でエクスプロイトを実施することは、少なからずリスクを伴うアクションであり、ほとんどの開発者やセキュリティ実務者は望まないでしょう
- アクティブな Log4j スキャンツールは、ユーザアクセス可能なインターフェースと潜在的に脆弱なロギング API 間のデータパスを分析することなく、インターフェースから入力を行い、その結果を見ることで、Log4Shell のトリガー有無を判断します。したがって、脆弱性を誘発すると予測したすべての試みが失敗した場合には、たとえ他の入力に対して脆弱であったとしても、アプリケーションは安全であるという誤った結論に達する可能性があります
次に決定したことは、パッケージのスキャン方法は、ビルドの依存関係に頼るべきではないということでした。ビルド依存関係を調査するというアプローチは確かに有効なのですが、Log4j の脆弱性の含まれ方からすると、依存関係調査では脆弱性を包括的に検出できないと考えたからです。パッケージマネージャーを経由していないか、あるいはそれ以外の理由で、脆弱なコードが直接含まれ、ビルド依存性定義が十分でないケースがあるからです。
最終的には、2つの主要なタスクに焦点を当てました。
- 特定のファイル名やメタデータではなく、log4j-core 由来の脆弱なコードが含まれているかどうかを判断するためにコードクラスを使用する。このツールは、ファイル名、ビルド情報や脆弱性パッケージ・データベースの完全性について何も想定していないので、「実行中のコードに Log4j が含まれているか」という問いに対する無条件の答えを出すのに役立ちます。
- 脆弱なコードの呼び出しをスキャンする。こうしたツールは開発者が自分のアプリケーションで Log4j がどのように使用されているかを把握するのに役立ちます。これはソフトウェアに積極的にパッチを適用することを犠牲にしてまで最初にすべきことではないでしょう。しかし、スキャンツールによって、フィルタリングされていないユーザ制御の入力が Log4j の API コールに到達しうるかどうかを開発者が迅速に評価し、パッチの前にソフトウェアが実際に脆弱であったかどうかを結論付けることが可能になりますし、検証の追加レイヤーとしても使用できます。
新たな注意点や脆弱性が発見された際は、Log4j のスキャン ツールを更新します。これで、絶えず開発者が設定や緩和策を検証して Log4Shell エクスプロイトに対してどこが脆弱かを素早く理解できるようになります。
Twitter @jfrog ではLog4Shell の最新情報を引き続き発信します。ぜひフォローしてください!
その他のリソース:
Log4shell ゼロデイ:知っておくべきこと ー ブログ
Log4j Log4Shell Vulnerability Explained ー ウェビナー
Log4j Log4Shell 脆弱性に関するQ&A ー ブログ