脆弱性とは何か?攻撃者が悪用する弱点
脆弱性とは、ソフトウェア、設定、または設計における弱点であり、攻撃者がこれを悪用して機密性、完全性、または可用性を侵害することができます。
脆弱性とは、攻撃者に足がかりを与えるあらゆる欠陥です。コーディングのバグ、設定ミス、古くなった依存関係、または設計上の弱点などです。現代のソフトウェアは、自身のコードと同じくらい、依存するライブラリからも脆弱性を継承します。CI/CDは、それらの多くが本番環境に出荷される前に、スキャンによって検出される場所です。
脆弱性はどこから来るのか
- コーディングの欠陥: インジェクション、チェックの欠落、安全でないデフォルト。
- 依存関係の欠陥: サードパーティのライブラリにおける既知の問題。
- 設定ミス: 開いたポート、公開されたbucket、脆弱な権限。
脆弱性とエクスプロイトの違い
脆弱性は弱点そのものであり、エクスプロイトはそれを利用する手法です。すべての脆弱性が容易に悪用可能なわけではありませんが、悪用可能性を欠陥を無視する言い訳として扱うのは危険です。攻撃手法は時間とともに進化するからです。
既知の脆弱性の追跡
公開された脆弱性にはCVE識別子と重大度スコアが付与され、データベースにカタログ化されます。スキャナーはあなたの依存関係をこれらのデータベースと照合して既知の問題を検出します。だからこそ依存関係を最新に保つことが中核的なセキュリティプラクティスなのです。
CI/CDにおける脆弱性
pipelineは脆弱性を早期に発見するための自然な場所です。依存関係のスキャン、静的解析、コンテナイメージのスキャン、secretの検出がすべて自動的に実行されます。CIで欠陥を検出することは、侵害後にパッチを当てるよりもはるかに低コストです。
サプライチェーンの側面
あなたのリスクの多くは、あなたが書いたのではない依存関係に存在します。脆弱な推移的パッケージが、あなたのbuildや稼働中のアプリを侵害する可能性があります。直接の依存関係だけでなく、依存関係ツリー全体をスキャンすることが不可欠です。
検出から修正へ
脆弱性を見つけることは、行動につながって初めて有用になります。pipelineは高重大度の検出結果でbuildを失敗させ、自動化された修正pull requestを開き、修復を追跡できます。これにより、スキャン結果を無視されるレポートではなく、閉じられたギャップへと変えます。
重要なポイント
- 脆弱性とは、コード、設定、または依存関係における悪用可能な弱点です。
- 多くのリスクはサードパーティのライブラリから継承されるため、ツリー全体をスキャンしましょう。
- CIのスキャンは脆弱性を早期に検出し、侵害後に修正するよりもはるかに低コストです。