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 を参照してください。
左側のサイドバーでセキュリティ を開き、Start scan をクリックします。
Single repo で、スキャン対象のリポジトリを選択します。
Interactive mode が有効になっていることを確認します。
Run Scan をクリックします。
提案された脅威モデル の準備ができたら内容を確認し、Looks good, start scanning をクリックするか、フィードバックを送信します。
検出事項が表示されたら、証拠を確認し、対応が必要な検出事項に対処 します。
繰り返し実行するスキャンには、対象範囲、脅威モデル、重大度の基準、検証手順、修正時の制約をまとめたプロファイルを作成してください。
スキャンを開くと、その findings を確認できます。ページには、左側に重大度ごとにグループ化された findings の一覧が表示され、右側には選択した finding の詳細が表示されます。
ステータスタブには、リアルタイムの件数が表示されます。
Open — 対応が必要です。
Reviewed — レビュー済みで、追加の対応は不要です。
Dismissed — 誤検知または重複と判断されました。
スキャンの実行中は、findings が届くたびにページが自動的に更新されます。
Reviewed はワークフロー上のステータスであり、対処法がマージされたことを示すものではありません。finding は手動で Reviewed にすることも、後続のスキャンで存在しなくなったと判断された場合に Reviewed になることもあります。
検出事項には、次の内容が含まれます。
重大度、ステータス、悪用可能性、確信度、カテゴリ 。
影響を受けるファイルパスとコードスニペット 。
問題の説明 と対処方法の推奨事項 。
ランタイム検証結果 、裏付けとなる証拠、および検証アーティファクト。
関連するプルリクエスト と、それらのオープン、マージ済み、またはクローズ済みの状態。
利用可能な場合は、コードオーナー とメモ。
リスクのあるコードパターンは、脆弱性の証拠ではなく手がかりとして扱ってください。検出事項が、攻撃者が制御可能な入力から到達可能な経路を追跡していること、入力検証や認可の制御を適切に考慮していること、そして具体的なセキュリティへの影響を説明していることを確認してください。
Devin に割り当て
フィードバック
調整
ステータスメニュー
問題を修正してプルリクエストを作成するための Devin セッションを開始します。セッションと作成されたプルリクエストは、この検出結果に紐づけて追跡されます。
今後のスキャンに向けてスキャンプロファイルを改善するフィードバック セッションに前提情報を送信します。たとえば、報告されたデータフローは内部ゲートウェイで保護されていることを説明しておくと、今後のスキャンでその対策を考慮できるようになります。
必要に応じて Devin 向けの前提情報を添えて、検出結果の重大度を変更します。たとえば、悪用に特権を持つ内部アクセスが必要な場合は重大度を下げ、その制約を前提情報として含めます。
検出結果を Open、Reviewed、または Dismissed に設定します。対応が必要な間は Open のままにし、トリアージ後は Reviewed にし、誤検知または重複の場合は Dismissed にします。
スキャンプロファイルは、スキャンの対象範囲を定め、スキャンの各段階に指針を与えます。各スキャンで利用できるプロファイルは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ダイアログのすべてのリポジトリ タブを利用します。
必要に応じてリポジトリ名フィルター を入力します。
必要に応じてスキャンプロファイルを選択します。
選択したプロファイルですでにスキャンされているリポジトリを除外するには、すでにスキャン済みのリポジトリをスキップ を有効のままにします。
プレビュー をクリックします。
条件に一致したリポジトリを確認し、スキャンしたくないものは選択を解除して確定します。
このプレビューはドライランです。フィルター、プロファイル、またはスキップ設定を変更するとプレビューは無効になるため、古い一覧は確定できません。
自動スキャンは、前回完了したスキャン以降に追加されたコミットを定期的にスキャンします。設定方法は次のとおりです。
単一リポジトリのスキャンを開始するときに、日次、週次、月次、またはカスタムのスケジュールを選択する。
既存のスキャンで、スケジュールを追加、編集、無効化、またはすぐに実行する。
自動スキャンは、自動化 によって実装されています。設定するには、コードスキャンの管理 権限と、自動化を管理する権限の両方が必要です。スケジュールの時刻は、お使いのローカルタイムゾーンで表示されます。
完了済みのスキャンで 新しいコミットをスキャンする をクリックすると、そのスキャンで最後にスキャンされたコミット以降に追加されたコミットを調査できます。Auto Scan も同じ増分方式を利用するため、以降のスキャンはリポジトリ全体を繰り返しスキャンするよりも低コストです。
スキャンとそのプロファイルによっては、スキャンのヘッダーに次の項目が表示されます。
レポート — スキャン用に生成されたレポートをダウンロードします。
使用量 — 消費したACU、セッション数、スキャン時間、PRの統計を閲覧します。
セッション — スキャンを実行したメインのDevinセッションを開きます。
CSVとしてエクスポート — スキャンの検出結果をエクスポートします。
アーカイブ または アーカイブ解除 — スキャンをデフォルトの一覧から非表示にするか、一覧に戻します。
新しいコミットをスキャン — 増分スキャンを開始します。
スキャンはDevinセッションとして実行され、ACUs を消費します。
組織で最初のスキャンが完了すると、セキュリティページに、過去7日間、30日間、または90日間の組織全体のダッシュボードが表示されます。
プルリクエストの統計 — 作成、マージ、オープン、クローズされたプルリクエスト数と、マージ率。
検出事項の推移 — 選択した期間内の検出事項を重要度別に表示します。
セキュリティへのアクセスは、ロールエディタ内のコードスキャン権限によって制御されます。
Permission What it unlocks Default roles コードスキャンを閲覧する スキャン、プロファイル、検出結果、および関連するスキャンセッションを閲覧できます。 Admin コードスキャンを利用する スキャンの開始、組織プロファイルの作成、検出結果へのフィードバックの送信、検出結果の調整、検出結果のステータス変更、検出結果のDevinへの割り当てを行えます。 Admin コードスキャンを管理する スキャンのアーカイブまたはアーカイブ解除と、Auto Scanスケジュールの設定を行えます。 Admin アカウントのコードスキャンを管理する 組織プロファイルをEnterpriseスコープに昇格し、Enterpriseプロファイルを編集またはアーカイブできます。 Enterprise admin
スキャンの開始、フィードバックの送信、検出結果のDevinへの割り当てには、Devinセッションを利用する権限も必要です。さらに、Auto Scanには自動化を管理する権限が必要です。
デフォルトでは、メンバーにはコードスキャン権限は付与されません。オーナーはすべての権限を持ち、管理者はカスタムロール を通じてメンバーに権限を付与できます。
Security Swarm を別のスキャナーと比較する
有意義な比較を行うには、両方のスキャナーに同じスコープ、脅威モデル、重大度の基準、検証に求める水準を設定してください。そうしないと、設定の違いによって、本来の能力差が見えにくくなることがあります。
プロファイルを利用して比較基準を定義し、対話モードで生成された脅威モデルを確認し、実行時検証を利用して報告された検出結果に同じ証拠基準を適用してください。
Security Swarm はどのように誤検知を減らしますか?
Security Swarm は、危険なパターンを個別に報告するのではなく、リポジトリの前提情報に照らして潜在的な脆弱性を調査します。Devin は関連するデータフローを追跡し、検証や認可の制御を確認したうえで、その問題に具体的なセキュリティ上の影響があるかどうかを評価します。 各検出結果には、信頼度レベルと裏付けとなる証拠が含まれます。特に、検出結果が実行時に検証されていない場合は、対応する前にその証拠を確認してください。
影響を受けるコード、エントリーポイント、データフロー、既存の緩和策、記載された影響、信頼度、悪用可能性を確認してください。実行時検証が有効な場合は、検証結果とそれを裏付ける成果物も確認してください。 証拠で制御が見落とされていたり、裏付けのない影響が示されていたりする場合は、Feedback を利用して、今後のスキャンに向けて不足している前提情報を与えてください。
実行時検証では、隔離された環境でアプリケーションをビルドして実行し、検出結果の再現を試みます。検証が成功すると悪用可能性についてより強い証拠が得られ、検証が成功しなかった場合は、追加の確認が必要な前提や環境上の制約を特定できます。 実行時検証は任意であり、Devin がアプリケーションを安全にビルド、実行、シード、認証できるようにするための十分な validation guidance が必要です。
Security Swarm は複数のファイルにまたがる脆弱性をどのように見つけますか?
Security Swarm はリポジトリの各部分を並列に分析し、その結果をリポジトリ全体の観点に統合します。これにより、あるエンドポイントが別のエンドポイントを悪用するために必要な識別子を公開している、といったコンポーネント間の関係を特定できます。 その結果として得られる連鎖的な検出結果でも、関連するコードパスを特定し、個々の条件がどのように組み合わさって具体的な影響につながるのかを説明する必要があります。
Security Swarm はエージェント型の分析を利用しているため、別々のスキャンで同一の検出結果や表現になるとは限りません。対象範囲を絞り込み、脅威モデルを明示し、重大度の基準を明確にし、具体的な調査ガイダンスを与えることで、カバレッジの一貫性を保ちやすくなります。 これらの要件を再利用可能な scan profile に記録し、interactive mode を利用して提案された脅威モデルを確認し、結果が重要な前提情報を見落としている場合は Feedback を与えてください。
スキャンが完了したということは、リポジトリに他の脆弱性はないという意味ですか?
いいえ。完全なカバレッジを保証できるセキュリティスキャナーはありません。結果は、選択したスコープ、profile のガイダンス、利用可能なリポジトリの前提情報、そして設定された環境で検出結果を検証できるかどうかに左右されます。 攻撃者モデルや脅威カテゴリごとに個別のスキャンを実行し、アプリケーションの変更に合わせて profiles を最新の状態に保ち、既存のセキュリティレビューやテストの実践とあわせて Security Swarm を利用してください。