Learn & practice AWS Hacking:<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">\
Learn & practice GCP Hacking: <imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">](https://training.hacktricks.xyz/courses/grte)
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
[**WhiteIntel**](https://whiteintel.io) to **silnik wyszukiwania** zasilany przez **dark-web**, który oferuje **darmowe** funkcjonalności do sprawdzenia, czy firma lub jej klienci zostali **skompromentowani** przez **złośliwe oprogramowanie kradnące**.
Docker to **wiodąca platforma** w **branży konteneryzacji**, prowadząca **ciągłe innowacje**. Umożliwia łatwe tworzenie i dystrybucję aplikacji, od **tradycyjnych po futurystyczne**, i zapewnia ich **bezpieczne wdrożenie** w różnych środowiskach.
* [**containerd**](http://containerd.io): To **rdzeń czasu wykonania** dla kontenerów, odpowiedzialny za kompleksowe **zarządzanie cyklem życia kontenera**. Obejmuje to obsługę **transferu i przechowywania obrazów**, a także nadzorowanie **wykonywania, monitorowania i sieci** kontenerów. **Szczegółowe informacje** na temat containerd są **dalsze badane**.
* **container-shim** odgrywa kluczową rolę jako **pośrednik** w obsłudze **kontenerów bezgłowych**, płynnie przejmując po **runc** po zainicjowaniu kontenerów.
* [**runc**](http://runc.io): Uznawany za **lekką i uniwersalną** zdolność czasu wykonania kontenerów, runc jest zgodny z **standardem OCI**. Jest używany przez containerd do **uruchamiania i zarządzania kontenerami** zgodnie z **wytycznymi OCI**, rozwijając się z oryginalnego **libcontainer**.
* [**grpc**](http://www.grpc.io) jest niezbędny do **ułatwienia komunikacji** między containerd a **docker-engine**, zapewniając **efektywną interakcję**.
* [**OCI**](https://www.opencontainers.org) jest kluczowe w utrzymywaniu **specyfikacji OCI** dla czasu wykonania i obrazów, przy czym najnowsze wersje Dockera są **zgodne zarówno z obrazem OCI, jak i standardami czasu wykonania**.
**Containerd** został specjalnie opracowany, aby zaspokoić potrzeby platform kontenerowych, takich jak **Docker i Kubernetes**, między innymi. Jego celem jest **uproszczenie uruchamiania 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 jego użytkowników, dążąc do pominięcia zbędnych komponentów. Jednak całkowite osiągnięcie tego celu uznawane jest za trudne.
Kluczową decyzją projektową jest to, że **Containerd nie obsługuje sieci**. Sieć jest uważana za kluczowy element w systemach rozproszonych, z złożonościami takimi jak Software Defined Networking (SDN) i odkrywanie usług, które znacznie różnią się w zależności od platformy. Dlatego Containerd pozostawia aspekty sieciowe do zarządzania przez platformy, które wspiera.
Podczas gdy **Docker wykorzystuje Containerd** do uruchamiania kontenerów, ważne jest, aby zauważyć, że Containerd obsługuje tylko podzbiór funkcjonalności Dockera. Konkretnie, Containerd nie ma możliwości zarządzania siecią obecnych w Dockerze i nie obsługuje bezpośredniego tworzenia klastrów Docker. To rozróżnienie podkreśla skoncentrowaną rolę Containerd jako środowiska uruchomieniowego kontenerów, delegując bardziej wyspecjalizowane funkcjonalności do platform, z którymi się integruje.
**Podman** to silnik kontenerów open-source, który przestrzega standardów [Open Container Initiative (OCI)](https://github.com/opencontainers), opracowany i utrzymywany przez Red Hat. Wyróżnia się na tle Dockera kilkoma charakterystycznymi cechami, w szczególności **architekturą bezdemową** oraz wsparciem dla **kontenerów bez uprawnień root**, co umożliwia użytkownikom uruchamianie kontenerów bez uprawnień administratora.
Podman został zaprojektowany tak, aby był kompatybilny z API Dockera, co pozwala na używanie poleceń CLI Dockera. Ta kompatybilność obejmuje jego ekosystem, który zawiera narzędzia takie jak **Buildah** do budowania obrazów kontenerów oraz **Skopeo** do operacji na obrazach, takich jak push, pull i inspect. Więcej informacji na temat tych narzędzi można znaleźć na ich [stronie GitHub](https://github.com/containers/buildah/tree/master/docs/containertools).
* **Architektura**: W przeciwieństwie do modelu klient-serwer Dockera z działającym w tle demonem, Podman działa bez demona. Taki projekt oznacza, że kontenery działają z uprawnieniami użytkownika, który je uruchamia, co zwiększa bezpieczeństwo poprzez eliminację potrzeby dostępu root.
* **Integracja z Systemd**: Podman integruje się z **systemd** w celu zarządzania kontenerami, co pozwala na zarządzanie kontenerami za pomocą jednostek systemd. To kontrastuje z użyciem systemd przez Dockera głównie do zarządzania procesem demona Dockera.
* **Kontenery bez uprawnień root**: Kluczową cechą Podmana jest jego zdolność do uruchamiania kontenerów z uprawnieniami użytkownika, który je inicjuje. Takie podejście minimalizuje ryzyko związane z naruszeniami kontenerów, zapewniając, że atakujący uzyskują jedynie uprawnienia skompromitowanego użytkownika, a nie dostęp root.
Podejście Podmana oferuje bezpieczną i elastyczną alternatywę dla Dockera, kładąc nacisk na zarządzanie uprawnieniami użytkowników oraz kompatybilność z istniejącymi przepływami pracy Dockera.
Remote API działa domyślnie na porcie 2375, gdy jest włączony. Usługa domyślnie nie wymaga uwierzytelnienia, co pozwala atakującemu na uruchomienie uprzywilejowanego kontenera docker. Korzystając z Remote API, można podłączyć hosty / (katalog główny) do kontenera i odczytywać/zapisywać pliki środowiska hosta.
Jeśli możesz **skontaktować się z zdalnym API dockera za pomocą polecenia `docker`**, możesz **wykonać** dowolne z **poleceń dockera** [**wcześniej** skomentowanych](2375-pentesting-docker.md#basic-commands), aby zainteresować się usługą.
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/](https://securityboulevard.com/2019/02/abusing-docker-api-socket/)
Wykorzystując to, możliwe jest wydostanie się z kontenera, możesz uruchomić słaby kontener na zdalnej maszynie, uciec z niego i skompromitować maszynę:
Jeśli jesteś wewnątrz hosta, który używa dockera, możesz [**przeczytać te informacje, aby spróbować podnieść uprawnienia**](../linux-hardening/privilege-escalation/#writable-docker-socket).
* Możesz użyć narzędzia [https://github.com/genuinetools/amicontained](https://github.com/genuinetools/amicontained) do sprawdzenia, jakie uprawnienia będzie miała kontener, gdy będzie uruchamiany z różnymi opcjami zabezpieczeń. To jest przydatne, aby znać implikacje używania niektórych opcji zabezpieczeń do uruchamiania kontenera:
* Możesz użyć narzędzia [https://github.com/buddy-works/dockerfile-linter](https://github.com/buddy-works/dockerfile-linter), aby **sprawdzić swój Dockerfile** i znaleźć wszelkiego rodzaju błędne konfiguracje. Każda błędna konfiguracja otrzyma identyfikator, możesz znaleźć tutaj [https://github.com/buddy-works/dockerfile-linter/blob/master/Rules.md](https://github.com/buddy-works/dockerfile-linter/blob/master/Rules.md), jak naprawić każdą z nich.
* Możesz użyć narzędzia [https://github.com/replicatedhq/dockerfilelint](https://github.com/replicatedhq/dockerfilelint), aby **sprawdzić swój Dockerfile** i znaleźć wszelkiego rodzaju błędne konfiguracje.
* Możesz użyć narzędzia [https://github.com/RedCoolBeans/dockerlint](https://github.com/RedCoolBeans/dockerlint), aby **sprawdzić swój Dockerfile** i znaleźć wszelkiego rodzaju błędne konfiguracje.
* Możesz użyć narzędzia [https://github.com/hadolint/hadolint](https://github.com/hadolint/hadolint), aby **sprawdzić swój Dockerfile** i znaleźć wszelkiego rodzaju błędne konfiguracje.
* Możesz użyć narzędzia [https://github.com/falcosecurity/falco](https://github.com/falcosecurity/falco), aby wykryć **podejrzane zachowanie w uruchomionych kontenerach**.
* Zauważ w poniższym fragmencie, jak **Falco kompiluje moduł jądra i wstawia go**. Po tym ładuje zasady i **zaczyna rejestrować podejrzane aktywności**. W tym przypadku wykryto 2 uruchomione kontenery z uprawnieniami, jeden z nich z wrażliwym montażem, a po kilku sekundach wykryto, jak w jednym z kontenerów otwarto powłokę.
mkdir: cannot create directory '/lib/modules/5.0.0-20-generic/kernel/extra': Read-only file system
cp: cannot create regular file '/lib/modules/5.0.0-20-generic/kernel/extra/falco-probe.ko': No such file or directory
depmod...
DKMS: install completed.
* Trying to load a dkms falco-probe, if present
falco-probe found and loaded in dkms
2021-01-04T12:03:20+0000: Falco initialized with configuration file /etc/falco/falco.yaml
2021-01-04T12:03:20+0000: Loading rules from file /etc/falco/falco_rules.yaml:
2021-01-04T12:03:22+0000: Loading rules from file /etc/falco/falco_rules.local.yaml:
2021-01-04T12:03:22+0000: Loading rules from file /etc/falco/k8s_audit_rules.yaml:
2021-01-04T12:03:24+0000: Starting internal webserver, listening on port 8765
2021-01-04T12:03:24.646959000+0000: Notice Privileged container started (user=<NA> command=container:db5dfd1b6a32 laughing_kowalevski (id=db5dfd1b6a32) image=ubuntu:18.04)
2021-01-04T12:03:24.664354000+0000: Notice Container with sensitive mount started (user=<NA> command=container:4822e8378c00 xenodochial_kepler (id=4822e8378c00) image=ubuntu:modified mounts=/:/host::true:rslave)
2021-01-04T12:03:24.664354000+0000: Notice Privileged container started (user=root command=container:4443a8daceb8 focused_brahmagupta (id=4443a8daceb8) image=falco:latest)
2021-01-04T12:04:56.270553320+0000: Notice A shell was spawned in a container with an attached terminal (user=root xenodochial_kepler (id=4822e8378c00) shell=bash parent=runc cmdline=bash terminal=34816 container_id=4822e8378c00 image=ubuntu)
[**WhiteIntel**](https://whiteintel.io) to **silnik wyszukiwania** zasilany **dark-webem**, który oferuje **darmowe** funkcjonalności do sprawdzenia, czy firma lub jej klienci zostali **skompromentowani** przez **złośliwe oprogramowanie kradnące**.
Ucz się i ćwicz Hacking AWS:<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">\
Ucz się i ćwicz Hacking GCP: <imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">](https://training.hacktricks.xyz/courses/grte)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się trikami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.