
既知の脆弱性があるコンポーネントの使用
ほとんどのアプリケーションは大量のサードパーティ製コンポーネントを使用します。これらのコンポーネントは、ロギング、テンプレート作成、データベースアクセスなど、あらゆる機能を提供します。
これによりソフトウェア開発は格段に容易になり、多くの時間を節約できますが、こうした構成要素も人が作成したものであり、一部には必然的に脆弱性が含まれています。つまり、知らず知らずのうちに悪用される可能性のある脆弱性に晒される可能性があります。
コンポーネントを最新の状態に保つ
一般的に、フレームワーク、ライブラリ、その他のコンポーネントを定期的に最新の状態に保つことが推奨されます。この作業は、次のような複数の方法で実行できます。
- 多くのソース管理ソフトウェアはリポジトリを分析し、依存関係に脆弱性が発見された場合に警告を発することができます。
- 多くのパッケージ管理者はアプリケーションを分析し、ユーザーが持つ可能性のある脆弱な依存関係を特定できます。
- 脆弱な依存関係を特定できる数多くのソフトウェア構成分析(SCA)ソリューションが存在します。
技術的負債のリスク軽減
ライブラリアップグレードのやや厄介な問題の一つは、コードが壊れる変更が発生する可能性があることです。こうした変更は多くの場合文書化されていますが、コードが本番環境で実行されるまで現れない、文書化されていない変更も存在する可能性があります。
アプリケーションが最新バージョンより遅れた複数のバージョンを実行している場合、最新バージョンへのアップグレードにはかなりの作業が必要になる可能性があります。時間的制約のある脆弱性が明らかになった場合、アップグレードに数日かかる状況を避けるためには、サードパーティ製コンポーネントを比較的最新の状態に保つことが重要です。
また、パッケージには明確ではないものの、アプリケーションの動作を変更する可能性のある変更に関する重要な情報が含まれている場合があるため、リリースノートを読まずに安易にパッケージをアップグレードすることも推奨されません。
更新すると、より安全ではない可能性がありますか?
まれではありますが、以下のような脆弱性が発生する可能性があります。
- 以前のバージョンには存在しません
- 脆弱性修正時に導入予定
このような場合、定期的にパッケージを更新することが実際には望ましくないと考えられるかもしれません。もちろん、このような考え方は技術的負債の蓄積につながるため、可能な限り避けるべきです。
このシナリオは比較的稀であるため、パッケージを頻繁に更新することで得られる利点は、新たに導入される脆弱性の可能性よりもはるかに大きいです。定期的に最新の状態を維持すれば、いずれにせよ容易に緩和できるでしょう。
また、サプライヤーが脆弱性を公表せずに密かに修正しないという前提を置いています。残念ながら、これは依然として非常に一般的です。
注目すべき事例
最近耳にしたかもしれない注目すべき事例を以下に列挙します。ライブラリを確認し最新の状態を維持することが、なぜ重要なのかを理解できるでしょう。