CycloneDX SBOM-afhankelijkheidsgrafiek – waar is het goed voor?

Alle berichten

We hebben er allemaal veel over gehoord SBOM's onlangs. We hoorden over hun nut, hun samenstelling en hun eisen op het gebied van veiligheid en regelgeving. Deze keer wil ik de tijd nemen om te praten over een iets minder bekend segment van de CyclonDX SBOM: de afhankelijkheidsgrafiek. 

Anders dan de naam doet vermoeden is de Dependency Graph geen visueel aspect van de SBOM. Het doel ervan is om de afhankelijkheid van componenten van andere componenten te helpen beschrijven. Dit is afhankelijk van een componenten' bom-ref – een unieke identificatiecode voor elk SBOM-onderdeel. Het idee is om te laten zien welke elementen van elkaar afhankelijk zijn of met elkaar verbonden zijn. Klinkt eenvoudig genoeg, toch?

Scribe gebruikt de afhankelijkheidsgrafiek veel bij het beslissen wat elementen van de SBOM belangrijk zijn en waar we op moeten letten. In dit artikel zullen we de manier onderzoeken Schriftgeleerde maakt gebruik van de SBOM Dependency Graph en de praktische voordelen die we daaruit kunnen halen. We zullen enkele JSON-voorbeelden van een SBOM Dependency Graph bekijken en afsluiten met een blik op wat we er in de toekomst nog meer mee kunnen doen.

Wat is de afhankelijkheidsgrafiek?

De Dependency Graph werd in 2019 aan het CyclonDX-formaat toegevoegd. Het verklaarde doel was om componenten aan elkaar te koppelen met behulp van een unieke identificatie die later bekend werd als een bom-ref. In de CycloneDX-gebruiksvoorbeelden, kunnen we zien hoe de afhankelijkheden de referentie-ID van de componenten gebruiken om te laten zien wat afhankelijk is van wat:

Afbeelding van codeafhankelijkhedenAfbeelding van codeafhankelijkhedenAfbeelding van codeafhankelijkheden

Zelfs zonder op voorbeelden in te gaan, weet ik zeker dat je kunt zien dat de mogelijkheid om het ene element met het andere te verbinden nuttig kan zijn. In de eerste plaats kunt u hiermee, omdat het de meest voorkomende toepassing is, onmiddellijk alle afhankelijkheden van een bibliotheek op één plek bekijken. 

Een afhankelijkheidsgrafiek kan zowel directe als transitieve relaties weergeven en is doorgaans één knooppunt diep.

Hoewel een volledige afhankelijkheidsboom kan worden weergegeven, wordt dit niet aanbevolen, omdat dit zou kunnen resulteren in eindeloze lussen als gevolg van circulaire afhankelijkheden of andere complexe relaties. Het is raadzaam om uw grafieken eenvoudig te houden door één enkel knooppunt weer te geven.

 Hoe gebruikt Scribe de afhankelijkheidsgrafiek?

Scribe maakt uitgebreid gebruik van metagegevens die samen met de SBOM zijn verzameld om het bewijsmateriaal context te geven. De context van het bewijsmateriaal omvat waar en wanneer het is verzameld, wat het onderwerp is, enzovoort. Omdat Scribe ernaar streeft betrouwbare, herbruikbare informatie aan te bieden, maken we gebruik van de afhankelijkheidsgrafiek om verbindingen te creëren die voor verschillende klanten en projecten kunnen worden gebruikt.

Hier zijn de links naar de afhankelijkheidsgrafieken die Scribe ondersteunt:

  • Pakketbestand: Door deze verbinding kunnen we zien welke bestanden bij elk pakket horen. Het is duidelijk dat als we een bestand in een pakket vinden waar het niet thuishoort, dit een duidelijke indicatie is van een probleem.
  • Laagindicatie en Pakketlaag: Weten welke pakketten zich in welke afbeeldingslaag bevinden, is handig, omdat we op die manier de kwetsbaarheden in lagen kunnen rangschikken. Problemen die u heeft geërfd van uw basisafbeelding of uw ouderafbeelding zouden niet dezelfde urgentie en uw directe vermogen hebben om ze te beïnvloeden als de problemen die u tegenkomt op lagen die u zelf hebt gemaakt.
  • Laagbestand: Vergelijkbaar met de pakket-bestandsverbinding stelt deze verbinding ons in staat om te zien welke bestanden aan elke laag zijn gekoppeld. Samen met de andere verbindingen kunnen we verifiëren dat bestanden aan het juiste pakket en de juiste laag zijn gekoppeld en dat er geen bestanden zijn op plaatsen waar ze niet zouden moeten staan.
  • Commit en Commit-bestand: Door te identificeren welke bestanden uit welke commit kwamen, kunnen we ervoor zorgen dat er geen onnodige wijzigingen in de commit-bestanden waren voordat ze werden gebruikt om de uiteindelijke afbeelding te bouwen.

