DevSecOps denetimleri

DevSecOps, güvenlik süreçlerini ve araçlarını DevOps geliştirme süreciyle tümleştirerek yenilik güvenliğini uygular.

DevOps' un kendisi yüksek düzeyde süreç varyasyonlarına sahip gelişmekte olan bir uzmanlık alanı olduğundan başarılı DevSecOps, güvenliğin geliştirme süreciyle anlaşılmasına ve düşünceli bir şekilde tümleştirilmesine bağlıdır. Güvenlik ekleme işlemi kodda, geliştirme süreçlerinde ve iş yükünü barındıran altyapıda yapılan düşük uyuşma değişiklikleriyle başlamalıdır. DevOps işlemlerine ve becerilerine düşük yük getirirken güvenlik üzerinde en yüksek olumlu etkiye sahip değişikliklere odaklanın.

Bu belge, sürekli tümleştirme ve sürekli teslim (CI/CD) DevOps işleminin her aşamasını ve öncelikle tümleştirmenizi önerdiğimiz güvenlik denetimlerini gözden geçirin.

DevSecOps controls

Planlama ve geliştirme

Modern geliştirme genellikle çevik bir geliştirme metodolojisini izler. Scrum, her sprint'in bir planlama etkinliğiyle başlamasına sahip çevik metodolojinin bir uygulamasıdır. Geliştirme sürecinin bu bölümüne güvenlik getirilmesi şu konulara odaklanmalıdır:

  • Uygulamayı olası bir saldırganın merceği üzerinden görüntülemek için tehdit modelleme
  • Tümleşik bir geliştirme ortamında (IDE) basit statik analiz denetimi için IDE güvenlik eklentileri ve ön işleme kancaları .
  • Etkin güvenlik kodlama standartlarını, eş gözden geçirme işlemlerini ve ön işleme kancalarını belirlemek için eş gözden geçirmeleri ve güvenli kodlama standartları .

Bu adımların tümünü eklemek zorunlu değildir. Ancak her adım, güvenlik sorunlarının çok daha ucuz ve düzeltilmesi daha kolay olduğunda erken ortaya çıkmalarına yardımcı olur.

Tehdit modelleme

Tehdit modellemesi muhtemelen en önemli güvenlik uygulamasıdır. Anında sonuçlar sunar ve gelecekteki tüm projelerinde güvenliği geliştirmek için geliştiricilerde bir güvenlik zihniyetini oluşturmaya yardımcı olur.

Tehdit modellemesi basit bir kavramdır, ancak gerekirse ayrıntılı ve teknik olabilir. Tehdit modellemesi, uygulamanızın gerçekçi bir güvenlik görünümünü ortaya çıkararak belgeler ve şunları içerir:

  • Saldırganlar uygulamanın tasarımını nasıl kötüye kullanabilir?
  • Güvenlik açıklarını düzeltme
  • Sorunları düzeltmenin ne kadar önemli olduğu

Tehdit modellemesi sizi etkili bir şekilde bir saldırganın zihnine sokar. Uygulamayı bir saldırganın gözünden görmenizi sağlar. Saldırganlar bu konuda bir şey yapamadan önce girişimleri engellemeyi öğrenirsiniz. Ekibinizin tasarımda kullanıcı kişilikleri varsa, saldırganı saldırgan kullanıcı kişisi olarak değerlendirebilirsiniz.

Tehdit modellemesi için basit soru ve yanıt yöntemlerinden ayrıntılı araç tabanlı analize kadar değişen yayımlanmış yaklaşımlar vardır. Yaklaşımınızı STRIDE modeli veya OWASP tehdit modellemesi gibi yöntemlere dayandırabilirsiniz.

Tehdit modelleme: Basit başlatma

Tehdit modellemeye yönelik bazı yaklaşımlar zaman alıcı ve beceri açısından yoğun olabileceği için, temel soruları kullanarak daha basit bir yaklaşımla başlamanızı öneririz. Daha basit yöntemler o kadar kapsamlı değildir, ancak kritik düşünme sürecini başlatır ve önemli güvenlik sorunlarını hızla belirlemenize yardımcı olur.

