🛡DevSecOps & K8s Güvenlik Tarayıcıları☸️
Günümüz sektöründe DevOps kültürü hızla yayılmaya devam etmektedir. Bu durum, yazılım geliştirme süreçlerini her ne kadar iyileştirse de genellikle atlanılan önemli bir konu var; güvenlik! Halihazırda birçok pipeline'ımızda Sonarqube, Fortify gibi araçlarla statik kod analizi ve kod kalitesi (covarage, reliability, maintainability ve duplications gibi verilerin) ölçümünü yapıyoruz. Tıkır tıkır işleyen pipeline'larımız arasına birkaç güvenlik testi adımı eklemeyi, 'ya ne de olsa internal servis' diyerek çoğu zaman atlayabiliyoruz. Fakat hepimizin bildiği üzere oltalama (phishing) teknikleri ile şirket iç ağına sızmak o kadar da zor bir iş değil. Hele ki büyük ölçekli bir firma ise risk daha da artıyor. İşte tam da bu noktada DevSecOps kavramı devreye giriyor. DevSecOps, tüm güvenlik kontrollerini birim testlerinde kodlayarak ve bunları döngünün (SDLC) sonunda değil, yazılım geliştirmenin en başından itibaren kullanarak otomatikleştirme eğilimidir. Geliştirme, güvenlik ve operasyonlar anlamına gelip, tüm BT yaşam döngüsü boyunca güvenliği paylaşılan bir sorumluluk olarak bütünleştiren bir kültür, otomasyon ve platform tasarımı yaklaşımıdır. Yazının uzamaması adına DevSecOps nedir, faydaları nelerdir, bu yaklaşımı uygulamalı mıyız, kısımlarını direkt atlayıp sadede geliyorum. 🙂 DevSecOps hakkında biraz daha detaylı bilgi edinmek için tıklayabilirsiniz.
Esnekliği ve diğer avantajları nedeniyle kubernetes'i sadece bir orkestrasyon aracı olarak kullanan kuruluşların sayısı arttıkça, cluster'ların güvenliği daha savunmasız hale geliyor. Kubernetes, sistemin güvenliğini sağlamak için temel IAM ve rol tabanlı erişim denetimi (RBAC) rolleri sağlasa da, bunlar prod ortamlar için yetersiz kalabiliyor. Cluster'ınızın güvenliği, kubernetes'in ciddi dikkat gerektiren alanlarından birisidir. Saldırganlar, uygulama ortamınıza sızmak için kubernetes cluster'ınızdaki bir açıktan veya yanlış yapılandırmadan yararlanabilir. Cluster'ınızı taramaya ve kötüye kullanılmadan önce olası açıkları belirlemeye yardımcı olmak için geliştirilmiş open source 3rd party k8s güvenlik araçları vardır. Gelin bunlardan faydalı olabileceklerden bazılarına göz atalım.
Kubeaudit
Kubeaudit, Shopify tarafından Golang ile geliştirilen command-line bir araçtır. Kubernetes cluster'larını, "auditors" (denetçi) adı verilen önceden tanımlanmış bazı güvenlik testleriyle karşılaştırarak denetler. Kubernetes cluster'ını, ayrıcalık yükseltmeye izin veren açıklar olup olmadığı, herhangi bir cluster image'ında yanlış yapılandırma olup olmadığı, pod'ların SecurityContext'i veya root hesabın sistem için devre dışı bırakılıp bırakılmadığı gibi bir denetçi listesine karşı test eder. Yalnızca kümeyi güvenlik açıkları açısından denetlemekle kalmaz, aynı zamanda bunların nasıl çözüleceği konusunda önerilerde bulunur. Her "auditors", sisteminizde uygulanacak kapsamlı ayrıntılar ve best practices sağlar. Araç ayrıca uygulamalarınızın root kullanıcı olmadan çalıştırılmasını, root dosya sistemine salt okunur erişim verilmesini ve diğer genel güvenlik uygulamalarını teşvik eder.
Kubeaudit denetimini üç modda gerçekleştirir: Manifest, Local ve Cluster ve sonucu bulunan sorunun önem derecesine göre Error, Warm veya Info olarak bildirir. Tek bir komut çalıştırarak Homebrew aracılığıyla kurulabilir: brew install kubeaudit veya kubectl denetimini kullanarak bir kubectl eklentisi olarak çalıştırılabilir.
brew install kubeaudit
komutu ile kurup kubeaudit all
ile cluster'ınızdaki zafiyetlerin raporunu konsol ekranı üzerinden hızlıca alabilirsiniz.
Kube-Bench
Kube Bench, CIS (Center for Internet Security)'in best practices ile uyumluluğu sağlamak adına kubernetes'te testler yapmak için kullanılır. CIS, güvenli ve standart kodlar yazmak için kılavuzlar ve karşılaştırma testleri sağlayan bir düzenleyici kurumdur.
Kube Bench, Kubernetes kümenizin CIS kıyaslamalarını karşılayıp karşılamadığını kontrol eden Aqua Security'nin open source bir aracıdır. Kubernetes ortamınızın CIS karşılaştırma ölçütlerine uymayan alanlarını vurgular ve ayrıca bunları çözmek için önerilen çözümler sunar.
Container olarak deploy edilebilen bir Golang uygulamasıdır. Testler kolayca genişletilebilir ve JSON formatı çıktısı desteğiyle YAML'da tanımlanır. Bu, Kube Bench'i Amazon Elastic Kubernetes Service (EKS) ve OpenShift gibi yönetilen Kubernetes hizmetlerinde çalıştırmayı kolaylaştırır.
kubectl apply -f https://raw.githubusercontent.com/aquasecurity/kube-bench/main/job.yaml
ile cluster'ınız içerisinde bir job başlatıp, kubectl logs kube-bench-kt2y7
ile pod'un log'undan görseldeki gibi rapor çıktısına ulaşabilirsiniz.
Kube-Hunter
Kube Hunter, Aqua Security tarafından oluşturulan başka bir open source kubernetes güvenlik açığı tarayıcısıdır. Bu araç, saldırganlar bunları istismar etmeden önce potansiyel olarak tehlikeli sorunları belirlemek için CIS uygulamalarının dışındaki kubernetes pod'larını ve cluster'larını tarayarak Kube Bench'ten daha derine iner.
Kubernetes cluster'ındaki olası güvenlik tehditlerini yakalamak için keşif ve sızma testi yetenekleriyle Kube Bench'in CIS kurallarını daha da geliştirir.
Kube Hunter, aracı uzak bir arayüze veya ağ taramasına ayarlayarak yerel olarak çalıştırmak için birden çok seçenek sunar. Her sorunu aramayı kolaylaştırmak için bireysel kimlikler ve hata mesajlarıyla birlikte gelen yaklaşık 40 farklı güvenlik açığı döndürür.
pip install kube-hunter
docker run -it --rm --network host aquasec/kube-hunter
kubectl create -f https://raw.githubusercontent.com/aquasecurity/kube-hunter/main/job.yaml
Yukarıdaki metodlardan herhangi birisi ile kurabilir ve kube-hunter
komutu ile çalıştırabilirsiniz.
NOT: Default olarak raporu konsol ekranına basmaktadır. Yukarıdaki gibi daha okunabilir UI üzerinden bir çıktı almak istediğinizde Kube-Hunter'ın container olarak çalıştırma metodunu kullanmalısınız. Web sitesi üzerinde mail adresi istediği alana mailinizi yazıp "Get Started"a tıkladıktan sonra size token içeren bir docker run komutu veriyor. O komut ile testi çalıştırdığınızda sonucunuzu da yine token'lı bir URL üzerinden görebiliyorsunuz.
Trivy
Yine Aqua Security'nin open source tool'larından birisi olan Trivy, container image'larındaki, dosya sistemlerindeki ve Git repo'larındaki güvenlik açıkları ve konfigürasyon sorunları için basit ve kapsamlı bir tarayıcıdır. Trivy, işletim sistemi paketlerinin (Alpine, RHEL, CentOS, vb.) ve dile özgü paketlerin (Bundler, Composer, npm, yarn vb.) güvenlik açıklarını tespit eder. Ayrıca Trivy, deployment'larınızı saldırı riskine maruz bırakan olası yapılandırma sorunlarını tespit etmek için Terraform, Dockerfile ve Kubernetes gibi IaC (Infrastructure as Code) dosyalarını da tarar. Trivy'nin kullanımı kolaydır. Sadece binary dosyayı kurup taramaya hazır hale gelebilirsiniz.
brew install aquasecurity/trivy/trivy
komutu ile hızlıca kurabilir, trivy image
, trivy conf
gibi komutlarla yukarıdaki görsellerdeki gibi taramalar yapabilirsiniz. Diğer kurulum yöntemlerine de buradan ulaşabilirsiniz.
Kubesec
Kubesec, open source bir kubernetes güvenlik tarayıcısı ve analiz aracıdır. Kubernetes cluster'ınızı ayrıcalıklı yetenekler (privileged capabilities) gibi yaygın olarak yararlanılabilir riskler için tarar ve bulunan her güvenlik açığı için bir önem puanı sağlar.
Tek bir kubernetes YAML manifest dosyası girişi alır. Container image'ını, binary paketi kullanılarak sisteminize yüklenebilir veya kubernetes deployment, pods, ve resources taramak için bir kubectl eklentisi olarak kullanabilirsiniz.
Pratik kontroller yapmak adına kubectl krew install kubesec-scan
ile kubectl plugini olarak yükleyebilir, kubectl kubesec-scan -n kube-system deployment kubernetes-dashboard
şeklinde testler çalıştırabilirsiniz.
Ayrıca Kubesec-as-a-Service'i HTTPS aracılığıyla v2.kubesec.io/scan adresinde çalıştırabilirsiniz. Bunu yapmak için hedef yaml'ınızı düzenleyip aşağıdaki gibi bir curl atmanız yeterli olacaktır. As a service olarak herhangi bir kurulum yapmadan hızlıca sonuç alabilirsiniz.curl -sSX POST --data-binary @"k8s-deployment.yaml" https://v2.kubesec.io/scan
KubiScan
KubiScan, kubernetes ortamınızın rol tabanlı erişim kontrolünü (RBAC) nasıl idare ettiği hakkında fikir veren bir Kubernetes güvenlik tarayıcısıdır. İzinler ve rol ayarlarındaki olası riskleri taramaya ve belirlemeye odaklanan bir komut satırı aracıdır.
Araç, ayrıcalıklı hesaplara sahip pod'ları kolayca aramanıza ve belirli pod'larla ilişkili rolü sorgulamak için çağrılar başlatmanıza olanak tanır.
KubiScan, riskli roles\clusterroles, rolebindings\clusterrolebindings, users ve pod'lar hakkında bilgi toplayarak geleneksel manuel süreçleri otomatikleştirir ve riski azaltmak için ihtiyaç duyulan görünürlüğü sağlar. Canlı demo videosu için tıklayabilirsiniz.
Hızlı kurulum için docker run -it --rm -e CONF_PATH=/config -v ~/.kube/:/tmp cyberark/kubiscan
ile kurup, container içerisinde de kubiscan -rp
, kubiscan -rs
, kubiscan --help
komutları ile testler yapıp çıktılar alabilirsiniz.
KubeScape
Kubescape, risk analizi, güvenlik uyumluluğu, RBAC ve image güvenlik açıkları taraması dahil olmak üzere güvenli bir şekilde deployment yapılıp yapılmadığını test etmemizi sağlayan open source bir k8s aracıdır.
Kubescape, K8s kümelerini, YAML dosyalarını ve HELM çizelgelerini tarar, birden fazla framework'e (NSA-CISA, MITRE ATT&CK® gibi) göre yanlış yapılandırmaları tespit eder, yazılım açıklarını bulur ve RBAC ihlallerini pipeline'larınızda gösterebilir. Risk puanlarını anında hesaplar ve zaman içindeki risk eğilimlerini gösterir. Kubescape, Jenkins, CircleCI, Github iş akışları, Gitlab, Prometheus, Slack dahil olmak üzere diğer DevOps araçlarıyla yerel olarak entegre olur ve EKS, GKE ve AKS gibi çoklu bulut K8s dağıtımlarını destekler.
brew install kubescape
komutu ile hızlıca yükleyip kubescape scan --submit --enable-host-scan --verbose
komutu ile komple cluster taraması yapabilirsiniz. Tarama sonucunu konsola bastıktan sonra Kube-Hunter'daki gibi token'lı bir URL ile kendi dashboard'una da atıyor. Orada da aşağıdaki görseldeki gibi güzel bir dashboard sizleri bekliyor olacak. Sistemi cluster'larınıza bağlayıp düzenli olarak rapor alma, data tutma gibi enterprise çözümler de sunuyor.
Kube-Score
Son olarak quick-win bir tool olan Kube Score, kubernetes nesne tanımlarının (deployment.yaml, service.yaml vs.) statik kod analizini gerçekleştirmek için kullanılan bir araçtır. Daha sonra, çıktı olarak uygulama güvenliğinizi geliştirmek için neler yapılabileceğine dair bir öneri ve tavsiyeler listesi sunar.
Kube Score, sisteme herhangi bir yükleme yapmadan nesne tanımlarını taramak için kolay bir yöntem kullanır. Hata mesajlarını ve risk çözme talimatlarını insan tarafından okunabilir bir biçimde verir ve anlaşılmasını kolaylaştırır, böylece uygulamayı daha güvenilir ve esnek hale getirir.
Kube Score, kolay ve hızlı analiz için doğrudan web'den kube-score.com adresinde kullanılabilir veya Docker, Homebrew, Krew veya Mac, Windows ve Linux için önceden oluşturulmuş binary dosyalar kullanılarak yüklenebilir. Bu pratiği yeni deployment tanımları yaparken atlamamanızı öneririm.
brew install kube-score
ile hızlıca kurup kube-score score deployment.yaml
komutu ile statik olarak dosyalarınızı tarayabilirsiniz. Pipeline'larınıza bağlayıp konfigürasyonda zafiyet testi yapabilirsiniz. Test listesini kube-score list
ile görüp atlamak istediğiniz testleri --ignore-test
flag'i ile veya annotation geçerek atlayabilirsiniz.
Bunlara ek olarak aşağıdaki DevSecOps tool'larından bazılarının kullanılması, BT altyapınız (IT infrastructure) için gerekli güvenlik önlemlerinin uygulanmasına ve otomatikleştirilmesine yardımcı olacaktır.
Yazıyı uzatmamak adına bunların detaylarına girmiyorum fakat ihtiyaç durumunda detaylarına ulaşabilmeniz adına linklerini bıraktım.
Hocam iyi hoş güzel de; bunların hepsini mi kullanacağım, yönettiğim cluster'lar için doğru k8s güvenlik tarayıcısını nasıl seçeceğim?
Öncelikle Zero-Downtime ve güvenli dağıtıma devam etmek için güvenlik tarayıcıları seçmenin nihai amacını anlamalısınız. Birçok tool'dan bahsettiğimizden dolayı hangisinin size uygun olduğunu belirlemek ve seçmek için biraz düşünmek gerekebilir. K8s güvenlik açığı tarayıcınızı seçerken, öncelikle kullanım için kurmanın/yüklemenin ne kadar kolay ve hızlı olduğunu düşünmelisiniz. Kubeaudit gibi tarayıcılar, aracı yüklemek için zahmetsiz tek satırlık bir komut sunar. Kube Score gibi web sitesi sağlayan bir platform, tarayıcıyı local olarak yüklemeden k8s cluster'ınızı taramayı kolay ve hızlı hale getirecektir.
Uygulama ortamınızın genel bir güvenlik kıyaslaması ile uyumlu olduğundan emin olmak için Kube Bench'i seçebilir veya daha da iyisi, kapsamlı ve derin bir güvenlik açığı taraması için Kube Hunter ile birlikte kullanabilirsiniz.
Cluster'ın tam olarak sorunlu alanını gösteren basit bir güvenlik açığı tarayıcısına ihtiyacınız varsa, Kubeaudit sizin için ideal bir araçtır. Ayrıca, ihtiyacınız olan şey, temel sorunların ve çözümün kapsamlı bir ayrıntısıysa, Kube Score, Kube Scape ve Kube Hunter harika seçeneklerdir.
Sonuç olarak, hangi aracı seçerseniz seçin, kubernetes ortamınızın ihtiyacına bağlıdır. İstediğiniz sonucu elde etmek için birkaç farklı tarayıcıyı birleştirebilirsiniz. Şu an için pek gündemde olan çözümler değil fakat siyah şapkalı arkadaşlar kubernetes'e ilgi duymaya başladığında herkesin kullanacağı çözümler olabilir. 🎩 🙂 DevSecOps kapsamında kullanabileceğimiz, faydalı olabilecek open source tool'ları hakkında olabildiğince kısa tutarak bilgiler paylaşmaya çalıştım. İhtiyacınıza göre seçip, pipeline'larınıza dahil etmenizi tavsiye ederim.
Unutmayın, "hiçbir sistem güvenli değildir".🙂
Selamlar, ben Sedat. PayCore bünyesinde DevOps olarak çalışıyorum. Linux sistemler, Docker & Kubernetes, DevSecOps ve cloud üzerinde çalışmayı seviyorum. Hobi olarak da loading ekranlarında müzik yapıyorum. 🙂
Teşekkürler sedat bey
İş hayatında başarılar dilerim.