Cel mai simplu mod de a găsi vulnerabilități în imaginile Docker folosind Snyk

Snyk este un instrument specializat în analiza punctelor slabe din codul fișierelor de configurare a infrastructurii, inclusiv cele prezente în containere și pachete de aplicații. Acesta are ca scop identificarea și remedierea vulnerabilităților înainte ca ele să poată fi exploatate.

Snyk oferă inițial o platformă bazată pe cloud, dar propune o gamă variată de soluții dedicate securității aplicațiilor.

Snyk Open Source se integrează printr-o interfață CLI într-un flux de lucru Git. Odată activat, programul descoperă vulnerabilitățile, le sortează în funcție de nivelul de risc și aplică automat corecții pentru erorile de securitate cunoscute. Această funcționalitate poate fi integrată în fluxul de solicitare de pull request, asigurând că codul trimis către depozite este verificat automat.

Snyk Infrastructure as Code, pe de altă parte, cercetează și corectează vulnerabilitățile din fișierele de configurare JSON și YAML utilizate în Kubernetes. Un motor de reguli permite personalizarea sensibilității analizelor în depozitele Git, conform specificațiilor administratorilor.

Snyk Container oferă posibilitatea de a evalua imaginile Docker și registrele asociate, atât în momentul creării, cât și ulterior. Acest program poate fi integrat în linia de comandă (CLI), în sistemele de control al versiunilor (SCM), în instrumentele de integrare continuă (CI), registre de containere și platforme Kubernetes.

În continuare, vom explora utilizarea Snyk Container, inclus în Docker, pentru a identifica vulnerabilități în imaginile containerelor.

Exemplu de fișier Docker

Pentru a începe analiza cu Snyk, este necesară o imagine Docker. În acest exemplu, vom folosi următoarea definiție:

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

Primul pas constă în crearea imaginii la nivel local, folosind următoarea comandă:

docker build -t 0xyz0/python-app .

Acum, avem imaginea pregătită pentru analiză.

Analizarea imaginii cu clientul Docker

Integrarea Snyk cu Docker simplifică foarte mult acest proces. Pentru a demara analiza, este suficientă rularea următoarei comenzi:

docker scan 0***0/python-app

Aceasta va iniția analiza și va genera un raport, a cărui detaliere va depinde de vulnerabilitățile descoperite, oferind și un rezumat final:

Scanarea Docker afișează toate vulnerabilitățile identificate în imagine.

După cum puteți observa, raportul nu se limitează la a indica numărul de vulnerabilități. Acesta oferă detalii complete despre vulnerabilități, nivelul lor de criticitate și sugerează soluții, cum ar fi imaginea de bază recomandată.

Mai multe detalii despre vulnerabilități pot fi consultate în Baza de date de vulnerabilități Snyk.

În cazul nostru, sunt oferite mai multe opțiuni, așa că vom modifica Dockerfile cu prima sugestie:

FROM python:3.7.11-slim
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
EXPOSE 8000
CMD ["python", "app.py"]

După reconstruirea și scanarea imaginii:

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

Rezultatul va indica un număr redus de vulnerabilități, evidențiind faptul că utilizăm acum o imagine de bază mai sigură:

Scanarea Docker ne asigură că folosim cea mai sigură imagine de bază.

Un raport mai detaliat poate fi obținut prin adăugarea fișierului Dockerfile la comandă:

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

De asemenea, se poate exclude imaginea de bază din analiză, concentrându-ne pe potențialele erori din configurarea noastră:

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

Serviciul Snyk se integrează și cu depozitele Docker Hub:

Pentru aceasta este necesar un abonament plătit, însă scanările locale sunt disponibile cu un plan gratuit, doar cu conectarea la Docker Hub (având limitări de scanare), fiind utile în timpul dezvoltării sau pentru verificarea siguranței unei imagini terțe.

Utilizarea Snyk cu Github Actions

Primul pas este crearea unui depozit și, în interiorul său, un folder:

.github/workflows/

Pentru a folosi Snyk Container în Github, este necesară crearea unei noi imagini sau folosirea unei imagini din Docker Hub. Pentru a activa Snyk, este necesar un nou secret numit SNYK_TOKEN, obținut prin crearea unui cont Snyk. Tokenul API poate fi generat din secțiunea Setări generale.

După obținerea tokenului, acesta poate fi utilizat pentru a crea secretul în Github și în cadrul unei acțiuni. Acum trebuie să specificăm numele depozitului creat în Docker Hub și mesajul corespunzător. Accesând ieșirile pașilor, putem folosi datele ca variabile în mesaj.

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

Cum se activează acest flux de lucru? Simplu, prin push către branch-ul master. Github Action va detecta fișierul din .github/workflows/.

Considerații finale 👈

Odată cu creșterea utilizării containerelor, incidentele de securitate devin tot mai frecvente, adesea din cauza erorilor de configurare. Snyk oferă o soluție eficientă și accesibilă pentru a preveni aceste erori și a detecta vulnerabilitățile comune în imaginile Docker.