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

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

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

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 が生成するルールの内容に反映されます。

調査ガイダンス

Devinが潜在的な問題をどのように調査し、どのような証拠を収集すべきかを定義します。既存の緩和策を考慮し、実際に到達可能な脆弱性と理論上の懸念を区別するよう指示してください。

トリアージの指針

Devin が検出事項の重複をどのように排除し、どのように優先順位を付けるかを定義します。結果が組織の基準に沿うよう、重大度の判定基準も含めてください。

サンドボックス検証

Devinが安全にアプリケーションをビルドして実行できる場合は、サンドボックス検証を有効にしてください。アプリケーションの起動方法、テストデータの作成方法、認証方法、想定されるセキュリティ境界の示し方を説明してください。 Validate severities を利用して、Devin がサンドボックスで検証する重大度の下限を選択します。検証セッションが開始されるのは、その重大度以上の検出結果のみです。デフォルトでは、critical、high、medium の検出結果が検証されます。しきい値を critical または high に引き上げれば、最も重要な検出結果だけに検証リソースを集中できます。
検証が成功しなかったからといって、必ずしも検出結果が誤りだとは限りません。検証結果とアーティファクトを確認し、有効な緩和策によって悪用が防がれたのか、あるいは設定された環境のために Devin がテストを完了できなかったのかを判断してください。
サンドボックス検証では、検出結果ごとに個別の Devin セッションが開始されます。環境に関するガイダンスについては、サンドボックス検証を設定するを参照してください。

レポート

スキャン後に要約レポートが必要な場合は、レポートを有効にします。想定読者と、レポートで特に強調すべき情報を指定してください。

修正ガイダンス

修正のために検出事項をDevinに割り当てる際は、Devinが従うべき制約を指定します。テストに関する要件、互換性の要件、避けるべきプラクティスを含めてください。

詳細入力

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

Ingestion プロファイル

プロファイルの mode は作成時に決定され、後から変更できません。Discover プロファイル (デフォルト) はコードを解析して新しい issue を検出し、上記の guidance フィールドを利用します。Ingest プロファイルは、別の scanner やレポートですでに得られている検出結果を取り込み、scope と threat model の入力を次の 2 つの guidance フィールドに置き換えます。
  • Ingestion source — 既存の検出結果がどこにあり、Devin がどのように取得すべきか。例えば、GitHub code scanning の REST API 経由で open な alert を取得する、reports/semgrep.json に commit された Semgrep レポートを読み取る、といった指定です。認証情報は token を直接貼り付けず、組織の secret 名で参照してください。
  • Post-ingestion triage — 取り込んだ検出結果を Devin がどのように triage すべきか。何を dismiss し、何の優先度を見直し、何を重複として扱うかを指定します。例えば、テストフィクスチャ内の検出結果を dismiss し、rule ID とファイルが同じ検出結果を重複として扱う、といった内容です。
ingestion プロファイルで scan を run する方法については、既存の検出結果を取り込むを参照してください。Profiles tab は scan type と mode (Discover または Ingest) で絞り込めます。

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

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

インタラクティブモード

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

サンドボックス検証を設定する

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

スキャンを拡張する

スキャンモードを選択する

New Scan シートでは、次の4つのスキャンモードを利用できます。 インタラクティブモードは、single-repo および multi-repo のセキュリティスキャンで利用できます。組織でまだスキャンを実行したことがない場合、single-repo スキャンではデフォルトで有効になります。

スキャンの実行レベル

スキャンは必ず2つの実行レベルのいずれかで実行され、開始時にScan effortで選択します。
  • Normal (デフォルト) — 調査バッチのサイズが大きく、より高速なスキャンです。
  • Deep — 各検出結果をコードベース内でさらに深く追跡し、網羅性を最大限に高めます。その分コストが高く、実行時間も長くなります。
日常的なスキャンや差分スキャンにはNormalを、リスクの高いコードベースの初回スキャンや定期的な詳細レビューにはDeepを利用してください。完了したスキャンの実行レベルは、そのヘッダーで確認できます。

組織を一括スキャンする

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

既存の検出結果を取り込む

Ingest findings を利用すると、他のスキャナーの結果を Security Swarm に取り込み、Devin 自身の検出結果と併せてトリアージ・検証・修復できます。
  1. 検出結果が属するリポジトリを 1 つ以上選択します。
  2. 取り込みプロファイルを選択します。プロファイルによって、検出結果の所在と、取り込み後のトリアージ方法が Devin に伝わります。
  3. 任意で、Devin が検出結果を読み取るためのレポートやエクスポートファイル(SARIF、CSV、PDF など)を最大 10 件までアタッチできます。プロファイルの取り込みソースがすでに API やリポジトリ内のファイルを指している場合、アタッチメントは不要です。
  4. 任意で インタラクティブモード を有効にします。取り込み後に Devin が一時停止するため、重複の可能性を含めて取り込み内容を確認し、続行前に修正を依頼できます。
  5. スキャン強度を選択し、Run Scan をクリックします。
取り込まれた検出結果は、他の検出結果と同様にスキャンページに表示され、Devin への割り当て、内容の調整、ステータスの変更が可能です。スキャンの一覧はモードでフィルタリングでき、Discover のみ、または Ingest のみのスキャンを表示できます。
アタッチメントのアップロードは attachments API を経由するため、アップロードしたファイルからの取り込みにも Use Devin sessions が必要です。取り込みスキャンは API からも開始できます。

