メインコンテンツへスキップ
Security Swarm は、Devin のセキュリティスキャンと修正のためのプロダクトです。コードに合わせて最適化された脅威モデルを構築し、潜在的な脆弱性を調査・検証したうえで、プルリクエストを通じて指摘事項の修正を支援します。リモートコード実行 (RCE) 、SQL インジェクション、パストラバーサル、サーバーサイドリクエストフォージェリ (SSRF) 、認可バイパス、メモリ安全性の不具合、サービス拒否脆弱性などを特定できます。複数のファイルにまたがる連鎖的な攻撃も特定可能です。 Security Swarm は、私たちが Agentic MapReduce と呼ぶ、複数の Devin を組み合わせたカスタムオーケストレーションです。リポジトリを並列の Devin に分割することで、コストを抑えながら広いカバレッジと深い調査を実現し、大規模なコードベースも費用対効果よくスキャンできます。また、GitHub Advisory Database で公開されている脆弱性の正解データセットを用いて、Security Swarm のベンチマークも実施しました
スキャンを実行するには、次の条件を満たしている必要があります。
  • スキャン対象のリポジトリに、あなたの組織がアクセスできる必要があります。
  • Devin セッションの利用が許可されている必要があります。
  • Use code scans 権限が必要です。
  • Auto Scan のスケジュールを設定するには、Manage code scans と、自動化を管理する権限も必要です。
サイドバーに Security が表示されない場合やスキャンを開始できない場合は、管理者にロールを確認してもらってください。詳細は Access and permissions を参照してください。

最初のスキャンを実行する

  1. 左側のサイドバーでセキュリティを開き、Start scanをクリックします。
  2. Single repoで、スキャン対象のリポジトリを選択します。
  3. Interactive modeが有効になっていることを確認します。
  4. Run Scanをクリックします。
  5. 提案された脅威モデルの準備ができたら内容を確認し、Looks good, start scanningをクリックするか、フィードバックを送信します。
  6. 検出事項が表示されたら、証拠を確認し、対応が必要な検出事項に対処します。
繰り返し実行するスキャンには、対象範囲、脅威モデル、重大度の基準、検証手順、修正時の制約をまとめたプロファイルを作成してください。

findings を確認して対応する

スキャンを開くと、その findings を確認できます。ページには、左側に重大度ごとにグループ化された findings の一覧が表示され、右側には選択した finding の詳細が表示されます。 ステータスタブには、リアルタイムの件数が表示されます。
  • Open — 対応が必要です。
  • Reviewed — レビュー済みで、追加の対応は不要です。
  • Dismissed — 誤検知または重複と判断されました。
スキャンの実行中は、findings が届くたびにページが自動的に更新されます。
Reviewed はワークフロー上のステータスであり、対処法がマージされたことを示すものではありません。finding は手動で Reviewed にすることも、後続のスキャンで存在しなくなったと判断された場合に Reviewed になることもあります。

検出事項に含まれる内容

検出事項には、次の内容が含まれます。
  • 重大度、ステータス、悪用可能性、確信度、カテゴリ
  • 影響を受けるファイルパスとコードスニペット
  • 問題の説明対処方法の推奨事項
  • ランタイム検証結果、裏付けとなる証拠、および検証アーティファクト。
  • 関連するプルリクエストと、それらのオープン、マージ済み、またはクローズ済みの状態。
  • 利用可能な場合は、コードオーナーとメモ。
リスクのあるコードパターンは、脆弱性の証拠ではなく手がかりとして扱ってください。検出事項が、攻撃者が制御可能な入力から到達可能な経路を追跡していること、入力検証や認可の制御を適切に考慮していること、そして具体的なセキュリティへの影響を説明していることを確認してください。

検出結果に対応する

問題を修正してプルリクエストを作成するための Devin セッションを開始します。セッションと作成されたプルリクエストは、この検出結果に紐づけて追跡されます。

スキャンプロファイル

スキャンプロファイルは、スキャンの対象範囲を定め、スキャンの各段階に指針を与えます。各スキャンで利用できるプロファイルは1つだけです。複数の攻撃者ペルソナや脅威カテゴリに対してリポジトリを評価するには、異なるプロファイルで個別にスキャンを実行します。
具体的な脅威モデルは、スキャン間でカバレッジの一貫性を保つための最も効果的な方法の1つです。攻撃者、機密資産、信頼境界、重要な侵入経路、明示的な除外事項を定義してください。
プロファイルは、セキュリティページのProfilesタブから管理できます。

プロファイルを作成する

プロファイルは、次の2つの方法で作成できます。
  • Devin で生成 — アプリケーション、脅威、スコープ、除外事項、重大度の基準を自然言語で記述します。Devin がプロファイルのドラフトを作成します。
  • 手動で作成 — プロファイルの各入力項目を自分で入力します。
