DevSecOps Nedir?

Elif İ. Eser
Nettsi Bilişim Teknoloji A.Ş.
6 min readJun 8, 2020

Büyüyen IT sektöründe rekabetçi ortamın artmasıyla beraber, hızlı bir şekilde ortaya çıkarılan ürünlerin, tasarım ve test aşamasında güvenlik gerektiğince dikkate alınmamaktadır. Güvenlik süreçlerinin uygulanmadığı, göz ardı edildiği projeler, bilgisayar korsanlarının ağına takılmaktadır. Amerika’da yapılan araştırmalara göre güvenlik tehditlerinin katlanarak artmasıyla beraber siber suçların 2021’e kadar ülkelere ve kurumlara 6 trilyon dolardan fazlaya mal olması beklenmektedir. [1] Bu tür siber saldırılar ile karşılaşan şirketler maddi kayıp, veri hasarı, iş kesintisi, itibar ve müşteri kaybı ile karşı karşıya kalmaktadırlar.
Bu tür olaylarla karşılaşmamak için yazılım güvenliği tasarımın en başından itibaren projelerde yer almalı ve bir iş önceliği olarak tanıtılmalıdır. Genellikle kurumlarda güvenlik ihlali gerçekleşinceye kadar güvenlik 2. planda kalmaktadır. Bununla başa çıkmak için IT şirketlerinde uygulanan DevOps yerini DevSecOps’a bırakmaya başlamıştır.

Peki, DevSecOps Nedir?
Kurumlarda uygulanan Devops kültürü şirketlere daha hızlı, işlevsel ve ölçek açısından iyi bir süreç ortaya sunarken güvenlik ve uyumluluk genellikle göz ardı edilir. Normalde DevOps süreçlerinde güvenlik süreçleri uygulansa da ürün sunma aşamasında güvenlik genellikle atlanılarak uygulanmaktaydı. Bu da tüm sürümlerin güvenlik analizleri yapılmadan müşteriye çıkması demektir. Aslında DevOps süreçlerinde son teslim tarihinin kaçırılmasından korkulup güvenliği göz ardı etmenin projelere daha fazla risk getireceği unutulmaktadır ve bu süreçteki güvenlik hataları ciddi güvenlik açıklıklarına sebep olmaktadır. Bu yüzden DevSecOps ortaya çıkmıştır. DevSecOps aslında, DevOps sürecine güvenlik ekiplerinin dahil edilmesidir. DevSecOps, Devops sürecinde uygulanan güvenlik süreçlerini sıkılaştırarak güvenliği ileri seviyeye taşımayı amaçlamaktadır.
DevSecOps SDLC (Software Development Life Cycle) sürecinin en başında güvenliği tanımak, böylece güvenlik açıklıklarını en aza indirmek ve güvenliği tüm DevOps sürecine uygulamak için, bir proje başlangıcında müşteriler, geliştiriciler, test , IT ve güvenlik ekipleri olmak üzere tüm paydaşlar arasında işbirliği, iletişim ve otomasyonu vurgulayan bir dizi yazılım ilkesidir. Yani DevSecOps güvenliği son kısımda eklemek yerine, güvenliği yazılım geliştirme iş akışının temel bileşeni yapar ve güvenlikten ödün vermeden yazılım geliştirme süreçlerini hızlandırmayı amaçlar.[2][3]

Projelerimizde sadece DevOps sürecini uygularsak, DevSecOps sürecini kullanmazsak ne olur?

Güvenlik ihlalleri, hükümetlerin ve organizasyonların bugün karşı karşıya kaldığı en büyük tehditlerden biridir. SDLC süreci sırasında bir uygulamaya kötü amaçlı yazılım eklediklerini ve uygulama müşteriye dağıtılıncaya kadar kötü amaçlı yazılımın bulunmadığı düşünülürse hem müşteri hem de şirket itibarına verilen zarar çok büyük olacaktır. Uygulama geliştirme ve dağıtımında güvenliği geliştirme ve operasyon takımlarına eşit şekilde dağıtmak şarttır. Güvenlik DevOps sürecine entegre edildikten sonra geliştiriciden ağ yöneticisine kadar herkesin önceliği hep güvenlik olacaktır. DevSecOps aktif güvenlik denetimlerini ve penetrasyon testlerini çevik(agile) geliştirmeye entegre eder. Güvenliği bitmiş uygulamaya uygulamaktan ziyade, güvenliği ürün geliştirme sürecinin tamamına uygulamayı amaçlar. Böylece şirketlerin DevOps yerine DevSecOps sürecini uygulayarak güvenlik odaklı sürekli teslimat gerçekleştirmelerine olanak sağlar. Ek olarak bugünün büyük projelerinin genellikle açık kaynak kod içerdiğini düşünürsek, 3.Parti yazılımları test etmek DevSecOps sürecinde önemli bir gerekliliktir. Kuruluşların kod bağımlılıklarını tanımlamaları, açık kaynak güvenlik yönetimini ihmal etmemeleri çok önemlidir.[4]

