Jak sprawdzać bezpieczeństwo kontenerów Docker bez zbędnych komplikacji
Ostatnio badacze bezpieczeństwa odkryli ponad cztery miliony pustych kontenerów placeholder oraz setki tysięcy obrazów z ukrytymi koparkami kryptowalut na Docker Hub. Przyzwyczailiśmy się do pobierania obrazów bazowych lub zależności stron trzecich za pomocą jednego polecenia docker pull, rzadko zastanawiając się, co może być ukryte w warstwach — nie tylko podatny pakiet, ale osadzony token dostępu do infrastruktury kogoś innego lub skrypt ucieczki z piaskownicy.
Do skanowania obrazów ludzie zwykle sięgają po Trivy, Grype lub Clair. Radzą sobie całkiem nieźle w znajdowaniu znanych CVE w pakietach systemowych, ale często pomijają subtelne kwestie, takie jak nieprawidłowa konfiguracja środowiska wykonawczego, wyciekłe klucze API czy świeże wektory ataków kierowane na łańcuch dostaw.
Projekt dockerscan hiszpańskiego badacza bezpieczeństwa Daniel Garcia (cr0hn) rozwiązuje ten problem dzięki kompleksowemu audytowaniu. Pierwsza wersja narzędzia została napisana w Pythonie w 2017 roku i działała wolno, ale w drugiej wersji autor całkowicie przepisał silnik w Go, zwiększając szybkość dziesięciokrotnie i łącząc skanowanie podatności, wykrywanie sekretów oraz audyt konfiguracji w jeden plik binarny.
Co kryje się w nowym DockerScan
Zamiast uruchamiać trzy różne narzędzia po kolei do sprawdzania obrazów, dockerscan przeprowadza kompleksową diagnostykę w wielu obszarach jednocześnie.
Narzędzie łączy pięć modułów analizy:
- CIS Docker Benchmark v1.7.0. Sprawdza ponad 80 parametrów bezpieczeństwa, w tym uruchamianie jako root, niepotrzebne otwarte porty, brakującą dyrektywę HEALTHCHECK oraz poprawne uprawnienia do plików systemowych.
- Wykrywacz ataków na łańcuch dostaw. Szuka śladów popularnych kampanii z ostatnich lat: ukrytych koparek (jak xmrig), backdoorów w bibliotekach systemowych (w następstwie incydentu xz-utils), tekstów phishingowych oraz kontenerów bez prawdziwych warstw.
- Wykrywanie osadzonych sekretów. Rozpoznaje ponad 40 formatów kluczy i tokenów (AWS, GCP, OpenAI, Stripe, prywatne klucze SSH, ciągi połączeń z bazą danych). Nieznane tokeny są wychwytywane przez obliczanie entropii Shannona z progiem powyżej 4.5.
- Baza danych podatności CVE. Śledzi niebezpieczne podatności na ucieczkę z kontenera (CVE-2024-21626 w runc), problemy z BuildKit oraz nieaktualne obrazy bazowe. Baza danych jest kompilowana z oficjalnej migawki MITRE cvelistV5, więc narzędzie nie napotyka limitów API NVD.
- Audyt bezpieczeństwa środowiska wykonawczego. Sprawdza niebezpieczne możliwości Linuksa (na przykład CAP_SYS_ADMIN), profile Seccomp i AppArmor oraz flagi izolacji przestrzeni nazw.
W wersji 2.1.0 autor naprawił ważny błąd w poprzednich kompilacjach v2.0.x, który powodował, że skanowanie podatności pakietów cicho zwracało zero wyników. Teraz dopasowywanie wersji pakietów odbywa się zgodnie z regułami dpkg uwzględniającymi backporty dystrybucyjne.
Szybki start i uruchamianie sprawdzeń
Narzędzie jest dystrybuowane jako gotowy do użycia plik binarny dla Linuksa, macOS i Windows. Nie trzeba pobierać żadnych zależności.
Instalacja na Linuksie amd64 zajmuje trzy linie:
curl -L https://github.com/cr0hn/dockerscan/releases/latest/download/dockerscan-linux-amd64 -o dockerscan
chmod +x dockerscan
sudo mv dockerscan /usr/local/bin/
Przed pierwszym uruchomieniem pobierz lokalną bazę danych CVE:
dockerscan update-db
Baza danych jest aktualizowana codziennie przez GitHub Actions i waży około 30 MB skompresowana. Po tym możesz skierować skaner na dowolny obraz lokalny lub zdalny:
dockerscan nginx:latest
Jeśli interesują Cię tylko konkretne sprawdzenia, na przykład wykrywanie sekretów i zgodność z CIS Benchmark, możesz ograniczyć moduły za pomocą flagi --scanners:
dockerscan --scanners cis,secrets ubuntu:22.04
W przypadku skryptów automatyzacji przydatny jest tryb cichy -q i filtrowanie według ważności:
dockerscan -q --only-critical my-app:prod
Praca z prywatnymi rejestrami
Częstym problemem wielu skanerów jest niewygodna autoryzacja z prywatnymi repozytoriami. Dockerscan obsługuje wszystkie popularne scenariusze: Docker Hub, GHCR, AWS ECR, Google Artifact Registry, Azure ACR i GitLab.
Jeśli jesteś już uwierzytelniony przez docker login, narzędzie automatycznie pobiera tokeny z ~/.docker/config.json. Obsługuje również systemowe menedżery poświadczeń (osxkeychain na macOS, wincred na Windows i pass na Linuksie).
W przypadku pipeline'ów CI/CD wygodniej jest przekazywać poświadczenia za pomocą zmiennych środowiskowych:
export DOCKER_USERNAME=ci-bot
export DOCKER_PASSWORD=ghp_secret_token_here
dockerscan ghcr.io/my-org/private-service:v1.2.0
Narzędzie zwraca jasne kody wyjścia: 0 dla czystego raportu, 1 gdy znaleziono problemy wysokiego poziomu i 2 gdy wykryto krytyczne podatności. Umożliwia to natychmiastowe zatrzymanie budowania pipeline'a po znalezieniu niebezpiecznego błędu.
Integracja z CI/CD i raportowanie
Wyniki Dockerscan są zapisywane w formatach JSON i SARIF. Format SARIF jest natywnie rozumiany przez GitHub Security, GitLab i Azure DevOps, więc znalezione problemy są natychmiast wyświetlane w interfejsie pull request.
Przykładowy krok dla GitHub Actions:
name: Security Scan
run: |
./dockerscan update-db
./dockerscan -q myapp:${{ github.sha }}
name: Upload SARIF report
uses: github/codeql-action/upload-sarif@v2
if: always()
with:
sarif_file: dockerscan-report.sarif
Licencja i ograniczenia
Licencja projektu zasługuje na szczególną uwagę. Autor wybrał model Source-Available. Kod źródłowy jest w pełni otwarty, narzędzie może być używane bezpłatnie do wewnętrznych potrzeb firmy, osadzane w osobistych pipeline'ach CI/CD oraz wykorzystywane w audytach i testach penetracyjnych. Jedyna rzecz jest zabroniona: pakowanie dockerscan do komercyjnego SaaS i sprzedawanie go jako płatnej usługi skanowania w chmurze bez zgody autora.
Czy warto przejść na DockerScan
Jeśli potrzebujesz szybkiej analizy statycznej obrazów połączonej ze sprawdzaniem uprawnień kontenerów i wykrywaniem wyciekłych tokenów, dockerscan obejmuje wszystkie te zadania jednym poleceniem. Narzędzie zużywa około 50-100 MB pamięci RAM i działa zauważalnie szybciej niż stare rozwiązania w Pythonie.
Narzędzie idealnie nadaje się dla inżynierów DevOps i specjalistów ds. bezpieczeństwa do regularnego audytu obrazów produkcyjnych i dodawania rygorystycznych sprawdzeń do pipeline'ów wdrażania. Najlepszym sposobem na rozpoczęcie pracy jest uruchomienie go na kilku własnych działających kontenerach, aby zobaczyć rzeczywistą liczbę ukrytych ostrzeżeń CIS Benchmark.
Powiązane projekty