開発者とエージェントのための自動化されたサイバーレジリエンス
すべてのビルドを、 最初の防衛線に。
高速で信頼性が高く、しかも低コストなランナーで、サプライチェーンセキュリティをソフトウェアの中核に据えましょう。
- セキュアなランナー
- ビルド時SBOM
- 脆弱性モニタリング
- 脆弱性対応
- 185個のパッケージを記録
- 6件の接続を拒否
- SBOM完成
- v2.4.1で修正
- ビルド
northwind-controls/web-portal
- パッケージ
- next 15.2.2
- react 19.0.0
- react-dom 19.0.0
- express 4.21.2
- tailwindcss 4.0.14
- typescript 5.8.2
- ポリシーゲートビルド#1843を停止 ビルド#1844が合格
- リリース済みアーティファクト
ghcr.io/northwind-controls/web-portal:2.4.1
v2.4.1としてリリース
CRACIでビルドするチーム
脆弱性は、どんな修正よりも速くやってきます。
攻撃者に必要な侵入口はひとつだけ。しかもエージェントを使えば、かつてない速さでそれを見つけ出せます。一方、チームはあらゆる隙間を、ほとんど手作業で塞がなければなりません。
2026年(現在まで)
- 1日あたりに公開されるCVE
- 303
- 平均で5分に1件。
- 前年より1日あたり増加
- +131%
- 2025年の1日あたりの件数との比較。
- 毎日HighまたはCriticalと評価
- 155
- CVSSスコアに基づきます。
| 年 | 1日あたりのCVE | 1日あたりのHighまたはCritical |
|---|---|---|
| 2020 | 39 | 7 |
| 2021 | 54 | 12 |
| 2022 | 68 | 20 |
| 2023 | 78 | 28 |
| 2024 | 109 | 48 |
| 2025 | 131 | 54 |
| 2026年(現在まで) | 303 | 155 |
なぜ今なのか
- アラートはノイズになりました。
何百件もの検出結果がすべて緊急なら、どれも緊急ではありません。チームはリスクを管理するのをやめ、アラートを数えるようになります。
- 件数がどのチームの対応力も上回っています。
トリアージも修正も、いまだに手作業です。この件数では、人を増やしてもその差は埋まりません。
- 修正は機能開発と競合します。
プロダクトチームは機能のリリースで評価されるため、セキュリティ作業は決して訪れない落ち着いたスプリントを待つことになります。
- スキャナーは推測しているにすぎません。
ビルド後にファイルから作成した一覧は、実際に取り込まれたものを見落とします。そして誤った安心感が、確認する目を遠ざけます。
ソフトウェアは、ビルドの中で形づくられます。
ロックファイルは、インストールされるべきものを固定します。実際に何が届くかを決めるのはビルドです。CRACIは、取り込まれるすべてのパッケージを、解決されたバージョン、取得元、CIキャッシュから復元されたかどうかとともに記録します。
"packages": {
…
…
} | パッケージ | 解決済み | 取り込み経路 | 取得元 |
|---|---|---|---|
| package.json経由 | |||
| express package.json経由 | 4.21.2 | package.json | registry.npmjs.org |
| next package.json経由 現在CVE-2025-29927の影響あり · Critical | 15.2.2 | package.json | registry.npmjs.org |
| react package.json経由 · CIキャッシュから | 19.0.0 | package.json | CIキャッシュ |
| react-dom package.json経由 · CIキャッシュから | 19.0.0 | package.json | CIキャッシュ |
| styled-jsx next経由 | 5.1.6 | next | registry.npmjs.org |
| ビルドスクリプト経由 | |||
| tailwindcss ビルドスクリプト経由 | 4.0.14 | ビルドスクリプト | registry.npmjs.org |
| typescript ビルドスクリプト経由 | 5.8.2 | ビルドスクリプト | registry.npmjs.org |
| ほか178個の記録済みパッケージ | |||
ビルドを保護し、依存関係を記録します。
ジョブはGitHubホステッドランナーではなくCRACIのランナーで、2倍の速さで実行されます。ジョブが取り込むすべてのパッケージは、バージョン、取得元、ライセンスとともに記録されます。ポリシー外の取得元からのものはすべて拒否されます。
Secure Build Service
各ジョブはそれぞれ独立した仮想マシンで実行され、ジョブ開始前に検証されるエグレスポリシーで保護されます。
- 分離されたVM
- デフォルト拒否または許可
- フェイルクローズ
- 違反時にアラート
Package Analytics
パッケージを認識するプロキシが、ジョブが取り込むすべてのパッケージを、解決されたバージョン、取得元、宣言ライセンスとともに記録します。
- npm
- PyPI
- RubyGems
- Cargo
- Go
- Nix
- OCI
- Yocto
- ほか多数
- time2025-03-14 09:13:07 UTC
- jobrelease.yml #1842
- stepnpm run build
- policyDefault deny. Allowed: npm, GitHub, ghcr.io, Docker Hub, example.com
- denied malicious.example:443
- reasonホストがポリシーに含まれていません
- actionランナーでブロック
{
"bomFormat": "CycloneDX",
"specVersion": "1.7",
…
"components": [{
"name": "next",
"version": "15.2.2",
"purl": "pkg:npm/[email protected]",
"licenses": [
{ "license": { "id": "MIT" } }
]
}, …]
} CRACIは、スキャナーには見えない通信を見ています。
他のSBOMツールは、ロックファイルやビルドの出力を読み取り、何が含まれたかを推測します。CRACIは、ビルド時のフック、ビルドスクリプト、ベースイメージが取り込む隠れた依存関係も含め、各ビルドに実際に入ってくるものを見ています。
スキャナー
競合スキャナー
- 方法
- package-lock.jsonを読み取る
- タイミング
- ビルド後
- 見えるもの
- ロックファイルに記載されたもの
| パッケージ | バージョン | ライセンス | 検出元 |
|---|---|---|---|
| next pkg:npm/[email protected] | 15.2.2 | MIT | package-lock.json |
| react pkg:npm/[email protected] | 19.0.0 | MIT | package-lock.json |
| react-dom pkg:npm/[email protected] | 19.0.0 | MIT | package-lock.json |
| express pkg:npm/[email protected] | 4.21.2 | MIT | package-lock.json |
| styled-jsx pkg:npm/[email protected] | 5.1.6 | MIT | package-lock.json |
| どのロックファイルにもないため、SBOMにも含まれない | |||
| どのロックファイルにもないため、SBOMにも含まれない | |||
| どのロックファイルにもないため、SBOMにも含まれない | |||
142個のパッケージを記載 43個が欠落
記録されたSBOM
- 方法
- ビルドの通信を見る
- タイミング
- ビルド中
- 見えるもの
- ビルドが取得したもの
| パッケージ | バージョン | ライセンス | 取得元 |
|---|---|---|---|
| next pkg:npm/[email protected] | 15.2.2 | MIT | registry.npmjs.org |
| react pkg:npm/[email protected] | 19.0.0 | MIT | registry.npmjs.org |
| react-dom pkg:npm/[email protected] | 19.0.0 | MIT | registry.npmjs.org |
| express pkg:npm/[email protected] | 4.21.2 | MIT | registry.npmjs.org |
| styled-jsx pkg:npm/[email protected] | 5.1.6 | MIT | registry.npmjs.org |
| ビルド済みバイナリ 隠れた依存 postinstallフック経由 · pkg:npm/hidden-package | — | — | registry.npmjs.org |
| ビルドスクリプトのダウンロード(2個) 隠れた依存 ビルドスクリプト経由 · pkg:generic/[email protected]?download_url=example.com/tool | — | — | example.com |
| ベースイメージのOSパッケージ(40個) 隠れた依存 Dockerfile FROM経由 · pkg:oci/ubuntu | — | — | registry.hub.docker.com |
185個のパッケージを記録 ロックファイルより43個多い
ビルドの例です。 境界線をドラッグして比較できます。 ビルド時SBOMの仕組み
潜在的な脆弱性を、該当するリリースまで正確に特定します。
CRACIは記録したSBOMを継続的にチェックし、新たな脆弱性を検出します。この例では、リリースの7日後に重大な脆弱性が公開されます。影響を受けるパッケージからチームの修正まで、ビルド記録をたどってみましょう。
ステップ1/4
CVE-2025-29927が公開されました
nextは直接の依存関係で、ビルド#1842がその正確なバージョンを記録しています。
- 深刻度
- Critical 9.1
- パッケージ
- next
- 影響あり
- 15.0.0~15.2.2
- 修正バージョン
- 15.2.3
ステップ2/4
1つのリリースが影響を受けます
CRACIが記録されたSBOMと照合します。
- リリース
- web-portal v2.4.0
- 一致
- next 15.2.2、直接の依存関係
- SBOM
- Complete
ステップ3/4
このイメージとして出荷されました
リリース、イメージ、SBOMは常にひとまとまりで管理されます。
- イメージ
- ghcr.io/northwind-controls/web-portal:2.4.0
- リリース
- v2.4.0
- SBOM
- 追跡中
ステップ4/4
修正には担当者がいます
トリアージし、担当者に割り当て、修正済みリリースまで追跡します。
- 担当者
- プラットフォームチーム
- 対応
- nextを15.2.3にアップグレードして再ビルド
- 修正バージョン
- web-portal v2.4.1、2025-03-22
監査人のあらゆる質問に、証拠で答えます。
すべてのビルドがエビデンスを残します。SBOM、脆弱性の記録、そして各修正がどのようにリリースに至ったかです。CRA、NIS2、ISO 27001、SOC 2のプロセスに活用すれば、監査人からの質問にはプロジェクトではなくダウンロードひとつで対応できます。
- 構成
- すべてのリリースにビルド時SBOMを。
- CycloneDX
- SPDX
- 推移的依存関係
- 脆弱性
- 宣言ライセンス
- 脆弱性への対応
- 記録されたSBOMを継続的に再評価します。
- トリアージ
- 修正
- リリースとともに保管
- 報告
- CRACIが内容を準備し、お客様が提出します。
- 早期警告
- 通知
- 最終報告
Cyber Resilience Act
- 報告義務の適用開始
- 規則の全面適用
脆弱性の届出 抜粋
web-portal v2.4.0
northwind-controls/web-portal · ビルド#1842
- SBOM
- CycloneDX · Complete
- ビルド
- #1842 · コミット9f3c2e1
- 脆弱性
- CVE-2025-29927 · Critical
- コンポーネント
- next 15.2.2
- 報告先
- CRA Single Reporting Platformを通じてCSIRTとENISAへ
対応のタイムライン
- リリースをビルドし、SBOMを記録
- アドバイザリが公開され、このリリースと照合
- プロダクトセキュリティがトリアージし、プラットフォームチームに割り当て
- next 15.2.3を含むv2.4.1をリリース
SBOMはCycloneDXまたはSPDXでエクスポート
最初のビルドを5分で実行。
このデモでは、TanStack StartのサイトをサインアップからCRACIでの最初の実行まで進めます。GitHubを接続し、runs-on: craciでジョブを振り分け、最初の実行を確認します。CRACIは、ビルドが取り込むすべての外部依存関係を記録し、既知の脆弱性にフラグを立て、それぞれを取り込んだジョブまでさかのぼって特定します。
From sign-up to your first build on CRACI
YouTubeのCRACI:CRACI demo.
CRACIがデリバリーワークフローにどう組み込まれるかをご覧ください。
CRACIが置き換えるのはランナーであり、GitHub Actionsではありません。ワークフロー、レビュー、デプロイの手順はそのままです。
-
GitHub Appを接続
すべてのリポジトリ、または選択したリポジトリのみに。
-
ランナーを変更
ワークフローで
runs-on: craciを設定します。ほかは何も変わりません。 -
次のビルドを実行
実行は引き続きGitHubに表示されます。ビルド記録とSBOMはCRACIに表示されます。
- ランナー
- 欧州のインフラ上で稼働する、x86-64とARM64のマネージドLinuxランナー。
- ビルド
- Docker Engine、Buildx、Compose v2に対応。YoctoとBitBakeのビルドについてはドキュメントを用意しています。
- コードとデータ
- CRACIはビルド中にソースコードを処理し、保存しません。ビルドデータは欧州でホストされます。キャッシュの内容は、ワークフローが何を保存するかによって決まります。セキュリティのページを読む。
- ロードマップに掲載
- GitLab、JenkinsなどのCIシステム、WindowsとmacOSのランナー、オンプレミスのランナー、MavenとJava。
デモの前によくいただくご質問
互換性、セットアップ、セキュリティ、データの取り扱い。
どのCI環境とパッケージエコシステムに対応していますか?
現在対応しているCI連携はGitHub Actionsで、その他のCIシステムはロードマップに掲載されています。CRACIは、npm、PyPI、RubyGems、Cargo、Go、Nix、OCIの各レジストリ、Debian、Ubuntu、Alpineのパッケージリポジトリ、そしてGitやその他のソースのダウンロードを記録します。MavenとJavaはロードマップに掲載されています。ランナーはx86-64とARM64のLinuxです。
セットアップには何が必要ですか?
すべてのリポジトリまたは選択したリポジトリにCRACI GitHub Appを接続し、ワークフローでruns-on: craciを設定するだけです。CRACIが置き換えるのはランナーであり、GitHub Actionsではないため、実行は引き続きGitHubに表示されます。
CRACIはどのデータにアクセスし、どこに保存されますか?
GitHub AppはコードとActionsの実行を読み取り、お客様の組織に登録したランナーを管理します。CRACIはビルド中にソースコードを処理し、保存しません。メタデータ、パッケージデータ、ネットワークトレース、SBOM、来歴、キャッシュ、監査記録を含むビルドデータは欧州でホストされ、Enterpriseでは保持期間をカスタマイズできます。キャッシュの内容は、ワークフローが何を保存するかによって決まります。セキュリティとデータの取り扱いについて読む。
CRACIはブロックしますか、それともアラートを出しますか?ポリシーに違反したビルドはどうなりますか?
エグレスポリシーはランナーで適用されます。ジョブの開始前に検証され、フェイルクローズで動作するため、ポリシー外の接続は拒否され、アラートが届きます。ポリシーゲートでビルドをリアルタイムに停止することもできます。
どのフォーマットでエクスポートできますか?
SBOMは、推移的依存関係、脆弱性、宣言ライセンスを含めて、CycloneDXまたはSPDXでエクスポートできます。
現在利用できるものと、ロードマップに掲載されているものは何ですか?
現在利用可能:GitHub Actions向けのマネージドLinuxランナー、脆弱性を含むビルド時SBOM、エグレスポリシー、トリアージ付きの継続的な脆弱性モニタリング、ポリシーゲート。ロードマップに掲載:GitLab、JenkinsなどのCIシステム、WindowsとmacOSのランナー、オンプレミスのランナー。
出資者
掲載メディア
ビルドから修正までの道筋をご覧ください。
- ビルド中に記録された依存関係を確認する。
- 脆弱性の影響を受けるリリースを特定する。
- トリアージから修正済みリリースまで対応を追跡する。