Snyk är ett verktyg designat för att upptäcka och analysera säkerhetsrisker i kod, särskilt i filer som styr infrastrukturkonfigurationer. Detta inkluderar konfigurationer för containers och applikationspaket.
Snyk erbjuder i grunden en molnbaserad plattform, men har också flera andra produkter.
Snyk OpenSource integreras via ett kommandoradsgränssnitt (CLI) i ett Git-arbetsflöde. När det aktiveras, letar programvaran efter sårbarheter, klassificerar dem efter risknivå och åtgärdar automatiskt kända säkerhetsbrister. Denna funktion kan inkluderas i ”pull request”-processen för att kontrollera kod som skickas till olika databaser.
Snyk Infrastructure as Code analyserar sårbarheter i JSON- och YAML-filer som används för Kubernetes-konfigurationer, och föreslår åtgärder. Genom en regelmotor kan känsligheten i upptäckterna anpassas inom Git-databaser baserat på administratörsinställningar.
Snyk Container gör det möjligt att testa Docker-avbildningar och relaterade register både när de skapas och senare. Programmet kan användas via CLI, integreras med SCM, CI-verktyg, containerregister och Kubernetes.
Vi ska nu undersöka hur Snyk Container kan användas, vilket är inbyggt i Docker, för att upptäcka sårbarheter.
Exempel på en Dockerfile
För att använda Snyk för sårbarhetsanalys behöver vi först en Docker-avbildning. I det här exemplet använder vi följande Docker-instruktioner:
FROM python:3.4-alpine ADD . /code WORKDIR /code RUN pip install -r requirements.txt EXPOSE 8000 CMD ["python", "app.py"]
Första steget är att skapa avbildningen lokalt genom att köra följande kommando:
docker build -t 0xyz0/python-app .
Nu har vi en avbildning redo för analys.
Skanna avbildningen från Docker-klienten
Integrationen mellan Snyk och Docker förenklar processen avsevärt. För att påbörja en skanning, utför följande kommando:
docker scan 0***0/python-app
Detta startar analysen, som resulterar i en detaljerad rapport om upptäckta sårbarheter samt en sammanfattning:
Docker scan visar alla identifierade sårbarheter i avbildningen.
Som du ser får du inte bara reda på antalet sårbarheter, utan också deras art och risknivå. Verktyget ger också rekommendationer om vilken basavbildning som bör användas.
Detaljer om varje sårbarhet kan också kontrolleras i Snyk Vulnerability Database.
I detta fall erbjuds flera alternativ. Jag ändrar min Dockerfile enligt det första förslaget:
FROM python:3.7.11-slim ADD . /code WORKDIR /code RUN pip install -r requirements.txt EXPOSE 8000 CMD ["python", "app.py"]
Efter att ha byggt om avbildningen och skannat den igen:
docker build -t 0***0/python-app . && docker scan 0***0/python-app
Visar rapporten nu färre sårbarheter och bekräftar att du använder en säkrare basavbildning:
En mer detaljerad rapport kan genereras genom att ange Dockerfilen som skapar avbildningen i kommandot:
docker scan -f Dockerfile 0***0/python-app
Det är även möjligt att utesluta basavbildningen från analysen för att fokusera på egna misstag:
docker scan -f Dockerfile --exclude-base 0***0/python-app
Denna tjänst kan även integreras med Docker Hub-förråd:
Detta kräver dock en betald prenumeration. Dock kan den kostnadsfria planen användas lokalt om du är inloggad på Docker Hub (med begränsningar för antal skanningar), vilket är bra för utveckling eller för att kontrollera säkerheten i tredjepartsavbildningar.
Använda Snyk med Github Actions
Första steget är att skapa ett förråd och en mapp inom det som heter:
.github/workflows/
För att använda Snyk Container i Github, antingen skapar du en ny avbildning eller återanvänder en avbildning från Docker Hub. Du behöver även skapa en hemlighet vid namn SNYK_TOKEN. Du kan generera denna token genom att skapa ett konto på Snyk och hitta den under ”API token” i inställningarna.
Med token skapar du en hemlighet i Github och använder den i en ”Action”. Ange också namnet på förrådet i Docker Hub. Slutligen ställer du in det meddelande som ska skickas. Du kan använda resultatet av stegen i meddelandet.
with: args: 'A new commit has been pushed. Please verify github action: | workflow ${{ fromJson(steps.repo.outputs.result).html_url }}/actions | Exec: ${{ steps.prep.outputs.created }} | Version: ${{ steps.prep.outputs.version }} '
Hur startar du hela flödet? Genom att göra en push till ”master”-grenen. Github Action detekterar filen i .github/workflows/.
Slutsats 👈
Med den ökande användningen av containers blir säkerhetsincidenter allt vanligare. Många incidenter uppstår på grund av felkonfigurationer vid utplacering av containers. Snyk är ett kraftfullt och användarvänligt verktyg som hjälper till att undvika dessa misstag och upptäcka vanliga sårbarheter i Docker-avbildningar.