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

Snyk to edytor specjalizujący się w analizowaniu podatności w kodzie plików konfiguracyjnych infrastruktury, w tym znajdujących się w kontenerach i pakietach aplikacji.

Snyk najpierw oferuje platformę w chmurze, ale oferuje różne produkty.

Snyk OpenSource integruje się poprzez interfejs wiersza poleceń edytora z przepływem Git. Po uruchomieniu oprogramowanie wykrywa luki, klasyfikuje je według stopnia wrażliwości i automatycznie koryguje znane błędy bezpieczeństwa. Ta funkcja może zostać włączona do cyklu pull request, aby zastosować ją do kodu wysyłanego do repozytoriów.

Z kolei Snyk Infrastructure as Code analizuje podatności i naprawia je w plikach konfiguracyjnych Kubernetes JSON i YAML. Tutaj silnik reguł pozwala skonfigurować czułość wykryć w repozytoriach Git zgodnie z parametrami ustalonymi przez administratorów.

Snyk Container umożliwia testowanie obrazów doków i powiązanych rejestrów w momencie ich tworzenia i po ich utworzeniu. Program można zintegrować z CLI, SCM, narzędziami CI, rejestrami kontenerów i Kubernetes.

Dzisiaj zobaczymy, jak możemy wykorzystać Snyk Container, który jest wbudowany w Docker do wykrywania podatności.

Przykładowy plik docker

Pierwszą rzeczą, której potrzebujesz, aby użyć Snyka do wykrywania luk w zabezpieczeniach, jest obraz dockera. W tym przykładzie użyjemy następującego obrazu docker :

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

Pierwszą rzeczą, którą musimy zrobić, to wygenerować obraz lokalnie za pomocą następującego polecenia:

docker build -t 0xyz0/python-app.

Teraz mamy obraz do przeanalizowania.

Zeskanuj obraz z klienta Docker

Integracja usługi Snyk z Dockerem sprawia, że ​​proces ten jest niezwykle prosty. Aby rozpocząć skanowanie, wystarczy wykonać następujące czynności:

docker scan 0***0/python-app

Rozpocznie się to od analizy, w której zwróci mniej lub bardziej obszerne dane wyjściowe, w zależności od znalezionych luk, oraz ostateczne podsumowanie:

Skanowanie Dockera pokazuje wszystkie luki w obrazie

Jak widać, nie tylko informuje o tym, ile znalazł luk. Nawet jeśli przewiniesz w górę, możesz zobaczyć, jakie one są i ich krytyczność, ale zawiera również zalecenia dotyczące podstawowego obrazu, którego powinieneś użyć.

Możesz również sprawdzić szczegóły luki w Baza danych luk w zabezpieczeniach Snyka.

W moim przypadku oferuje mi kilka alternatyw, więc zamierzam zmodyfikować mój plik Dockerfile za pomocą pierwszej opcji:

FROM python:3.7.11-slim

ADD . /code

WORKDIR /code

RUN pip install -r requirements.txt

EXPOSE 8000

CMD ["python", "app.py"]

Jeśli odbuduję obraz i zeskanuję go:

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

Zobaczysz, że dane wyjściowe pokazują teraz mniej luk w zabezpieczeniach, aw tym przypadku informują Cię, że obecnie używasz bezpieczniejszego obrazu podstawowego:

Skanowanie Docker zapewnia, że ​​używasz najbezpieczniejszego obrazu bazowego

Możesz również uzyskać bardziej szczegółowy raport, dodając plik docker, który generuje obraz do polecenia:

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

A nawet wyklucz obraz bazowy z analizy, na wypadek, gdybyś chciał skupić się na tym, co zrobiłeś źle:

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

Ta usługa może być również zintegrowana z repozytoriami Docker Hub:

Ale do tego musisz mieć jedną z płatnych subskrypcji. Możesz jednak uruchomić go lokalnie, korzystając z bezpłatnego abonamentu, który masz tylko za zalogowanie się do Docker Hub (ma wyraźne limity skanowania), podczas gdy tworzysz lub chcesz sprawdzić, jak bezpieczny jest obraz innej firmy, który chcesz posługiwać się.

Używanie Snyka z Github Actions

Pierwszą rzeczą do zrobienia jest utworzenie repozytorium i utworzenie w nim folderu.

.github / worflows /

Następnie użycie Snyk Container w Github oznacza utworzenie nowego obrazu lub zrobienie tego obrazu, który stworzyliśmy w Docker Hub. Aby korzystać ze Snyka, musisz stworzyć nowy sekret o nazwie SNYK_TOKEN, a aby uzyskać token, musisz założyć konto w Snyku. W Ustawieniach ogólnych, gdzie jest napisane API Token, możesz go szybko wygenerować.

Dzięki tokenowi możesz stworzyć sekret na Github i użyć go w Akcji. Teraz musisz przekazać mu nazwę repozytorium, które zostało utworzone w Docker Hub. Następnie musisz przekazać wiadomość, którą ma wysłać. Możesz uzyskać dostęp do danych wyjściowych kroków, które będą używane jako zmienna w komunikacie.

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

Jak uruchomić cały przepływ pracy? Proste, po prostu naciskając Master. Github Action wykryje plik w .github / workflows /.

Ostatnie słowa 👈

Wraz z rosnącą popularnością kontenerów, incydenty naruszeń bezpieczeństwa stają się coraz częstsze, z których większość jest spowodowana błędami konfiguracyjnymi we wdrażaniu kontenerów. Snyk zapewnia wydajne i proste narzędzie, które może pomóc nam uniknąć błędów w konfiguracji i wykryć najczęstsze luki w obrazach dockera.