Giriş
Bulut bilişim ve mikroservis mimarilerinin yaygınlaşmasıyla birlikte, container teknolojileri modern yazılım dağıtım süreçlerinin merkezine yerleşmiştir. Bu ekosistemde en popüler araç olan Docker; hız, taşınabilirlik ve kaynak verimliliği gibi büyük avantajlar sunmaktadır. Ancak, geleneksel sanal makinelerden (VM) farklı olarak container'lar, ana makinenin (host) işletim sistemi çekirdeğini (kernel) paylaşırlar. Bu mimari yapı, izolasyon sınırlarının doğru çizilmemesi durumunda ciddi siber güvenlik risklerini de beraberinde getirir.
Bu dökümanda, Docker ortamlarında en sık karşılaşılan dört kritik zafiyet alanı (Container Escape, Image Güvenliği, Secrets Yönetimi ve Docker Socket İhlali) teknik boyutlarıyla ele alınacak ve bu risklere karşı uygulanabilecek somut sıkılaştırma adımları incelenecektir.
Kritik Zafiyet Alanları ve Siber Riskler
Container Escape (Container'dan Sızma)
Container Escape, bir saldırganın container içindeki kısıtlı ortamdan kurtularak doğrudan ana makinenin (host) işletim sistemine ve kaynaklarına erişim sağlaması durumudur. En tehlikeli Docker risklerinden biridir. Genellikle yanlış yapılandırmalar veya Linux çekirdeğindeki (kernel) zafiyetler (örneğin geçmişteki Dirty COW veya runc zafiyetleri) nedeniyle tetiklenir.
En büyük tetikleyici, container'ın '--privileged' flag'i ile çalıştırılmasıdır. Bu modda çalışan bir container, host üzerindeki neredeyse tüm kernel yetkilerine sahip olur ve cihazlara doğrudan erişebilir. Saldırgan, root yetkileriyle host diskini container içine mount ederek ana sistemi tamamen ele geçirebilir.
Image (İmaj) Güvenliği
Docker imajları, container'ların temel yapı taşlarıdır. Güvenilmeyen veya doğrulanmamış kaynaklardan (örneğin Docker Hub üzerindeki anonim repolardan) indirilen imajlar, bilinen kritik CVE zafiyetleri içerebilir veya içerisine kötü amaçlı yazılımlar (malware, kripto madencilik araçları) gizlenmiş olabilir.
Ayrıca, imajların gereğinden fazla paket barındırması, saldırı yüzeyini genişletir. İmaj içinde bırakılan güncellenmemiş kütüphaneler, saldırganların sisteme sızması için açık bir kapı bırakır.
Secrets (Hassas Veri) Yönetimi
Uygulamaların veritabanlarına, API servislerine veya harici sistemlere bağlanabilmesi için şifreler, token'lar ve SSL sertifikaları gibi hassas verilere (secrets) ihtiyacı vardır. Geliştirme süreçlerinde yapılan en yaygın hatalardan biri, bu verilerin Dockerfile içinde 'ENV' talimatıyla tanımlanması veya doğrudan kaynak koda gömülmesidir.
Docker imajları katmanlı bir yapıya sahiptir. İmaj satır satır build edilirken eklenen bir secret, sonraki katmanlarda silinse dahi imaj geçmişinden veya imaj katmanları analiz edilerek geri döndürülebilir. Bu durum, imaja erişimi olan herkesin gizli anahtarları ele geçirmesine yol açar.
Docker Socket Tehlikesi
Docker daemon, varsayılan olarak '/var/run/docker.sock' isimli bir Unix socket dosyası üzerinden yönetilir. Bu socket'e erişimi olan bir kullanıcı veya süreç, Docker üzerinde tam yetkiye sahiptir; yeni container başlatabilir, silebilir veya mevcut container'ları manipüle edebilir.
Bazı yönetim araçları veya CI/CD tool'ları (örneğin Jenkins veya Portainer), Docker'ı container içinden yönetebilmek için bu socket dosyasının container içine mount edilmesini gerektirir. Eğer bu container siber saldırganların eline geçerse, saldırgan doğrudan host üzerindeki Docker daemon'a komut gönderebilir. '--privileged' moduna gerek kalmadan, host sistem üzerinde root yetkisiyle yeni bir container ayağa kaldırıp host'un tüm diskini ele geçirebilir.
Risk Karşılaştırma ve Etki Matrisi

Sıkılaştırma ve Güvenlik Önlemleri (Best Practices)
En Düşük Yetki İlkesi (Non-root):
Docker container'ları varsayılan olarak root kullanıcısı ile çalışır. Dockerfile içinde 'USER' talimatı kullanılarak uygulamanın yetkisiz bir sistem kullanıcısı (örneğin 'nobody' veya özel oluşturulmuş bir user) ile çalışması sağlanmalıdır.
Salt Okunur Dosya Sistemi:
Container'ların runtime sırasında dosya sistemini değiştirmesine gerek yoksa, container '--read-only' flag'i ile başlatılmalıdır. Bu, zararlı yazılımların sisteme kalıcı olarak yazılmasını engeller.
Minimal ve Doğrulanmış İmajlar:
Alpine Linux veya Google tarafından sunulan 'Distroless' imajlar tercih edilmelidir. Paket sayısı ne kadar az olursa, zafiyet barındırma ihtimali o kadar düşük olur. Ayrıca imajlar Trivy, Grype veya Aqua Security gibi araçlarla CI/CD süreçlerinde düzenli taranmalıdır.
Güvenli Secrets Mimarisi:
Şifreler ve anahtarlar asla imaj içine yazılmamalıdır. Bunun yerine Docker Secrets (Swarm modunda), Kubernetes Secrets veya harici olarak HashiCorp Vault, AWS Secrets Manager gibi merkezi ve şifreli sistemler entegre edilmelidir.
Docker Socket Koruması:
Mümkünse docker.sock dosyası container'lara asla mount edilmemelidir. Eğer yönetim amaçlı uzak erişim gerekiyorsa, socket yerine TLS şifrelemeli korunan TCP portları (port 2376) tercih edilmeli ve erişim IP kısıtlamalarıyla sınırlandırılmalıdır.
Sonuç
Container güvenliği, tek bir katmanda alınacak önlemlerle sağlanamaz. İmajın kodlandığı andan (Shift-Left), prod ortamında çalıştığı ana kadar (Runtime) uçtan uca bir güvenlik perspektifi şarttır. Temel zafiyet noktalarının bilincinde olmak ve varsayılan güvensiz ayarları sıkılaştırmak, Docker tabanlı altyapıları siber tehditlere karşı büyük oranda koruyacaktır.
Container Güvenliği: Docker Ortamlarında Siber Riskler ve Çözüm Yolları