Enklaste sättet att hitta sårbarheter i Docker-bilder med Snyk

Snyk är en redaktör som specialiserat sig på att analysera sårbarheter i koden för infrastrukturkonfigurationsfiler, inklusive de som finns i behållare och applikationspaket.

Snyk erbjuder först en molnplattform, men den erbjuder olika produkter.

Snyk OpenSource integreras genom redaktörens CLI i ett Git-flöde. När den väl har lanserats upptäcker programvaran sårbarheter, klassificerar dem efter grad av känslighet och korrigerar automatiskt kända säkerhetsfel. Denna funktionalitet kan inkorporeras i pull request-cykeln för att tillämpas på kod som skickas till repositories.

Snyk Infrastructure as Code, å andra sidan, analyserar sårbarheterna och fixar dem i JSON- och YAML Kubernetes-konfigurationsfilerna. Här låter en regelmotor dig konfigurera känsligheten för detektioner inom Git-repositories enligt de parametrar som bestämts av administratörerna.

Snyk Container låter dig testa docker-bilder och tillhörande register när de skapas och efteråt. Programmet kan integreras i CLI, SCM, CI-verktyg, containerregister och Kubernetes.

Idag ska vi se hur vi kan använda Snyk Container, som kommer inbyggt med Docker för att upptäcka sårbarheter.

Exempel på docker-fil

Det första du behöver för att använda Snyk för att upptäcka sårbarheter är en dockningsbild. I det här exemplet kommer vi att använda följande docker-bild:

FROM python:3.4-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
EXPOSE 8000 CMD
[“python”, “app.py”]

Det första vi måste göra är att skapa bilden lokalt genom följande kommando:

docker build -t 0xyz0/python-app.

Nu har vi en bild att analysera.

Skanna bilden från Docker-klienten

Integrationen av Snyk-tjänsten med Docker gör denna process otroligt enkel. För att starta skanningen behöver du bara utföra följande:

docker scan 0***0/python-app

Detta kommer att börja med analysen där det kommer att returnera en mer eller mindre omfattande utdata, beroende på vilka sårbarheter den hittar, och med en slutlig sammanfattning:

Docker scan visar alla sårbarheter i bilden

Som du kan se berättar den inte bara hur många sårbarheter den har hittat. Även om du scrollar uppåt kan du se vad de är och deras kritikalitet, men den ger också rekommendationer angående basbilden du bör använda.

Du kan också kontrollera detaljerna om sårbarheten från Snyk Vulnerability Database.

I mitt fall erbjuder det mig flera alternativ, så jag kommer att ändra min Dockerfile med det första alternativet:

FROM python:3.7.11-slim

ADD . /code

WORKDIR /code

RUN pip install -r requirements.txt

EXPOSE 8000

CMD ["python", "app.py"]

Om jag bygger om bilden och skannar den:

docker build -t 0***0/python-app . && docker scan 0***0/python-app

Du kommer att se att utdata nu visar färre sårbarheter, och i det här fallet berättar den att du för närvarande använder den säkrare basbilden:

Docker scan säkerställer att du använder den säkraste basbilden

Du kan också få en mer detaljerad rapport om du lägger till docker-filen som genererar bilden till kommandot:

docker scan -f Dockerfile 0***0/python-app

Och uteslut till och med basbilden från analysen, ifall du vill fokusera på vad du har gjort fel:

docker scan -f Dockerfile --exclude-base 0***0/python-app

Den här tjänsten kan också integreras med Docker Hub-förråden:

Men för detta måste du ha en av de betalda prenumerationerna. Du kan dock starta den lokalt, med den kostnadsfria planen som du bara har för att vara inloggad på Docker Hub (den har tydliga skanningsgränser), medan du utvecklar eller vill kontrollera hur säker är en tredjepartsbild som du vill använda sig av.

Använda Snyk med Github Actions

Det första du ska göra är att skapa ett arkiv och skapa en mapp inuti.

.github / worflows /

Att sedan använda Snyk Container i Github är att skapa en ny bild eller ta den bilden vi skapade i Docker Hub. För att använda Snyk måste du skapa en ny hemlighet som heter SNYK_TOKEN, och för att få token måste du skapa ett konto hos Snyk. Från Allmänna inställningar, där det står API-token, kan du snabbt generera det.

Med token kan du skapa hemligheten på Github och använda den i Action. Nu måste du ge det namnet på förvaret som skapades i Docker Hub. Därefter måste du skicka meddelandet som den måste skicka. Du kan komma åt utdata från stegen att använda som variabel i meddelandet.

with:
args: 'A new commit has been pushed. Please verify github action:
| worflow $ {{fromJson (steps.repo.outputs.result) .html_url}} / actions
| Exec: $ {{steps.prep.outputs.created}}
| Version: $ {{steps.prep.outputs.version}} '

Hur kör man hela arbetsflödet? Enkelt bara genom att trycka på Master. Github Action kommer att upptäcka filen inuti .github / workflows /.

Sista ord 👈

Med behållarnas ökande popularitet blir incidenterna med säkerhetsintrång allt vanligare, varav de flesta beror på felkonfigurationsfelen i utplaceringen av behållarna. Snyk tillhandahåller ett effektivt och enkelt verktyg som kan hjälpa oss att undvika felkonfigurationsfel och upptäcka de vanligaste sårbarheterna i docker-bilder.