既知の脆弱性を持つコンポーネントの使用
ほとんどのアプリケーションは、大量のサードパーティ製コンポーネントを利用している。これらのコンポーネントは、ロギング、テンプレート化、データベースアクセスなど、あらゆるものを提供する。
しかし、これらのコンポーネントも人の手によって作られており、必然的に脆弱性を含むものもある。つまり、悪用される可能性のある脆弱性に知らず知らずのうちにさらされているかもしれないのだ。
コンポーネントを最新の状態に保つ
一般的な経験則として、フレームワークやライブラリ、その他のコンポーネントを定期的に最新の状態に保つことを強くお勧めします。これにはいくつかの方法がある:
- 多くのソース管理ソフトウェアは、リポジトリを分析し、依存関係に脆弱性が見つかった場合に警告を出すことができます。
- 多くのパッケージ・マネージャは、あなたのアプリケーションを分析し、脆弱な依存関係を特定することができます。
- ソフトウェア構成分析(SCA)ソリューションは数多く存在し、脆弱な依存関係を特定することができる。
技術的負債のリスクを軽減する
ライブラリをアップグレードする際の、かなり陰湿な問題のひとつに、コードを壊すような変更が加えられることがあるということがあります。これらの変更は多くの場合文書化されていますが、文書化されていない変更もありえます。
もし、あなたのアプリケーションが最新バージョンから何バージョンも遅れて動作している場合、最新バージョンにアップグレードするために必要な作業量が大幅に増える可能性があります。一刻を争う脆弱性が公表された場合、アップグレードに何日もかかるような事態を避けるためには、サードパーティのコンポーネントを比較的最新のものにしておくことが重要です。
また、少なくともリリースノートを読まずに、やみくもにパッケージをアップグレードすることはお勧めしません。リリースノートには、明らかではありませんが、あなたのアプリケーションの機能を変更する可能性のある変更に関する重要な情報が含まれているかもしれないからです。
更新することで、より不安になる可能性は?
一般的ではないが、脆弱性が存在する可能性がある:
- 古いバージョンには存在しない
- 脆弱性を修正する際に導入される
このような場合、パッケージを定期的に更新することはあまり好ましくないと考えるかもしれない。もちろん、このような考え方は技術的負債の蓄積につながるため、可能な限り避けるべきである。
このようなシナリオが比較的稀であることを考えると、頻繁にパッケージをアップデートすることの利点は、新たに導入される脆弱性の可能性をはるかに上回ります。
また、ベンダーが脆弱性を公表することなく黙って修正することはないという前提に立っている。
主な例
最近耳にしたことがあるであろういくつかの顕著な例を以下に挙げる。図書館をチェックし、最新の情報を入手することがいかに重要か、そしてなぜ重要なのかがおわかりいただけるだろう。