Uymanız Gereken 5 DevSecOps Pratiği

Barış Ekin Yıldırım
5 min readSep 20, 2024

--

DevSecOps, yazılım geliştirme yaşam döngüsünün (SDLC) her aşamasına güvenliği entegre ederek DevOps’un üzerine inşa edilir. Bu yaklaşım, güvenliği, yazılım geliştirme, operasyon ve güvenlik ekipleri arasında paylaşılan bir sorumluluk haline getirmeyi amaçlar. Kuruluşlar DevOps uygulamalarında olgunlaştıkça, güvenlik önlemlerinin entegrasyonu, güvenli ve ölçeklenebilir bir geliştirme sürecinin sürdürülmesi açısından kritik öneme sahiptir.

Bu makale, uygulama ve altyapı güvenliğinizi önemli ölçüde artırabilecek 5 DevSecOps pratiğine odaklanmaktadır. Bu pratikleri uygulayıp hayata geçirerek, geliştirme süreciniz boyunca güvenlik sorunlarını erkenden göz önünde tutabilir olacaksınız.

  1. Shifting Left ve CI/CD Pipelinelarında Otomatik Testler

Güvenlikte Shift Left kavramı, güvenlik testleri ve uygulamalarını Yazılım Geliştirme Yaşam Döngüsü (SDLC) içinde daha erken bir aşamaya taşımak anlamına gelir. Bu yaklaşım, CI/CD pipelinelarındaki otomatik güvenlik testleri ile birleştirildiğinde, potansiyel zafiyetleri çok daha erken tespit etmeye ve ele almaya yardımcı olur; bu da sorunları geliştirme sürecinin ilerleyen aşamalarında veya release sonrası düzeltme maliyetlerini ve çabalarını azaltır.

  • Statik Uygulama Güvenlik Testi (SAST): SAST araçları, potansiyel güvenlik zafiyetlerini belirlemek için kaynak kodunu veya derlenmiş kod sürümlerini analiz eder. Popüler SAST araçları arasında Snyk, Semgrep, Checkmarx ve Fortify bulunmaktadır.
  • Yazılım Bileşen Analizi (SCA): SCA araçları, uygulamanızda kullanılan açık kaynak kodlu bileşenleri ve kütüphaneleri tarar ve analiz eder, bilinen zafiyetleri belirler. Örnekler arasında Dependency Check, Mend ve Black Duck yer alır.
  • Dinamik Uygulama Güvenlik Testi (DAST): DAST araçları, deploy edilmiş web uygulamanızı tarar ve dinamik olarak zafiyetleri bulur. Invicti, Acunetix veya OWASP ZAP gibi araçlar, uygulamalarınızı zafiyetler için test etmek üzere pipelinelara entegre edilebilir.
  • Etkileşimli Uygulama Güvenlik Testi (IAST): Synopsys Seeker veya Invicti Shark gibi IAST araçları, hem SAST hem de DAST unsurlarını birleştirir. Bu araçlar, uygulama çalışırken gerçek zamanlı zafiyet analizi sağlar.
  • IDE Entegrasyonu: Birçok güvenlik aracı, popüler IDEler için eklentiler sunmaktadır. Bu, geliştiricilerin kod yazarken potansiyel güvenlik sorunları hakkında gerçek zamanlı geri bildirim almasını sağlar. Örneğin, Wiz Code veya Snyk IDE eklentileri.
  • CI/CD Pipeline Entegrasyonu: CI/CD pipelinelarınıza güvenlik taramalarını entegre etmek, her kod değişikliğinin (merge/pull istekleri, commitler vb.) bir sonraki aşamaya geçmeden önce otomatik olarak güvenlik zafiyetleri açısından kontrol edilmesini sağlar.
  • Security Gateway Planlaması: Pipelinelarınızı, belirli güvenlik eşiklerinin karşılanmadığı durumlarda buildları başarısız kılacak veya releaseleri engelleyecek şekilde yapılandırın. Örneğin, yüksek öncelikli(critical, high gibi) zafiyetler tespit edilirse releaseleri engellemek isteyebilirsiniz. Ancak, bu tür önlemleri uygulamadan önce, yazılım geliştirme ve uygulama güvenliği ekiplerini bunaltmamak için DevSecOps olgunluğunuzu dikkate almalısınız. DevSecOps’taki mevcut durumunuzu belirlemek için OWASP DevSecOps Maturity Model’i kullanabilir ve şu anda hangi seviyede olduğunuzu ve seviyeniz için önerilen değişiklikleri anlayabilirsiniz. Bu model, kuruluşların güvenlik entegrasyonunu değerlendirmelerine yardımcı olur ve olgunluk seviyelerini artırmak için bir yol haritası sunar.