Devin で生成する方法は便利な出発点ですが、プロファイルを利用する前に、生成された各項目を必ず確認してください。任意のガイダンス項目を空欄のままにすると、その段階では Security Swarm の標準的な動作が適用されます。

基本情報

  • プロファイル名 — スキャンを実行するチーム名ではなく、アプリケーションの対象領域や脅威カテゴリを表す名前にします。例: Multi-tenant API authorization.
  • 説明 — プロファイルの対象範囲とセキュリティ上の目的を簡潔にまとめます。例: Find authentication, authorization, and tenant-isolation vulnerabilities in the public API.
以下の使用例は、マルチテナント API 向けの単一のプロファイルにまとめたものです。対象範囲、コマンド、重大度の基準は、アプリケーションに合わせて調整してください。

脅威モデル

攻撃者、機密資産、信頼境界、重要な侵入経路、明示的に対象外とする項目を記述します。この指針は、調査開始前に Devin が生成するルールの内容に反映されます。
Assume an unauthenticated internet attacker or an authenticated user in one tenant.
Focus on public HTTP handlers, OAuth callbacks, API tokens, administrative actions,
and accesses to tenant-owned data. Treat internal development scripts and local-only
tools as out of scope. Prioritize authentication bypasses, cross-tenant access, token
leakage, injection, and SSRF.

調査ガイダンス

Devinが潜在的な問題をどのように調査し、どのような証拠を収集すべきかを定義します。既存の緩和策を考慮し、実際に到達可能な脆弱性と理論上の懸念を区別するよう指示してください。
Trace untrusted input from the route through middleware and service layers to the
sensitive operation. Check authentication, authorization, tenant scoping, validation,
and escaping at every boundary. Identify the exact reachable path and cite the relevant
files and lines. Do not report a theoretical issue when an effective mitigation blocks
the path.

トリアージの指針

Devin が検出事項の重複をどのように排除し、どのように優先順位を付けるかを定義します。結果が組織の基準に沿うよう、重大度の判定基準も含めてください。
同じroot causeを持つfindingsをグループ化してください。未認証のリモートコード実行とcross-tenantの書き込みアクセスはcriticalとして扱ってください。cross-tenantの読み取りアクセスとcredentialの漏洩はhighとして扱ってください。単一ユーザーの可用性の問題は、共有インフラストラクチャに影響を及ぼす可能性がない限りmediumとして扱ってください。多層防御の推奨事項はlowとしてラベル付けしてください。

ランタイム検証

Devinが安全にアプリケーションをビルドして実行できる場合は、ランタイム検証を有効にしてください。アプリケーションの起動方法、テストデータの作成方法、認証方法、想定されるセキュリティ境界の示し方を説明してください。
リポジトリのドキュメントに記載された開発セットアップを利用する。APIを起動し、テストユーザーを1人ずつ含む非本番テナントを2つ作成する。別のテナントのユーザーとして問題のリクエストを試み、HTTPレスポンスと永続化されたデータの両方を確認する。
本番サービスを呼び出したり、本番データを変更したりしないこと。
検証が成功しなかったからといって、必ずしも検出結果が誤りだとは限りません。検証結果とアーティファクトを確認し、有効な緩和策によって悪用が防がれたのか、あるいは設定された環境のために Devin がテストを完了できなかったのかを判断してください。
実行時検証では、検出結果ごとに個別の Devin セッションが開始されます。環境に関するガイダンスについては、実行時検証を設定するを参照してください。

レポート

スキャン後に要約レポートが必要な場合は、レポートを有効にします。想定読者と、レポートで特に強調すべき情報を指定してください。
セキュリティおよびエンジニアリングリード向けのエグゼクティブサマリーを作成してください。確認済みのクリティカルおよび高リスクのfindingsを最初に列挙し、続いて未検証のfindingsを記載してください。影響を受けるコンポーネント、検証status、PRのstatus、および優先順位付きのremediationプランを含めてください。

修正ガイダンス

修正のために検出事項をDevinに割り当てる際は、Devinが従うべき制約を指定します。テストに関する要件、互換性の要件、避けるべきプラクティスを含めてください。
最小限の安全な変更を優先し、既存の公開APIの動作を維持してください。修正前に失敗し、修正後にパスするリグレッションテストを追加してください。影響を受けるパッケージのlintおよびテストコマンドを実行してください。メジャーな依存関係のアップグレードなしでは脆弱性を安全に修正できない場合を除き、アップグレードは避けてください。

詳細入力

