Securing the Kubernetes software supply chain

By | January 7, 2022

Modern mjukvaruutveckling gör mjukvaruförsörjningskedjan viktigare än någonsin. Vår kod är beroende av bibliotek med öppen källkod som är beroende av andra bibliotek och så vidare – en rad kod som vi inte utvecklade, inte kompilerade och har liten eller ingen aning om var den kom ifrån.

Vissa av dessa koder är nästan allestädes närvarande. Log4Shell-utnyttjandet som orsakade förödelse i branschen kommer från ett utnyttjande som härrör från en gammal bugg i log4j, en vanlig Java-loggningskomponent.

Vi bygger en industri, inte på jättarnas axlar, utan på en handfull applikations- och komponentadministratörer, som håller vår globala infrastruktur igång på sin fritid och ur sina hjärtans godhet.

Distribuerad utveckling ökar risken
Detta jobb är inte att minska underhållspersonalen; De är en viktig del av den moderna mjukvaruförsörjningskedjan, och levererar allt från små moduler till fulla containerbaserade plattformar. De är undervärderade och underbetalda för hur viktig deras kod är.

Tyvärr finns det många tillfällen där angripare har erbjudit sig att sköta underhållet av koden, bara för att lägga till skadlig kod, i hopp om att installera koden automatiskt eftersom den hade en historia av att vara betrodd.

Vi kan förvänta oss fler attacker som denna eftersom mer av vår kod blir en gruppinsats. Hur skyddar vi oss själva och våra applikationer? Först måste vi förstå att mjukvaruförsörjningskedjor existerar, att vi inte skapar kod på egen hand och att vi inte har gjort det på länge, om vi någonsin gjort det.

Öppen källkod och tredjepartsbibliotek är en viktig del av hur vi bygger mjukvara, och de kommer bara att bli viktigare.

Vilka åtgärder kan vi vidta för att säkra mjukvaruförsörjningskedjan? Mycket arbete har lagts ner på att tillhandahålla verktyg för att hantera programvaruinventering av innehåll: skanna koden för bibliotek, använda statisk och dynamisk analys, lägga till digitala signaturer och hash till koden och lagra den i alla hanterade arkiv. Ta in. Men en del av bilden saknas: hur validerar vi det arbetet och koden vi använder? Ett av de gamla säkerhetsråden är trots allt “lita på men verifiera”.

Säkra mjukvaruförsörjningskedjan

Vi måste lita på koden vi använder, men vi måste också verifiera att den är pålitlig. Vi måste också göra detta under tidspress, med inbyggd molnkod som skickar nya byggen när koden ändras till förvaret. Den automatiserade karaktären hos modern utveckling är nyckeln här, med plattformar som GitHub i hjärtat av vår mjukvarulivscykel, som tillhandahåller kontinuerlig integration och kontinuerlig leverans (CI/CD).

Saker och ting blir mer komplicerade när vi arbetar med teknologier som Kubernetes, som är designade för att bygga på mix-and-match-filosofin för mikrotjänsters arkitekturer och behållare. Även om vår kod kan köras i separata behållare, körs den i kapslade abstrakta användarländer, där varje dockningsfil samlar ett urval av beroenden, av vilka många inte är helt dokumenterade. Hur kan vi lita på stycklistan i de containrar vi använder?

Introduktion till ratificering: ett arbetsflöde för artefaktverifiering
Microsofts molnbaserade team med öppen källkod arbetar på en ny specifikation för att hjälpa till med detta. Ratify är ett autentiseringsramverk som stöder olika artefakter som konverteras till Kubernetes-applikationer. Den använder en uppsättning pålitlig säkerhetsmetadata och en signerad materialförteckning för att säkerställa allt du förväntar dig att distribuera.

Bilderna och andra komponenter använder Notary v2 Signing and Verification Tool och artefaktspecifikationen ORAS (Storage as OCI Registry). ORAS är en del av Open Container Initiatives registerdefinition och utökar den till att lagra vad som helst, inte bara behållare.

Detta fungerar bra som ett sätt att sammanställa en programvarulista. Intressant nog finns det likheter mellan Bindal Distributed Application Installer och ORAS Manifest, vilket gör det lättare att flytta från SBOM till Verified Distributed Application Installer.

Tillsammans ger de två ett diagram över leveranskedjan som kan analyseras och användas som en del av ett autentiseringsschema inom ett Kubernetes-kluster.

Ratify kombinerar dessa koncept och lägger till en arbetsflödesmotor för att upprätthålla policyer i din mjukvarufaktura och verifiera de många olika leveranskedjorna i din kod och dess beroenden. Kärnan är en koordinator som hanterar policyarbetsflödet i din containerbild. Det är utbyggbart så att det kan fungera i offentliga och privata register, med hjälp av en välkänd plugin-modell som liknar den som används i Kubernetes.

Leave a Reply

Your email address will not be published. Required fields are marked *