脆弱性 remediation プロセスの4つのステップ
2021年2月16日
0 分で読めます脆弱性管理の最終目標は、脆弱性を修正することです。脆弱性管理プログラムの重要なKPIの1つは、重要なシステムや資産が侵害される前に、リスクの高い脆弱性をどれだけ取り除く、または無害化できたかです。
脆弱性の修正とは?なぜ重要なのか?
顧客、パートナー、従業員、規制当局は、データの偶発的または悪意ある損失や漏えいから継続的かつ効果的に保護するためのポリシーとプロセスを、企業が導入することを期待しています。また、システムの停止や速度低下は一切許容されません。つまり、脆弱性の修正という課題への対応は、ビジネスに不可欠な取り組みとなっています。
脆弱性の修正プロセスとは?
脆弱性の修正プロセスとは、検出されたバグや脆弱性などの弱点を修正または無害化するワークフローです。次の4つのステップで構成されます。スキャンやテストによる脆弱性の発見、優先順位付け、修正、そして脆弱性の監視です。
拡張性と有効性を備えた脆弱性修正プロセスを実現するため、ここでは主に優先順位付けと修正のステップに焦点を当てます。
脆弱性修正プロセスの4つのステップ
発見:スキャンとテストによって脆弱性を検出する
優先順位付け:どの脆弱性が実際に重大なリスクとなるかを把握する
修正:脆弱性に大規模かつリアルタイムでパッチを適用、ブロック、またはその他の方法で対処する
監視:関連するすべてのチャネルでリアルタイムのアラートと通知を受け取り、新たに発見された脆弱性がないか、プロジェクトとコードを自動的に監視する

