
既知の脆弱性を持つコンポーネントの使用
ほとんどのアプリケーションは大量のサードパーティ製コンポーネントを利用しています。これらのコンポーネントは、ログ記録、テンプレート作成、データベースアクセスなど、あらゆる種類の機能を提供します。
これによりソフトウェア開発が大幅に容易になり、多くの時間を節約できます。しかし、これらのコンポーネントも人間が作成しており、必然的に脆弱性を含むものもあります。これは、知らず知らずのうちに悪用される可能性のある脆弱性に晒されているかもしれないことを意味します。
コンポーネントを最新の状態に保つ
一般的に、フレームワーク、ライブラリ、その他のコンポーネントを定期的に更新することを強く推奨します。これにはいくつかの方法があります:
- 多くのソースコード管理ソフトウェアは、リポジトリを分析し、依存関係に脆弱性が発見された場合に通知します。
- 多くのパッケージ管理者は、アプリケーションを分析し、脆弱な依存関係を特定できます。
- ソフトウェア構成分析(SCA)ソリューションは数多く存在し、あらゆる脆弱な依存関係を特定できます
技術的債務リスクを軽減する
ライブラリの更新に伴うかなり厄介な問題は、コードを解読する変更が含まれている可能性があることです。通常は文書化されていますが、文書化されていない変更もあり、本番環境でコードが実行されるまで現れない場合もあります。
アプリケーションが最新版から大幅に古いバージョンを実行している場合、最新版への更新には相当な作業量が必要となる可能性があります。緊急の脆弱性が発見された場合、更新が数日かかる事態を避けるためには、サードパーティ製コンポーネントを比較的最新の状態に保つことが極めて重要です。
パッケージの更新は、少なくともリリースノートを読まずに盲目的に行うことも推奨されません。なぜなら、それらは明らかでないがアプリケーションの動作を変える可能性のある変更に関する重要な情報を含んでいる場合があるからです。
アップデートは不安を増す可能性がある?
まれではあるが、脆弱性が以下を引き起こす事例が存在する:
- 以前のバージョンには存在しません
- 脆弱性を修正する際の注意点
これらの事例は、パッケージの定期的な更新が実際には望ましくないと思わせる可能性がある。もちろん、この考え方は可能な限り避けるべきであり、技術的負債の蓄積につながるからだ。
このシナリオが比較的稀であることを考慮すると、パッケージを頻繁に更新するメリットは、新たに導入された脆弱性が発生する可能性をはるかに上回ります。いずれにせよ、定期的に更新を続けることで、そのような脆弱性は容易に軽減できるはずです。
また、ベンダーが脆弱性を黙って修正し、一切開示しないことも想定している。残念ながら、これは依然として非常に一般的なことである。
顕著な例
以下に、最近おそらく耳にしたことがあるであろう顕著な事例をいくつか挙げます。ライブラリを検証し、最新の状態を維持することがいかに重要か、その理由を確認できるでしょう。