Docker --privileged
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Kiedy uruchamiasz kontener jako uprzywilejowany, wyłączasz następujące zabezpieczenia:
W uprzywilejowanym kontenerze wszystkie urządzenia mogą być dostępne w /dev/
. Dlatego możesz uciec przez zamontowanie dysku hosta.
Systemy plików jądra zapewniają mechanizm, który pozwala procesowi modyfikować zachowanie jądra. Jednak w przypadku procesów kontenerowych chcemy zapobiec ich wprowadzaniu jakichkolwiek zmian w jądrze. Dlatego montujemy systemy plików jądra jako tylko do odczytu w obrębie kontenera, zapewniając, że procesy kontenerowe nie mogą modyfikować jądra.
System plików /proc jest selektywnie zapisywalny, ale dla bezpieczeństwa, niektóre części są chronione przed dostępem do zapisu i odczytu poprzez nałożenie na nie tmpfs, co zapewnia, że procesy kontenera nie mogą uzyskać dostępu do wrażliwych obszarów.
tmpfs to system plików, który przechowuje wszystkie pliki w pamięci wirtualnej. tmpfs nie tworzy żadnych plików na twoim dysku twardym. Więc jeśli odmontujesz system plików tmpfs, wszystkie pliki w nim zawarte zostaną na zawsze utracone.
Silniki kontenerowe uruchamiają kontenery z ograniczoną liczbą możliwości, aby kontrolować, co dzieje się wewnątrz kontenera domyślnie. Privileged mają wszystkie możliwości dostępne. Aby dowiedzieć się więcej o możliwościach, przeczytaj:
Linux CapabilitiesMożesz manipulować możliwościami dostępnymi dla kontenera bez uruchamiania w trybie --privileged
, używając flag --cap-add
i --cap-drop
.
Seccomp jest przydatny do ograniczenia syscalli, które kontener może wywołać. Domyślny profil seccomp jest włączony domyślnie podczas uruchamiania kontenerów docker, ale w trybie uprzywilejowanym jest wyłączony. Dowiedz się więcej o Seccomp tutaj:
SeccompRównież zauważ, że gdy Docker (lub inne CRI) są używane w klastrze Kubernetes, filtr seccomp jest domyślnie wyłączony.
AppArmor to ulepszenie jądra, które ogranicza kontenery do ograniczonego zestawu zasobów z profilami per program. Gdy uruchamiasz z flagą --privileged
, ta ochrona jest wyłączona.
Uruchomienie kontenera z flagą --privileged
wyłącza etykiety SELinux, powodując, że dziedziczy on etykietę silnika kontenerowego, zazwyczaj unconfined
, co przyznaje pełny dostęp podobny do silnika kontenerowego. W trybie bezrootowym używa container_runtime_t
, podczas gdy w trybie rootowym stosuje spc_t
.
Przestrzenie nazw NIE są dotknięte flagą --privileged
. Mimo że nie mają włączonych ograniczeń bezpieczeństwa, nie widzą wszystkich procesów w systemie ani hosta sieciowego, na przykład. Użytkownicy mogą wyłączyć poszczególne przestrzenie nazw, używając flag silnika kontenerów --pid=host
, --net=host
, --ipc=host
, --uts=host
.
Domyślnie silniki kontenerów nie wykorzystują przestrzeni nazw użytkownika, z wyjątkiem kontenerów bezrootowych, które ich wymagają do montowania systemu plików i używania wielu UID. Przestrzenie nazw użytkownika, niezbędne dla kontenerów bezrootowych, nie mogą być wyłączane i znacznie zwiększają bezpieczeństwo, ograniczając uprawnienia.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)