Bu uygulamaları hayata geçirerek, kuruluşlar gelişim süreçlerini yavaşlatmadan güvenliği sürdürebilir, potansiyel sorunları erken aşamalarda ve geliştirme yaşam döngüsü boyunca yakalayabilir.

2. Güvenli Konfigürasyon Yönetimi

Güvenli konfigürasyon yönetimi, karmaşık altyapı ve bulut ortamlarıyla başa çıkarken güçlü bir güvenlik duruşunu sürdürmek için kritik öneme sahiptir. Yazılım, donanım ve bulut hizmetleri için konfigürasyon ayarlarını sistematik bir şekilde ele alarak, bunların yaşam döngüleri boyunca güvenlik standartlarına ve en iyi pratiklere uygun olmasını sağlamayı içerir.

  • Kod Olarak Altyapı (IaC) Güvenliği: Terraform, AWS CloudFormation ve Ansible gibi araçlar, altyapıyı kod kullanarak oluşturmanıza olanak tanır. Bu şablonların güvenlik standartlarınıza uygun olduğundan emin olmak pek tabii ki çok önemlidir. Checkov ve tfsec gibi araçlar, IaC şablonlarını hatalı yapılandırmalar ve güvenlik sorunları için tarayabilir.
  • Kod Olarak Politika (Policy as Code): Terraform Sentinel, altyapı kodunuz üzerinde politikalar tanımlamanıza ve uygulamanıza olanak tanır. Bu, tüm ortak kullanılan altyapı şablonlarının kuruluşunuzun güvenlik ve uyumluluk gereksinimlerini karşıladığını garanti eder. Örneğin, Kod Olarak Politika ile tüm S3 bucketlerın şifreleme özelliğinin etkin olmasını zorunlu kılabilirsiniz.
  • Bulut Konfigürasyon Yönetimi: AWS Config ve Azure Policy gibi araçlar, bulut kaynaklarınızın yapılandırmalarını en iyi pratikler ve iç politikalarla karşılaştırarak değerlendirmenize, denetlemenize ve incelemenize yardımcı olur.

3. Bağımlılık Yönetimi ve Zafiyet Taraması

Bağımlılıkların yönetimi ve sürekli olarak zafiyet taraması, günümüz yazılım ekosisteminde oldukça önemlidir; çünkü uygulamalar genellikle üçüncü taraf kütüphanelere ve bileşenlere büyük ölçüde bağımlıdır. XZ Utils backdoor vakası, tedarik zinciri saldırılarının kritik açık kaynak yazılımları nasıl tehlikeye atabileceğini ortaya koyarak sürekli izlemenin gerekliliğini vurgulamıştır.

  • Sürekli Bağımlılık İzleme: Snyk, Dependabot veya Mend gibi araçları kullanarak, bağımlılıklarınızı bilinen zafiyetler için otomatik olarak izleyebilir ve sorunlar keşfedildiğinde uyarılar alabilirsiniz.
  • Konteyner Taraması: Trivy, Clair ve Grype gibi araçlar, base image ve kurulu paketlerdeki zafiyetleri tarayabilir.
  • Bağımlılık(Dependency) Güncelleme Otomasyonu: Dependabot gibi araçlar, eski bağımlılıkları güncellemek için otomatik olarak pull istekleri oluşturabilir; bu da en son güvenlik yamalarıyla güncel kalmanıza yardımcı olur.
  • Yazılım Malzeme Listesi (SBOM): Uygulamanızda kullanılan tüm bileşenlerin ve sürümlerinin net bir envanterini oluşturmak ve bunu ileride de devam ettirebilmek için SBOMlar oluşturun. Syft gibi araçlar bu süreçte size yardımcı olacaktır. SBOM’un sürekli tazelenmeye devam edilmesi, yazılımınızda neler bulunduğunu bilmenizi sağlar; bu durum üçüncü taraf(3rd party) kütüphanelerde yeni keşfedilen zafiyetler olması durumunda kritik öneme sahiptir. Ayrıca, SBOM, üretilen rapora açık kaynak kodlu kütüphanelerin lisans bilgilerini de eklediği için ileride hukuksal anlamda sıkıntılar yaşamamanıza yardımcı olur.

4. Konteyner Güvenliği ve Orkestrasyon