Door al deze informatie samen te gebruiken, kunnen we vanuit de SBOM een behoorlijk uitgebreid beeld schetsen van welke bestanden waar te vinden zijn. Als gevolg hiervan hebben we een betere kans om uitschieters of afwijkingen op te merken die kunnen duiden op een probleem in uw imago – een integriteitsprobleem of een potentiële aanval.

Afhankelijkheidsgrafiek en beleidshandhaving

Scribe maakt gebruik van deze uitgebreide afhankelijkheidsgrafiek om ingewikkeld beleid effectief af te dwingen. Bijvoorbeeld de Commit-bestand afhankelijkheid wordt benut om het beleid voor code-eigenaren te handhaven. Zo kunnen we nagaan wie welk dossier wanneer heeft gepleegd. De Pakketbestand afhankelijkheid wordt gebruikt om het pakketintegriteitsbeleid te garanderen. Hiermee kunnen we controleren welke bestanden aan elk pakket moeten worden gekoppeld en verifiëren of dit inderdaad het geval is. Bovendien is de Pakketlaag afhankelijkheid wordt gebruikt om pakketbeleid af te stemmen op de specifieke vereisten van elke laag. Omdat elk software-image zijn lagen anders kan opbouwen, is het van onschatbare waarde om definitief te kunnen weten welke pakketten aan welke laag van het image zijn gekoppeld.

Uw afhankelijkheidsgrafiekinformatie aanpassen

We weten dat niet iedereen al deze informatie graag wil delen of dat ze deze niet willen zien of op welke manier dan ook willen gebruiken.

Als een manier om dit aan te pakken, kunt u met Scribe specifiekere versies van uw SBOM maken. Hier zijn de aanpassingsopties die u kunt gebruiken met onze Valint tool tijdens het maken van SBOM's die we momenteel ondersteunen. In de toekomst zullen er extra opties beschikbaar zijn:

  • Als u alleen specifieke componentgroepen wilt opnemen, gebruikt u –componenten om tussen de groepstypen te kiezen. 
  • Gebruik om specifieke pakkettypen op te nemen of uit te sluiten -Pakkettype or –pakket-exclusief-type om een ​​specifiek pakkettype te selecteren.
  • Om de gevonden geïnstalleerde pakketten op te nemen (pakketgroep installeren) of de pakketten waarnaar wordt verwezen door bronnen (pakketgroep index), gebruik –pakketgroep om tussen opties te kiezen.
  • Gebruik om componenten uit te sluiten –filter-regex, –filterbereik, en –filter-paars om elk onderdeel uit te sluiten dat u wilt uitsluiten.
  • Gebruik om bestandsinhoud toe te voegen –attach-regex om de inhoud van externe bestanden op te nemen.
  • Gebruik om aangepaste omgevingen en labels op te nemen –omv en -etiket om uw aangepaste velden toe te voegen. Hierdoor kunt u aangepaste metagegevens toevoegen aan de SBOM die u maakt.

Kijkend naar de toekomst

Scribe beschouwt de context en de verbindingen die we maken tussen de verschillende componenten van uw SBOM van het grootste belang. Met het vermogen van onze Valint om ondertekenen, verifiëren en beleid beheren wij achten het volkomen mogelijk om een ​​toekomst te zien waarin meer kan worden gedaan dan alleen het beheren van het beveiligingsbeleid. We kunnen ons een toekomst voorstellen waarin de afhankelijkheidsgrafiekinformatie kan worden gebruikt bij kwaliteitscontrole, specifieke nalevingsbehoeften en zelfs niet-gerelateerde gebieden zoals fintech en landbouw.

Het platform van Scribe heeft een gratis laag waar je het nu kunt proberen, met alle mogelijkheden binnen handbereik om mee te spelen. Ik moedig je aan probeer het eens, bekijk het nut van dergelijke informatie die in de loop van de tijd is verzameld en kijk waarvoor u de informatie kunt gebruiken. Ik hoop dat je met ons meedoet, want we verwelkomen een veiligere toekomst voor ons allemaal. 

Deze inhoud wordt u aangeboden door Scribe Security, een toonaangevende aanbieder van end-to-end software supply chain-beveiligingsoplossingen die state-of-the-art beveiliging levert voor codeartefacten en codeontwikkelings- en leveringsprocessen in de software supply chain. Meer informatie.