Aşağıdaki basit soru yöntemleri çalışmaya başlamanızı sağlayacaktır:

  • Microsoft'un basit sorular yöntemi: Bu yöntem, yaygın güvenlik tasarımı hatalarını ortaya çıkaracak şekilde tasarlanmış belirli teknik sorular sorar.
  • OWASP tehdit modelleme: Bu yöntem, tehdit modelleme işleminin başlatılması için basit, teknik olmayan sorular sormaya odaklanır.

Ekibiniz için neyin daha iyi çalıştığına bağlı olarak bu yaklaşımlardan birini veya her ikisini de kullanabilirsiniz.

Ekibiniz süreç konusunda daha rahat olduğunda Microsoft güvenlik geliştirme yaşam döngüsünden daha gelişmiş teknikler uygulayabilir. Ayrıca daha ayrıntılı içgörüler elde etmek ve süreci otomatikleştirmeye yardımcı olmak için Microsoft tehdit modelleme aracı gibi tehdit modelleme araçlarını tümleştirebilirler.

Bir diğer yararlı kaynak da geliştiriciler için tehdit modelleme kılavuzudur.

IDE güvenlik eklentileri ve ön işleme kancaları

Geliştiriciler teslim hızına odaklanır ve güvenlik denetimleri süreci yavaşlatabilir. Genellikle, güvenlik denetimleri işlem hattında başlatılırsa yavaşlama gerçekleşir. Bir geliştirici, kodu depoya gönderdikten sonra olası güvenlik açığı hakkında bilgi edinebilir. İşlemi hızlandırmak ve anında geri bildirimde bulunmak için IDE güvenlik eklentileri ve ön işleme kancaları gibi adımlar eklemek faydalı olacaktır.

Tümleşik geliştirme ortamı (IDE) güvenlik eklentileri, geliştiricinin tanıdık IDE ortamında geliştirme işlemi sırasında farklı güvenlik sorunlarını tanımlar. Geliştiricinin yazılı kodunda olası bir güvenlik riski varsa eklentiler anında geri bildirim sağlayabilir. Eklentiler, üçüncü taraf kitaplığındaki veya paketindeki riskleri de ortaya koyabilir. Seçtiğiniz IDE'ye bağlı olarak, birçok açık kaynak veya ticari eklenti kullanılabilir ve güvenlik şirketleri tarafından sağlanır.

Dikkate alınması gereken bir diğer seçenek de, sürüm denetim sistemi izin veriyorsa bir işleme öncesi çerçeve kullanmaktır. İşleme öncesi çerçeve, bir geliştirici kod incelemesi için kod göndermeden önce sorunları tanımlamaya yardımcı olan Git kanca betikleri sağlar. Bir örnek, GitHub'da ayarlayabileceğiniz ön işlemedir.

Eş gözden geçirme ve güvenli kodlama standartları

Çekme istekleri geliştirme sürecinde standarttır. Çekme isteği işleminin bir parçası, genellikle keşfedilmemiş hataları, hataları veya insan hatalarıyla ilgili sorunları ortaya koyan eş gözden geçirmeleridir. Çekme isteği oluşturmadan önce eş gözden geçirme işlemi sırasında geliştiriciye yol gösterebilen bir güvenlik şampiyonu veya bilgili bir güvenlik ekip arkadaşı olması iyi bir uygulamadır.

Güvenli kodlama uygulaması yönergeleri, geliştiricilerin temel güvenli kodlama ilkelerini ve bunların nasıl uygulanması gerektiğini öğrenmelerine yardımcı olur. Genel kodlama uygulamalarıyla birleştirilebilecek OWASP güvenli kodlama uygulamaları gibi güvenli kodlama uygulamaları vardır.

Kodu işleme

Geliştiriciler genellikle GitHub veya Azure Repos gibi depolarda kodlarını oluşturur, yönetir ve paylaşır. Bu yaklaşım, geliştiricilerin üzerinde kolayca işbirliği yapmasına yönelik merkezi, sürüm denetimli bir kod kitaplığı sağlar. Ancak, tek bir kod tabanında birçok ortak çalışanın etkinleştirilmesi de değişikliklerin ortaya çıkış riskiyle karşı karşıyadır. Bu risk, güvenlik açıklarına yol açabilir veya işlemelerdeki kimlik bilgileri veya belirteçler dahil istemeden de olabilir.