Docker ve Kubernetes gibi konteyner ve orkestrasyon teknolojileri yaygınlaştıkça, bu ortamların güvenliği kritik hale gelmiştir. Konteyner güvenliği, geliştirmeden dağıtıma ve yayınlanmaya kadar neredeyse tüm konteyner yaşam döngüsünü kapsar.

  • İmaj İmzalama ve Doğrulama: Konteyner imajlarını imzalamak ve doğrulamak için Docker Content Trust veya Notary gibi araçları kullanarak, bunların bütünlüğünü ve doğruluğunu onayabilirsiniz. Konteyner imajlarını imzalamak ve doğrulamak, yalnızca güvenilir imajların dağıtılmasını sağlar ve tedarik zincirinde değiştirilmiş(tamperlenmiş) imajlara karşı koruma sağlar.
  • Çalışma Zamanı Güvenliği: Konteynerler ve Kubernetes clusterları için çalışma zamanı tehdit tespiti sağlamak için Falco veya Cilium gibi araçları kullanabilirsiniz.
  • Ağ Politikaları: Podlar ve namespaceler arasında trafik akışını kontrol etmek için Kubernetes Network Policyleri kullanabilirsiniz.
  • Pod Güvenlik Politikaları: Pod özelinde güvenliği biraz daha sıkılaştırmak adına Pod Security Admission Controller’ı kullanmanız yine iyi bir başlangıç olacaktır.
  • RBAC: Kubernetes’te Rol Tabanlı Erişim Kontrolü (RBAC) uygulayarak bileşen ve kullanıcı izinlerini least privilege mantığıyla tanımlamanız herhangi bir saldırı durumunda saldırının çapını kısıtlayacaktır.

5. Gizli Bilgilerin Yönetimi (Secrets Management)

Gizli bilgilerin doğru yönetimi, hassas bilgilerin geliştirme ve operasyonel ortamlarınızda ifşa edilmesini önlemek için kritik öneme sahiptir. Gizli bilgiler, uygulamaların ve sistemlerin işlevini sürdürmesi için gereken API anahtarları, şifreler, sertifikalar ve diğer gizli verileri içerir.

  • Merkezi Gizli Bilgi Yönetimi: Gizli bilgileri merkezi olarak yönetmek ve güvenli bir şekilde depolamak için HashiCorp Vault, AWS Secrets Manager veya Azure Key Vault gibi araçları kullanın.
  • Dinamik Gizli Bilgiler(Dynamic Secrets): Mümkünse, dinamik gizli bilgileri kullanın çünkü bunlar Vault tarafından talep üzerine üretilir ve kullanımdan sonra otomatik olarak kaldırılır, bu da maruz kalma sürelerini azaltır.
  • Gizli Bilgilerin Döngüsü(Secrets Rotation): Potansiyel ihlallerin etkisini sınırlandırmak için gizli bilgilerin düzenli olarak “rotate” olmasını sağlayın.
  • Denetim Kaydı(Audit Logging): Gizli bilgilere yapılan tüm erişimlerin kaydedildiğinden ve düzenli olarak denetlendiğinden emin olun.

Sonuç

Bu uygulamaları hayata geçirmek, kuruluşunuzun güvenlik duruşunu önemli ölçüde artırabilir. DevSecOps, bir varış noktası değil, sürekli iyileştirme yolculuğudur. Uygulamalarınızı düzenli olarak yeniden değerlendirin, ortaya çıkan tehditler ve teknolojiler hakkında bilgi sahibi olun ve kuruluşunuz genelinde güvenlik bilinci oluşturun.

Ayrıca, nereden başlayacağınızdan emin değilseniz, hızlı bir başlangıç için şu iki noktayı dikkate alabilirsiniz:

  • Mevcut iş akışınızda bu yukarıdaki önerilerden bir veya ikisini uygulamak için planlayın ve uygulamaya başlayın. Küçük adımlar bile güvenlik duruşunuzda önemli iyileştirmelere yol açabilir.
  • OWASP DevSecOps Guideline’ı inceleyerek hangi yöne gitmeniz gerektiğini ve OWASP DevSecOps Maturity Model’i kullanarak kuruluşunuzun şu anda hangi seviyede bulunduğunu belirleyebilirsiniz.

Unutmayın, başarılı DevSecOps anahtarı iş birliğidir. Geliştirme, operasyon ve güvenlik ekipleri arasında açık iletişim ve ortak sorumlulukları teşvik edin. Ancak bu şekilde ciddi ölçüde stabil ve güvenli bir yazılım geliştirme yaşam döngüsü oluşturabilirsiniz.

--

--