自動スキャン

自動スキャンは、前回完了したスキャン以降に追加されたコミットを定期的にスキャンします。設定方法は次のとおりです。
  • 単一リポジトリのスキャンを開始するときに、日次、週次、月次、またはカスタムのスケジュールを選択する。
  • 既存のスキャンで、スケジュールを追加、編集、無効化する、または 今すぐスキャン をクリックしてすぐに実行する。
スケジュールの時刻は、お使いのローカルタイムゾーンで表示されます。
自動スキャンは、自動化が組織で有効になっている場合にのみ利用できます。設定するには、コードスキャンの管理権限と、自動化を管理する権限の両方が必要です。
自動スキャンは増分方式です。各実行では、前回完了したスキャン以降に追加されたコミットのみを調査します。代わりに スキャンを開始 をクリックすると、既定ではリポジトリ全体をフルスキャンします。

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

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

自動化からスキャンを開始する

自動化には、スケジュールに従って、またはイベントに応じて実行するスキャン向けに コードスキャン エージェントタイプが用意されています。プロンプトでDevinセッションを開始するのではなく、自動化が直接スキャンを開始します。次の2つのアクションのいずれかを選択してください:
  • Start code scan — 自動化が発生するたびに、設定されたリポジトリ、スキャンタイプ、プロファイル、スキャンの実行レベルで新しいスキャンを開始します。
  • 新しいコミットをスキャンする — 既存のスキャンを拡張し、直前の完了した実行以降に追加されたコミットを対象とする増分実行を行います。対象のスキャンには完了済みの実行が必要です。
自動スキャンは、後者をあらかじめ設定した自動化です。Webhookなど他のトリガーを利用したい場合や、スケジュールされたスキャンを一箇所でまとめて管理したい場合は、自動化ページを利用してください。 セッションのコンポーザーから /scan コマンドでスキャンを開始することもできます。パフォーマンス、テストカバレッジ、デッドコードなど、セキュリティ以外のスキャンについてはCode Scansを参照してください。

スキャンの管理と監視

スキャンとそのプロファイルによっては、スキャンのヘッダーに次の項目が表示されます。
  • レポート — スキャン用に生成されたレポートをダウンロードします。
  • 使用量 — 消費したACU、セッション数、スキャン時間、PRの統計を閲覧します。
  • セッション — スキャンを実行したメインのDevinセッションを開きます。
  • スキャン履歴 — スキャンの各実行を閲覧します。スキャン履歴を参照してください。
  • プロファイルの変更 — 今後の実行で使用するプロファイルを切り替えます。スキャンのプロファイルを変更するを参照してください。
  • CSVとしてエクスポート — スキャンの検出結果をエクスポートします。
  • アーカイブ または アーカイブ解除 — スキャンをデフォルトの一覧から非表示にするか、一覧に戻します。
  • 新しいコミットをスキャン — 増分スキャンを開始します。
スキャンはDevinセッションとして実行され、ACUsを消費します。セキュリティページのスキャン一覧は、ステータス、PRの状態、スキャンのモード (DiscoverまたはIngest) で絞り込めます。

スキャン履歴

スキャンの Scan history を開くと、これまでの実行履歴が新しい順に表示されます。各実行では、Full scanIncremental のどちらであったか、ステータス、使用された effort と profile、消費した ACU、対応する Devin セッションへのリンクを確認できます。自動スキャンがスケジュールどおりに実行されているかの確認や、フルスキャンと増分スキャンのコスト比較に利用してください。

スキャンのプロファイルを変更する

完了したスキャンで Change profile をクリックすると、別のプロファイルを選択できます。新しいプロファイルは、自動スキャンや Scan new commits を含む以降のスキャン実行に適用されます。完了済みの実行とその検出結果は影響を受けません。スキャンの実行中はプロファイルを変更できません。プロファイルの変更には コードスキャンを利用する 権限が必要です。

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

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

アクセスと権限

セキュリティへのアクセスは、ロールエディタ内のコードスキャン権限によって制御されます。 スキャンの開始、フィードバックの送信、検出結果のDevinへの割り当てには、Devinセッションを利用する権限も必要です。さらに、自動スキャンには自動化を管理する権限が必要です。 デフォルトでは、メンバーにはコードスキャン権限は付与されません。オーナーはすべての権限を持ち、管理者はカスタムロールを通じてメンバーに権限を付与できます。 同じコードスキャン権限によって、Code Scans APIへのアクセスも制御されます (APIコールでは追加のセッション権限は不要です。ただし、取り込みスキャン用のスキャナーレポートのアップロードはattachments API経由で行われ、Devinセッションを利用する権限が必要です) 。コードスキャンを利用する権限を持つサービスユーザーまたはパーソナルアクセストークンは、スキャンを開始取り込みスキャンを開始、および検出結果を修復できます。コードスキャンを閲覧する権限では、スキャンの一覧表示プロファイルそのガイダンス検出結果、およびメトリクスを利用できます。エンドツーエンドのフローについては、Devin APIを介したコードスキャンのトリガーを参照してください。

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

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

よくある質問

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