Konteyner Nedir?
Konteyner teknolojisi, yazılım geliştirmenin paradigmasını dönüştürmüş, uygulamaların izole, taşınabilir ve konsistent ortamlarda yürütülmesini mümkün kılmıştır. Bu inovasyon sayesinde, uygulamalar ve onların gereksinim duyduğu bağımlılıklar, çeşitli bilgisayar sistemlerinde aynı performansı sergileyebilecek şekilde birlikte paketlenir. Sanal makinelere nazaran daha az kaynak tüketen ve daha çabuk harekete geçirilebilen konteynerler, sistem kaynaklarını daha etkin bir şekilde kullanır. Geliştiricilere, yazılımlarını bir kez kodlayıp çeşitli platformlarda sorunsuzca çalıştırma esnekliği sağlayarak, “bir kez yaz, her yerde çalıştır” prensibini gerçekleştirme olanağı sunar. Konteynerler, yazılımın geliştirme, test ve üretim aşamaları arasında kesintisiz bir geçiş sağlayarak, DevOps ve sürekli entegrasyon/daimi teslimat (CI/CD) yöntemlerine mükemmel uyum sağlar. Bu durum, yazılım geliştirme ve dağıtım sürecini hızlandırırken, bu süreçlerin güvenilirliğini ve tutarlılığını artırır, işletmelerin teknolojik adaptasyonunu kolaylaştırır. Bu teknolojiyle, yazılım endüstrisi, daha verimli, güvenilir ve hızlı geliştirme ve dağıtım mekanizmaları elde etmiş olup, konteynerlerin sunduğu avantajlar işletmelerin rekabetçi kalmalarını destekler.
İmaj Güvenliği
Konteyner teknolojisinin merkezinde yer alan konteyner imajı, uygulamaların izolasyon içinde ve bağımsız olarak çalıştırılmasını mümkün kılan, bağımlılıkları ve yapılandırma dosyalarını içinde barındıran sabit bir dosya yapısını ifade eder. Her bir imaj, bir uygulamanın veya hizmetin çalışabilmesi için gereken tüm elemanları bir arada sunar, böylelikle uygulamanın çeşitli bilgisayar ortamlarında aynı performansı göstermesine olanak tanır. Bu yapısal özellik, farklı platformlar arasında uygulamaların sorunsuz ve tutarlı bir şekilde çalıştırılabilmesi ilkesini destekler, yazılım geliştirme süreçlerini standartlaştırır ve DevOps ile sürekli entegrasyon/sürekli teslimat (CI/CD) metodolojilerinin etkin bir şekilde uygulanmasına katkıda bulunur. Konteyner imajları, yazılım geliştirme ve dağıtımını daha hızlı, güvenli ve etkin hale getirerek, teknolojik adaptasyon süreçlerini önemli ölçüde kolaylaştırır.
Belirli bir imaj birden fazla etikete sahip olabilir. Bir imaj yayıncısı, her derlemede imajı değiştirerek birçok kez bir imaj ve etiket kombinasyonu oluşturabilir. İmaj güvenliği için Docker Content Trust (DCT) kullanılır. DCT, bir imajın TAG kısmıyla ilişkilidir.
Docker Content Trust (DCT), Docker imajlarının güvenliğine yönelik stratejik bir yaklaşım sunar, imajların imzalanmasını ve bu imzaların doğrulanmasını temel alır. Bu sistem, kullanıcıların, imajların orijinalliğinden ve zarar görmemiş olmasından emin olmalarını sağlayarak, güvenlik standartlarını artırır. TUF (The Update Framework) ve Notary gibi projeler üzerine kurulu olan DCT, sağlam bir güvenlik altyapısı sunar.
DCT‘nin temel amacı, konteyner imajlarının bütünlüğünü ve orijinalliğini korumaktır. Aktif hale getirildiğinde, DCT kullanıcıların yalnızca doğrulanmış ve güvenilir kaynaklardan gelen Docker imajlarını kullanmalarını sağlar; herhangi bir değişiklik yalnızca ilgili yetkili tarafından onaylandığında geçerli kabul edilir. Bu, yazılım tedarik zincirine yönelik saldırılara karşı önemli bir savunma mekanizması oluşturur ve kötü niyetli değişikliklerin veya zararlı kodların dağıtılmasını engeller.
DCT, geliştiricilerin ve sistem yöneticilerinin, uygulamaları üretim ortamlarına taşımadan önce güvenliklerinden emin olmalarını sağlayan kritik bir araçtır. Bu özellik, konteyner tabanlı uygulama geliştirme süreçlerinde güvenliği merkeze alarak, DevOps ve CI/CD gibi süreçlerin daha güvenli bir şekilde yürütülmesine olanak tanır.
Her imaj deposu, imaj yayıncılarının bir imaj etiketini imzalamak için kullandığı bir dizi anahtara sahiptir. İmaj yayıncıları, hangi etiketleri imzalayacakları konusunda takdir yetkisine sahiptir.
Sonuç olarak, DCT, yazılım geliştirme ve dağıtımını güvenlik odaklı bir perspektifle destekleyerek, teknolojik uygulamaların güvenliğini önemli ölçüde artırır.
On-prem veya Private-Cloud imaj registeryleri oluşturma
Docker Trusted Registry, kullandığınız Docker Image’larını güvenli bir şekilde saklayabilmeniz ve yönetebilmeniz için Firewall arkasına kurulan kurumsal düzeyde bir Image depolama çözümüdür.
DTR’ı On-Premise veya sanal Private-Cloud ortamlarınıza kurabilirsiniz.
DTR, yetkili kullanıcıların Docker Image’larını inceleyip yönetmesine olanak sağlayan bir Web kullanıcı arayüzüne sahiptir. Bu arayüzde Dockerfile dosyasında Image üreten satırları inceleyebilirsiniz. Hatta başka bir güzel özellik olarak, eğer güvenlik taramasını etkinleştirdiyseniz Image’larınızda yüklü olan tüm yazılımları da görüntüleyebilirsiniz. Gerçekleşen işlemleri inceleme ve denetleme imkanı da sağlayan bu arayüz, kurumsal IT firmaları için cezbedici konumdadır.
Distroless Images
Docker imajları, bir yazılımı çalıştırmak üzere ihtiyaç duyulan tüm elemanları içeren, entegre ve hafif paketlerdir. Bu paketler, yazılımın kodundan, gerekli kütüphanelere, sistem araçlarına ve çalışma zamanına kadar her şeyi barındırır. Bu imajların oluşturulması için, imajı derlemek amacıyla çeşitli komutlar içeren bir Dockerfile kullanılır.
Distroless Docker imajları ise, standart Docker imajlarının daha minimal bir hali olarak karşımıza çıkar; yalnızca bir uygulamanın çalışması için zorunlu olan temel bileşenleri içerirler. Standart bir linux çekirdeği üzerinde, iş yüklerimizi çalıştırabilmemiz için gereken minimum paketleri sağlayan bir linux sürümüdür. Bu tip imajlar, geleneksel işletim sistemi araçlarını ve kabukları içermez, bunun yerine işletim sisteminin sadece en temel çalışma zamanı unsurlarını taşırlar.
En önemli katkısı atak yüzeyini etkili bir biçimde küçültmesidir. Diğer önemli katkısı, daha az kaynak tüketimini desteklemesidir. Oluşturmak için Bazel gibi açık kaynak yazılımlar kullanılabilir. Bazel, yazılım oluşturma ve test etme otomasyonu için kullanılan ücretsiz ve açık kaynaklı bir yazılım aracıdır. (https://bazel.build/)
Docker İmajlarında Zafiyet Taraması
Clair, Docker ve appc konteynerleri için geliştirilmiş, açık kaynak kodlu bir güvenlik tarama aracıdır. Bu araç, konteynerlerin güvenlik açıklarını katman katman analiz eden bir API merkezli analiz motoruna sahiptir. Kullanıcılar, Clair aracılığıyla konteynerlerini sürekli olarak zafiyetlere karşı izleyebilir ve herhangi bir tehdit durumunda uyarı alabilirler. Bu uyarılar, Common Vulnerabilities and Exposures (CVE) gibi veritabanlarındaki bilgilere dayanarak sağlanır.
Eğer Clair, Ulusal Zafiyet Veritabanı‘nda (NVD) kayıtlı bir tehdit veya sorunu belirlerse, ilgili detayları çekip rapor halinde sunar. Clair‘in sunduğu başlıca özellikler şunlardır: Gelecekteki zafiyetlerin önüne geçmek üzere mevcut güvenlik açıklarını tespit etme, diğer araçlarla kolayca entegre olabilmesini sağlayan REST API, zafiyet bulunduğunda kullanıcıları bilgilendiren bildirim sistemi, tarama sonuçlarının ayrıntılı bir şekilde HTML formatında raporlanması ve düzenli aralıklarla meta veri güncellemesi yapma yeteneğidir. Bu özellikler, Clair’i konteyner tabanlı uygulamaların güvenliğini sağlamak için kritik bir araç haline getirir.
Anchore, Docker imajlarını kapsamlı bir şekilde analiz etmek üzere oluşturulmuş açık kaynaklı bir projedir ve bu imajların güvenlik durumunu belgeleyerek sertifikalandırır. Bu sistem, Kubernetes, Rancher, Amazon ECS, Docker Swarm gibi çeşitli orkestrasyon platformlarında ya da bağımsız bir şekilde işlev görebilir ve Jenkins eklentileri aracılığıyla CI/CD süreçlerinde de imaj taraması yapabilir.
Kubernetes için özel bir güvenlik tarama aracı arayışındaysanız, bu platformdaki güvenlik açıklarını tespit edebilecek araçları inceleyebilirsiniz.
Anchore’ye bir Docker imajı gönderdiğinizde, sistem imajı detaylı bir şekilde analiz eder ve varsa zafiyetler hakkında bilgi verir. Kullanıcılar, Anchore içinde kendi güvenlik politikalarını belirleyerek imajları bu politikalara göre değerlendirebilir. Anchore motoru, komut satırı arayüzü (CLI) veya REST API’leri üzerinden erişilebilir.
Anchore‘un sunduğu özellikler arasında; konteyner imajlarının, işletim sistemi paketlerinin ve yazılım artefaktlarının (örneğin, jar dosyalarının) detaylı incelemesi, CI/CD pipeline’ları ile entegrasyon yoluyla güvenlik ihlallerinin tespiti, risk taşıyan imajların oluşturulmasını ve dağıtılmasını önleyecek politikaların tanımlanması ve uygulanması, güvenli ve sertifikalı imajların kullanımını teşvik etme, ve zafiyetler, yapılandırma dosyaları, gizli bilgiler, açık portlar gibi çeşitli güvenlik kontrollerinin özelleştirilmesi yer alır. Bu yetenekler, Anchore’un Docker ve Kubernetes ekosistemlerinde güvenliği artıran kritik bir araç olmasını sağlar.
Dagda, Docker imajları ve konteynerlerindeki trojan, virüs ve benzeri kötü niyetli yazılımların yanı sıra bilinen güvenlik zafiyetlerini statik olarak analiz etmek için geliştirilen, ClamAV antivirüs motorunu kullanarak çalışan açık kaynak bir araçtır. Bu araç, başlangıçta CVE, Red Hat Güvenlik Bildirileri (RHSA), Red Hat Hata Bildirileri (RHBA), Bugtraq Kimlikleri (BID) ve Offensive Security gibi çeşitli kaynaklardan toplanan zafiyet verilerini MongoDB veritabanına entegre eder. Bu verilerin entegrasyonu sonrası, elde edilen zafiyet bilgileri temelinde konteyner ve imajlar üzerinde ayrıntılı bir inceleme gerçekleştirilir.
Dagda, aşağıdaki temel özelliklere sahiptir:
- Çeşitli Linux dağıtımları arasında CentOS, Ubuntu, OpenSUSE ve Alpine gibi seçenekleri desteklemektedir.
- Java, Python, Node.js, JavaScript, Ruby, PHP gibi dillerdeki bağımlılıkları analiz etme kapasitesine sahiptir.
- Çalışan konteynerlerin gözetimi için Falco ile entegre bir şekilde çalışmaktadır.
- Gerçekleştirilen her bir Docker imajı veya konteyner analizinin raporunu MongoDB‘de muhafaza ederek, bu birimlerin tarihçesinin korunmasını sağlar.
Falco, Kubernetes platformları üzerinde faaliyet gösteren sunucu ve konteynerlardaki olağandışı hareketleri belirleyen açık kaynak kodlu bir tehdit algılama sistemidir. Bu araç, uygulamalarda ortaya çıkan beklenmeyen eylemleri anında tespit edip, gerçek zamanlı olarak alarm vererek güvenlik önlemlerinin alınmasına yardımcı olur.
Kuralları oluşturmak için tcpdump’a benzer bir söz dizimi kullanılır, Kubernetes API sunucusundan ya da konteyner çalışma ortamından bilgi toplama yeteneği sunan libscap ve libinsp gibi kütüphanelerle entegre çalışır.
Daha sonra, elde edilen meta veriler aracılığıyla, podlar, etiketler ve domainler gibi unsurlar hakkında ayrıntılı bilgiler edinilir ve bu bilgiler ışığında, belirli bir domain veya konteyner imajına yönelik özelleştirilmiş kurallar geliştirilir. Bu kurallar, sistemde izin verilen ve engellenen sistem çağrılarına ilişkin detaylara odaklanır, böylece güvenliğin sağlanması için kritik bir mekanizma sunar.
Konteyner Sıkılaştırma
Docker konteynerlarının güvenliği, sistem yöneticileri ve geliştiriciler için önemli bir konudur. Güvenlik uygulamaları arasında, root kullanıcısının kullanımından kaçınılması ve yerine yeni kullanıcıların eklenmesi yer alır. Bu, sistem üzerindeki potansiyel güvenlik risklerini azaltır. Ayrıca, gereksiz ağ erişimlerinin engellenmesi, konteynerlar ve onların çalıştığı sunucular üzerinde güvenlik duvarı kurallarının sıkılaştırılması gerekmektedir.
Sistem dosyaları ve dizinlerinin izinleri, örneğin Docker.service ve Docker.socket dosyalarının root kullanıcısı altında ve 644 izinleriyle, /etc/docker dizininin ise root kullanıcısı altında ve 755 izinleriyle ayarlanması önerilir. Bu ayarlamalar, sistem dosyalarının yetkisiz erişime karşı korunmasını sağlar.
Konteynerların çalıştırılmasında kullanılan base imajların güvenilir kaynaklardan seçilmesi ve konteyner içerisinde yalnızca gerekli paketlerin bulundurulması, güvenliği artırır. Güvenlik açıklarının tespiti ve giderilmesi için düzenli güvenlik taramalarının yapılması, güncellemelerin ve yamaların uygulanması kritik öneme sahiptir.
Dockerfile içerisinde, add komutu yerine daha güvenli olan copy komutunun kullanılması, dosya transferlerinde daha kontrol edilebilir bir güvenlik sağlar. Docker daemon’un SELinux ile etkin bir şekilde başlatılması, sistem güvenliğini daha da artırır. Konteynerlar içerisinde SSH servisinin çalıştırılmaması, erişimlerin ana sunucu üzerinden yönetilmesi, konteyner içerisindeki güvenlik zafiyetlerinin önüne geçer. Bu uygulamalar, Docker tabanlı sistemlerde güvenliği maksimize etmek için gereklidir.
Sonuç
Konteyner teknolojilerinin geniş çapta kabul görmesiyle birlikte, bu teknolojilerin güvenliği, uygulama altyapılarının korunmasında hayati bir rol oynamaktadır. Konteyner imajlarının sıkıştırılması, sadece zorunlu bileşenlerin dahil edilmesiyle oluşturulan minimal yapılar aracılığıyla, saldırı yüzeyinin daraltılmasına yardımcı olur. Docker imajları üzerinde yapılan güvenlik taramaları, olası güvenlik açıklarının erken evrede belirlenerek ortadan kaldırılmasını sağlar ve bu sayede uygulama güvenliğini artırır. Distroless imajlar, yalnızca uygulamanın çalışması için gerekli olan temel bileşenleri barındırır, işletim sistemi araçları ve kütüphaneler gibi gereksiz öğeleri içermez, bu da daha güvenli çalışma alanları yaratır. Kurumsal veya özel bulut tabanlı imaj depolama çözümleri, imajların güvenli bir şekilde saklanıp yönetilmesine imkan tanıyan izole alanlar sunar ve böylece dış saldırılara karşı ek bir güvenlik katmanı sağlar. İmaj güvenliği, uygulamaların bütünlük ve güvenilirliğini korumak için güvenli imaj oluşturma ve yayımlama yöntemlerinin uygulanmasını zorunlu kılar. Bu faktörler, modern yazılım geliştirme ve dağıtım yöntemlerinde konteyner güvenliğinin temel unsurları olarak ön plana çıkar.