Snyk & Docker: Finn sårbarheter enkelt!

Snyk fungerer som et analyseverktøy som er spesialisert på å identifisere sikkerhetshull i kode for infrastrukturkonfigurasjonsfiler, dette inkluderer filer som benyttes i containere og applikasjonspakker.

Snyk presenterer seg primært som en skybasert plattform, men tilbyr også et variert utvalg av produkter.

Snyk Open Source integreres gjennom et kommandolinjeverktøy (CLI) i en Git-arbeidsflyt. Når programvaren er aktivert, søker den etter sikkerhetshull, rangerer dem etter alvorlighetsgrad og utbedrer automatisk kjente sikkerhetsproblemer. Denne funksjonaliteten kan implementeres i pull request-prosessen for å gjelde for kode som sendes inn til kodebasen.

Snyk Infrastructure as Code, på den andre siden, undersøker sikkerhetsmangler og korrigerer dem i JSON- og YAML Kubernetes-konfigurasjonsfiler. En regelmotor lar deg justere følsomheten for deteksjoner i Git-repoer basert på parametere som er spesifisert av administratorer.

Snyk Container gir deg muligheten til å teste docker-bilder og relaterte registre både under opprettelsen og senere. Verktøyet kan integreres med CLI-er, SCM-er, CI-verktøy, containerregistre og Kubernetes.

Vi skal nå se på hvordan Snyk Container, som er integrert med Docker, kan brukes til å avdekke sårbarheter.

Eksempel på Docker-fil

For å benytte Snyk til å identifisere sikkerhetshull, er det første du trenger et docker-bilde. I dette tilfellet vil vi ta i bruk følgende docker-bilde:

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

Første skritt er å generere bildet lokalt ved hjelp av følgende kommando:

docker build -t 0xyz0/python-app.

Nå har vi et bilde klart til analyse.

Skanning av bildet via Docker-klienten

Integrasjonen av Snyk-tjenesten med Docker gjør denne prosessen usedvanlig enkel. For å starte skanningen, er det bare å kjøre følgende kommando:

docker scan 0***0/python-app

Dette vil initiere analysen og returnere et utdata som kan variere i omfang, avhengig av de sårbarhetene som oppdages, sammen med en oppsummering:

Docker-skanningen presenterer alle sårbarhetene i bildet.

Som du ser, gir den ikke bare informasjon om antallet sårbarheter som er funnet. Ved å bla gjennom utdataene kan du se detaljer om hva disse sårbarhetene innebærer og deres alvorlighetsgrad, samt anbefalinger angående basisbildet som er brukt.

Du kan også undersøke detaljene om sikkerhetshullene i Snyks database over sårbarheter.

I dette eksemplet får jeg flere forslag, og jeg velger å endre Dockerfilen min i henhold til det første forslaget:

FROM python:3.7.11-slim

ADD . /code

WORKDIR /code

RUN pip install -r requirements.txt

EXPOSE 8000

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

Etter å ha bygget om bildet og kjørt en ny skanning:

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

Ser du at utdataene nå viser færre sårbarheter, og i dette tilfellet informeres du om at du benytter et tryggere basisbilde:

Docker-skanningen bekrefter at du bruker det mest sikre basisbildet.

Du kan også motta en mer detaljert rapport ved å inkludere docker-filen som genererer bildet i kommandoen:

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

I tillegg kan du ekskludere basisbildet fra analysen hvis du ønsker å fokusere på eventuelle feil du selv har introdusert:

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

Denne tjenesten kan også integreres med Docker Hub-depotene:

For å benytte denne funksjonen kreves det imidlertid et betalt abonnement. Likevel kan du bruke den lokalt med den gratisplanen som følger med Docker Hub-kontoen din (med visse skansegrenser), for å utvikle og sjekke sikkerheten til tredjepartsbilder du planlegger å bruke.

Bruk av Snyk med Github Actions

Start med å opprette et depot og en mappe inne i dette.

.github / worflows /

For å bruke Snyk Container i Github, må du enten skape et nytt bilde eller bruke bildet du allerede har lagt inn i Docker Hub. For at Snyk skal fungere, må du opprette en ny hemmelighet som heter SNYK_TOKEN. Du finner tokenet ved å opprette en konto hos Snyk. Deretter, under Generelle innstillinger, finner du API-tokenet som du raskt kan generere.

Med dette tokenet kan du opprette hemmeligheten på Github og benytte den i handlingen. Angi deretter navnet på depotet du har opprettet i Docker Hub, og definer meldingen som skal sendes. Du kan få tilgang til utdataene fra stegene som skal brukes som variabler i meldingen.

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}} '

Hvordan kjøre hele arbeidsflyten? Det er enkelt, bare ved å trykke på Master. Github Action vil automatisk oppdage filen i .github / workflows /.

Konklusjon 👈

Med den økende populariteten til containere, ser vi en økning i sikkerhetsbrudd, hovedsakelig på grunn av feilkonfigurasjoner i utplasseringen av containere. Snyk tilbyr et effektivt og lett anvendelig verktøy som kan hjelpe oss med å unngå feilkonfigurasjoner og identifisere vanlige sårbarheter i docker-bilder.