W dzisiejszym artykule skupimy się na temacie skanowania obrazów pod kątem bezpieczeństwa za pomocą narzędzia Anchore. Pokażę Ci, w jaki sposób możesz przeskanować obraz Twojej aplikacji lub oficjalnie obrazy dostępne na Docker Hub.
Spis treści
W artykule poruszymy następujące kwestie:
- Dlaczego do skanowania obrazów używam Anchore?
- Architektura Anchore
- Anchore – wymagania wstępne i instalacja
- Skanowanie obrazów: centos, nginx, aspnetcore
Skanowanie obrazów
Aby sprawdzić działanie Anchore, posłużymy się trzema oficjalnymi obrazami z Docker Hub. Będzie to kolejno: centos, nginx oraz aspnetcore.
Dlaczego wybrałem te obrazy?
Docker opublikował raport prezentujący najpopularniejsze obrazy w roku 2019.
Zarówno nginx jak i centos, znalazły się w TOP 10 najczęściej wyszukiwanych obrazów.
Obraz aspnetcore jest mi szczególnie bliski, ponieważ jak pewnie wiesz, na co dzień oprócz tematów związanych z Dockerem, zajmuję się projektowaniem i tworzeniem aplikacji, korzystając z frameworka ASP NET Core.
Dlaczego Anchore?
Anchore jest moim zdaniem jednym z najlepszych narzędzi open-source służącym do wykrywania podatności w obrazach Dockerowych.
Po pierwsze, Anchore posiada bardzo dobrą dokumentację. Czy wyobrażasz sobie korzystanie z jakiegoś narzędzia bez dokumentacji? Ja nie.
Po drugie posiada community, które ciągle wspomaga jego rozwój. Z reguły, gdy rozpoznaje narzędzia open-source, skupiam się właśnie na tych dwóch czynnikach – dokumentacja i community.
Na GitHubie można znaleźć wiele interesujących projektów, jednak często brak dokumentacji sprawia, że giną one śmiercią naturalną. Jeżeli Anchore nie spełnia Twoich oczekiwań, sprawdź koniecznie mój wpis na temat innych narzędzi, które polecam. Wpis dostępny jest TUTAJ.
Po trzecie, Anchore integruje się z systemami CI / CD. Przykładowo, istnieje plugin integrujący Anchore z Jenkinsem. Uważam jednak, że Anchore może zostac zintegrowany niemal z każdym narzędziem CI / CD. Wynika to z jego architektury, którą za chwilę poznasz.
Polecam przeczytać chociaż pierwsze fragmenty poprzedniego wpisu, aby zrozumieć skąd podatności znajdują się w obrazach oraz dlaczego należy je skanować.
Anchore – architektura
Spójrz proszę na poniższy obrazek, prezentujący architekturę Anchore. Komponenty w czerwonej ramce, są cześcią Anchore Enterprise – czyli płatnej wersji Anchore. My skupimy się głównie na komponentach wchodzących w skład Anchore open-source (w niebieskich ramkach).
Jak łatwo zauważyć na powyższym diagramie, Anchore został podzielony na 4 warstwy:
- Warstwa kliencka
- Warstwa API
- Warstwa stanu
- Warstwa „robocza”
Anchore CLI – to nic innego jak klient, który komunikuje się za pomocą REST z Anchore API.
Anchore API – kluczowa część architektury. Odbiera komunikaty od Anchore CLI a następnie komunikuje się z komponentami z warstwy State Tier
Catalog – odpowiada za zarządzanie stanem. Przechowuje dane niestrukturalne – np. pliki w formacie JSON (rezultat skanowania)
Policy Engine – wczytuje rezultaty skanowania pochodzące z Catalog a następnie normalizuje niestrukturalne dane, tak by można było je filtrować oraz weryfikować pod kątem zdefiniowanych polityk.
SimpleQueque – kolejka PostgreSQL używana przez pozostałe komponenty do asynchronicznych operacji (rozkazy, notyfikacje)
Analyzer – pobiera obrazy z Docker Registry (Docker Hub lub inne) i przeprowadza skanowanie. Odbiera rozkazy od SimpleQueque, a następnie po zakończeniu skanowania przekazuje rezultaty do Catalog oraz PolicyEngine.
Anchore – wymagania wstępne
Rekomendacją ze strony producenta jest minimum 4GB RAM i 10GB miejsca na dysku. Upewnij się, że maszyna na której będzie działać Anchore, spełnia te wymagania. Osobiście przeprowadziłem testy na maszynie z 2GB RAM i okazało się nie wystarczająco. Na szczęście była to maszyna wirtualne na Azure, więc przesunięcie suwaka w prawo załatwiło sprawę 🙂
Ważne. Całość poniżej prezentowanych poleceń została wykonana na Linuxie, a dokładniej na Ubuntu 18.04.
Anchore – instalacja
Istnieją dwie opcje na zainstalowanie Anchore – sposób tradycyjny oraz poprzez użycie Dockera. Jak można się łatwo domyślić – wybrałem opcję nr 2 🙂
Okey, czas na konfigurację i instalację. Postępuj zgodnie z instrukcją poniżej.
Stwórz katalog do przechowywania plików konfiguracyjnych
$ mkdir ~/aevolume && cd ~/aevolume
Skopiuj pliki konfiguracyjne
Wewnątrz obrazu anchore-engine, znajduje się plik docker-compose.yml
, który posłuży do uruchomienia Anchore. Pobierz zatem obraz anchore-engine.
$ docker pull docker.io/anchore/anchore-engine:latest
Skopiuj plik docker-compose.yml
do Twojego katalogu
roboczego.
$ docker create --name ae docker.io/anchore/anchore-engine:latest $ docker cp ae:/docker-compose.yaml ~/aevolume/docker-compose.yaml $ docker rm ae
Upewnij się, że plik docker-compose.yml
został poprawnie skopiowany do Twojego katalogu roboczego.
$ ls ~/aevolume docker-compose.yaml
Pobierz i uruchom kontenery Anchore
Przejdź do katalogu roboczego i pobierz wszystkie niezbędne obrazy
$ cd ~/aevolume $ docker-compose pull
Teraz nadszedł czas na uruchomienie. Jest tutaj jednak mała uwaga. Podczas pierwszego uruchomienia, Anchore musi pobrać bazę wszystkich podatności na dysk. Może to potrwać do 10 minut. Dlatego przed uruchomieniem całości, należy ustawić zmienną środowiskową COMPOSE_HTTP_TIMEOUT
. Dla bezpieczeństwa ustawimy ją na 1000 sekund. Jeżeli Twoje połączenie internetowe jest kiepskie, ta wartość może być niewystarczająca.
$ COMPOSE_HTTP_TIMEOUT=1000 docker-compose up -d Starting aevolume_anchore-db_1 ... done Starting aevolume_engine-catalog_1 ... done Starting aevolume_engine-api_1 ... done Starting aevolume_engine-analyzer_1 ... done Starting aevolume_engine-policy-engine_1 ... done Starting aevolume_engine-simpleq_1 ... done
Upewnij się, że wszystkie usługi zostały uruchomione poprawnie
$ docker-compose ps Name Command State Ports ----------------------------------------------------------------------------------------------------------------- aevolume_anchore-db_1 docker-entrypoint.sh postgres Up 5432/tcp aevolume_engine-analyzer_1 /docker-entrypoint.sh anch ... Up (health: starting) 8228/tcp aevolume_engine-api_1 /docker-entrypoint.sh anch ... Up (health: starting) 0.0.0.0:8228->8228/tcp aevolume_engine-catalog_1 /docker-entrypoint.sh anch ... Up (health: starting) 8228/tcp aevolume_engine-policy-engine_1 /docker-entrypoint.sh anch ... Up (health: starting) 8228/tcp aevolume_engine-simpleq_1 /docker-entrypoint.sh anch ... Up (health: starting) 8228/tcp
Sprawdź status Anchore Engine za pomocą następującego polecenia:
$ docker-compose exec engine-api anchore-cli system status Service analyzer (anchore-quickstart, http://engine-analyzer:8228): up Service simplequeue (anchore-quickstart, http://engine-simpleq:8228): up Service policy_engine (anchore-quickstart, http://engine-policy-engine:8228): up Service catalog (anchore-quickstart, http://engine-catalog:8228): up Service apiext (anchore-quickstart, http://engine-api:8228): up Engine DB Version: 0.0.12 Engine Code Version: 0.6.1
I teraz ważna kwestia. Po mimo, że Anchore wystartował poprawnie, podczas pierwszego uruchomienia aktualizuje on bazę danych CVE. Zanim zaczniesz skanowanie obrazów, upewnij się ze cała baza danych została zsynchronizowana.
$ docker-compose exec engine-api anchore-cli system feeds list Feed Group LastSync RecordCount nvdv2 nvdv2:cves pending 0 vulnerabilities alpine:3.10 2020-02-03T05:52:16.614182 1725 vulnerabilities alpine:3.3 2020-02-03T05:52:44.576739 457 vulnerabilities alpine:3.4 2020-02-03T05:52:52.426065 681 vulnerabilities alpine:3.5 2020-02-03T05:53:04.347937 875 vulnerabilities alpine:3.6 2020-02-03T05:53:19.113143 1051 vulnerabilities alpine:3.7 2020-02-03T05:54:37.856837 1395 vulnerabilities alpine:3.8 2020-02-03T05:55:02.512212 1486 vulnerabilities alpine:3.9 2020-02-03T05:55:30.023154 1558 vulnerabilities amzn:2 2020-02-03T05:56:00.192895 299 vulnerabilities centos:5 pending 1000 vulnerabilities centos:6 pending 0 vulnerabilities centos:7 pending 0 vulnerabilities centos:8 pending 0 vulnerabilities debian:10 pending 0 vulnerabilities debian:11 pending 0 vulnerabilities debian:7 pending 0 vulnerabilities debian:8 pending 0
Twoja instancja Anchore będzie w pełni gotowa, gdy wszystkie wartości w kolumnie RecordCount będą większe od 0.
Skanowanie obrazu Centos:7
Aby przeskanować dowolny obraz przy użyciu Anchore, wykorzystamy anchore-cli. Pierwszym krokiem jest pobranie obrazu przez Anchore-Engine. W naszym przypadku będzie to Centos:7.
$ docker-compose exec engine-api anchore-cli \ image add docker.io/library/centos:7
Co ważne, pobieranie z Docker Hub zostanie zainicjalizowane w tle. Aby sprawdzić, czy obraz jest już gotowy do skanowania, skorzystaj z polecenia:
$ docker-compose exec engine-api anchore-cli \ image wait docker.io/library/centos:7
Anchore umożliwia weryfikacje zainstalowanych pakietów oraz modułów. Służy do tego następujące polecenie:
$ docker-compose exec engine-api anchore-cli \ image content docker.io/library/centos:7 os: available files: available npm: available gem: available python: available java: available
Wreszcie nadchodzi wyczekiwane skanowanie.
$ docker-compose exec engine-api anchore-cli \ image vuln docker.io/library/centos:7 all
I co? Jaki jest jego rezultat? Zżera cię ciekwość? Więc proszę – oto wyniki skanowania obrazu centos:7
Vulnerability ID Package Severity Fix Vulnerability URL RHSA-2019:4190 nss-3.44.0-4.el7 High 0:3.44.0-7.el7_7 https://access.redhat.com/errata/RHSA-2019:4190 RHSA-2019:4190 nss-softokn-3.44.0-5.el7 High 0:3.44.0-8.el7_7 https://access.redhat.com/errata/RHSA-2019:4190 RHSA-2019:4190 nss-softokn-freebl-3.44.0-5.el7 High 0:3.44.0-8.el7_7 https://access.redhat.com/errata/RHSA-2019:4190 RHSA-2019:4190 nss-sysinit-3.44.0-4.el7 High 0:3.44.0-7.el7_7 https://access.redhat.com/errata/RHSA-2019:4190 RHSA-2019:4190 nss-tools-3.44.0-4.el7 High 0:3.44.0-7.el7_7 https://access.redhat.com/errata/RHSA-2019:4190 RHSA-2019:4190 nss-util-3.44.0-3.el7 High 0:3.44.0-4.el7_7 https://access.redhat.com/errata/RHSA-2019:4190 RHSA-2020:0227 sqlite-3.7.17-8.el7 High 0:3.7.17-8.el7_7.1 https://access.redhat.com/errata/RHSA-2020:0227
W obrazie centos:7, Anchore wykrył aż 7 podatności oznaczonych wysokim ryzykiem! A przecież jest to obraz pochodzący z sprawdzonego i oficjalnego źródła – Docker Hub’a.
Skanowanie obrazu Nginx
Na tapetę weźmiemy obraz nginx w wersji 1.17.8 (najbardziej aktualny w czasie pisania tego artykułu).
Postępujemy analogicznie jak w przypadku obrazu centos. Najpierw przy wykorzystaniu polecenia add
, pobieramy obraz z Docker Huba i czekamy aż obraz zostanie pobrany przez Anchore.
$ docker-compose exec engine-api anchore-cli \ image add docker.io/library/nginx:1.17.8 $ docker-compose exec engine-api anchore-cli \ image wait docker.io/library/nginx:1.17.8
Gdy obraz jest gotowy – skanujemy całość poleceniem:
$ docker-compose exec engine-api anchore-cli \ image vuln docker.io/library/nginx:1.17.8 all
I co otrzymujemy? 🙂
Vulnerability ID Package Severity Fix CVE Refs Vulnerability URL CVE-2005-2541 tar-1.30+dfsg-6 Negligible None https://security-tracker.debian.org/tracker/CVE-2005-2541 CVE-2007-5686 login-1:4.5-1.1 Negligible None https://security-tracker.debian.org/tracker/CVE-2007-5686 CVE-2007-5686 passwd-1:4.5-1.1 Negligible None https://security-tracker.debian.org/tracker/CVE-2007-5686 CVE-2007-6755 libssl1.1-1.1.1d-0+deb10u2 Negligible None https://security-tracker.debian.org/tracker/CVE-2007-6755 CVE-2009-4487 nginx-1.17.8-1~buster Negligible None https://security-tracker.debian.org/tracker/CVE-2009-4487 CVE-2010-0928 libssl1.1-1.1.1d-0+deb10u2 Negligible None https://security-tracker.debian.org/tracker/CVE-2010-0928 CVE-2010-4051 libc-bin-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2010-4051 CVE-2010-4051 libc6-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2010-4051 CVE-2010-4052 libc-bin-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2010-4052 CVE-2010-4052 libc6-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2010-4052 CVE-2010-4756 libc-bin-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2010-4756 CVE-2010-4756 libc6-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2010-4756 CVE-2011-3374 apt-1.8.2 Negligible None https://security-tracker.debian.org/tracker/CVE-2011-3374 CVE-2011-3374 libapt-pkg5.0-1.8.2 Negligible None https://security-tracker.debian.org/tracker/CVE-2011-3374 CVE-2011-3389 libgnutls30-3.6.7-4 Negligible None https://security-tracker.debian.org/tracker/CVE-2011-3389 CVE-2011-4116 perl-base-5.28.1-6 Negligible None https://security-tracker.debian.org/tracker/CVE-2011-4116 CVE-2013-0340 libexpat1-2.2.6-2+deb10u1 Negligible None https://security-tracker.debian.org/tracker/CVE-2013-0340 CVE-2013-4235 login-1:4.5-1.1 Negligible None https://security-tracker.debian.org/tracker/CVE-2013-4235 CVE-2013-4235 passwd-1:4.5-1.1 Negligible None https://security-tracker.debian.org/tracker/CVE-2013-4235 CVE-2013-4392 libsystemd0-241-7~deb10u2 Negligible None https://security-tracker.debian.org/tracker/CVE-2013-4392 CVE-2013-4392 libudev1-241-7~deb10u2 Negligible None https://security-tracker.debian.org/tracker/CVE-2013-4392 CVE-2014-8130 libtiff5-4.1.0+git191117-2~deb10u1 Negligible None https://security-tracker.debian.org/tracker/CVE-2014-8130 CVE-2015-9019 libxslt1.1-1.1.32-2.2~deb10u1 Negligible None https://security-tracker.debian.org/tracker/CVE-2015-9019 CVE-2016-9085 libwebp6-0.6.1-2 Negligible None https://security-tracker.debian.org/tracker/CVE-2016-9085 CVE-2017-11164 libpcre3-2:8.39-12 Negligible None https://security-tracker.debian.org/tracker/CVE-2017-11164 CVE-2017-15232 libjpeg62-turbo-1:1.5.2-2+b1 Negligible None https://security-tracker.debian.org/tracker/CVE-2017-15232 CVE-2017-16231 libpcre3-2:8.39-12 Negligible None https://security-tracker.debian.org/tracker/CVE-2017-16231 CVE-2017-16232 libtiff5-4.1.0+git191117-2~deb10u1 Negligible None https://security-tracker.debian.org/tracker/CVE-2017-16232 CVE-2017-17973 libtiff5-4.1.0+git191117-2~deb10u1 Negligible None https://security-tracker.debian.org/tracker/CVE-2017-17973 CVE-2017-18018 coreutils-8.30-3 Negligible None https://security-tracker.debian.org/tracker/CVE-2017-18018 CVE-2017-5563 libtiff5-4.1.0+git191117-2~deb10u1 Negligible None https://security-tracker.debian.org/tracker/CVE-2017-5563 CVE-2017-7245 libpcre3-2:8.39-12 Negligible None https://security-tracker.debian.org/tracker/CVE-2017-7245 CVE-2017-7246 libpcre3-2:8.39-12 Negligible None https://security-tracker.debian.org/tracker/CVE-2017-7246 CVE-2017-9117 libtiff5-4.1.0+git191117-2~deb10u1 Negligible None https://security-tracker.debian.org/tracker/CVE-2017-9117 CVE-2017-9937 libjbig0-2.1-3.1+b2 Negligible None https://security-tracker.debian.org/tracker/CVE-2017-9937 CVE-2018-1000654 libtasn1-6-4.13-3 Negligible None https://security-tracker.debian.org/tracker/CVE-2018-1000654 CVE-2018-10126 libtiff5-4.1.0+git191117-2~deb10u1 Negligible None https://security-tracker.debian.org/tracker/CVE-2018-10126 CVE-2018-14048 libpng16-16-1.6.36-6 Negligible None https://security-tracker.debian.org/tracker/CVE-2018-14048 CVE-2018-14550 libpng16-16-1.6.36-6 Negligible None https://security-tracker.debian.org/tracker/CVE-2018-14550 CVE-2018-20796 libc-bin-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2018-20796 CVE-2018-20796 libc6-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2018-20796 CVE-2018-6829 libgcrypt20-1.8.4-5 Negligible None https://security-tracker.debian.org/tracker/CVE-2018-6829 CVE-2019-1010022 libc-bin-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-1010022 CVE-2019-1010022 libc6-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-1010022 CVE-2019-1010023 libc-bin-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-1010023 CVE-2019-1010023 libc6-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-1010023 CVE-2019-1010024 libc-bin-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-1010024 CVE-2019-1010024 libc6-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-1010024 CVE-2019-1010025 libc-bin-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-1010025 CVE-2019-1010025 libc6-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-1010025 CVE-2019-19882 login-1:4.5-1.1 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-19882 CVE-2019-19882 passwd-1:4.5-1.1 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-19882 CVE-2019-6129 libpng16-16-1.6.36-6 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-6129 CVE-2019-9192 libc-bin-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-9192 CVE-2019-9192 libc6-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-9192 CVE-2019-9893 libseccomp2-2.3.3-4 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-9893 CVE-2019-9923 tar-1.30+dfsg-6 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-9923 CVE-2019-18224 libidn2-0-2.0.5-1 Unknown 2.0.5-1+deb10u1 https://security-tracker.debian.org/tracker/CVE-2019-18224 CVE-2019-20388 libxml2-2.9.4+dfsg1-7+b3 Unknown None https://security-tracker.debian.org/tracker/CVE-2019-20388 CVE-2020-7595 libxml2-2.9.4+dfsg1-7+b3 Unknown None https://security-tracker.debian.org/tracker/CVE-2020-7595
Dużo tego – przyznaję, że nie liczyłem ile wpisów wykrył nam Anchore. Na szczęście wszystkie wykryte wpisy są w statusie „Nieistotne” lub „Nieznane”.
Skanowanie na mojej maszynie zajęło mniej niż 3 sekundy, co również dobrze świadczy o Anchore.
Skanowanie obrazu ASP NET Core
Posłużymy się najnowszym wydaniem (na czas pisania tego artykułu) obrazu ASP NET Core w wersji 3.1. Będziemy postępować analogicznie jak w przypadku centos i nginx. W skrócie – pobieramy obraz, upewniamy się że obraz został pobrany, skanujemy.
$ docker-compose exec engine-api anchore-cli \ image add mcr.microsoft.com/dotnet/core/aspnet:3.1 $ docker-compose exec engine-api anchore-cli \ image wait mcr.microsoft.com/dotnet/core/aspnet:3.1
Gdy obraz będzie gotowy – skanujemy 🙂
$ docker-compose exec engine-api anchore-cli \ image vuln mcr.microsoft.com/dotnet/core/aspnet:3.1 all
Jako że jest to bliska mi technologia, sam byłem bardzo ciekawy rezultatów.
Sięgając pamięcią wstecz, przypominam sobie, że w oficjalnym obrazie ASP NET Core 2.2 było wiele podatności o wysokim ryzyku, które musiałem ręcznie „fixować”.
Na szczęście w wersji 3.1 – bynajmniej Anchore, nie wykrywa żadnych podatności o wysokim ryzyku.
Tak jak w przypadku nginx, wykryte zostały tylko „Nieistotne” oraz „Nieznane”.
Vulnerability ID Package Severity Fix CVE Refs Vulnerability URL CVE-2004-0971 libgssapi-krb5-2-1.17-3 Negligible None https://security-tracker.debian.org/tracker/CVE-2004-0971 CVE-2004-0971 libk5crypto3-1.17-3 Negligible None https://security-tracker.debian.org/tracker/CVE-2004-0971 CVE-2004-0971 libkrb5-3-1.17-3 Negligible None https://security-tracker.debian.org/tracker/CVE-2004-0971 CVE-2004-0971 libkrb5support0-1.17-3 Negligible None https://security-tracker.debian.org/tracker/CVE-2004-0971 CVE-2005-2541 tar-1.30+dfsg-6 Negligible None https://security-tracker.debian.org/tracker/CVE-2005-2541 CVE-2007-5686 login-1:4.5-1.1 Negligible None https://security-tracker.debian.org/tracker/CVE-2007-5686 CVE-2007-5686 passwd-1:4.5-1.1 Negligible None https://security-tracker.debian.org/tracker/CVE-2007-5686 CVE-2007-6755 libssl1.1-1.1.1d-0+deb10u2 Negligible None https://security-tracker.debian.org/tracker/CVE-2007-6755 CVE-2007-6755 openssl-1.1.1d-0+deb10u2 Negligible None https://security-tracker.debian.org/tracker/CVE-2007-6755 CVE-2010-0928 libssl1.1-1.1.1d-0+deb10u2 Negligible None https://security-tracker.debian.org/tracker/CVE-2010-0928 CVE-2010-0928 openssl-1.1.1d-0+deb10u2 Negligible None https://security-tracker.debian.org/tracker/CVE-2010-0928 CVE-2010-4051 libc-bin-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2010-4051 CVE-2010-4051 libc6-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2010-4051 CVE-2010-4052 libc-bin-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2010-4052 CVE-2010-4052 libc6-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2010-4052 CVE-2010-4756 libc-bin-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2010-4756 CVE-2010-4756 libc6-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2010-4756 CVE-2011-3374 apt-1.8.2 Negligible None https://security-tracker.debian.org/tracker/CVE-2011-3374 CVE-2011-3374 libapt-pkg5.0-1.8.2 Negligible None https://security-tracker.debian.org/tracker/CVE-2011-3374 CVE-2011-3389 libgnutls30-3.6.7-4 Negligible None https://security-tracker.debian.org/tracker/CVE-2011-3389 CVE-2011-4116 perl-base-5.28.1-6 Negligible None https://security-tracker.debian.org/tracker/CVE-2011-4116 CVE-2013-4235 login-1:4.5-1.1 Negligible None https://security-tracker.debian.org/tracker/CVE-2013-4235 CVE-2013-4235 passwd-1:4.5-1.1 Negligible None https://security-tracker.debian.org/tracker/CVE-2013-4235 CVE-2013-4392 libsystemd0-241-7~deb10u2 Negligible None https://security-tracker.debian.org/tracker/CVE-2013-4392 CVE-2013-4392 libudev1-241-7~deb10u2 Negligible None https://security-tracker.debian.org/tracker/CVE-2013-4392 CVE-2015-3276 libldap-2.4-2-2.4.47+dfsg-3+deb10u1 Negligible None https://security-tracker.debian.org/tracker/CVE-2015-3276 CVE-2015-3276 libldap-common-2.4.47+dfsg-3+deb10u1 Negligible None https://security-tracker.debian.org/tracker/CVE-2015-3276 CVE-2017-11164 libpcre3-2:8.39-12 Negligible None https://security-tracker.debian.org/tracker/CVE-2017-11164 CVE-2017-14159 libldap-2.4-2-2.4.47+dfsg-3+deb10u1 Negligible None https://security-tracker.debian.org/tracker/CVE-2017-14159 CVE-2017-14159 libldap-common-2.4.47+dfsg-3+deb10u1 Negligible None https://security-tracker.debian.org/tracker/CVE-2017-14159 CVE-2017-16231 libpcre3-2:8.39-12 Negligible None https://security-tracker.debian.org/tracker/CVE-2017-16231 CVE-2017-17740 libldap-2.4-2-2.4.47+dfsg-3+deb10u1 Negligible None https://security-tracker.debian.org/tracker/CVE-2017-17740 CVE-2017-17740 libldap-common-2.4.47+dfsg-3+deb10u1 Negligible None https://security-tracker.debian.org/tracker/CVE-2017-17740 CVE-2017-18018 coreutils-8.30-3 Negligible None https://security-tracker.debian.org/tracker/CVE-2017-18018 CVE-2017-7245 libpcre3-2:8.39-12 Negligible None https://security-tracker.debian.org/tracker/CVE-2017-7245 CVE-2017-7246 libpcre3-2:8.39-12 Negligible None https://security-tracker.debian.org/tracker/CVE-2017-7246 CVE-2018-1000654 libtasn1-6-4.13-3 Negligible None https://security-tracker.debian.org/tracker/CVE-2018-1000654 CVE-2018-20796 libc-bin-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2018-20796 CVE-2018-20796 libc6-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2018-20796 CVE-2018-5709 libgssapi-krb5-2-1.17-3 Negligible None https://security-tracker.debian.org/tracker/CVE-2018-5709 CVE-2018-5709 libk5crypto3-1.17-3 Negligible None https://security-tracker.debian.org/tracker/CVE-2018-5709 CVE-2018-5709 libkrb5-3-1.17-3 Negligible None https://security-tracker.debian.org/tracker/CVE-2018-5709 CVE-2018-5709 libkrb5support0-1.17-3 Negligible None https://security-tracker.debian.org/tracker/CVE-2018-5709 CVE-2018-6829 libgcrypt20-1.8.4-5 Negligible None https://security-tracker.debian.org/tracker/CVE-2018-6829 CVE-2019-1010022 libc-bin-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-1010022 CVE-2019-1010022 libc6-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-1010022 CVE-2019-1010023 libc-bin-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-1010023 CVE-2019-1010023 libc6-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-1010023 CVE-2019-1010024 libc-bin-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-1010024 CVE-2019-1010024 libc6-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-1010024 CVE-2019-1010025 libc-bin-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-1010025 CVE-2019-1010025 libc6-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-1010025 CVE-2019-19882 login-1:4.5-1.1 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-19882 CVE-2019-19882 passwd-1:4.5-1.1 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-19882 CVE-2019-9192 libc-bin-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-9192 CVE-2019-9192 libc6-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-9192 CVE-2019-9893 libseccomp2-2.3.3-4 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-9893 CVE-2019-9923 tar-1.30+dfsg-6 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-9923 CVE-2019-18224 libidn2-0-2.0.5-1 Unknown 2.0.5-1+deb10u1 https://security-tracker.debian.org/tracker/CVE-2019-18224 CVE-2019-5481 curl-7.64.0-4 Unknown None https://security-tracker.debian.org/tracker/CVE-2019-5481 CVE-2019-5481 libcurl4-7.64.0-4 Unknown None https://security-tracker.debian.org/tracker/CVE-2019-5481 CVE-2019-5482 curl-7.64.0-4 Unknown None https://security-tracker.debian.org/tracker/CVE-2019-5482 CVE-2019-5482 libcurl4-7.64.0-4 Unknown None https://security-tracker.debian.org/tracker/CVE-2019-5482
Podsumowanie
Zachęcam Cię mocno do weryfikacji Twoich obrazów pod kątem bezpieczeństwa. Pamiętaj, że tworząc Dockerfile, w 90% przypadków korzystamy z polecenia FROM i wywołujemy obraz bazowy, który może mieć podatności. Te podatności przejdą bezpośrednio na Twój finalny obraz. Jeżeli będzie to obraz wykorzystywany do celów developerskich – nie będzie to aż tak groźne. Ryzyko pojawi się, gdy wdrożysz obraz z podatnościami na produkcję.
Polecam wprowadzenie nawyku skanowania obrazów. Niekoniecznie musi to być narzędzie Anchore.
PS. Jeżeli znasz jakieś inne ciekawe narzędzie, koniecznie podziel się nim w komentarzu!