Container Escape Nedir?
Container escape, bir saldırganın container içinden çıkarak host işletim sistemine veya diğer container’lara erişim sağlamasıdır.
Bu durum gerçekleştiğinde saldırgan:
- Host dosya sistemine erişebilir
- Diğer container’ları manipüle edebilir
- Yetki yükseltme gerçekleştirebilir
- Tüm cluster üzerinde kontrol sağlayabilir
İzolasyon kırıldığında zincirleme etki başlar.
Neden Gerçek Bir Risk?
Docker ve benzeri container platformları varsayılan olarak güvenli tasarlanmıştır. Ancak yanlış yapılandırmalar, eski sürümler ve zayıf erişim kontrolleri bu güvenliği aşındırır.
Risk genellikle şu durumlarda artar:
1. Privileged Container Kullanımı
--privileged parametresi ile başlatılan container’lar host üzerinde geniş yetkilere sahip olur. Bu, güvenlik bariyerlerini inceltir.
2. Host Mount Edilmiş Volume’ler
Container içine /var/run/docker.sock gibi kritik soketlerin mount edilmesi, saldırgana Docker daemon üzerinde kontrol imkânı verebilir.
3. Kernel Zafiyetleri
Container’lar aynı kernel’i paylaşır. Kernel seviyesinde bir güvenlik açığı varsa, izolasyon katmanı aşılabilir.
4. Root Olarak Çalışan Container’lar
Root kullanıcı ile çalışan uygulamalar, yetki yükseltme riskini artırır. Container içindeki root, doğru yapılandırılmadıysa host root’a dönüşebilir.
Gerçek Dünya Senaryosu
Bir web uygulaması container içinde çalışıyor. Uygulamada RCE zafiyeti var. Saldırgan container içine erişiyor.
Eğer:
- Container privileged ise
- Docker socket mount edilmişse
- AppArmor veya SELinux profili uygulanmamışsa
Saldırgan yeni container başlatabilir, host dosya sistemini mount edebilir ve kontrolü ele geçirebilir.
Bu noktada mesele artık uygulama güvenliği değil, altyapı ihlalidir.
Kubernetes Ortamlarında Risk Daha Büyük
Container escape yalnızca tek bir Docker host’u etkilemez. Kubernetes ortamında başarılı bir escape:
- Node ele geçirilmesine
- Service account token’larının çalınmasına
- Cluster-wide erişime
yol açabilir.
Yanlış yapılandırılmış RBAC politikaları ve pod security ayarları bu riski büyütür.
Savunma Stratejileri
Container escape riskini azaltmak için çok katmanlı güvenlik yaklaşımı gerekir.
1. Least Privilege Prensibi
- Container’ları root olarak çalıştırmayın
- Privileged moddan kaçının
- Minimal capability setleri kullanın
2. Host Güvenliği
- Kernel güncellemelerini düzenli yapın
- AppArmor veya SELinux kullanın
- Seccomp profilleri uygulayın
3. Image Güvenliği
- Güvenilir registry kullanın
- Image taraması yapın
- Minimal base image tercih edin
4. Runtime İzleme
- Davranışsal anomali tespiti
- Runtime security araçları
- Erişim ve sistem çağrısı izleme
5. Docker Socket’i Koruma
/var/run/docker.sock erişimini sınırlandırın. Bu dosya fiilen root yetkisi anlamına gelir.
Yanlış Güven Algısı
Container kullanmak otomatik olarak güvenli olmak anlamına gelmez. İzolasyon vardır ama bu bir sanallaştırma katmanı değildir. VM’lere göre daha ince bir sınır söz konusudur.
Container güvenliği şu üç soruya dayanır:
- İzolasyon ne kadar sıkı?
- Yetkiler ne kadar kısıtlı?
- Runtime davranış ne kadar izleniyor?
Sonuç
Container escape saldırıları nadir ama etkisi yüksektir. Başarılı bir kaçış, uygulama seviyesinden altyapı seviyesine sıçrayan bir kriz yaratır.
Modern DevOps hızının içinde güvenlik geri planda kalırsa, container sınırları bir güvenlik duvarı değil ince bir perdeye dönüşebilir.
Kısacası mesele container kullanmak değil, container’ı doğru şekilde çalıştırmaktır. Çünkü izolasyon güçlüdür ama dikkatsiz yapılandırma karşısında kırılganlaşır.
Container Escape Saldırıları: Docker Ortamlarında Gerçek Riskler