Docker --privileged
Reading time: 7 minutes
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- Bize katılın 💬 Discord grubuna veya telegram grubuna veya bizi takip edin Twitter'da 🐦 @hacktricks_live.
- Hacking ipuçlarını paylaşın, HackTricks ve HackTricks Cloud github reposuna PR göndererek.
Ne Etkiler
Bir konteyneri ayrıcalıklı olarak çalıştırdığınızda, devre dışı bıraktığınız korumalar şunlardır:
Mount /dev
Ayrıcalıklı bir konteynerde, tüm cihazlar /dev/
içinde erişilebilir. Bu nedenle, diskin ana makineden mount edilmesiyle kaçabilirsiniz.
# docker run --rm -it alpine sh
ls /dev
console fd mqueue ptmx random stderr stdout urandom
core full null pts shm stdin tty zero
Sadece okunur çekirdek dosya sistemleri
Çekirdek dosya sistemleri, bir sürecin çekirdeğin davranışını değiştirmesi için bir mekanizma sağlar. Ancak, konteyner süreçleri söz konusu olduğunda, onların çekirdekte herhangi bir değişiklik yapmalarını önlemek istiyoruz. Bu nedenle, çekirdek dosya sistemlerini konteyner içinde sadece okunur olarak monte ediyoruz ve böylece konteyner süreçlerinin çekirdeği değiştirmesini engelliyoruz.
# docker run --rm -it alpine sh
mount | grep '(ro'
sysfs on /sys type sysfs (ro,nosuid,nodev,noexec,relatime)
cpuset on /sys/fs/cgroup/cpuset type cgroup (ro,nosuid,nodev,noexec,relatime,cpuset)
cpu on /sys/fs/cgroup/cpu type cgroup (ro,nosuid,nodev,noexec,relatime,cpu)
cpuacct on /sys/fs/cgroup/cpuacct type cgroup (ro,nosuid,nodev,noexec,relatime,cpuacct)
Çekirdek dosya sistemlerini maskeleme
/proc dosya sistemi seçici olarak yazılabilir, ancak güvenlik için, belirli kısımlar tmpfs ile örtülerek yazma ve okuma erişiminden korunur, bu da konteyner süreçlerinin hassas alanlara erişememesini sağlar.
[!NOTE] > tmpfs, tüm dosyaları sanal bellekte depolayan bir dosya sistemidir. tmpfs, sabit diskinizde herhangi bir dosya oluşturmaz. Bu nedenle, bir tmpfs dosya sistemini kaldırırsanız, içinde bulunan tüm dosyalar sonsuza dek kaybolur.
# docker run --rm -it alpine sh
mount | grep /proc.*tmpfs
tmpfs on /proc/acpi type tmpfs (ro,relatime)
tmpfs on /proc/kcore type tmpfs (rw,nosuid,size=65536k,mode=755)
tmpfs on /proc/keys type tmpfs (rw,nosuid,size=65536k,mode=755)
Linux yetenekleri
Konteyner motorları, konteynerin içinde neler olduğunu kontrol etmek için konteynerleri sınırlı sayıda yetenekle başlatır. Ayrıcalıklı olanlar tüm yeteneklere erişim sağlar. Yetenekler hakkında bilgi edinmek için okuyun:
# docker run --rm -it alpine sh
apk add -U libcap; capsh --print
[...]
Current: cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap=eip
Bounding set =cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap
[...]
Bir konteynerin kullanılabilir yeteneklerini --privileged
modda çalıştırmadan --cap-add
ve --cap-drop
bayraklarını kullanarak manipüle edebilirsiniz.
Seccomp
Seccomp, bir konteynerin çağırabileceği syscall'ları sınırlamak için faydalıdır. Docker konteynerleri çalıştırıldığında varsayılan olarak bir seccomp profili etkinleştirilir, ancak ayrıcalıklı modda devre dışı bırakılır. Seccomp hakkında daha fazla bilgi edinin:
# docker run --rm -it alpine sh
grep Seccomp /proc/1/status
Seccomp: 2
Seccomp_filters: 1
# You can manually disable seccomp in docker with
--security-opt seccomp=unconfined
Ayrıca, Docker (veya diğer CRI'ler) bir Kubernetes kümesinde kullanıldığında, seccomp filtresi varsayılan olarak devre dışıdır.
AppArmor
AppArmor, konteynerleri sınırlı bir kaynak kümesine per-program profilleri ile sınırlamak için bir çekirdek geliştirmesidir. --privileged
bayrağı ile çalıştığınızda, bu koruma devre dışıdır.
# You can manually disable seccomp in docker with
--security-opt apparmor=unconfined
SELinux
--privileged
bayrağı ile bir konteyner çalıştırmak SELinux etiketlerini devre dışı bırakır ve konteyner motorunun etiketini, genellikle unconfined
, miras almasına neden olur; bu da konteyner motoruna benzer şekilde tam erişim sağlar. Rootless modda container_runtime_t
kullanılırken, root modda spc_t
uygulanır.
# You can manually disable selinux in docker with
--security-opt label:disable
Ne Etkilemez
Ad Alanları
Ad alanları --privileged
bayrağından ETKİLENMEZ. Güvenlik kısıtlamaları etkin olmasa da, örneğin sistemdeki veya ana ağdaki tüm süreçleri göremezler. Kullanıcılar, --pid=host
, --net=host
, --ipc=host
, --uts=host
konteyner motoru bayraklarını kullanarak bireysel ad alanlarını devre dışı bırakabilirler.
# docker run --rm --privileged -it alpine sh
ps -ef
PID USER TIME COMMAND
1 root 0:00 sh
18 root 0:00 ps -ef
Kullanıcı ad alanı
Varsayılan olarak, konteyner motorları kullanıcı ad alanlarını kullanmaz, köksüz konteynerler hariç, bu konteynerler dosya sistemi montajı ve birden fazla UID kullanmak için bunlara ihtiyaç duyar. Köksüz konteynerler için hayati öneme sahip olan kullanıcı ad alanları devre dışı bırakılamaz ve ayrıcalıkları kısıtlayarak güvenliği önemli ölçüde artırır.
Referanslar
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- Bize katılın 💬 Discord grubuna veya telegram grubuna veya bizi takip edin Twitter'da 🐦 @hacktricks_live.
- Hacking ipuçlarını paylaşın, HackTricks ve HackTricks Cloud github reposuna PR göndererek.