既知の脆弱性を持つコンポーネントの使用
ほとんどのアプリケーションは、大量のサードパーティ製コンポーネントを利用しています。これらのコンポーネントは、ログ記録、テンプレート作成、データベースアクセスなど、あらゆる機能を提供します。
これによりソフトウェア開発は大幅に効率化され、時間を節約できます。しかし、これらのコンポーネントも人間によって作成されている以上、必然的に脆弱性が含まれる可能性があります。つまり、知らないうちに悪用可能な脆弱性にさらされている可能性があるのです。
コンポーネントを最新の状態に保つ
一般的な原則として、フレームワーク、ライブラリ、その他のコンポーネントは定期的に最新の状態に保つことが強く推奨されます。これにはいくつかの方法があります。
- 多くのソース管理ソフトウェアはリポジトリを分析し、依存関係に脆弱性が見つかった場合に警告を発することができます
- 多くのパッケージマネージャーはアプリケーションを分析し、脆弱な依存関係を特定できます
- 脆弱な依存関係を特定できるソフトウェア構成解析(SCA)ソリューションも数多く存在します
技術的負債のリスクを軽減する
ライブラリのアップグレードにおける厄介な問題の一つは、コードに破壊的な変更が生じる可能性があることです。これらは多くの場合ドキュメント化されていますが、本番環境でコードを実行するまで現れないような、文書化されていない変更が含まれることもあります。
アプリケーションが最新バージョンから大きく遅れている場合、最新版へのアップグレードに多大な労力が必要になることがあります。緊急性の高い脆弱性が公表された際、アップグレードに何日もかかるような事態を避けるためには、サードパーティ製コンポーネントを常に最新の状態に保っておくことが不可欠です。
また、リリースノートを読まずに盲目的にパッケージをアップグレードすることも推奨されません。一見分かりにくいものの、アプリケーションの動作に影響を与える重要な変更情報が含まれている可能性があるためです。
アップデートによってセキュリティが低下する可能性はありますか?
一般的ではありませんが、以下のようなケースが発生する可能性もあります。
- 古いバージョンには存在しない
- 脆弱性の修正時に新たな脆弱性が混入する
こうした事例から、パッケージを定期的に更新することは望ましくないのではないかと考える人もいるかもしれません。もちろん、そのような考え方は技術的負債を蓄積させる原因となるため、可能な限り避けるべきです。
このシナリオが発生する確率は比較的低いため、パッケージを頻繁に更新するメリットは、新たに脆弱性が混入する可能性をはるかに上回ります。そもそも、定期的に最新の状態を維持していれば、そうした問題も容易に軽減できるはずです。
また、この懸念は「ベンダーが公表せずに密かに脆弱性を修正することはない」という前提に基づいています。しかし残念ながら、そうしたケースは依然として非常に一般的です。
注目すべき事例
最近耳にしたことがあるかもしれない、注目すべき事例をいくつか以下に挙げます。ライブラリを確認し、常に最新の状態を保つことがなぜ重要なのか、その理由をご理解いただけるはずです。
実践的なセキュアコーディング
OWASP Top 10のようなソフトウェアの脆弱性を理解し軽減するためのセキュアコーディングガイドラインを確認しましょう。また、実践的なアプリシミュレーションを通じて学べるトレーニングミッションにもぜひ挑戦してください。