セキュリティレビューフロー
- プラン: Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
- ステータス: ベータ版
セキュリティレビューフローは、マージリクエスト内のビジネスロジックの脆弱性を検出します。既知のパターンをスキャンする静的解析ツールとは異なり、セキュリティレビューフローはコードの意図を推論します。認可、データの公開、制御フローに関する誤った前提から生じる脆弱性を特定します。
セキュリティレビューフローは、GitLab Duo Agent Platform上に構築された基本フローです。GitLab Duoコードレビューと連携し、検出結果をスレッド形式の差分コメントとして投稿します。各コメントには、CWE分類、重大度評価、説明、および可能な場合は1回の操作で適用できるインライン修正案が含まれます。
セキュリティレビューフローの結果はAIによって生成される参考情報であり、確定的または完全なセキュリティ評価ではありません。検出結果がないレビューでも、マージリクエストが安全であることの証明にはなりません。また、検出結果には人による判断が必要な誤検出が含まれる場合があります。詳細については、既知の制限事項を参照してください。
セキュリティレビューフローは、次のようなサポートが必要な場合に活用できます:
- アクセス制御のレビュー: 状態を変更する操作において、認可チェックがない、または正しく設定されていない箇所を特定します。
- 認可の不備の検出: オブジェクトレベルおよび機能レベルで、認可が適切に行われていない問題を明らかにします。
- ビジネスロジックの分析: 金融処理やステートフルな処理における競合状態など、悪用される可能性のあるアプリケーションワークフローの欠陥を検出します。
- 情報漏洩: 認可されていない呼び出し元に機密データを漏洩する可能性のあるコードパスを特定します。
- マスアサインメントのリスク: 意図しないフィールドがユーザー入力に公開される可能性のあるエンドポイントまたはモデルを指摘します。
前提条件
セキュリティレビューフローを使用するには:
- プロジェクトのデベロッパー、メンテナー、またはオーナーロールを持っている。
- 基本フローとセキュリティレビューをトップレベルグループでオンにしている。
- グループまたはインスタンスでGitLab Duoをオンにしている。
- GitLab Duo ProまたはEnterpriseを利用していない場合は、トップレベルグループまたはインスタンスでGitLab Duo Coreをオンにしている。
- GitLab Self-Managedでは、インスタンスにGitLab Duoを設定している。
- GitLab 18.8以降では、トップレベルグループでAgent Platformをオンにしている。GitLab 18.7以前では、ベータ版機能と実験的機能をオンにしている。
コスト
セキュリティレビューフローは、レビューを実行するたびにGitLabクレジットを使用します。クレジット使用量は、差分の複雑さと選択したモデルに応じて増減します。
デフォルトモデルには、次の見積もりが適用されます:
| レビューの複雑さ | LLM呼び出し回数の概算 | 推定クレジット |
|---|---|---|
| 小規模な差分または変更されたファイルが少数 | 約16回 | 約8 |
| 標準的なフィーチャーブランチ | 約28回 | 約14 |
| 大規模またはロジックが複雑な複数ファイルの変更 | 約40回 | 約20 |
ベータリリース中は、常に手動でレビューを開始します。これにより、より広範に導入する前に、コードベースで通常使用されるクレジット量を評価できます。
セキュリティレビューフローを使用する
レビューをリクエストする
マージリクエストの作成後は、いつでもレビューをリクエストできます。レビューをリクエストすると、フローはマージリクエストの差分とその周辺のコンテキストを分析します。
セキュリティレビューフローをオンにすると、トップレベルグループにDuoセキュリティレビューサービスアカウントが作成され、その配下にあるすべてのプロジェクトとサブグループで利用できるようになります。各サービスアカウント名には、関連付けられたトップレベルグループが含まれます。たとえば、duo-security-review-gitlab-orgのようになります。
レビューをリクエストするには:
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
- コード > マージリクエストを選択して、マージリクエストを開きます。
- 右側のサイドバーのレビュアーセクションで、編集を選択します。
- 検索ボックスに
Duo Security Reviewと入力し、リストからアカウントを選択します。
レビューが完了すると、フローは内部ノートを投稿します。ノートには、検出結果とレビュースコープのサマリーが記載されます。レビューでなにも検出されなかった場合、フローは内部メモにその旨を記載します。
フローは、検出結果ごとに、該当する行で差分スレッドを開始します。スレッドに返信した場合(リスクを受け入れる、評価に同意しない、など)、フローは返信を読み取り、その内容に基づいて応答します。公開プロジェクトでは、検出結果は内部ノートにのみ投稿され、インラインの差分コメントは投稿されません。検出結果を非公開で投稿することで、セキュリティの詳細が公開されるのを防ぎます。
フローは、検出結果の重大度に基づいてレビュアーの状態を設定します。問題が検出されなかった場合でもフローが、承認状態に設定することはありません:
| 重大度 | レビュアーの状態 |
|---|---|
criticalまたはhigh | 変更をリクエスト |
mediumまたはlow | コメント |
| なし | コメント |
検出結果に応答する
スレッド内でフローをメンションすると、検出結果について確認の質問をしたり、修正方法について話し合ったり、検出結果を誤検出として報告したりできます。メンションされた場合、フローは完全な再レビューを実行しません。
検出結果に応答するには:
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
- コード > マージリクエストを選択して、マージリクエストを開きます。
- 任意のコメントスレッドで、
@duo-security-reviewと入力し、リストからDuoセキュリティレビューを選択します。 - メッセージを追加し、コメントを選択します。
セキュリティレビューフローはスレッドのコンテキストを読み取り、スレッド内で直接返信します。
検出結果をレビューする
セキュリティレビューフローは、静的アナライザーでは見逃されることが多い、ロジックレベルの脆弱性に重点を置きます。各検出結果は、変更されたコードに対する差分スレッドとして投稿されます。各スレッドには次の情報が含まれます:
- MITREの定義へのリンク付き脆弱性タイプ(CWE)。
- 重大度評価:
critical、high、medium、low。 - 区分: 区分1(悪用可能)、区分2(ロジック上の欠陥)、区分3(設計上の問題)。
- ロジック上の欠陥の説明。
- 可能な場合は、修正案。
検出結果は脆弱性レポートでは追跡されず、マージリクエスト承認ポリシーの対象にもなりません。検出結果は静的な解析(SAST)の検出結果を補完しますが、これに代わるものではありません。
検出結果には、次のCWE分類が表示されることがあります:
| CWE | 説明 |
|---|---|
| CWE-639 | ユーザーが制御可能なキーを介した認可のバイパス(BOLA / IDOR) |
| CWE-862 | 認可の欠如 |
| CWE-284 | 不適切なアクセス制御 |
| CWE-200 | 機密情報の公開 |
| CWE-840 | ビジネスロジックエラー |
| CWE-915 | 動的に決定されるオブジェクト属性の変更に対する不適切な制御(マスアサインメント) |
| CWE-362 | 競合状態およびチェック時/使用時(TOCTOU)のずれ |
検出結果を解決する
検出結果を解決するには:
- 修正を適用するには、提案を適用を選択します。代わりに、提案を新しいブランチにコミットするには、提案を適用の横にあるドロップダウンリストを選択します。
- 検出結果をレビューし、誤検出である、またはリスクを受け入れると判断した場合は、スレッドを解決を選択して検出結果を却下します。
- 今後の修正に向けて脆弱性を追跡するには、GitLabの標準のスレッドアクションを使用して、検出結果からイシューを作成します。
- 検出結果が役立ったかどうかを評価するには、賛成または反対を選択します。このフィードバックはモデルの改善に役立ちます。フィードバックイシューで詳細なフィードバックを共有することもできます。
検出結果を解決した後にもう一度レビューをリクエストするには、フローをレビュアーとして再度割り当てます。フローは更新された差分を分析し、検出結果の状態に応じて次のアクションを実行します:
- 解決済みの検出結果: フローは修正を確認し、元のスレッドを解決します。
- 不適切または不完全な修正: フローは、追加で必要な変更を元のスレッドで指摘します。
- 未対応の検出結果: 元のスレッドは開いたままになり、追加のコメントは投稿されません。
- 新しい検出結果: フローは、修正によって新たに導入された脆弱性を検出し、その脆弱性に対する新しいコメントスレッドを作成します。
既知の制限事項
セキュリティレビューフローの出力を利用する前に、次の制限事項をご確認ください。
- 検出結果は助言であり、網羅性を保証するものではありません。セキュリティレビューフローの結果はAIによって生成されます。フローで変更内のすべての脆弱性を検出できるとは限りません。分析時に検索および読み取りできる範囲には上限があるため、非常に大きなファイルや差分は完全にはレビューされない場合があります。検出結果がないレビューでも、マージリクエストが安全であることの証明にはなりません。
- 検出結果には誤検出が含まれる場合があります。検出結果は最終的な判断ではなく、人による判断が必要な参考情報として扱ってください。
- セキュリティレビューフローは、他のツールを補完するものです。人によるセキュリティレビューや、SAST、GitLab高度なSASTなどの他のGitLabセキュリティツールに代わるものではありません。
トラブルシューティング
セキュリティレビューフローを使用する際に、次の問題が発生する場合があります。
フローを割り当てられない
セキュリティレビューフローをオンにすると、トップレベルグループにDuoセキュリティレビューサービスアカウントが作成されます。サービスアカウント名には、duo-security-review-gitlab-orgのように、トップレベルグループ名が含まれます。
セキュリティレビューフローのステータスを確認してください。
フローが検出結果を提供しない
すべての前提条件を満たしていることを確認してから、フローが正しく割り当てられているかを確認します。
- Duoセキュリティレビューアカウントをメンションしたことを確認します(ユーザー名は
@duo-security-review-で始まります)。 - トップレベルグループで基本フローを許可とコードレビューの設定が有効になっていることを確認します。
- GitLab Self-Managedでは、インスタンスにGitLab Duoが設定されていることを確認します。
フローがすべてのマージリクエストをレビューしない
このセキュリティスキャンを実行するには、マージリクエストでフローを手動でトリガーする必要があります。すべてのマージリクエストで自動的に実行されるわけではありません。フローを割り当てたにもかかわらず検出結果が提供されなかった場合は、フローが検出結果を提供しないを参照してください。
フローがマージリクエストをレビューした際に検出結果がない場合、通常は次のいずれかを意味します:
- セキュリティ上の問題が検出されなかった: コードのロジックが分析されましたが、脆弱性は特定されませんでした。
- セキュリティ関連のロジックがない: 変更に、セキュリティに影響を与えるコードが含まれていません(ドキュメントのみの更新など)。
大規模な変更に関する注意: 大規模なマージリクエストの場合、フローが検索および読み取りできる範囲には上限があります。この場合、検出結果が報告されなかったり、検出結果が出力されてもマージリクエスト全体をカバーできなかったりするため、重要な脆弱性が見逃されることがあります。レビューが完了しても、完全なカバレッジが保証されるわけではありません。詳細については、既知の制限事項を参照してください。
修正案をそのまま適用できない
修正案はレビュー時点の差分に基づいて生成されます。レビュー後に新しいコミットをプッシュした場合、行番号がずれている可能性があります。現在の差分に基づく最新の修正案を取得するには、もう一度レビューをリクエストします。
GitLabクレジットに関するエラーが表示された
インスタンスまたはグループで、現在の請求期間中に使用できるGitLabクレジットを使い切った可能性があります。追加のクレジットを購入するよう管理者に依頼するか、次の請求期間の開始時にクレジットがリセットされるまでお待ちください。