アプリケーションの保護を始める
アプリケーションのソースコード内の脆弱性を特定し、修正します。コードを自動的にスキャンして潜在的なセキュリティ上の問題を検出することで、ソフトウェア開発ライフサイクルにセキュリティテストを組み込みます。
さまざまなプログラミング言語とフレームワークをスキャンして、SQLインジェクション、クロスサイトスクリプティング(XSS)、脆弱な依存関係などの脆弱性を検出できます。セキュリティスキャンの結果はGitLab UIに表示され、そこで結果を確認して対処できます。
これらの機能は、マージリクエストやパイプラインなどのGitLabの他の機能と統合することもでき、開発プロセス全体を通してセキュリティを優先的に確保できます。
概要については、Adopting GitLab application securityを参照してください
インタラクティブな読み物とハウツーデモのプレイリストをご覧ください
このプロセスは、以下に示すより大きなワークフローの一部です。
ステップ1: スキャンについて学習する
シークレット検出は、リポジトリをスキャンして、シークレットが流出するのを防ぎます。すべてのプログラミング言語で動作します。
依存関係スキャンは、アプリケーションの依存関係を分析し、既知の脆弱性を検出します。特定の言語とパッケージマネージャーで動作します。
詳細については、以下を参照してください。
ステップ2: テストするプロジェクトを選択する
GitLabセキュリティスキャンを初めて設定する場合は、まず1つのプロジェクトから始めることをおすすめします。プロジェクトは次の条件を満たしている必要があります。
- 組織で一般的に使用しているプログラミング言語とテクノロジーを採用していること。一部のスキャン機能は言語によって動作が異なるためです。
- チームの日常業務を妨げることなく、必須の承認など、新しい設定を試せること。トラフィックの多いプロジェクトをコピーするか、アクティビティーが少ないプロジェクトを選択するとよいでしょう。
ステップ3: スキャンを有効にする
プロジェクト内の流出したシークレットや脆弱なパッケージを特定するには、シークレット検出と依存関係スキャンを有効にするマージリクエストを作成します。
このマージリクエストでは、.gitlab-ci.ymlファイルを更新し、プロジェクトのCI/CDパイプラインの一部としてスキャンが実行されるようにします。
このマージリクエストの一部として、プロジェクトのレイアウトや設定に合わせて設定を変更することもできます。たとえば、サードパーティのコードのディレクトリを除外できます。
このマージリクエストをデフォルトブランチにマージすると、ベースラインスキャンが作成されます。このスキャンでは、デフォルトブランチにすでに存在する脆弱性を特定します。その後、マージリクエストでは新たに導入された問題が強調表示されます。
ベースラインスキャンがない場合、マージリクエストにはブランチ内のすべての脆弱性が表示され、デフォルトブランチにすでに存在する脆弱性も含まれます。
詳細については、以下を参照してください。
ステップ4: スキャン結果をレビューする
チームがマージリクエストと脆弱性レポートでセキュリティ検出結果をスムーズに確認できるようにしましょう。
脆弱性のトリアージワークフローを確立します。脆弱性から作成されたイシューを管理しやすくするため、ラベルとイシューボードを作成することを検討してください。イシューボードを使用すると、関係者全員がすべてのイシューを共通のビューで確認でき、修正の進捗状況を追跡できます。
セキュリティダッシュボードの傾向を監視して、既存の脆弱性の修正や新たな脆弱性の導入防止の成果を評価します。
詳細については、以下を参照してください。
ステップ5: 将来のスキャンジョブをスケジュールする
スキャン実行ポリシーを使用して、スケジュールされたセキュリティスキャンジョブを適用します。これらのスケジュールされたジョブは、コンプライアンスフレームワークパイプラインや、プロジェクトの.gitlab-ci.ymlファイルで定義されている場合がある他のセキュリティスキャンとは独立して実行されます。
スケジュールされたスキャンは、開発アクティビティーが少なく、パイプラインスキャンの頻度が低いプロジェクトや重要なブランチで特に有用です。
詳細については、以下を参照してください。
ステップ6: 新しい脆弱性を制限する
必要なスキャンタイプを適用し、セキュリティチームとエンジニアリングチーム間の職務分離を確保するには、スキャン実行ポリシーを使用します。
新しい脆弱性がデフォルトブランチにマージされるのを防ぐには、マージリクエスト承認ポリシーを作成します。
スキャンの仕組みを理解したら、次のような対応を選択できます。
- 同じ手順に従って、より多くのプロジェクトでスキャンを有効にする。
- より多くのプロジェクトに対して一括でスキャンを適用する。
詳細については、以下を参照してください。
ステップ7: 新たな脆弱性を継続的にスキャンする
時間の経過とともに、新たな脆弱性が導入されないようにする必要があります。
- リポジトリ内にすでに存在する新たに検出された脆弱性を明らかにするには、依存関係スキャンとコンテナスキャンを定期的に実行します。
- 本番環境クラスター内のコンテナイメージに対してセキュリティ脆弱性をスキャンするには、運用コンテナスキャンを有効にします。
- SAST、DAST、ファズテストなど、他のスキャンタイプを有効にします。
- 一時的なテスト環境でDASTやWeb APIファジングを実行できるようにするには、レビューアプリの有効化を検討してください。
詳細については、以下を参照してください。
