継続的なセキュリティ検証を調べる
最新の開発者は、npm、NuGet、PyPI、Maven Central、RubyGems などのパブリック パッケージ ソースで使用できるコンポーネントを日常的に使用します。 このプラクティスは、組織がオープンソース ソフトウェア (OSS) コンポーネントを採用して、迅速な配信と生産性の向上を実現するため、ソフトウェア業界全体で標準となっています。
サードパーティ製部品の諸刃の剣
サード パーティ製コンポーネントの利点:
- 開発の高速化: 開発者は、一般的な機能をゼロから構築する必要はありません。
- 実証済みのソリューション: 人気のあるパッケージは、何千人ものユーザーによってテストされています。
- コミュニティ サポート: アクティブなコミュニティでは、ドキュメント、更新プログラム、サポートが提供されます。
- コスト削減: 無料の OSS コンポーネントにより、開発コストが大幅に削減されます。
- イノベーションの加速: Teams は、標準機能を再発明するのではなく、独自のビジネス ロジックに集中できます。
セキュリティとコンプライアンスのリスクの増大: ただし、サード パーティの OSS コンポーネントへの依存関係が増えるにつれて、リスクも高まります。
セキュリティの脆弱性:
- サードパーティのパッケージには、攻撃者が悪用する可能性がある既知のセキュリティ脆弱性が含まれている可能性があります。
- 脆弱性は、既存のパッケージで継続的に検出されます。
- 推移する依存関係 (依存関係の依存関係) は、気付かない可能性がある脆弱性を導入することがあります。
- サプライ チェーン攻撃は、多くのダウンストリーム アプリケーションを侵害する一般的なパッケージを対象としています。
ライセンス コンプライアンスの問題:
- 非表示のライセンス要件は、法的義務を作成できます。
- 一部の OSS ライセンスでは、コンポーネントを使用する場合は、独自のコードをオープンソースにする必要があります。
- ライセンス違反により、訴訟、金銭的ペナルティ、強制コード リリースが発生する可能性があります。
- 異なるライセンスが互いに互換性を持たず、コンプライアンスの競合が発生する可能性があります。
ビジネス上の重要度: 企業にとって、これらの問題は非常に重要です。 コンプライアンス、負債、および顧客の個人データに関連する問題により、プライバシーとセキュリティに重大な懸念が生じる可能性があります。
- 法的責任: ライセンス違反により、組織は法的措置を受ける可能性があります。
- データ侵害: 脆弱なコンポーネントは、顧客の個人データに影響を与えるデータ侵害につながる可能性があります。
- 規制コンプライアンス: GDPR、CCPA、HIPAA などの規制に違反すると、重大な罰金が科される可能性があります。
- 評判の損傷: セキュリティ インシデントとライセンス違反は、顧客の信頼とブランドの評判を損ないます。
- 顧客契約: エンタープライズのお客様は、多くの場合、脆弱なコンポーネントが違反するというセキュリティとコンプライアンスの保証を必要とします。
早期検出の値
高度な警告: リリース サイクルの早い段階でセキュリティとコンプライアンスの問題を特定すると、高度な警告が表示され、問題が運用環境に到達する前に問題を修正するのに十分な時間が確保されます。
修復のコスト: 問題を修正するコストは、問題が検出されたプロジェクトの早い段階で大幅に削減されます。
- 開発中: 依存関係の変更には、開発者の時間の時間がかかります。
- テスト中: 問題を修正するには、アプリケーション全体を再テストする必要があります。
- 運用環境では、次の手順を実行します。 修復には、緊急パッチ適用、セキュリティ インシデント対応、顧客通知、潜在的な規制レポートが必要です。
経済的影響: 調査によると、運用環境で見つかったセキュリティの問題は、開発中に見つかったセキュリティの問題の 10 ~ 100 倍のコストがかかります。
継続的インテグレーションのセキュリティ検証
コードがメイン ブランチにマージされたら、継続的インテグレーション (CI) ビルド プロセスの一部として包括的なセキュリティ検証を実行する必要があります。
CI ビルドと PR-CI ビルド
pull request CI (PR-CI): コードがマージされる前に、プル要求の検証中に実行されます。 脆弱なコードがコードベースに入るのを防ぐための迅速なフィードバックを提供します。
完全な CI ビルド: コードがメイン ブランチにマージされた後に実行されます。 より包括的なチェックが含まれており、デプロイのための成果物を準備します。
一般的な違い: PR-CI と完全な CI ビルドの主な違いは、PR-CI 完全な CI ビルドで生成されるパッケージ化やステージング成果物が不要であるという点です。 これにより、セキュリティ検証を維持しながら、PR-CI を高速に保ちます。
両方にセキュリティ チェックを含める必要があります。 どちらのビルドの種類もコア セキュリティ検証を実行する必要がありますが、完全な CI ビルドには時間のかかる追加のチェックが含まれる場合があります。
CI ビルドでの静的コード分析
目的: CI ビルドでは、コードが保守容易性とセキュリティの両方のすべての規則に従っていることを確認するために、静的コード分析テストを実行する必要があります。
一般的な静的分析ツール:
SonarQube:
- 包括的なコード品質とセキュリティ プラットフォーム。
- バグ、コードの臭い、セキュリティの脆弱性を検出します。
- 時間の経過に伴うコード品質メトリックを追跡します。
- 品質しきい値が満たされていない場合にビルドに失敗する品質ゲートを統合します。
- 複数のプログラミング言語をサポートします。
Visual Studio の Code Analysis と Roslyn セキュリティ アナライザー:
- .NET アプリケーションの組み込み分析。
- Roslyn Security Analyzers は、C# コードのセキュリティの脆弱性を検出します。
- コンパイル中に実行され、すぐにフィードバックが提供されます。
- .NET プロジェクトに追加のインフラストラクチャは必要ありません。
Checkmarx:
- 静的アプリケーション セキュリティ テスト (SAST) ツール。
- ソース コードの詳細なセキュリティ分析。
- SQL インジェクション、XSS、認証の問題などの脆弱性を特定します。
- 詳細な修復ガイダンスを提供します。
- 多くのプログラミング言語とフレームワークをサポートします。
BinSkim:
- Microsoft のバイナリ静的分析ツール。
- Windows ポータブル実行可能ファイル (PE ファイル) のセキュリティと正確性の結果を提供します。
- ソース コードではなくコンパイル済みバイナリを分析します。
- コンパイル設定とバイナリ構造のセキュリティの問題を識別します。
- サードパーティ製のコンパイル済みコンポーネントを分析する場合に便利です。
その他のツール:
- ESLint とセキュリティ プラグイン: JavaScript/TypeScript セキュリティ分析。
- 山賊: Python のセキュリティ分析。
- ブレーキマン: Ruby on Rails セキュリティ スキャナー。
- gosec: Go セキュリティ チェッカー。
Azure Pipelines の統合: 多くのセキュリティ ツールは、Azure Pipelines やその他の CI/CD プラットフォームにシームレスに統合されます。 Visual Studio Marketplace には、さまざまなセキュリティ ツールの拡張機能が用意されており、統合が簡単になります。
- ツールは、パイプライン定義に追加できるパイプライン タスクとして表示されます。
- 結果はパイプライン ログに表示され、問題が検出されるとビルドが失敗する可能性があります。
- セキュリティの結果は、Azure DevOps 作業項目の追跡と統合されます。
サード パーティ製パッケージの脆弱性スキャン
重大ですが、見落とされることが多い: コードの品質を検証するだけでなく、他の 2 つの重要な検証が無視されたり、不適切に実行されたりすることがよくあります。
- 既知のセキュリティの脆弱性についてサード パーティ製パッケージをスキャンする。
- OSS ライセンスのコンプライアンスの確認。
一般的な組織の対応: サードパーティのパッケージの脆弱性とライセンスについて尋ねられると、多くの組織は恐怖や不確実性で対応します。 これらのリスクを管理するための明確なプロセスはありません。
手動プロセスの問題: サードパーティのパッケージの脆弱性や OSS ライセンスを管理しようとしている組織は、多くの場合、そのプロセスが面倒で手動であると説明しています。
- 開発者は脆弱性データベースを手動で検索します。
- セキュリティ チームは、承認されたパッケージのスプレッドシートを管理します。
- ライセンス レビューでは、パッケージごとに法的チームの関与が必要です。
- 更新プログラムは手動で追跡され、古い依存関係情報が表示されます。
- このプロセスには数週間かかり、開発が大幅に遅くなります。
自動化されたソリューション: 最新のソフトウェアコンポジション分析 (SCA) ツールにより、この識別プロセスが自動化され、ほぼ瞬時に行われます。
Mend (旧称 WhiteSource):
- アプリケーション内のすべての OSS コンポーネントを自動的に検出します。
- 依存関係の既知のセキュリティ脆弱性を識別します。
- 組織のポリシーに対するライセンス コンプライアンスを確認します。
- 使用可能な固定バージョンを含む修復ガイダンスを提供します。
- 使用済みパッケージの新しい脆弱性を継続的に監視します。
GitHub Dependabot:
- 既知の脆弱性の依存関係を自動的にスキャンします。
- 脆弱な依存関係を更新するためのプル要求を作成します。
- 多くのパッケージ エコシステム (npm、Maven、pip など) をサポートします。
- パブリックおよびプライベート GitHub リポジトリは無料です。
Snyk:
- 脆弱性を見つけて修正するための開発者優先のセキュリティ ツール。
- 依存関係、コンテナー イメージ、およびコードとしてのインフラストラクチャをスキャンします。
- 修復に関するアドバイスと自動プル要求を提供します。
- IDE、ソース管理、および CI/CD パイプラインに統合されます。
Azure Artifacts アップストリーム ソース:
- アップストリーム ソースからパッケージをスキャンするように構成できます。
- 既知の脆弱性を持つパッケージをブロックします。
- 組織全体で使用されるすべてのパッケージを可視化します。
ソフトウェア構成分析の利点
包括的な可視性: SCAツールは、ソフトウェアサプライチェーンを完全に可視化します。
- 直接的な依存関係と推移的な依存関係をすべてインベントリします。
- バージョンを追跡し、状態を更新します。
- 保守されなくなったコンポーネントを識別します。
- 依存関係を特定のアプリケーションとチームにマップします。
リスクの優先順位付け: すべての脆弱性が等しく重要であるとは言えない。 SCA ツールは、次の優先順位を付けるのに役立ちます。
- 脆弱性の重大度を示す重大度スコア (CVSS 評価)。
- 攻撃が存在することが判明しているかどうかを示す悪用可能性の評価。
- アプリケーションで脆弱なコードが実際に使用されているかどうかを判断する到達可能性分析。
- 最も重要なアプリケーションに関するビジネス コンテキスト。
継続的な監視: セキュリティの脆弱性は常に検出されます。 SCA ツールは、継続的な監視を提供します。
- 使用するパッケージで新しい脆弱性が検出されたときにアラートを生成します。
- セキュリティ体制の傾向に関する定期的なレポート。
- 修復作業を管理するための問題追跡システムとの統合。
コンプライアンスに関するドキュメント: SCA ツールでは、コンプライアンス レポートが生成されます。
- すべての使用済みコンポーネントのライセンス義務。
- 必要な帰属要件。
- セキュリティ レビューが実行されたことを示す証拠。
- 規制コンプライアンスの監査証跡。
パイプラインでの統合
継続的なセキュリティ検証は、自動化されたタスクとして CI/CD パイプラインに統合されます。
- コードのマージ: プル要求が承認され、コードがメイン ブランチにマージされます。
- CI ビルド トリガー: マージにより、完全な CI ビルドが自動的にトリガーされます。
- 静的分析の実行: SAST ツールは、脆弱性のソース コードを分析します。
- 依存関係スキャン: SCA ツールは、すべての依存関係で脆弱性とライセンスの問題をスキャンします。
- 品質ゲート: セキュリティの問題が許容されるしきい値を超えた場合、ビルドは失敗します。
- 使用可能な結果: セキュリティの結果は、開発者とセキュリティ チームが利用できます。
- アーティファクトの作成: セキュリティ チェックに合格すると、デプロイ用にビルド成果物が作成されます。
後のモジュールでは、いくつかの役に立つ一般的に使用されるセキュリティおよびコンプライアンス ツールを特定のパイプライン構成に統合する方法について説明します。