Devops kültürüne DevSecOps’u nasıl entegre ederiz?

DevSecOps süreçlerini şirketlere uygulamak için öncelikle yapılması gereken sürecin planlanmasıdır. Planlama aşamasında kabul testleri, kullanıcı tasarımları ve tehdit modelleri oluşturulmalıdır. Planlama aşaması için

  • Jira
  • Rally

gibi araçlar kullanılabilir. Planlama ile beraber daha tek bir kod satırı yazılmadan güvenlik başlamış olur. Daha sonra en önemli aşama bilgilendirme aşamasıdır, bunun için çalışanlara Agile ve DevSecOps eğitim kursları verilmelidir. Eğitimler tamamlandıktan sonra şirketlerin SDLC hakkında kapsamlı bir değerlendirme yapması gerekmektedir. Hız DevOps’un temel ilkelerinden biridir. Sürekli entegrasyon ve sürekli dağıtım (CI/CD) ortamında, canlı ortama kodun ne kadar hızlı ve doğru yayınlandığı büyük önem taşır. Bu yüzden bundan sonra amacımız süreçlere otomasyonu entegre etmektir. Dağıtım süreci DevSecOps tarzında yapılmalıdır. Bir pipeline içindeki tüm hizmetlerin otomasyon ve IaC (Infrustructure as Code) kullanılarak üretilmesi ve dağıtılması sağlanmalıdır. Daha sonraki süreçler CI sunucusu için seçilen araçla başlar. Bu araçlar

  • Jenkins
  • Bamboo
  • Travis CI
  • Microsoft Azure

olabilir. Başarılı bir CI geliştirici disiplini ile kodların bir VCS’ne sık sık ve erken şekilde entegre edilmesi sağlanır. VCS (Version Control System) için,

  • Git
  • Apache Subversion
  • Bitbucket
  • Github

gibi araçlar kullanılabilir. Daha sonra yapılandırma ve test etme aşamasına geçilir. Yapılandırma işlemleri için;

  • JFrog
  • Nexus
  • Cmake
  • Archiva
  • Gradle
  • Grunt
  • Maven

gibi araçlar tercih edilebilir. Yapılandırma işlemleri tamamlandıktan sonra 3 ana test aşaması uygulanmalıdır. Bunlar otomatize edilmiş birim testleri, performans ve entegrasyon testleridir.Her yeni bir kod commit edildiğinde yazılım uygulamasının saldırı altında kalma riski artar. Bu yüzden uygulama kodu, bağımlılıkları, kütüphaneler ve temel alt yapıları yeniden değerlendirilmelidir. Bu incelemere ek olarak ayrıca güvenlik, statik kod analizi, penetrasyon testleri ve güvenlik açığı taraması otomasyon araçları kullanılarak yapılmalıdır. Projelerde açık kaynak kodlu yazılımları, bağımlılıkları ve kod kalitesini kontrol etmek için;

  • Dependabot
  • Snyk
  • Anchor

gibi araçlar tercih edilebilir. Uygulanması gereken ilk otomasyon güvenlik test biçimi statik kod analizidir. Statik kod analizi DevSecOps pipeline içerisinde sürekli entegrasyon (CI) aşamasında gerçekleşir. Jenkins ve Bamboo (CI araçları için) ile entegre çalışan statik kod analizi araçlarından;

  • SonarQube
  • HP Fortify
  • SWAMP
  • OpenVas
  • Checkmarx
  • SpotBugs
  • SCale

ile analiz gerçekleştirilebilir.[5]Sadece bu araçlarla sistemi izlemek yeterli değildir. Şirketlerde güvelikten sorumlu olan kişilere, statik kod analizi yapan otomasyon araçları tarafından oluşturulan, raporları izleme görevi verilmelidir. Otomasyon güvenlik testinin ikinci biçimi olan web uygulamalarının otomatik penetrasyonunun uygulanması, DevSecOps sürecinin CI aşamasında gerçekleşir. Bilgi güvenliği ekipleri tarafından değerlendirilebilen aşağıda listelenmiş bir dizi sızma testi aracı

  • OWASP ZAP
  • Gauntlt

CI oluşturma planına stratejik olarak eklenmelidir. Projelerde konteyner kullanılıyorsa, otomatik güvenlik testinin üçüncü biçimi olan Docker imajları otomatik olarak taranmalıdır. Bu otomatik güvenlik testi biçimi, uygulama kodunun taranmasından daha önemlidir. Docker imajlarının otomatik güvenlik açığı taraması güvenlik ve operasyon (BT) ekiplerinin birlikte çalışmasını gerektirir. Bu testlerin entegrasyonu gerçekleştirildikten sonra işlevsel ve birim testleri için sisteme aşağıdaki otomasyon araçları entegre edilerek

  • Robot Framework
  • Junit
  • Pytest
  • TestNG
  • Mocha

