セキュリティで保護された DevOps パイプラインを調べる

完了

Secure DevOps パイプラインの目的は、プロジェクトに不要なセキュリティ脆弱性を導入することなく、開発チームが迅速に作業できるようにすることです。 速度とセキュリティのバランスを取るには、セキュリティを別のフェーズとして扱うのではなく、パイプライン全体にセキュリティ プラクティスを埋め込む必要があります。

セキュリティで保護された DevOps パイプライン ワークフロー

包括的な Secure DevOps パイプラインは、ソフトウェア配信プロセスの複数の段階でセキュリティ チェックを統合します。

セキュリティ統合された配信プロセスを表す連続した円に配置された 10 個の相互接続されたステージを含む Secure Azure Pipelines ワークフローを示す図。

このワークフローにより、コードのコミットから運用環境のデプロイまで、セキュリティ検証が継続的に行われます。 各ステージには、ルーチン チェックに手動による介入を必要とせずに自動的に実行される適切なセキュリティ制御が含まれています。

標準パイプライン以外の重要なセキュリティ機能

セキュリティで保護された DevOps パイプラインには、標準の CI/CD パイプラインでは通常見られない追加のセキュリティ機能が組み込まれています。 これらの機能は、従来のパイプラインで見逃される一般的なセキュリティの脆弱性に対処します。

セキュリティ承認を使用したパッケージ管理

課題: 最新のアプリケーションは、多数のサード パーティ製パッケージ、ライブラリ、コンポーネントに依存しています。 これらの依存関係により、セキュリティ リスクが発生します。

  • 既知の脆弱性: サードパーティのパッケージには、攻撃者が悪用する可能性がある既知のセキュリティ脆弱性が含まれている可能性があります。
  • 悪意のあるパッケージ: 攻撃者は、一般的なパッケージに似た名前の悪意のあるパッケージを公開する場合があり、開発者が誤ってインストールすることを期待しています (入力ミス)。
  • サプライ チェーン攻撃: 侵害されたパッケージ リポジトリまたはメンテナー アカウントにより、悪意のあるコードが正当な更新チャネルを通じて配布される可能性があります。
  • ライセンスコンプライアンス: 一部のパッケージ ライセンスは、使用目的と互換性がない場合があり、法的リスクが発生します。
  • メンテナンスされていないパッケージ: 保守されなくなったパッケージはセキュリティ更新プログラムを受け取らないため、長期的な脆弱性が発生します。

解決策: 承認プロセスを使用したパッケージ管理により、依存関係のセキュリティ ゲートが追加されます。

承認ワークフローの手順:

  1. パッケージ要求: 開発者は、新しいパッケージの追加または既存のパッケージの更新の承認を要求します。
  2. セキュリティ スキャン: 自動化ツールは、CVE (一般的な脆弱性と露出) や NVD (National Vulnerability Database) などの脆弱性データベースを使用して、既知の脆弱性のパッケージをスキャンします。
  3. ライセンス レビュー: 自動ツールは、組織のポリシーに対してパッケージ ライセンスをチェックします。
  4. 依存関係分析: ツールは、推移的な依存関係 (依存関係の依存関係) を分析してセキュリティの問題を検出します。
  5. 手動レビュー: セキュリティ チームは、昇格されたアクセス許可を要求する危険度の高いパッケージまたはパッケージを確認します。
  6. 承認または拒否: パッケージは、承認前に使用が承認されるか、拒否されるか、修復のフラグが設定されます。
  7. 継続的な監視: 承認済みパッケージは、新しく検出された脆弱性を継続的に監視します。

早期識別の利点: これらの手順は、開発サイクルの早い段階で問題を特定するために、パイプラインの早い段階で実装する必要があります。

  • 早期に見つかった問題は、運用環境で見つかった問題よりも修正コストが低くなります。
  • 開発者は、脆弱な依存関係に関する重要な機能を構築する前に、代替パッケージを選択できます。
  • セキュリティ レビューは、リリース前に一度にすべてではなく、増分的に発生してもボトルネックになりません。

ツールの例:

  • Azure Artifacts: アップストリーム ソースと脆弱性スキャンを使用してパッケージ管理を提供します。
  • GitHub Dependabot: 脆弱な依存関係を自動的に検出し、更新するプル要求を作成します。
  • Snyk: 脆弱性とライセンスの問題の依存関係をスキャンします。
  • WhiteSource: オープン ソース コンポーネントのソフトウェア構成分析を提供します。

ソース コードのセキュリティ スキャン

