Snyk je alat specijalizovan za analizu ranjivosti u kodu infrastrukturnih konfiguracionih fajlova, uključujući one koji se nalaze u kontejnerima i paketima aplikacija.
Snyk primarno nudi platformu zasnovanu na oblaku, ali ima i druge proizvode.
Snyk Open Source se integriše putem CLI alata u Git tok. Kada se pokrene, ovaj softver pronalazi ranjivosti, klasifikuje ih po nivou ozbiljnosti i automatski ispravlja poznate bezbednosne propuste. Ova funkcionalnost se može uključiti u proces pull zahteva kako bi se primenila na kod koji se šalje u repozitorijume.
Snyk Infrastructure as Code, sa druge strane, analizira i popravlja ranjivosti u JSON i YAML Kubernetes konfiguracionim fajlovima. Ovde, sistem pravila omogućava konfigurisanje osetljivosti detekcija u Git repozitorijumima prema parametrima koje su postavili administratori.
Snyk Container omogućava testiranje Docker slika i povezanih registara u trenutku kreiranja i nakon toga. Program se može integrisati u CLI, SCM, CI alate, registre kontejnera i Kubernetes.
Danas ćemo videti kako koristiti Snyk Container, koji je integrisan u Docker, za otkrivanje ranjivosti.
Primer Docker fajla
Prva stvar koja vam je potrebna da biste koristili Snyk za otkrivanje ranjivosti je Docker slika. U ovom primeru koristićemo sledeću Docker sliku:
FROM python:3.4-alpine ADD . /code WORKDIR /code RUN pip install -r requirements.txt EXPOSE 8000 CMD [“python”, “app.py”]
Prvo, potrebno je da lokalno generišemo sliku koristeći sledeću komandu:
docker build -t 0xyz0/python-app.
Sada imamo sliku spremnu za analizu.
Skeniranje slike pomoću Docker klijenta
Integracija Snyk servisa sa Dockerom čini ovaj proces izuzetno jednostavnim. Da biste započeli skeniranje, potrebno je samo izvršiti sledeću komandu:
docker scan 0***0/python-app
Ovo će pokrenuti analizu i dati rezultate, čija će detaljnost zavisiti od pronađenih ranjivosti, kao i konačni rezime:
Docker skeniranje prikazuje sve ranjivosti slike
Kao što vidite, nije prikazan samo broj pronađenih ranjivosti. Ako skrolujete gore, možete videti detalje o ranjivostima i njihovoj kritičnosti, kao i preporuke za osnovnu sliku koju treba koristiti.
Dodatno, možete proveriti detalje o ranjivostima u Snyk bazi podataka ranjivosti.
U mom slučaju, nudi mi nekoliko alternativa, tako da ću izmeniti svoj Dockerfile koristeći prvu opciju:
FROM python:3.7.11-slim ADD . /code WORKDIR /code RUN pip install -r requirements.txt EXPOSE 8000 CMD ["python", "app.py"]
Ako ponovo kreiram sliku i skeniram je:
docker build -t 0***0/python-app . && docker scan 0***0/python-app
Videćete da izlaz sada pokazuje manje ranjivosti, i u ovom slučaju, potvrđuje da trenutno koristite sigurniju osnovnu sliku:
Docker skeniranje osigurava da koristite najsigurniju osnovnu sliku
Možete dobiti detaljniji izveštaj ako u komandu dodate Dockerfile koji generiše sliku:
docker scan -f Dockerfile 0***0/python-app
Možete i isključiti osnovnu sliku iz analize, ako želite da se fokusirate na eventualne greške u sopstvenom kodu:
docker scan -f Dockerfile --exclude-base 0***0/python-app
Ova usluga se takođe može integrisati sa Docker Hub repozitorijumima:
Za ovo je potrebna jedna od plaćenih pretplata. Međutim, možete ga pokrenuti lokalno, uz besplatan plan koji dobijate samo zato što ste prijavljeni na Docker Hub (postoje ograničenja skeniranja), dok razvijate ili želite da proverite sigurnost slike treće strane koju planirate da koristite.
Korišćenje Snyk-a sa GitHub akcijama
Prvo što je potrebno da uradite jeste da kreirate repozitorijum i unutar njega napravite direktorijum:
.github / worflows /
Dalje, da biste koristili Snyk Container u GitHub-u, potrebno je da kreirate novu sliku ili preuzmete sliku koju smo kreirali u Docker Hub-u. Za korišćenje Snyk-a, treba kreirati tajnu pod imenom SNYK_TOKEN, a token se dobija kreiranjem naloga na Snyk-u. U opštim podešavanjima, pod opcijom API token, možete ga brzo generisati.
Sa tokenom, možete kreirati tajnu u GitHub-u i koristiti je u akcijama. Sada treba da prosledite ime repozitorijuma koji je kreiran u Docker Hub-u. Zatim morate proslediti poruku koju treba poslati. Možete pristupiti izlazima koraka koje ćete koristiti kao promenljivu u poruci.
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}} '
Kako pokrenuti ceo tok posla? Jednostavno, guranjem na Master. GitHub Action će detektovati fajl unutar .github/workflows/.
Zaključak 👈
Sa sve većom popularnošću kontejnera, bezbednosni incidenti postaju sve češći, a većina njih je posledica grešaka u konfiguraciji kontejnera. Snyk nudi efikasan i jednostavan alat koji nam može pomoći da izbegnemo greške u konfiguraciji i otkrijemo najčešće propuste u Docker slikama.