test framework’leri ile işlevsel otomasyon ve birim testleri gerçekleştirilmelidir. Güvenli şekilde yönetim işlemlerini gerçekleştirmek için test işlemlerinden sonra dağıtım ve operasyon sürecine geçilir. Burada,

  • Chef
  • Ansible
  • Saltstack
  • Puppet

gibi araçlar tercih edilebilir. Ardından izleme aşamasına geçilir. DevSecOps sürecinin izlenmesi önemlidir. Bu yüzden monitoring işlemi için de otomasyon araçları tercih edilmelidir. Bu süreçte toplanan metrikler güvenlik ve denetim araçları için gereklidir. Bu metrikler şu şekildedir, pipeline metrikleri için; dağıtım, yanıt oranı, kod kalite ve program yönetimi metrikleri ele alınmalıdır. Bu metriklere ek olarak dağıtım süresi, dağıtım sıklığı, başarısız dağıtımların maliyeti, başarısız dağıtım sayısı, başarılı test yüzdesi, saldırı analiz detayları gibi metrikler de toplanmalıdır. Altyapı metriklerini de toplamak ve izlemek gerekmektedir. Bunun için Prometheus, Nagios ve Datadog gibi araçlar kullanılabilir. Son olarak üretime dağıtılan bir uygulamanın performansını izlemek ve ortaya çıkan metrikleri kayıt altına almak gerekmektedir. Infrastructure as Code (IaC) sürüm kontrollü bir altyapı sunar ve CI-CD süreçlerinin omurgasını oluşturur. DevSecOps süreci boyunca uygulanması gereken süreçlerden birisidir. IaC, çevre denkliği kurmanın yanı sıra, kendisiyle birlikte bir kalite kültürü de getirmektedir. Sistemler için de dockerfile kullanılıyorsa dosya içerisinde kullanılacak her katman sürümleri bilgi güvenliği ekipleri tarafından incelenmelidir. Risksiz oldukları belirlendikten sonra

  • JFrog
  • Nexus

gibi araçlarda depolanabilirler. Docker kullanılıyorsa DockerHub’dan indirilen imajlar, Anchore, Twistlock veya Clair gibi araçlar kullanılarak güvenlik açığı taramasından geçirilmelidir. Son olarak DevSecOps süreci içerisinde orkestrasyon araçları da kullanılmalıdır. Araç olarak

  • Docker-Compose
  • Docker-Swarm
  • Kubernetes
  • RedHat openshift

den biri tercih edilebilir.[6] [7]

Kısaca özetlemek gerekirse şirketlerin uygulaması gereken DecSecOps mimarisi aşağıdaki gibidir.

Planlama ve Geliştirme: Güvenlik gereklilikleri, güvenli teknolojiler ve tehdit modeli,

Yapılandırma: Güvenli kod ve konfigürasyon, güvenli çözümler,

Test: Birim ve entegrasyon testleri, işlevsel ve işlevsel olmayan testler, sistem ve kalite testleri,

Güvenlik: Güvenlik testleri, zafiyet analizleri, açıklık taraması

Dağıtım ve yönetim: Hızlı ve güvenli dağıtım, entegre güvenlik yönetimi,

Yürütme: Güvenli izleme, güvenilir geri bildirim ve zafiyet yönetimi sağlanmalıdır.[8]

DevSecOps sürecinin sunduğu avantajlar,

- Güvenlik açıklıklarının erken belirlenmesi ve zafiyetlerin en aza indirilmesi,

- Geliştirici ve güvenlik ekipleri arasında iyi işbirliği ve iletişim,

- İşletme genelinde güvenlikli gelişmiş operasyonel verimlilik

-Güvenlik ekipleri için daha fazla hız, çeviklik ve değişim ihtiyaçlarına hızlı cevap verebilme gibi birçok yönden şirket alt yapısına katkıda bulunmaktadır. [9][10]

Referanslar:

1. R. Francis,“DevSecCon Whitepaper”, DevSeccon.com

2.https://resources.whitesourcesoftware.com/blog-whitesource/9-great-devsecops-tools-for-dev-teams-to-integrate-throughout-the-devops-pipeline

3.https://www.infosecurity-magazine.com/next-gen-infosec/enabling-devsecops-sdlc/

4.https://blog.inedo.com/top-31-best-devsecops-tools

5.https://www.infosecurity-magazine.com/next-gen-infosec/enabling-devsecops-sdlc/

6.https://resources.sei.cmu.edu/asset_files/TechnicalReport/2020_005_001_638589.pdf

7. Deparment of Defence, “OSD DevSecOps Best Practice Guide” Version 1.0 15 January 2020

8.https://devops.com/what-is-devsecops-and-to-enable-it-on-your-sdlc/

9.https://phoenixnap.com/blog/what-is-devsecops-best-practices

10. Swisscom LTD. “Devsecops-dynamic-fast-affective-and-secure.pdf” March 2019

--

--

Elif İ. Eser
Nettsi Bilişim Teknoloji A.Ş.

"Knowledge should not be confined within the walls of academia."