Geliştirme ekipleri bu riski ele almak için bir depo tarama özelliğini değerlendirmeli ve uygulamalıdır. Depo tarama araçları, depolardaki kaynak kod üzerinde statik kod analizi gerçekleştirir. Araçlar güvenlik açıklarını veya kimlik bilgileri değişikliklerini arar ve düzeltme için bulunan öğelere bayrak ekler. Bu özellik, insan hatalarına karşı koruma sağlamak için hareket eder ve birçok kişinin aynı depoda işbirliği yaptığı dağıtılmış ekipler için yararlı bir korumadır.

Bağımlılık yönetimi

Geçerli uygulamalarda kodun en fazla yüzde 90'ı dış paketlerin ve kitaplıkların öğelerini içerir veya bu öğeleri temel alır. Kaynak kodundaki bağımlılıkların benimsenmesiyle olası riskleri ele almak çok önemlidir. Birçok üçüncü taraf kitaplığının ciddi güvenlik sorunları vardır. Ayrıca geliştiriciler sürekli olarak en iyi yaşam döngüsünü izlemez ve bağımlılıkları güncel tutmaz.

Geliştirme ekibinizin uygulamalarına hangi bileşenleri dahil etmek istediğini bildiğinden emin olun. Bilinen kaynaklardan güvenli ve güncel sürümleri indirmek isteyeceklerdir. Ayrıca sürümleri güncel tutmaya yönelik bir süreç elde etmek isteyeceklerdir. Ekibiniz OWASP Bağımlılık Denetimi projesi, WhiteSource ve diğerleri gibi araçları kullanabilir.

Yalnızca bağımlılık güvenlik açıklarına odaklanmak veya yaşam döngüleri yeterli değildir. Paket akışları güvenliğini ele almak da önemlidir. Paket yönetim sistemlerini hedefleyen bilinen saldırı vektörleri vardır: yazım hatası, mevcut paketlerin güvenliğinin aşlanması, değiştirme saldırıları ve diğerleri. Bu nedenle, sorumlu paket yönetiminin bu riskleri ele alması gerekir. Daha fazla bilgi için bkz . Özel paket akışlarını kullanırken riski azaltmanın üç yolu.

Statik uygulama güvenlik testi

Ekibiniz üçüncü taraf kitaplıklarını ve paket yönetimini ele aldıktan sonra odağı değiştirmek ve kod güvenliğini geliştirmek çok önemlidir. Kod güvenliğini geliştirmenin farklı yolları vardır. IDE güvenlik eklentilerini kullanabilirsiniz. İsterseniz daha önce açıklandığı gibi artımlı statik analiz ön işleme ve işleme denetimlerini kablolayabilirsiniz. Önceki adımlarda atlanan hataları yakalamak için eksiksiz bir kaynak kodu taraması yapmak da mümkündür. Bu gereklidir, ancak büyük bir kod bloğunu taramak saatler, hatta günler sürebilir. Bu nedenle, bu yaklaşım geliştirmeyi yavaşlatabilir ve yük oluşturabilir.

Ancak bir ekip statik kod tarama uygulamaları uygularken bir yerden başlamalıdır. Bunun bir yolu, sürekli tümleştirme içinde statik kod analizini tanıtmaktır. Bu yöntem, kod değişiklikleri gerçekleşir gerçekleşmez güvenliği doğrular. Örneklerden biri SonarCloud'dur. Farklı diller için birden çok statik uygulama güvenlik testi (SAST) aracını sarmalar. SonarCloud, sürdürülebilirliğe odaklanarak teknik borcu değerlendirir ve izler. Kod kalitesine ve stiline bakar ve güvenliğe özgü damalara sahiptir. Ancak piyasada başka birçok ticari ve açık kaynak araç mevcuttur.

