Snyk to wyspecjalizowane narzędzie do analizy podatności w kodzie, które koncentruje się na plikach konfiguracyjnych infrastruktury, w tym tych znajdujących się w kontenerach i pakietach aplikacyjnych.
Snyk oferuje swoją platformę przede wszystkim jako usługę chmurową, ale udostępnia również szereg innych rozwiązań.
Snyk Open Source integruje się z przepływem pracy Git za pośrednictwem interfejsu wiersza poleceń. Po uruchomieniu skanuje kod w poszukiwaniu luk, klasyfikuje je pod względem ważności i automatycznie poprawia znane problemy z bezpieczeństwem. Funkcję tę można włączyć do cyklu żądań pull request, aby objąć nią kod przesyłany do repozytoriów.
Snyk Infrastructure as Code z kolei analizuje i naprawia podatności w plikach konfiguracyjnych Kubernetes, zarówno w formacie JSON, jak i YAML. Silnik reguł pozwala dostosować czułość wykrywania w repozytoriach Git, zgodnie z ustawieniami wprowadzonymi przez administratorów.
Snyk Container umożliwia testowanie obrazów Docker i powiązanych rejestrów zarówno w trakcie ich tworzenia, jak i po jego zakończeniu. Program można zintegrować z narzędziami CLI, SCM, CI, rejestrami kontenerów oraz z Kubernetes.
W dalszej części artykułu pokażemy, jak wykorzystać Snyk Container, wbudowany w Docker, do identyfikowania potencjalnych zagrożeń.
Przykładowy plik Dockerfile
Aby rozpocząć korzystanie ze Snyka do analizy luk w zabezpieczeniach, potrzebny jest obraz Docker. W tym przykładzie posłużymy się następującym obrazem:
FROM python:3.4-alpine ADD . /code WORKDIR /code RUN pip install -r requirements.txt EXPOSE 8000 CMD [“python”, “app.py”]
Pierwszym krokiem jest wygenerowanie obrazu lokalnie za pomocą komendy:
docker build -t 0xyz0/python-app .
Teraz posiadamy obraz gotowy do analizy.
Skanowanie obrazu za pomocą klienta Docker
Dzięki integracji Snyka z Dockerem, cały proces staje się wyjątkowo prosty. Aby rozpocząć skanowanie, wystarczy użyć poniższej komendy:
docker scan 0***0/python-app
Spowoduje to rozpoczęcie analizy, która wygeneruje mniej lub bardziej szczegółowe dane wyjściowe, w zależności od wykrytych luk, oraz finalne podsumowanie:
Skanowanie Docker ujawnia wszystkie słabe punkty obrazu
Jak widać, program nie tylko informuje o liczbie znalezionych luk, ale także o ich rodzaju i poziomie zagrożenia. Dodatkowo, dostarcza sugestii dotyczących wyboru bezpieczniejszego obrazu bazowego.
Szczegółowe informacje o każdej luce można sprawdzić w bazie danych luk w zabezpieczeniach Snyka.
W naszym przypadku, Snyk proponuje kilka alternatywnych rozwiązań. Zastosujemy pierwszą z nich, modyfikując nasz Dockerfile:
FROM python:3.7.11-slim ADD . /code WORKDIR /code RUN pip install -r requirements.txt EXPOSE 8000 CMD ["python", "app.py"]
Po ponownym zbudowaniu obrazu i jego zeskanowaniu:
docker build -t 0***0/python-app . && docker scan 0***0/python-app
Wynik pokaże zmniejszoną liczbę luk w zabezpieczeniach i potwierdzenie, że korzystamy z bezpieczniejszego obrazu bazowego:
Skanowanie Docker potwierdza, że używasz bezpieczniejszego obrazu bazowego
Można również wygenerować bardziej szczegółowy raport, dołączając plik Dockerfile do polecenia skanowania:
docker scan -f Dockerfile 0***0/python-app
A nawet wykluczyć analizę obrazu bazowego, gdy chcemy skupić się wyłącznie na błędach w naszym kodzie:
docker scan -f Dockerfile --exclude-base 0***0/python-app
Usługę można zintegrować również z repozytoriami Docker Hub:
Jednakże, wymaga to posiadania płatnej subskrypcji. Lokalnie można korzystać z bezpłatnego abonamentu, który jest dostępny po zalogowaniu się do Docker Hub (ograniczona liczba skanowań). Jest to przydatne podczas tworzenia własnych obrazów lub weryfikowania bezpieczeństwa obrazów pochodzących z innych źródeł.
Integracja Snyka z Github Actions
Na początku należy stworzyć repozytorium i umieścić w nim folder o ścieżce:
.github/workflows/
Następnie, aby móc użyć Snyk Container w Github Actions, potrzebujemy nowego obrazu lub musimy użyć obrazu, który stworzyliśmy wcześniej w Docker Hub. Aby skorzystać z Snyka, musimy zdefiniować nowy sekret o nazwie SNYK_TOKEN. Token API generujemy po założeniu konta w Snyku, w Ustawieniach ogólnych.
Po uzyskaniu tokenu, dodajemy go jako sekret w Github, aby móc wykorzystać go w Akcji. Następnie musimy przekazać nazwę repozytorium utworzonego w Docker Hub oraz wiadomość, która ma zostać wysłana. Możemy również odwołać się do danych wyjściowych poszczególnych kroków, wykorzystując je jako zmienne w wiadomości.
with: args: 'Nowy commit został wypchnięty. Sprawdź akcję Github: | przepływ pracy $ {{fromJson (steps.repo.outputs.result) .html_url}} / actions | Wykonano: $ {{steps.prep.outputs.created}} | Wersja: $ {{steps.prep.outputs.version}} '
Jak uruchomić całą akcję? Wystarczy wypchnąć zmiany do gałęzi głównej (master). Github Action automatycznie wykryje plik w lokalizacji .github/workflows/.
Podsumowanie 👈
Wraz ze wzrostem popularności kontenerów, rośnie liczba incydentów związanych z naruszeniem bezpieczeństwa, które w większości przypadków wynikają z błędów w konfiguracji wdrożeń kontenerów. Snyk dostarcza efektywne i łatwe w użyciu narzędzie, które może pomóc w unikaniu tych błędów i wykrywaniu najczęstszych luk w obrazach Dockera.
newsblog.pl