Advanced を開くと、ファイルの対象範囲と調査バッチを設定できます。
  • Include globs — マッチするファイルのみにスキャンを限定します。たとえば、apps/api/**packages/auth/** です。
  • Exclude globs — 選択した対象範囲から無関係なファイルを除外します。たとえば、**/generated/****/vendor/****/fixtures/** です。
  • Batch size — シグナルがあるファイルを、各調査バッチにいくつずつまとめるかを設定します。スキャンの挙動を意図的に調整するのでなければ、デフォルトのままにしてください。設定可能な範囲は 1~500 で、デフォルトは 5 です。
除外範囲が広すぎると、脆弱なコードを見落としたり、データフローを理解するために必要な前提情報が失われたりするおそれがあります。プロファイルに無関係であると確信できるファイルだけを除外してください。

組織プロファイルとEnterpriseプロファイル

新しいプロファイルは組織スコープです。Enterprise管理者は後からプロファイルの公開範囲をEnterpriseに変更でき、Enterprise全体で利用できるようにできます。 Enterpriseプロファイルを編集またはアーカイブできるのは、Enterprise管理者のみです。Securityにアクセスできるその他のユーザーは、これらのプロファイルを閲覧して利用できますが、変更はできません。

インタラクティブモード

インタラクティブモード を有効にすると、Devin は脅威モデルの案を作成し、調査を開始する前に一時停止します。スキャンページには提案されたルールが表示され、次の操作を行えます。
  • Looks good, start scanning — 脅威モデルを承認して調査を開始します。
  • Provide feedback on the threat model — 追加・削除したい点や、特に重視したい点を指定し、修正後のモデルを確認します。
リポジトリを初めてスキャンするときや、リスク範囲またはプロファイルが大きく変わったときは、インタラクティブモードを利用してください。承認済みのガイダンスがプロファイルに反映されたら、以降の通常のスキャンは一時停止なしで実行できます。

ランタイム検証を設定する

ランタイム検証は、選択したプロファイルでランタイム検証が有効になっており、かつ検証ガイダンスが含まれている場合にのみ実行されます。Devin がサンドボックス内でアプリケーションをビルド、実行、シード、認証できるよう、十分な情報を与えてください。 リポジトリに宣言的設定がある場合、Devin はそのビルドおよびインストール設定を再利用できます。ない場合は、必要なセットアップコマンドをプロファイルの検証ガイダンスに追加してください。
本番用の認証情報やシークレット値をプロファイルのガイダンスに直接記載しないでください。組織の環境構成ですでに提供されている非本番のテストアカウントと認証情報を利用してください。

スキャンを拡張する

複数のリポジトリをスキャンする

組織全体でスキャンをキューに追加するには、New Scanダイアログのすべてのリポジトリタブを利用します。
  1. 必要に応じてリポジトリ名フィルターを入力します。
  2. 必要に応じてスキャンプロファイルを選択します。
  3. 選択したプロファイルですでにスキャンされているリポジトリを除外するには、すでにスキャン済みのリポジトリをスキップを有効のままにします。
  4. プレビューをクリックします。
  5. 条件に一致したリポジトリを確認し、スキャンしたくないものは選択を解除して確定します。
このプレビューはドライランです。フィルター、プロファイル、またはスキップ設定を変更するとプレビューは無効になるため、古い一覧は確定できません。

自動スキャン

自動スキャンは、前回完了したスキャン以降に追加されたコミットを定期的にスキャンします。設定方法は次のとおりです。
  • 単一リポジトリのスキャンを開始するときに、日次、週次、月次、またはカスタムのスケジュールを選択する。
  • 既存のスキャンで、スケジュールを追加、編集、無効化、またはすぐに実行する。
自動スキャンは、自動化によって実装されています。設定するには、コードスキャンの管理権限と、自動化を管理する権限の両方が必要です。スケジュールの時刻は、お使いのローカルタイムゾーンで表示されます。

新しいコミットをスキャンする

完了済みのスキャンで 新しいコミットをスキャンする をクリックすると、そのスキャンで最後にスキャンされたコミット以降に追加されたコミットを調査できます。Auto Scan も同じ増分方式を利用するため、以降のスキャンはリポジトリ全体を繰り返しスキャンするよりも低コストです。

スキャンの管理と監視

スキャンとそのプロファイルによっては、スキャンのヘッダーに次の項目が表示されます。
  • レポート — スキャン用に生成されたレポートをダウンロードします。
  • 使用量 — 消費したACU、セッション数、スキャン時間、PRの統計を閲覧します。
  • セッション — スキャンを実行したメインのDevinセッションを開きます。
  • CSVとしてエクスポート — スキャンの検出結果をエクスポートします。
  • アーカイブ または アーカイブ解除 — スキャンをデフォルトの一覧から非表示にするか、一覧に戻します。
  • 新しいコミットをスキャン — 増分スキャンを開始します。
スキャンはDevinセッションとして実行され、ACUsを消費します。

セキュリティダッシュボード

組織で最初のスキャンが完了すると、セキュリティページに、過去7日間、30日間、または90日間の組織全体のダッシュボードが表示されます。
  • プルリクエストの統計 — 作成、マージ、オープン、クローズされたプルリクエスト数と、マージ率。
  • 検出事項の推移 — 選択した期間内の検出事項を重要度別に表示します。

アクセスと権限

セキュリティへのアクセスは、ロールエディタ内のコードスキャン権限によって制御されます。
PermissionWhat it unlocksDefault roles
コードスキャンを閲覧するスキャン、プロファイル、検出結果、および関連するスキャンセッションを閲覧できます。Admin
コードスキャンを利用するスキャンの開始、組織プロファイルの作成、検出結果へのフィードバックの送信、検出結果の調整、検出結果のステータス変更、検出結果のDevinへの割り当てを行えます。Admin
コードスキャンを管理するスキャンのアーカイブまたはアーカイブ解除と、Auto Scanスケジュールの設定を行えます。Admin
アカウントのコードスキャンを管理する組織プロファイルをEnterpriseスコープに昇格し、Enterpriseプロファイルを編集またはアーカイブできます。Enterprise admin
スキャンの開始、フィードバックの送信、検出結果のDevinへの割り当てには、Devinセッションを利用する権限も必要です。さらに、Auto Scanには自動化を管理する権限が必要です。 デフォルトでは、メンバーにはコードスキャン権限は付与されません。オーナーはすべての権限を持ち、管理者はカスタムロールを通じてメンバーに権限を付与できます。

Security Swarm を別のスキャナーと比較する

有意義な比較を行うには、両方のスキャナーに同じスコープ、脅威モデル、重大度の基準、検証に求める水準を設定してください。そうしないと、設定の違いによって、本来の能力差が見えにくくなることがあります。 プロファイルを利用して比較基準を定義し、対話モードで生成された脅威モデルを確認し、実行時検証を利用して報告された検出結果に同じ証拠基準を適用してください。

よくある質問

Security Swarm は、危険なパターンを個別に報告するのではなく、リポジトリの前提情報に照らして潜在的な脆弱性を調査します。Devin は関連するデータフローを追跡し、検証や認可の制御を確認したうえで、その問題に具体的なセキュリティ上の影響があるかどうかを評価します。各検出結果には、信頼度レベルと裏付けとなる証拠が含まれます。特に、検出結果が実行時に検証されていない場合は、対応する前にその証拠を確認してください。
影響を受けるコード、エントリーポイント、データフロー、既存の緩和策、記載された影響、信頼度、悪用可能性を確認してください。実行時検証が有効な場合は、検証結果とそれを裏付ける成果物も確認してください。証拠で制御が見落とされていたり、裏付けのない影響が示されていたりする場合は、Feedback を利用して、今後のスキャンに向けて不足している前提情報を与えてください。
実行時検証では、隔離された環境でアプリケーションをビルドして実行し、検出結果の再現を試みます。検証が成功すると悪用可能性についてより強い証拠が得られ、検証が成功しなかった場合は、追加の確認が必要な前提や環境上の制約を特定できます。実行時検証は任意であり、Devin がアプリケーションを安全にビルド、実行、シード、認証できるようにするための十分な validation guidance が必要です。
Security Swarm はリポジトリの各部分を並列に分析し、その結果をリポジトリ全体の観点に統合します。これにより、あるエンドポイントが別のエンドポイントを悪用するために必要な識別子を公開している、といったコンポーネント間の関係を特定できます。その結果として得られる連鎖的な検出結果でも、関連するコードパスを特定し、個々の条件がどのように組み合わさって具体的な影響につながるのかを説明する必要があります。
Security Swarm はエージェント型の分析を利用しているため、別々のスキャンで同一の検出結果や表現になるとは限りません。対象範囲を絞り込み、脅威モデルを明示し、重大度の基準を明確にし、具体的な調査ガイダンスを与えることで、カバレッジの一貫性を保ちやすくなります。これらの要件を再利用可能な scan profile に記録し、interactive mode を利用して提案された脅威モデルを確認し、結果が重要な前提情報を見落としている場合は Feedback を与えてください。
いいえ。完全なカバレッジを保証できるセキュリティスキャナーはありません。結果は、選択したスコープ、profile のガイダンス、利用可能なリポジトリの前提情報、そして設定された環境で検出結果を検証できるかどうかに左右されます。攻撃者モデルや脅威カテゴリごとに個別のスキャンを実行し、アプリケーションの変更に合わせて profiles を最新の状態に保ち、既存のセキュリティレビューやテストの実践とあわせて Security Swarm を利用してください。