Geri bildirim döngüsünün etkili olduğundan emin olmak için aracı ayarlamak çok önemlidir. Hatalı pozitif sonuçları en aza indirmek ve düzeltilmesi gereken sorunlarla ilgili net, eyleme dönüştürülebilir geri bildirim sağlamak istiyorsunuz. Ayrıca, bulgular varsa kod işlemelerinin varsayılan dala işlenmesini önleyen bir iş akışı uygulamak da iyidir. Hem kalite hem de güvenlik bulgularını ele almak istersiniz. Bu nedenle güvenlik, birim testi deneyiminin bir parçası haline gelir.

İşlem hatlarının güvenliğini sağlama

Geliştirme yaşam döngüsündeki her şey bir işlem hattından geçtiğinden DevOps otomasyonu başka bir düzeye taşır. Sürekli tümleştirme ve sürekli teslim (CI/CD), modern geliştirme döngülerinin önemli bir parçasıdır. CI/CD'de ekibiniz düzenli bir zamanlamaya göre geliştirici kodunu merkezi bir kod tabanında birleştirir ve standart derlemeleri ve test işlemlerini otomatik olarak çalıştırır.

Altyapı işlem hatları, geliştirmenin merkezi bir parçasıdır. Ancak betikleri çalıştırmak veya üretim ortamlarına kod dağıtmak için işlem hatlarını kullanmak benzersiz güvenlik zorluklarına neden olabilir. CI/CD işlem hatlarınızın kötü amaçlı kod çalıştırma, kimlik bilgilerinin çalınmasına izin verme veya saldırganlara erişim için herhangi bir yüzey alanı verme yolları haline gelmediğinden emin olmak istiyorsunuz. Ayrıca yalnızca ekibinizin yayınlamayı planladığı kodun dağıtılmasını sağlamak istiyorsunuz.

DevOps ekipleri, işlem hattı için uygun güvenlik denetimlerini uyguladığından emin olmalıdır. Seçilen platforma bağlı olarak, riskleri ele almak için farklı yönergeler vardır. Daha fazla bilgi için bkz . Azure Pipelines'ın güvenliğini sağlama.

Dağıt ve test et

Birçok kuruluş, kod oluşturma ve dağıtma işlemlerini otomatikleştirmek ve standartlaştırmak için derleme ve yayın işlem hatlarını kullanır. Yayın işlem hatları, geliştirme ekiplerinin kodun bölümlerinde hızlı ve uygun ölçekte yinelemeli değişiklikler yapmasına olanak tanır. Ekiplerin mevcut ortamları yeniden dağıtmak veya yükseltmek için büyük miktarda zaman harcaması gerekmez.

Yayın işlem hatlarını kullanmak, ekiplerin kodu geliştirme ortamlarından, test ortamları aracılığıyla ve sonunda üretim ortamına yükseltmesine de olanak tanır. Otomasyon kapsamında geliştirme ekipleri, test ortamlarına kod dağıtırken betikli, otomatikleştirilmiş testler çalıştıran güvenlik araçlarını içermelidir. Testler, güvenlik açıklarını veya genel uç noktaları denetlemek için uygulama özelliklerinde birim testi içermelidir. Test, kasıtlı erişim sağlar.

Dinamik uygulama güvenliği testi

Klasik şelale geliştirme modelinde, güvenlik genellikle üretime geçmeden hemen önce son adımda tanıtıldı. En popüler güvenlik yaklaşımlarından biri sızma testi veya kalem testidir. Sızma testi, bir ekibin uygulamaya bir saldırgan zihniyetine en yakın siyah kutu güvenlik perspektifinden bakmasını sağlar.

Sızma testi, biri dinamik uygulama güvenliği testi (DAST) olan çeşitli eylem noktalarından oluşur. DAST, uygulamanın özel olarak hazırlanmış isteklere nasıl yanıt verdiğini görerek çalışan uygulamadaki güvenlik sorunlarını bulan bir web uygulaması güvenlik testidir. DAST araçları, web uygulaması güvenlik açığı tarayıcıları olarak da bilinir. Bir örnek, OWASP Zed Saldırı Ara Sunucusu (ZAP) olan açık kaynak bir araçtır. Çalışan web uygulamasında güvenlik açıklarını bulur. OWASP ZAP taramalarının farklı yolları vardır: yapılandırmaya bağlı olarak pasif taban çizgisi taraması veya tam tarama.

