개발자와 에이전트를 위한 자동화된 사이버 복원력
모든 빌드를 첫 번째 방어선으로.
더 저렴하고 빠르며 안정적인 러너로 공급망 보안을 소프트웨어의 중심에 두세요.
- 보안 러너
- 빌드 시점 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년 현재까지
- 하루에 공개되는 CVE
- 303
- 평균 5분마다 1건.
- 전년보다 하루 기준 증가
- +131%
- 2025년 일일 평균 대비.
- 매일 High 또는 Critical 등급
- 155
- CVSS 점수 기준.
| 연도 | 하루 CVE 수 | 하루 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
- 기본 거부 또는 허용
- 실패 시 차단(fail closed)
- 위반 시 알림
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일 후 치명적인 취약점이 공개됩니다. 영향을 받는 패키지부터 팀의 수정까지 빌드 기록을 따라가 보세요.
4단계 중 1단계
CVE-2025-29927가 공개됩니다
next은 직접 종속성이며, 빌드 #1842이 정확한 버전을 기록했습니다.
- 심각도
- Critical 9.1
- 패키지
- next
- 영향받는 버전
- 15.0.0~15.2.2
- 수정 버전
- 15.2.3
4단계 중 2단계
릴리스 하나가 영향을 받습니다
CRACI가 기록된 SBOM과 매칭합니다.
- 릴리스
- web-portal v2.4.0
- 매칭
- next 15.2.2, 직접 종속성
- SBOM
- Complete
4단계 중 3단계
이 이미지로 배포되었습니다
릴리스, 이미지, 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는 차단합니까, 알림을 보냅니까? 정책을 위반한 빌드는 어떻게 됩니까?
이그레스 정책은 러너에서 적용됩니다. 작업 시작 전에 검증되고 실패 시 차단(fail closed) 방식으로 동작하므로, 정책을 벗어난 연결은 거부되고 알림을 받게 됩니다. 정책 게이트는 빌드를 실시간으로 중단할 수도 있습니다.
어떤 형식으로 내보낼 수 있습니까?
SBOM은 전이적 종속성, 취약점, 선언된 라이선스를 포함해 CycloneDX 또는 SPDX로 내보낼 수 있습니다.
현재 제공되는 기능과 로드맵에 있는 기능은 무엇입니까?
현재 제공: GitHub Actions용 관리형 Linux 러너, 취약점을 포함한 빌드 시점 SBOM, 이그레스 정책, 분류를 포함한 지속적 취약점 모니터링, 정책 게이트. 로드맵: GitLab, Jenkins 및 기타 CI 시스템, Windows 및 macOS 러너, 온프레미스 러너.
투자사
언론 보도
빌드부터 수정까지의 경로를 확인하세요.
- 빌드 중 기록된 종속성을 살펴봅니다.
- 취약점의 영향을 받는 릴리스를 식별합니다.
- 분류부터 수정된 릴리스까지 대응을 추적합니다.