Najłatwiejszy sposób na znalezienie luk w obrazach platformy Docker za pomocą Snyk

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