Kalem testinin dezavantajı, zaman almasıdır. Kapsamlı bir kalem testi birkaç haftaya kadar sürebilir ve DevOps geliştirme hızıyla bu zaman çerçevesi sürdürülebilir olmayabilir. Ancak SAST ve diğer adımlar tarafından kaçırılan sorunları ortaya çıkarmak için geliştirme sürecinde daha hafif bir kalem testi sürümü eklemeye değer. OWASP ZAP gibi DAST araçları yardımcı olabilir.

Geliştiriciler OWASP ZAP'ı işlem hattında görev olarak tümleştirir. Çalıştırma sırasında, OWASP ZAP tarayıcısı kapsayıcıda çalışır ve taramasını yapar, ardından sonuçları yayımlar. Bu yaklaşım mükemmel olmayabilir, çünkü tam sızma testi değildir, ancak yine de değerlidir. Bu, güvenlik duruşunu geliştirmeye yönelik geliştirme döngüsünde bir kalite ölçüsü daha.

Bulut yapılandırması doğrulaması ve altyapı taraması

Uygulamalar için kodu taramanın ve güvenliğini sağlamanın yanı sıra, uygulamaları dağıttığınız ortamların da güvenli olduğundan emin olun. Güvenli ortamlar, hızla ilerlemek, yenilik yapmak ve yeni teknolojiler kullanmak isteyen kuruluşlar için önemlidir. Güvenli ortamlar, ekiplerin denemeler için hızlı bir şekilde yeni ortamlar oluşturmasını da sağlar.

Azure özellikleri, kuruluşların Azure İlkesi gibi ortamlardan güvenlik standartları oluşturmasına olanak tanır. Teams, ilke kümeleri oluşturmak için Azure İlkesi kullanabilir. İlke kümeleri, belirli iş yükü türlerinin veya genel IP adresleri gibi yapılandırma öğelerinin oluşturulmasını engeller. Bu korumalar ekiplerin, yenilikleri ve idareyi dengeleyerek güvenli ve denetimli bir ortamda deneme yapmasına olanak tanır.

DevOps'un geliştiricileri ve işlemleri birbirine adım adım getirme yollarından biri, mevcut altyapının kod olarak altyapı yaklaşımına dönüştürülmesini desteklemektir.

Kod olarak altyapı (IaC), açıklayıcı bir modelde altyapının (ağlar, sanal makineler, yük dengeleyiciler ve bağlantı topolojisi) yönetimidir. IaC, DevOps ekibinin kaynak kodu için kullandığı sürüm oluşturma modelini kullanır. Aynı kaynak kodun ilkesi aynı ikiliyi oluştururken olduğu gibi, IaC modeli de her uygulandığında aynı ortamı oluşturur. IaC, sürekli teslim ile kullanılan önemli bir DevOps uygulamasıdır.

DevSecOps, güvenliği sola kaydırarak güvenliğin yalnızca uygulama güvenliğiyle değil altyapı güvenliğiyle de ilgili olduğunu gösterir. DevSecOps'un altyapı güvenliğini destekleme yollarından biri, altyapı bulutta dağıtilmeden önce güvenlik taraması eklemektir. Altyapı koda dönüştükçe, altyapıya uygulama güvenliğiyle aynı güvenlik eylemlerini uygularsınız. Seçtiğiniz IaC stratejisine göre altyapı güvenlik taraması çalıştırmak için kullanabileceğiniz güvenlik araçları vardır.

Bulutun benimsenmesiyle birlikte kapsayıcıya alma, ekiplerin uygulama mimarisi kararlarında aldığı popüler bir yaklaşımdır. Kapsayıcı depolarından bazıları, bilinen güvenlik açıklarına sahip paketleri yakalamak için görüntüleri tarar. Bir kapsayıcının güncel olmayan yazılımlara sahip olması riski hala devam ediyor olabilir. Bu risk nedeniyle kapsayıcıyı güvenlik risklerine karşı taramak çok önemlidir. Bu alanı hedefleyen ve CD işleminde sıkı tümleştirmeyi destekleyen birçok açık kaynak ve ticari güvenlik aracı vardır. Güvenlik araçları, ekiplerin kod olarak altyapı için DevSecOps'ı benimsemesine ve kapsayıcıları kullanmayı öğrenmesine yardımcı olur.

