Bir konteyner, kod ve tüm bağımlılıklarını paketleyen standart bir yazılım birimidir, böylece uygulama bir bilgisayar ortamından diğerine hızlı ve güvenilir bir şekilde çalışır. Son birkaç yılda, konteynerlerin kullanımı BT sektöründe yaygınlaşmıştır. Konteyner teknolojisi Docker’ın orijinal sloganında açıklandığı gibi, “bir kez inşa et, her yerde koş” birçok avantajı beraberinde getirmektedir. Bunu bir uygulamayı ve tüm bağımlılıklarını bir araya getirerek ve uygulamayı çalıştığı makinenin geri kalanından izole ederek sağlamaktadır. Konteynerli uygulama ihtiyacı olan her şeye sahiptir ve dizüstü bilgisayarlarınızda veya bir veri merkezindeki bir sunucuda aynı şekilde çalışacak bir konteyner görüntüsü olarak paketlemek çok kolaydır.
Bu izolasyonun en büyük etkisi, birbirine müdahale etmeden birden fazla farklı konteyneri yan yana çalıştırabilmenizdir. Konteyner teknolojisinden önce, iki uygulamanın aynı paketleri için farklı sürümlerini gerekmesi sebebiyle bağımlılık kabusu ile karşı karşıya kalıyorduk. Bu soruna en kolay çözüm, uygulamaları ayrı makinelerde çalıştırmaktı. Konteynerler ile bağımlılıklar birbirinden izole edildi, böylece aynı sunucuda birden fazla uygulamayı çalıştırmak kolay hale geldi. İnsanlar, bağımlılıklar hakkında endişelenmeden, aynı ana bilgisayarda birden fazla uygulamayı (sanal makine vb.) çalıştırmak için konteynerleştirmeden yararlanabileceklerini hızlı bir şekilde fark ettiler.
Bir sonraki adım, konteyner uygulamaları bir sunucu kümesine yaymaktı. Kubernetes gibi orkestrasyon teknolojileri bu işlemi otomatikleştirir, böylece artık belirli bir makineye uygulamayı manuel olarak yüklemeniz gerekmez; orkestratöre hangi konteynerları çalıştırmak istediğinizi söylersiniz ve her bir konteyner için uygun konumu sizin için oluşturur.
Güvenlik açısından bakıldığında, geleneksel BT teknolojilerinde olduğu gibi konteynerli bir ortamda birçok şey aynıdır. Dünyada veri çalmak veya bir sistemin davranış biçimini değiştirmek veya kendi cryto-para üretmek için diğer insanların hesaplama kaynaklarını kullanmak isteyen saldırganlar her zaman var olmuştur. Konteyner teknolojisini kullandığınızda da bu durum değişmez. Bununla birlikte, konteynerler uygulamaların çalışma şekli hakkında çok şey değiştirir ve sonuç olarak farklı bir risk kümesi barındırmaktadır. Bugünkü yazımda konteyner teknolojilerindeki siber güvenlik tehditlerini paylaşacağım.
Tehdit modeli hakkında düşünmeye başlamanın bir yolu, ilgili olabilecek aktörleri düşünmektir. Bu aktörleri aşağıdaki gibi sıralayabiliriz:
- Dışarıdan erişmeye çalışan dış saldırganlar
- Bir kısmına erişmeyi başaran iç saldırganlar
- Erişmek için bir ayrıcalık düzeyine sahip geliştiriciler ve yöneticiler gibi kötü amaçlı iç aktörler
- Yanlışlıkla sorunlara neden olabilecek iç aktörler
- Sisteminizi tehlikeye atmaya çalışan varlıklar olmasa da, sisteme programlı erişime sahip olabilecek uygulama süreçleri
Her aktörün göz önünde bulundurmanız gereken belirli bir izin kümesi olması gerekmektedir. Bu izinleri sorgulayabilmemiz için aşağıda bazı örnek soruları sizlerle paylaşıyorum.
- Kimlik bilgileri aracılığıyla ne gibi erişimleri var? Örneğin, konteynerın çalıştığı ana bilgisayarlardaki kullanıcı hesaplarına erişimleri var mı?
- Sistemde ne gibi izinleri var? Kubernetes’te her kullanıcı ve anonim kullanıcılar için rol tabanlı erişim kontrol ayarları var mı ?
- Hangi ağ erişimine sahipler? Örneğin, sistemin hangi bölümleri Sanal Özel Bulut’a (VPC) dahil edilmiştir?
Konteyner siber güvenlik tehditlerini aşağıdaki gibi mindmap olarak sizlerle paylaşıyorum. Bu tehditleri konteyner sistemlerinin bulunduğu ortam ve şartlara göre arttırabiliriz. Bir konteyner siber güvenliğini sağlamaktan bahsettiğimiz durumda aşağıdaki tehditleri mutlaka değerlendirmemiz gerekmektedir.