Container Security: Twistlock notlarım 1

Ali KAYIM
Devops Türkiye☁️ 🐧 🐳 ☸️
4 min readJan 31, 2020

--

Container mimarileri ile birlikte uygulamaların containerization geçişleri de hız kazanmaya başladı. Bu geçiş esnasında kimi zaman base image’ lar üzerinden ilerlesek de kimi zaman “aa hazırı varmış” diyerek Docker Hub üzerinde yayınlanmış olan hazır image’ ları pull ediyoruz. Bu image’ ların bir kısmı şirketlerin yayınlamış olduğu resmi image’ lar olmasının yanında büyük bir çoğunluğu anonim kullanıcılar tarafından yayınlanmış durumda. Dolayısı ile hem bunların güvenliği hem de güncelleme gereksinimleri büyük önem taşıyor.

Tabii bu konu önem kazandıkça buna yönelik ürünler de piyasaya çıkmaya başladı.Bunlardan bir tanesi de kullanma şansı bulduğum ve oldukça beğendiğim Twistlock.

Edindiğim bilgileri ve tecrübeleri paylaşmaya gayret edeceğim.

Twistlock, kısaca Container Security ürünü. Ürünün kurulumu ve konfigurasyonu için Emre Özkan’ ın paylaşmış olduğu bu yazıyı okuyabilirsiniz.

Kurulum sonrası Twistlock, kubernetes ortamınız üzerinde bir adet namespace oluşturuyor ve buna twistlock adını veriyor. Sonrasında buraya Console ve Defender ekliyor.Console, uygulama arayüzü erişimi için tek bir deployment şeklinde, defender ise DaemonSet olarak tanımlanması neticesinde tüm kubernetes cluster’ında bulunan sunucularınız üzerinde çalışacak agent pod şeklinde ayağa kalkıyor.

Uygulamaya login olduktan sonra bizi Radar ile birlikte 3 temel bölüm karşılıyor. Bunlar; Defend, Monitor ve Manage.

Radar

Twistlock arayüzüne giriş yaptığınızda sizi karşılayan harita. Ortamınızın kuşbakışı görünümünü veriyor. Bu haritaya bakınca oldukça faydalı bilgiler elde edinilebiliyor. Ayrıca filtreler koyarak daha spesifik bir harita elde edebilirsiniz.

Container bölümü altında edinilebilen bilgileri şu şekilde sıralayabilirim.

  • Kubernetes ortamınızdaki Namespace(Proje) grupları
  • Namespace içerisinde bulunan pod listesi
  • Pod’ların birbiri ile olan networksel bağlantısı
  • İki pod’un birbiri ile hangi port üzerinden ve hangi yöne doğru bir bağlantı olduğunu göstermesi
  • Uygulamanızın kubernetes ortamı dışına açık bir servisi varsa bunu ayrıca gösteriyor olması
  • Pod’ların zaafiyet dereceleri(Renklendirme ile-Kritiklik seviyelerine göre Kırmızı, Sarı, Yeşil olarak)
  • Pod’ların zaafiyet sayıları(Rakamsal olarak)
  • Herhangi bir pod’a tıklayarak detay bilgilere erişebiliriz.Bu bilgiler; image, namespace,image id,zaafiyetler,internet portları vb..

Host bölümü altında ise şu bilgileri edinebiliyoruz.

  • Kubernetes ortamınızda bulunan sunucular üzerinde çalışan process listesi
  • Process’ lerin hangi sunucular üzerinde çalışmakta olduğunun bilgisi
  • Sunucuların üzerlerinde bulunan zaafiyet sayıları.

Gelelim ürünün dikkatimi çeken önemli özelliklerine..

Defend

  • Firewall kuralları koyulabiliyor. Bu kurallar container, host ve network objeleri seviyesinde yapılabiliyor. Bu sayede iki container arası bağlantıyı anında kesebilir veya izin verebilirsiniz veya dışarı açık olan bir servisi anında kapatabilirsiniz.
  • Bu kuralları koyarken aksiyon seçebilirsiniz. Trafiği engelle veya alarm üret gibi..
  • Önemli bir diğer özellik ise öğrenilmiş trafiklere izin verip/vermeme seçeneği. Bu özellik sayesinde yeni bir kural eklerken ürünün daha önce öğrenmiş olduğu bir trafiğe izin verebilir yada kapatabilirsiniz. Bu sayede yapılacak olan yeni bir tanım, var olan bağlantılara engel olmayabilir veya önceden fark etmenizi sağlayabilir.

Runtime kuralları

  • Aktif olarak çalışmakta olan pod(Container Policy) veya pod’ un üzerinde çalışmakta olduğu host(Host Policy) üzerinde anında kural tanımlama şansı sunuyor.
  • 5 Farklı kural tipi mevcut: Process, Network, FileSystem, SystemCalls ve Custom rules.
  • Custom Rules sekmesi altında yazmış olduğunuz script’leri aktif edebilir ve aksiyon alabilirsiniz.
  • Kural tanımı sonrası aksiyon planı seçebilirsiniz. Engel koyma, alarm üretme, bloklama gibi.
  • Bu kural tiplerinden herhangi birini tanımlayıp aktive ettiğiniz anda bu kurala takılan pod veya host üzerinde anında etki eder.

Örnek ile açıklamak daha faydalı olabilir.

Örnek 1; Kubernetes ortamımızdaki pod’ lar üzerinde kimsenin “cat” komutunu çalıştırarak dosyaları okumasını istemiyoruz. Bu durumda Process runtime kuralı ekleyip “cat” process’ ini listeye eklersek bu kural aktif olduğu andan itibaren hiçbir pod veya seçmiş olduğunuz pod’lar üzerinde bu komut çalıştırılamaz.

Örnek 2; Pod içerisindeki /root filesytem’ ine herhangi bir input olduğu durumda buna izin vermek ancak aynı zamanda alarm üretmek istiyoruz. Bu durumda FileSystem kuralı ekleyip sadece alarm üretme seçeneğini aktive edebiliriz.

Registry eklenmesi, image taraması, Collection oluşturma gibi konuların yer alacağı Manage ve Monitor bölümlerini bir sonraki yazımda değineceğim.

Saygılar.

--

--