Sammenligning
CRACI vs Syft og Grype
Syft og Grype er Anchores gratis værktøjer til at generere SBOM'er og finde sårbarhederne i dem. De er kun så komplette som det, Syft finder på disken. CRACI registrerer komponentlisten, mens buildet kører.
Opdateret
Det korte svar
Syft er en populær open source-SBOM-generator, og Grype er den tilhørende sårbarhedsscanner. Sammen dækker de generering og matchning gratis i enhver pipeline. CRACI er en GitHub Actions-runner, der registrerer, hvad hvert build hentede, angiver, om registreringen er komplet, styrer, hvad buildet kan forbinde sig til, og bliver ved med at overvåge det, der er leveret. Forskellen på én linje: Syft rekonstruerer SBOM'en ud fra filer, og hvor meget det finder, afhænger af konfigurationen og af, hvad der ligger på disken, når det kører. CRACI observerer den og sporer sårbarhederne i det, det registrerede, så ét produkt gør begges arbejde.
| Funktion | CRACI | Syft og Grype |
|---|---|---|
| Kører dine builds | Jobs kører på CRACI-runnere | CLI-trin i enhver pipeline |
| Afhængigheder registreret fra buildet | Observerede hentninger, inklusive cachede pakker | Catalogers læser filer bagefter |
| SBOM'ens fuldstændighed | Angivet pr. job og pr. cache | Afhænger af, hvilke catalogers der kørte, og hvad der lå på disken |
| Egress-politik på runneren | Default deny eller allow, blokerer ved fejl (fail closed) | Uden for deres område |
| Signeret dokumentation | Ingen signeret provenance | Syft opretter signerede in-toto SBOM-attestationer |
| Sårbarhedsmatchning | Samlet på tværs af builds og repositories | Grype, med EPSS, KEV og risikoscoring |
| Overvågning af leverede SBOM'er | Overvågede SBOM'er genvurderes løbende | Scan SBOM'er igen med Grype efter din egen tidsplan |
| Få CI til at fejle ved en alvorlighedsgrænse | Policy gates blokerer builds på baggrund af fund; grænser ikke angivet | grype --fail-on |
| Scan images og mapper, du ikke selv har bygget | Registrerer de builds, det kører | Images, mapper, arkiver og SBOM'er |
| Ud over GitHub Actions | GitHub Actions i dag; GitLab CI og Jenkins på roadmappen | Enhver CI eller lokal CLI |
| Pris | $0.002 pr. vCPU-minut ($0.004 for 2 vCPU), målt pr. sekund; intet månedligt gebyr og ingen betaling pr. SBOM | Gratis og open source under Apache-2.0. Anchore Enterprise er et separat betalt produkt. |
- Inkluderet
- Delvist
- Ikke inkluderet
- På roadmappen
Hvad Syft og Grype gør godt
Syft er "a CLI tool and Go library for generating a Software Bill of Materials (SBOM) from container images and filesystems." Det genkender snesevis af pakkesystemer, fra Alpine, Debian og RPM til Go, Python, Java, JavaScript, Ruby, Rust, PHP og .NET. Det skriver CycloneDX, SPDX og sit eget Syft JSON, konverterer mellem formater og kan oprette signerede SBOM-attestationer efter in-toto-specifikationen.
Grype scanner container-images, filsystemer og SBOM'er for kendte sårbarheder. Det prioriterer fund med EPSS, KEV og
risikoscoring, understøtter OpenVEX til filtrering af resultater, og dets flag --fail-on får en pipeline
til at fejle, når det finder sårbarheder på eller over en alvorlighed, du vælger. Anchore bemærker, at Grype "runs
entirely locally and doesn't send any data to external services," bortset fra at downloade sin database.
Begge er Apache-2.0 og sponsoreret af Anchore, hvis kommercielle platform, Anchore Enterprise, "builds on open source Syft and Grype." Denne side handler om open source-værktøjerne.
Syft er stærkt, når det har de rigtige filer foran sig. Peger du det mod et kildetræ, der committer sine afhængigheder,
såsom ollama/ollama, resolver standardscanningen dem med versioner, package URLs og afhængighedskanterne
mellem dem.
Ét flag ændrer svaret
Syft vælger sine catalogers efter scanningstype, og dokumentationen forklarer hvorfor: "files that hint at the intent to
install software do not have enough information in them to determine the exact version." Catalogers har tags som
declared, installed, image og directory, og flag som
--select-catalogers og --override-default-catalogers ændrer sættet.
I syft cataloger list ved v1.51.1 er den JavaScript-cataloger, der læser node_modules,
tagget til image- og installed-scanninger og er ikke med i standardsættet for en mappescanning. På et installeret
checkout afgør ét flag altså, om npm-pakkerne i node_modules overhovedet bliver læst. Samme værktøj, samme
version, samme træ.
Bagsiden betyder lige så meget. Ingen enkelt konfiguration er rigtig overalt:
- På et rent express 5.2.1-checkout, som ikke har nogen lockfile, har standardscanningen ingen npm-afhængigheder at resolve og returnerer det, den ellers genkender, såsom GitHub Actions og workflow-filer.
- Slår du installed-catalogers til og peger dem mod kildetræer, som de er committet, hvor intet er installeret endnu, har de næsten intet at læse.
- Et repository helt uden afhængighedsmanifest giver scanningen ingen afhængighedsfiler at læse, uanset konfigurationen.
Intet af dette er en fejl. Syft rapporterer det, filerne foran det understøtter, som designet. Den praktiske konsekvens er, at SBOM'en afhænger af to beslutninger, som nogen skal træffe rigtigt i hver pipeline: hvilke catalogers der kører, og om afhængigheder blev installeret før scanningen. Og Grype kan kun matche det, Syft har angivet. En komponent, der mangler i SBOM'en, når aldrig frem til sårbarhedsopslaget, så scanningen kommer tilbage ren for den.
Hvor CRACI er anderledes
CRACI har ingen catalogers at vælge, fordi det ikke læser træet bagefter. Du ændrer runs-on til
craci, og en pakkebevidst proxy registrerer, hvad jobbet henter fra npm, PyPI, RubyGems, Cargo, Go, Nix,
OCI, apt, apk og Git-kilder samt download-presets. Pakker gendannet fra en CI-cache fører deres dokumentation med sig.
Resultatet, i CycloneDX eller SPDX, inkluderer de transitive afhængigheder, buildet faktisk brugte.
- Fuldstændighed er eksplicit. Hvert job og hver cache markeres som Complete, Complete with connections, Incomplete, Unavailable eller Not recorded.
- Buildet er under kontrol. En egress-politik (default deny eller allow, 24 indbyggede presets for softwarekilder) valideres, før jobbet starter, og blokerer ved fejl (fail closed).
- Provenance-data. API'et returnerer SBOM'er, netværkstraces og provenance. CRACI signerer ikke provenance; en Syft-attestation signerer SBOM'en.
- Overvågning. Overvågede SBOM'er genvurderes løbende, og fund samles på tværs af builds og repositories.
Grype gør stadig ting, CRACI ikke gør. VEX-filtrering og scanning af images, du ikke selv har bygget, er Grypes område. CRACI's policy gates kan få buildet til at fejle; dets grænsealarmer er på roadmappen.
Et overblik over, hvad der er udrullet hvor
CRACI's inventaroversigt viser præcis, hvilke softwareversioner der er udrullet til hvilke produkter, globalt. Når en ny sårbarhed dukker op, kan du se, hvilke produkter der kører den berørte version, i stedet for at stykke det sammen ud fra release notes og regneark.
Skift fra Syft og Grype
På CRACI er der ingen SBOM at generere og intet scanningstrin at vedligeholde. Runneren registrerer SBOM'en, mens buildet kører, og CRACI bliver ved med at tjekke den for nye sårbarheder, efter at buildet er færdigt. Syft og Grype forbliver værktøjerne til images og tredjepartssoftware, du ikke selv har bygget, og til pipelines uden for GitHub Actions.
Til Cyber Resilience Act
CRA beder producenter om at dokumentere komponenterne i hvert produkt, inklusive en SBOM, og om at håndtere sårbarheder i det. Syft og Grype kan producere og tjekke den SBOM, og dokumentationssporet fra hver release tilbage til dens SBOM er op til dig at bygge. CRACI registrerer SBOM'en pr. build og eksporterer den som CycloneDX eller SPDX. Det automatiserer en væsentlig del af den synlighed i og dokumentation for softwareforsyningskæden, som virksomheder har brug for i deres bredere CRA-compliance-proces. Se hvad CRA er og SBOM-generering under buildet.
Sammenlign en registreret SBOM med dit Syft-output
Book en demo, så kører vi et af dine GitHub Actions-workflows på CRACI og sammenligner dets SBOM med det, Syft finder for samme commit.
Book en demo