Üretime gidin ve faaliyete geçin

Çözüm üretim aşamasına geçtiğinde güvenlik durumunu denetlemeye ve yönetmeye devam etmek çok önemlidir. Sürecin bu aşamasında, bulut altyapısına ve genel uygulamaya odaklanmanın zamanı geldi.

Yapılandırma ve altyapı taraması

Birden çok abonelikte bulut abonelikleri ve kaynak yapılandırmasıyla ilgili görünürlük için AzSK ekibinin Azure kiracı güvenlik çözümünü kullanın.

Azure, izleme ve güvenlik özelliklerini içerir. Bu özellikler, araştırma ve olası düzeltme gerektiren anormal olayları veya yapılandırmaları algılar ve uyarır. Bulut için Microsoft Defender ve Microsoft Sentinel gibi teknolojiler, Azure ortamlarıyla yerel olarak tümleşen birinci taraf araçlardır. Bu teknolojiler, ortam ve kod güvenliği araçlarını tamamlar. Teknolojiler, kuruluşların hızlı ve güvenli bir şekilde denemeler yapıp yenilik yapabilecekleri kapsamlı güvenlik izlemesi sağlar.

Sızma testi

Sızma testi, altyapı veya uygulama yapılandırmasında saldırganların yararlanabileceği zayıflıklar oluşturabilecek güvenlik açıklarını denetlemek için önerilen bir uygulamadır.

Birçok ürün ve iş ortağı sızma testi hizmetleri sunar. Microsoft, Azure'da sızma testi için rehberlik sağlar.

Test genellikle aşağıdaki test türlerini kapsar:

  • Güvenlik açıklarını ortaya çıkarmak için uç noktalarınızda test yapma
  • Uç noktalarınızın Fuzz testi (hatalı biçimlendirilmiş giriş verileri sağlayarak program hatalarını bulma)
  • Uç noktalarınızın bağlantı noktası taraması

Eyleme dönüştürülebilir zeka

Bu kılavuzdaki araçlar ve teknikler, yenilikleri yönlendirmeyi hedefleyen yeni teknolojilere hız kazandırmak ve denemeler yapmak isteyen kuruluşlar için bütünsel bir güvenlik modeli sunar. DevSecOps'un önemli bir öğesi veri temelli, olay odaklı işlemlerdir. Bu süreçler ekiplerin olası riskleri belirlemesine, değerlendirmesine ve yanıtlamasına yardımcı olur. Birçok kuruluş uyarıları ve kullanım verilerini BT hizmet yönetimi (ITSM) platformlarıyla tümleştirmeyi tercih eder. Ekip daha sonra diğer olaylar ve istekler için kullandıkları güvenlik olaylarına aynı yapılandırılmış iş akışını getirebilir.

Geri bildirim döngüleri

Screenshot showing the Continuous security model.

Tüm bu teknikler ve araçlar, ekiplerin araştırma ve olası çözüm gerektiren riskleri ve güvenlik açıklarını bulmalarını ve bunlara bayrak eklemelerini sağlar. Bir uyarı alan veya destek biletini araştıran olası bir sorunu keşfeden operasyon ekipleri, gözden geçirilecek öğeleri bayrakla işaretlemek için geliştirme ekibine geri giden bir yola ihtiyaç duyar. Sorunsuz, işbirliğine dayalı bir geri bildirim döngüsü, sorunları hızlı bir şekilde ele almak ve bir güvenlik açığı riskini mümkün olduğunca en aza indirmek için çok önemlidir.

Geri bildirim için yaygın bir desen, bunu Azure DevOps veya GitHub gibi bir geliştirici iş yönetimi sistemiyle tümleştirmektir. Bir kuruluş, geliştiricilerin planlama ve eylem gerçekleştirmesi için uyarıları veya olayları iş öğelerine bağlayabilir. Bu işlem, geliştiricilerin geliştirme, test ve yayın dahil olmak üzere standart iş akışları içindeki sorunları çözmeleri için etkili bir yol sağlar.