2375, 2376 Pentesting Docker
WhiteIntel to dark-web-owy silnik wyszukiwania oferujący darmowe funkcje sprawdzania, czy firma lub jej klienci zostali skompromitowani przez złośliwe oprogramowanie kradnące dane.
Ich głównym celem WhiteIntel jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.
Możesz sprawdzić ich stronę internetową i wypróbować ich silnik za darmo pod adresem:
Podstawy Docker
Co to jest
Docker to wiodąca platforma w branży konteneryzacji, przewodząca ciągłej innowacji. Umożliwia łatwe tworzenie i dystrybucję aplikacji, obejmując tradycyjne i futurystyczne, oraz zapewnia bezpieczne wdrożenie w różnych środowiskach.
Podstawowa architektura Dockera
containerd: Jest to rdzeń uruchomieniowy dla kontenerów, odpowiedzialny za kompleksowe zarządzanie cyklem życia kontenera. Obejmuje to obsługę transferu i przechowywania obrazów, a także nadzór nad wykonywaniem, monitorowaniem i sieciowaniem kontenerów. Szczegółowe informacje na temat containerd są dalej omawiane.
Kontener-shim odgrywa kluczową rolę jako pośrednik w obsłudze bezgłowych kontenerów, płynnie przejmując od runc po zainicjowaniu kontenerów.
runc: Szanowany za swoje możliwości lekkiego i uniwersalnego uruchamiania kontenerów, runc jest zgodny ze standardem OCI. Jest używany przez containerd do uruchamiania i zarządzania kontenerami zgodnie z wytycznymi OCI, ewoluując z pierwotnego libcontainer.
grpc jest niezbędny do ułatwiania komunikacji między containerd a silnikiem Dockera, zapewniając efektywną interakcję.
OCI jest kluczowy w utrzymaniu specyfikacji OCI dla uruchamiania i obrazów, przy czym najnowsze wersje Dockera są zgodne zarówno ze standardami obrazów, jak i uruchamiania OCI.
Podstawowe polecenia
Containerd
Containerd został specjalnie opracowany, aby służyć potrzebom platform kontenerowych takich jak Docker i Kubernetes, między innymi. Celem jest uproszczenie wykonywania kontenerów na różnych systemach operacyjnych, w tym Linux, Windows, Solaris i innych, poprzez abstrahowanie funkcjonalności specyficznych dla systemu operacyjnego i wywołań systemowych. Celem Containerd jest uwzględnienie tylko niezbędnych funkcji wymaganych przez użytkowników, dążąc do pominięcia zbędnych komponentów. Jednak osiągnięcie tego celu w pełni jest uznawane za wyzwanie.
Kluczową decyzją projektową jest to, że Containerd nie obsługuje sieci. Sieci są uważane za istotny element w systemach rozproszonych, z złożonościami takimi jak Sieci zdefiniowane programowo (SDN) i odkrywanie usług, które różnią się znacząco w zależności od platformy. Dlatego Containerd pozostawia aspekty sieciowe do zarządzania przez obsługiwane przez nie platformy.
Podczas gdy Docker wykorzystuje Containerd do uruchamiania kontenerów, ważne jest zauważenie, że Containerd obsługuje tylko podzbiór funkcji Docker'a. W szczególności, Containerd nie posiada możliwości zarządzania siecią obecną w Dockerze i nie obsługuje bezpośrednio tworzenia rojów Docker. To rozróżnienie podkreśla skoncentrowaną rolę Containerd jako środowiska uruchomieniowego kontenerów, delegując bardziej specjalistyczne funkcje do platform, z którymi się integruje.
Podman
Podman to silnik kontenerów typu open-source, który przestrzega standardów Open Container Initiative (OCI), rozwijany i utrzymywany przez Red Hat. Wyróżnia się on od Dockera kilkoma różnymi cechami, w szczególności swoją architekturą bez demona i obsługą kontenerów bez uprawnień roota, umożliwiając użytkownikom uruchamianie kontenerów bez uprawnień roota.
Podman został zaprojektowany tak, aby był kompatybilny z interfejsem API Dockera, co pozwala na korzystanie z poleceń CLI Dockera. Ta kompatybilność obejmuje również jego ekosystem, który zawiera narzędzia takie jak Buildah do budowania obrazów kontenerów i Skopeo do operacji na obrazach, takich jak push, pull i inspect. Więcej szczegółów na temat tych narzędzi można znaleźć na ich stronie GitHub.
Główne różnice
Architektura: W przeciwieństwie do modelu klient-serwer Dockera z tłem demona, Podman działa bez demona. Ten projekt oznacza, że kontenery uruchamiane są z uprawnieniami użytkownika, który je uruchamia, zwiększając bezpieczeństwo poprzez eliminację potrzeby dostępu roota.
Integracja z systemd: Podman integruje się z systemd w celu zarządzania kontenerami, umożliwiając zarządzanie kontenerami za pomocą jednostek systemd. Kontrastuje to z użyciem Dockera systemd głównie do zarządzania procesem demona Dockera.
Kontenery bez uprawnień roota: Istotną cechą Podmana jest możliwość uruchamiania kontenerów z uprawnieniami użytkownika inicjującego. Ten podejście minimalizuje ryzyko związane z naruszeniami kontenerów, zapewniając, że atakujący uzyskują tylko uprawnienia skompromitowanego użytkownika, a nie dostęp roota.
Podejście Podmana oferuje bezpieczną i elastyczną alternatywę dla Dockera, podkreślając zarządzanie uprawnieniami użytkownika i kompatybilność z istniejącymi przepływami pracy Dockera.
Zauważ, że ponieważ podman ma na celu obsługę tego samego interfejsu API co docker, możesz używać tych samych poleceń z podmanem jak z dockerem, takich jak:
Podstawowe informacje
Zdalne API działa domyślnie na porcie 2375 po włączeniu. Usługa domyślnie nie będzie wymagać uwierzytelnienia, co pozwala atakującemu uruchomić uprzywilejowany kontener Docker. Korzystając z Zdalnego API, można dołączyć hosty / (katalog główny) do kontenera i odczytywać/zapisywać pliki środowiska hosta.
Domyślny port: 2375
Wyliczanie
Ręczne
Zauważ, że aby wyliczyć interfejs API dockera, możesz użyć polecenia docker
lub curl
, jak w poniższym przykładzie:
Jeśli możesz skontaktować się z zdalnym interfejsem API docker za pomocą polecenia docker
, możesz wykonać dowolne z polecenia docker wcześniej skomentowane aby działać z usługą.
Możesz export DOCKER_HOST="tcp://localhost:2375"
i unikać użycia parametru -H
z poleceniem docker
Szybkie eskalowanie uprawnień
Curl
Czasami zobaczysz 2376 jako port dla punktu końcowego TLS. Nie byłem w stanie połączyć się z nim za pomocą klienta dockera, ale można to zrobić za pomocą curl.
Jeśli chcesz uzyskać więcej informacji na ten temat, więcej informacji jest dostępnych tam, skąd skopiowałem polecenia: https://securityboulevard.com/2019/02/abusing-docker-api-socket/
Automatyczne
Kompromitacja
Na następnej stronie znajdziesz sposoby na ucieczkę z kontenera dockera:
pageDocker SecurityWykorzystując to, można uciec z kontenera, można uruchomić słaby kontener na zdalnej maszynie, uciec z niego i skompromitować maszynę:
Eskalacja uprawnień
Jeśli znajdujesz się wewnątrz hosta korzystającego z dockera, możesz przeczytać te informacje, aby spróbować podnieść uprawnienia.
Odkrywanie tajemnic w uruchomionych kontenerach Dockera
Sprawdź env (sekcję zmiennych środowiskowych) w poszukiwaniu tajemnic, gdzie możesz znaleźć:
Hasła.
Adresy IP.
Porty.
Ścieżki.
Inne... .
Jeśli chcesz wydobyć plik:
Zabezpieczanie Docker
Zabezpieczanie instalacji i użytkowania Dockera
Możesz użyć narzędzia https://github.com/docker/docker-bench-security, aby sprawdzić swoją obecną instalację Dockera.
./docker-bench-security.sh
Możesz użyć narzędzia https://github.com/kost/dockscan, aby sprawdzić swoją obecną instalację Dockera.
dockscan -v unix:///var/run/docker.sock
Możesz użyć narzędzia https://github.com/genuinetools/amicontained, aby sprawdzić uprawnienia kontenera podczas uruchamiania z różnymi opcjami zabezpieczeń. Jest to przydatne, aby poznać konsekwencje korzystania z niektórych opcji zabezpieczeń do uruchomienia kontenera:
docker run --rm -it r.j3ss.co/amicontained
docker run --rm -it --pid host r.j3ss.co/amicontained
docker run --rm -it --security-opt "apparmor=unconfined" r.j3ss.co/amicontained
Zabezpieczanie obrazów Dockera
Możesz użyć obrazu Dockera z https://github.com/quay/clair, aby przeskanować inne obrazy Dockera i znaleźć podatności.
docker run --rm -v /root/clair_config/:/config -p 6060-6061:6060-6061 -d clair -config="/config/config.yaml"
clair-scanner -c http://172.17.0.3:6060 --ip 172.17.0.1 ubuntu-image
Zabezpieczanie plików Dockerfile
Możesz użyć narzędzia https://github.com/buddy-works/dockerfile-linter do sprawdzania swojego pliku Dockerfile i znajdowania wszelkiego rodzaju błędów konfiguracyjnych. Każdemu błędowi konfiguracyjnemu zostanie przypisane ID, możesz znaleźć tutaj https://github.com/buddy-works/dockerfile-linter/blob/master/Rules.md, jak naprawić każdy z nich.
dockerfilelinter -f Dockerfile
Możesz użyć narzędzia https://github.com/replicatedhq/dockerfilelint do sprawdzania swojego pliku Dockerfile i znajdowania wszelkiego rodzaju błędów konfiguracyjnych.
dockerfilelint Dockerfile
Możesz użyć narzędzia https://github.com/RedCoolBeans/dockerlint do sprawdzania swojego pliku Dockerfile i znajdowania wszelkiego rodzaju błędów konfiguracyjnych.
dockerlint Dockerfile
Możesz użyć narzędzia https://github.com/hadolint/hadolint do sprawdzania swojego pliku Dockerfile i znajdowania wszelkiego rodzaju błędów konfiguracyjnych.
hadolint Dockerfile
Rejestrowanie podejrzanej aktywności
Możesz użyć narzędzia https://github.com/falcosecurity/falco, aby wykryć podejrzane zachowanie w działających kontenerach.
Zauważ w poniższym fragmencie, jak Falco kompiluje moduł jądra i go wstawia. Następnie ładuje reguły i rozpoczyna rejestrowanie podejrzanej aktywności. W tym przypadku wykryto 2 uruchomione kontenery z uprawnieniami, z których jeden miał wrażliwe montowanie, a po kilku sekundach wykryto otwarcie powłoki w jednym z kontenerów.
Monitorowanie Dockera
Możesz użyć auditd do monitorowania Dockera.
Referencje
WhiteIntel to wyszukiwarka zasilana przez dark web, która oferuje darmowe funkcjonalności do sprawdzenia, czy firma lub jej klienci zostali skompromitowani przez złośliwe oprogramowanie kradnące dane.
Ich głównym celem WhiteIntel jest zwalczanie przejęć kont i ataków ransomware wynikających z oprogramowania kradnącego informacje.
Możesz odwiedzić ich stronę internetową i wypróbować ich silnik za darmo pod adresem:
Last updated