Vertailu
CRACI vs. Syft ja Grype
Syft ja Grype ovat Anchoren ilmaisia työkaluja SBOM:ien generointiin ja niissä olevien haavoittuvuuksien etsimiseen. Ne ovat vain niin kattavia kuin se, mitä Syft löytää levyltä. CRACI tallentaa komponenttiluettelon buildin ajon aikana.
Päivitetty
Lyhyt vastaus
Syft on suosittu avoimen lähdekoodin SBOM-generaattori, ja Grype on sen rinnalle tehty haavoittuvuusskanneri. Yhdessä ne kattavat generoinnin ja täsmäytyksen ilmaiseksi, missä tahansa putkessa. CRACI on GitHub Actions -runneri, joka tallentaa, mitä kukin buildi haki, kertoo, onko tallenne kattava, hallitsee, mihin buildi voi muodostaa yhteyden, ja valvoo jatkuvasti sitä, mitä toimitettiin. Ero yhdellä rivillä: Syft rakentaa SBOM:n jälkikäteen tiedostoista, ja se, kuinka paljon se löytää, riippuu sen konfiguraatiosta ja siitä, mitä levyllä on sen ajohetkellä. CRACI havainnoi sen ja seuraa tallentamansa sisällön haavoittuvuuksia, joten yksi tuote hoitaa molempien työn.
| Ominaisuus | CRACI | Syft ja Grype |
|---|---|---|
| Ajaa buildisi | Jobit ajetaan CRACI:n runnereilla | CLI-vaiheita missä tahansa putkessa |
| Riippuvuudet tallennetaan buildista | Havainnoidut haut, myös välimuistin paketit | Catalogerit lukevat tiedostot jälkikäteen |
| SBOM:n kattavuus | Ilmoitetaan jobeittain ja välimuisteittain | Riippuu siitä, mitkä catalogerit ajettiin ja mitä levyllä oli |
| Egress-käytäntö runnerilla | Oletuksena estävä tai salliva, estää virhetilanteessa | Niiden toiminta-alueen ulkopuolella |
| Allekirjoitettu näyttö | Ei allekirjoitettuja alkuperätietoja | Syft luo allekirjoitettuja in-toto-SBOM-attestaatioita |
| Haavoittuvuuksien täsmäytys | Koottuna buildien ja repositorioiden yli | Grype, EPSS, KEV ja riskipisteytys |
| Toimitettujen SBOM:ien valvonta | Valvotut SBOM:t arvioidaan jatkuvasti uudelleen | Skannaa SBOM:t uudelleen Grypellä omassa aikataulussasi |
| CI:n kaataminen vakavuusrajan ylittyessä | Käytäntöportit estävät buildit löydösten perusteella; raja-arvoja ei mainita | grype --fail-on |
| Muiden kuin itse buildattujen kuvien ja hakemistojen skannaus | Tallentaa ajamansa buildit | Kuvat, hakemistot, arkistot ja SBOM:t |
| Muut kuin GitHub Actions | Toistaiseksi GitHub Actions; GitLab CI ja Jenkins tiekartalla | Mikä tahansa CI tai paikallinen CLI |
| Hinta | $0.002 vCPU-minuutilta ($0.004 2 vCPU:lla), laskutetaan sekunneittain; ei kuukausimaksua eikä SBOM-kohtaista veloitusta | Ilmainen ja avointa lähdekoodia Apache-2.0-lisenssillä. Anchore Enterprise on erillinen maksullinen tuote. |
- Sisältyy
- Osittain
- Ei sisälly
- Tiekartalla
Missä Syft ja Grype ovat hyviä
Syft on "a CLI tool and Go library for generating a Software Bill of Materials (SBOM) from container images and filesystems." Se tunnistaa kymmeniä paketointijärjestelmiä Alpinesta, Debianista ja RPM:stä Go:hon, Pythoniin, Javaan, JavaScriptiin, Rubyyn, Rustiin, PHP:hen ja .NETiin. Se kirjoittaa CycloneDX-, SPDX- ja omaa Syft JSON -muotoaan, muuntaa muotojen välillä ja voi luoda allekirjoitettuja SBOM-attestaatioita in-toto-määrittelyn mukaisesti.
Grype skannaa konttikuvia, tiedostojärjestelmiä ja SBOM:ia tunnettujen haavoittuvuuksien varalta. Se priorisoi
löydökset EPSS:n, KEV:n ja riskipisteytyksen avulla, tukee OpenVEXiä tulosten suodattamiseen, ja sen
--fail-on-lippu kaataa putken, kun se löytää valitsemasi vakavuustason tai sitä vakavampia
haavoittuvuuksia. Anchore huomauttaa, että Grype "runs entirely locally and doesn't send any data to external
services," tietokantansa lataamista lukuun ottamatta.
Molemmat ovat Apache-2.0-lisensoituja, ja niitä sponsoroi Anchore, jonka kaupallinen alusta Anchore Enterprise "builds on open source Syft and Grype." Tämä sivu käsittelee avoimen lähdekoodin työkaluja.
Syft on vahva, kun sen edessä ovat oikeat tiedostot. Kun se osoitetaan lähdepuuhun, johon riippuvuudet on commitoitu,
kuten ollama/ollama, sen oletusskannaus ratkaisee ne versioineen, pakettien URL-osoitteineen ja niiden
välisine riippuvuussuhteineen.
Yksi lippu muuttaa vastauksen
Syft valitsee catalogerinsa skannaustyypin mukaan, ja sen dokumentaatio selittää miksi: "files that hint at the
intent to install software do not have enough information in them to determine the exact version." Catalogereilla
on tageja, kuten declared, installed, image ja directory, ja
liput, kuten --select-catalogers ja --override-default-catalogers, muuttavat joukkoa.
Versiossa v1.51.1 syft cataloger list näyttää, että node_modules-hakemistoa lukeva
JavaScript-cataloger on merkitty kuva- ja installed-skannauksille eikä kuulu hakemistoskannauksen oletusjoukkoon.
Asennetussa checkoutissa yksi lippu siis ratkaisee, luetaanko node_modules-hakemiston npm-paketteja
lainkaan. Sama työkalu, sama versio, sama puu.
Kääntöpuoli on yhtä tärkeä. Mikään yksittäinen konfiguraatio ei ole oikea kaikkialla:
- Puhtaassa express 5.2.1 -checkoutissa, jossa ei ole lukitustiedostoa, oletusskannauksella ei ole npm-riippuvuuksia ratkaistavana, ja se palauttaa sen, mitä muuta se tunnistaa, kuten GitHub Actionsin ja työnkulkutiedostot.
- Kytke installed-catalogerit päälle ja osoita ne lähdepuihin sellaisina kuin ne on commitoitu, kun mitään ei ole vielä asennettu, eikä niillä ole juuri mitään luettavaa.
- Repositorio, jossa ei ole lainkaan riippuvuusmanifestia, ei anna skannaukselle yhtään riippuvuustiedostoa luettavaksi, konfiguraatiosta riippumatta.
Mikään tästä ei ole bugi. Syft raportoi sen, mitä sen edessä olevat tiedostot tukevat, kuten on suunniteltu. Käytännön seuraus on, että SBOM riippuu kahdesta päätöksestä, jotka jonkun on tehtävä oikein jokaisessa putkessa: mitkä catalogerit ajetaan ja asennettiinko riippuvuudet ennen skannausta. Ja Grype voi täsmäyttää vain sen, mitä Syft listasi. SBOM:sta puuttuva komponentti ei koskaan päädy haavoittuvuushakuun, joten skannaus näyttää sen osalta puhdasta.
Missä CRACI on erilainen
CRACI:ssa ei ole catalogereita valittavana, koska se ei lue puuta jälkikäteen. Vaihdat runs-on-arvoksi
craci, ja pakettitietoinen välityspalvelin tallentaa, mitä jobi hakee npm-, PyPI-, RubyGems-, Composer-,
Cargo-, Go-, Nix-, OCI-, apt-, apk- ja Git-lähteistä sekä latausesiasetuksilla. CI-välimuistista palautetut paketit
kantavat näyttönsä mukanaan. Tulos CycloneDX- tai SPDX-muodossa sisältää transitiiviset riippuvuudet, joita buildi
todella käytti.
- Kattavuus on näkyvissä. Jokainen jobi ja välimuisti merkitään tilaan Complete, Complete with connections, Incomplete, Unavailable tai Not recorded.
- Buildi on hallinnassa. Egress-käytäntö (oletuksena estävä tai salliva, 24 valmista ohjelmistolähteiden esiasetusta) validoidaan ennen jobin alkua, ja virhetilanteessa liikenne estetään.
- Alkuperätiedot. API palauttaa SBOM:t, verkkojäljet ja alkuperätiedot. CRACI ei allekirjoita alkuperätietoja; Syftin attestaatio allekirjoittaa SBOM:n.
- Valvonta. Valvotut SBOM:t arvioidaan jatkuvasti uudelleen, ja löydökset kootaan buildien ja repositorioiden yli.
Grype tekee yhä asioita, joita CRACI ei tee. VEX-suodatus ja muiden kuin itse buildattujen kuvien skannaus ovat Grypen aluetta. CRACI:n käytäntöportit voivat kaataa buildin; sen raja-arvohälytykset ovat tiekartalla.
Inventaario siitä, mitä on käytössä missäkin
CRACI:n inventaarionäkymä näyttää tarkalleen, mitkä ohjelmistoversiot ovat käytössä missäkin tuotteessa, maailmanlaajuisesti. Kun uusi haavoittuvuus ilmenee, näet, mitkä tuotteet ajavat haavoittuvaa versiota, sen sijaan että kokoaisit tiedon julkaisutiedotteista ja taulukoista.
Siirtyminen Syftistä ja Grypestä
CRACI:lla ei ole SBOM:ia generoitavana eikä skannausvaihetta ylläpidettävänä. Runneri tallentaa SBOM:n buildin ajon aikana, ja CRACI tarkistaa sitä uusien haavoittuvuuksien varalta myös buildin valmistuttua. Syft ja Grype ovat edelleen työkaluja kuville ja kolmansien osapuolten ohjelmistoille, joita et ole itse buildannut, sekä GitHub Actionsin ulkopuolisille putkille.
Kyberkestävyyssäädöstä varten
EU:n kyberkestävyyssäädös (Cyber Resilience Act, CRA) edellyttää, että valmistajat dokumentoivat kunkin tuotteen komponentit, SBOM mukaan lukien, ja käsittelevät niiden haavoittuvuudet. Syft ja Grype voivat tuottaa ja tarkistaa tuon SBOM:n, ja näyttöketju kustakin julkaisusta sen SBOM:iin jää sinun rakennettavaksesi. CRACI tallentaa SBOM:n buildeittain ja vie sen CycloneDX- tai SPDX-muodossa. Se automatisoi merkittävän osan siitä ohjelmistotoimitusketjun näkyvyydestä ja näytöstä, jota yritykset tarvitsevat laajempaan CRA-vaatimustenmukaisuusprosessiinsa. Lue mikä CRA on ja SBOM-generointi buildin aikana.
Vertaa tallennettua SBOM:ia Syftin tulokseen
Varaa demo, niin ajamme yhden GitHub Actions -työnkulkusi CRACI:lla ja vertaamme sen SBOM:ia siihen, mitä Syft löytää samasta commitista.
Varaa demo