課題: アプリケーションのソース コードには、開発中にすぐには明らかではないセキュリティの脆弱性が含まれている可能性があります。

  • インジェクションの欠陥: SQL インジェクション、コマンド インジェクション、およびその他のインジェクションの脆弱性。
  • 認証の問題: 脆弱な認証メカニズム、ハードコーディングされた資格情報、または不適切なセッション管理。
  • 機密データの公開: シークレット、API キー、または個人情報が誤ってコードに含まれる。
  • セキュリティ構成の誤り: セキュリティで保護されていない既定の構成、不要な機能が有効になっている、または不足しているセキュリティ パッチ。
  • 既知の脆弱性を持つコンポーネントの使用: セキュリティの問題がある古いライブラリまたはフレームワーク。
  • ログ記録と監視が不十分: インシデントの検出と対応のための適切なセキュリティ イベント ログが不足しています。

解決策: ソース コード スキャンにより、ビルド プロセスに自動セキュリティ分析が追加されます。

静的アプリケーション セキュリティ テスト (SAST):

  • ソース コードを実行せずに分析します。
  • コード内の潜在的なセキュリティの脆弱性を識別します。
  • SQL インジェクション、クロスサイト スクリプティング (XSS)、バッファー オーバーフローなどの一般的な脆弱性パターンを検出します。
  • 特定のコードの場所と修復ガイダンスを提供します。
  • ビルド プロセス中にフィードバックを提供するのに十分な速さで実行されます。

シークレット スキャン:

  • API キー、パスワード、証明書などの誤ってコミットされたシークレットを検出します。
  • 資格情報が運用環境にデプロイされないようにします。
  • シークレットが検出されるとすぐに開発者に警告します。
  • シークレット管理システムと統合すると、検出された資格情報を自動的に取り消すことができます。

コード品質分析:

  • セキュリティの脆弱性につながる可能性のあるコード品質の問題を特定します。
  • 適切にセキュリティで保護するのが困難な複雑なコード パスを検出します。
  • 追加のセキュリティ レビューが必要な領域を強調表示します。

スキャンのタイミング: ソース コードのスキャンは、アプリケーションがビルドされた後、リリースとプレリリースのテストの前に行われます。

  • ビルド後: 生成されたコードを含む完全なアプリケーション コードを分析できます。
  • テストする前に: 脆弱性は、セキュリティ テスト リソースが投資される前に特定されます。
  • デプロイ前: 問題は、ステージング環境または運用環境に到達する前にキャッチされます。

早期検出の利点:

  • ソース スキャンは、開発サイクルの早い段階でセキュリティの脆弱性を識別します。
  • 開発者は、コード内のセキュリティの問題に関するフィードバックをすぐに受け取ります。
  • コードが開発者の心の中で新鮮である間、セキュリティの問題は解決されます。
  • 脆弱性を修正するコストは、運用環境で修正するよりも大幅に低くなります。

ツールの例:

  • GitHub CodeQL: コードベース全体の脆弱性を検出するセマンティック コード分析エンジン。
  • SonarQube: バグ、コードの臭い、セキュリティの脆弱性を検出する継続的な検査ツール。
  • Checkmarx: 静的アプリケーション セキュリティ テスト プラットフォーム。
  • Veracode: SAST 機能を備えたセキュリティ分析プラットフォーム。
  • Microsoft セキュリティ コード分析: セキュリティ分析ツールを実行する Azure DevOps の拡張機能。

継続的デリバリーとの統合

パッケージ管理の承認とソース コード スキャンの両方が、継続的デリバリー パイプラインにシームレスに統合されます。

自動ゲート: セキュリティ チェックは、パイプラインが進行する前に通過する必要がある自動化されたパイプライン ゲートになります。 セキュリティ チェックが失敗すると、安全でないコードが進むのを防ぎます。

高速フィードバック: 開発者は、数日または数週間ではなく数分以内にセキュリティ に関するフィードバックを受け取ります。 この迅速なフィードバックにより、コンテキストが失われる前の迅速な修正が可能になります。

セキュリティの可視性: セキュリティ チームは、すべての変更を手動で確認する必要なく、デプロイされているすべてのコードと依存関係を可視化します。

コンプライアンスに関するドキュメント: 自動化されたセキュリティ チェックにより、各パイプライン ステージでセキュリティ検証を文書化する監査証跡が作成されます。

ライフサイクル全体への対応

このモジュールの次のセクションでは、これらの重要なセキュリティ機能について詳しく説明します。

  • セキュリティ チェックを行う必要がある主要な検証ポイント。
  • 継続的なセキュリティ検証戦略。
  • さまざまなパイプラインの種類に対する実装アプローチ。
  • 効果的なセキュリティ自動化のためのツールと手法。
  • セキュリティの徹底と配信速度のバランスを取る方法。