1. 脆弱性の発見
脆弱性の優先順位付けや修正に進む前に、脆弱性とは何か、どのように発見するのかを簡単に確認しましょう。
セキュリティ脆弱性とは、既知のコーディング上の欠陥やシステムの設定ミスであり、悪用されるとアプリケーション、サービス、ライブラリ、コンテナ、関数と、それらに関連するすべての資産が侵害される可能性があります。攻撃者はシステムの停止やパフォーマンスの妨害、データの窃取、コンピューティングリソースの乗っ取りなどを狙います。侵害されたコンポーネントから横方向にアクセスできるシステムや資産も危険にさらされます。
よく知られたソフトウェアの脆弱性の例として、ユーザー認証の仕組みがまったく実装されていない、あるいは推奨されるベストプラクティスである多要素認証ではなく、単一要素認証などの不十分な制御が実装されているケースが挙げられます。この種の脆弱性は、十分な権限を持つ不正ユーザーが、中間者(MITM)攻撃などを仕掛ける隙を与えます。これは、電子的な盗聴にほかなりません。Log4Shellのように、セキュリティチームや攻撃者によって新たな脆弱性が定期的に発見されるため、頻繁なスキャンが重要です。
したがって、脆弱性修正プロセスの最初のステップは、セキュリティ脆弱性をスキャンして発見することです。成熟した脆弱性管理プログラムでは、DevSecOpsのシフトレフトアプローチを採用し、セキュアなSDLC(ソフトウェア開発ライフサイクル)全体を通して脆弱性をスキャンします。CI/CDパイプラインの速度を落とさないよう、自動脆弱性テストツールを開発、テスト、本番環境に導入します。こうしたツールには、次のものがあります。
ソフトウェア構成分析(SCA)ツール
ホワイトボックス型の静的アプリケーションセキュリティ(SAST)ツール
ブラックボックス型の動的アプリケーションセキュリティツール(DAST)
コンテナセキュリティの脆弱性を発見する
コンテナセキュリティには、特に注意が必要です。コンテナイメージや、関連するすべての接続先を含む実行中のコンテナインスタンスをスキャンして、セキュリティ脆弱性を検出することが重要です。また、サードパーティ製のコンテナイメージが信頼できるソースから提供されていることも確認する必要があります。Kubernetesのセキュリティにも、脆弱性スキャンに関する特有の課題があります。クラスターが侵害されると、ネットワーク内のすべてのサービスとマシンが危険にさらされます。
2. 脆弱性の優先順位付け
脆弱性修正プロセスの次のステップは、修正する脆弱性の優先順位を決めることです。
「アプリケーションセキュリティの仕事を始めた頃、私が犯した間違いの1つは、あまりにも多くのことに時間をかけすぎたことです。その結果、特定の脆弱性の細部に入り込むことに、時間を使いすぎていました。」
Brendan Dibbel、Toast、アプリケーションセキュリティエンジニアリングチームリード
企業がどのようなセキュリティリスク管理のアプローチを採用していても、検出されたすべての脆弱性が同じレベルのリスクをもたらすわけではありません。深刻度、修正可能性、カバレッジ、コンプライアンスなど、さまざまな要素の間には常にトレードオフがあります。リスクベースで状況を踏まえた優先順位付けを行うことで、脆弱性修正チームは限られたリソースを最も重要な課題に集中させられます。
脆弱性の優先順位付け方法
発見された脆弱性の80%以上は誤検知で、さらに18%はリスクが低く、実際に修正が必要なのは残りの2%という可能性があります。
クラウドネイティブなアプリケーションセキュリティプラットフォームであるSnykは、さまざまな方法で脆弱性の優先順位付けを支援します。
脆弱性に関する有益な情報:Snykでは、悪用の成熟度、修正可能性、リスクレベル(一般的な危険度や、特にビジネスクリティカルなプロジェクトへの影響を含む)、広がり(影響を受けるプロジェクトや資産の数)、経過期間など、実際の対応に役立つ情報に基づいて優先順位を付けられます。
正確なリスクベースの優先度スコア:Snyk Vulnerability Databaseは、多様な公開情報および独自の情報源からデータを収集・分析し、既知および未知の脆弱性をかつてない範囲でカバーします。各脆弱性には、慎重に算出された優先度スコアが割り当てられます。
アプリケーションレベルのインサイト:Snykは、実行時の呼び出しデータ、Kubernetesの設定情報、稼働中のコンテナから得られるシグナルを使用して、脆弱性の影響の有無を判断します。脆弱な関数が実際には呼び出されていない場合、それは本当に緊急対応が必要でしょうか?
セキュリティポリシーをきめ細かく制御:脆弱性の優先順位付けは、企業のセキュリティポリシーに沿って行う必要があります。セキュリティ制御をきめ細かく実装するほど、脆弱性の優先順位付けも的確になります。Snykでは、タグや属性を使ってプロジェクトごとにセキュリティポリシーを定義できます。
3. 脆弱性の修正
脆弱性修正プロセスの3つ目のステップは、弱点を修正することです。
多くの場合、脆弱なソフトウェアは、該当するソフトウェアベンダーが推奨するアップグレードやパッチを適用して取り除きます。ただし、パッチの適用自体が難しい場合もあります。パッチやアップグレードのテストと展開には、かなりの時間とリソースが必要です。展開中にビジネスクリティカルなシステムを停止しなければならないこともあります。また、パッチによってアプリケーション自体やその依存関係に予期しない影響が生じるリスクも常にあります。
弱点をより低リスクで修正したり、パッチを適用できるまでの時間を確保したりする方法もあります。たとえば、リスクのあるシステム、プラットフォーム、サービスの設定を更新できます。同様に、脆弱なプロセスや関数を無効化したり、使用されていない脆弱なコンポーネントを削除したりすることもできます。
4. 脆弱性の監視
SDLCの他の工程と同様に、セキュリティ脆弱性の修正プロセスも継続的に行われます。このサイクルを回すには、監視体制が必要です。ツールによってプロジェクトとコードを自動的に監視し、新たに発見された脆弱性について、関連するすべてのチャネルを通じてリアルタイムのアラートと通知を受け取れるようにします。
理想的には、監視ツールが状況に応じた優先順位付けも行い、脆弱性修正プロセスのステップ1と2(発見と優先順位付け)を支援します。
そうでなければ、通知を受け取る開発者やAppSecチームは、優先度の低い脆弱性の大量流入にすぐに疲弊してしまいます。ノイズによってチームが圧倒されると、迅速な修正が必要な重要度の高い脆弱性への対応が遅れるおそれがあります。
監視はこのリストでは4番目のステップですが、効果的なセキュリティプログラムでは最初のステップとも考えられます。
脆弱性修正プロセスに欠かせない4つのステップを理解するだけでなく、プロセスを効率化し、円滑に進めるための適切なツールを導入することも非常に重要です。
「ほぼすべての組織で、私はこの問題を目にします。数人のセキュリティエンジニアが、非常に大勢の開発者に対応しなければならず、あらゆる変更を把握し続けるのは不可能です。
すべての作業に取り組むのではなく、エンジニアがセキュリティの責任を担うために必要なツールを、どうすれば提供できるかに重点を置きたいのです。」
Brendan Dibbel、Toast、アプリケーションセキュリティエンジニアリングチームリード
Snykでサイバーセキュリティの脆弱性を管理・修正する
開発チームが適切なツールを使って脆弱性を発見し、修正できるよう支援しましょう。Snykが役立つ方法をいくつかご紹介します。
即時のロックダウン:SnykのSCAツールは脆弱性をスキャンし、影響を受けるすべての箇所を速やかに検出して、攻撃者を即座に締め出すための対策を講じます。
脆弱性への迅速なアクセス:分散化が進み、イベント駆動型のクラウドネイティブアプリケーションが普及した現在、修正が必要な脆弱なコードやコンポーネントを開発者が見つけるのは簡単ではありません。Snykは、脆弱性への具体的なアクセス方法を開発者に示し、修正を加速させます。
既存の開発者ワークフローとの統合:IDEやGitHubなどのバージョン管理ツールなど、開発者が日々作業する環境にSnykを導入することで、コンテキストの切り替えを減らし、開発ライフサイクルの早い段階で潜在的な脆弱性を修正できるよう支援します。
脆弱性のないバージョンへの自動または手動アップグレード:Snykは、依存関係を脆弱性のないバージョンにアップグレードします。自動修正のプルリクエストで自動的に対応するか、チームに手動での対応を促すことができます。
脆弱性へのパッチ適用:Snykは既存のブランチがあるかどうかを自動的に確認し、該当する修正を含む既存のプルリクエストを再度開きます。既存のブランチがない場合は、新しいブランチとプルリクエストを作成します。
CI/CDパイプラインにセキュリティを組み込む
Snykはお使いのCI/CDパイプラインで動作し、優先度の高い脆弱性の修正を支援します。
よくある質問
脆弱性スキャンとテストとは何ですか?
脆弱性スキャンは、既知のコーディング上の欠陥や設定ミスのデータベースと照合し、アプリケーションやシステムを監視します。脆弱性テストでは、アプリケーションを検査して脆弱性を評価します。脆弱性スキャンとテストはいずれも、ソフトウェア開発ライフサイクル全体を通じてCI/CDパイプラインにシームレスに統合できる、自動化されたプロセスにする必要があります。
脆弱性を安全に優先順位付けするにはどうすればよいですか?
Snykは、複数の脆弱性情報や脅威インテリジェンスのデータソースを分析・精査して算出したリスクスコアに基づき、脆弱性の優先順位付けを支援します。公開されている情報源もありますが、現場(開発者や学術機関など)から得られる情報や独自の調査結果で補完する必要があります。
脆弱性のあるソフトウェアを削除するには?
脆弱性のあるソフトウェアは通常、ソフトウェアベンダーが提供するパッチやアップグレードを適用して削除します。ただし、システムやアプリケーションの設定を更新したり、脆弱性が指摘されている未使用のコンポーネントを削除または無効化したりするなど、別の方法で脆弱性のあるソフトウェアを修復することもできます。
