Geliştirme yaşam döngüsünün güvenliğini sağlamaya yönelik mimari stratejileri

Bu Azure Well-Architected Framework Güvenliği denetim listesi önerisi için geçerlidir:

SE:02 Yazılımın gizliliğini, bütünlüğünü ve kullanılabilirliğini sağlamak ve güvenlik öncelikli bir düşünce yapısı benimsemek için yazılım geliştirme yaşam döngüsü (SDLC) boyunca güvenli geliştirme yaşam döngüsünü (SDL) uyumlu hale getirme.

Uygulama kodu her iş yükünün çekirdeğidir. Denetimleri geliştirmenin birden çok aşamasında tümleştirerek SDLC'nin her yerinde güvenlik ekleyin. Amaç, tasarım kararlarının önlenebilir güvenlik açıkları oluşturmadığından ve kod ve yapılandırma seçimlerinin açıklardan yararlanılabilir güvenlik açıklarına neden olmadığından emin olmaktır.

Güvenlik döngüsünün diyagramı.

Bu kılavuzda, uygulama kodunu korumak ve güvenlik açığı olan uygulamaları önlemek ve güvenliği aşılmış bileşenlerin tanıtılmasını önlemek için en iyi güvenlik yöntemleri açıklanmaktadır. Tedarik zinciri riskini azaltmak için en iyi yöntemleri üçüncü taraf ve açık kaynak bileşenlere genişletin. Odak, altyapı katmanında değildir.

Kılavuz, SDL uygulamalarında temel alınır ve DevSecOps ilkelerinin temel bir anlayışını varsayar. Geliştirici iş istasyonları, kaynak depoları, derleme sistemleri ve dağıtım ortamları dahil olmak üzere tam yazılım tedarik zincirini ele almak için uygulama kodunun ötesine uzanır.

Terminology

Süre Definition
Yaygın Güvenlik Açıkları ve Açığa Çıkarmalar (CVE) Yazılım ve donanım ürünlerinde bilinen güvenlik açıklarının ve açığa çıkarmaların genel kullanıma açık veritabanı.
Derinlemesine savunma Sistemleri korumak için birden çok koruma katmanı kullanan bir güvenlik stratejisidir, bu nedenle bir katman başarısız olursa, diğerleri güvenlik sağlamaya devam eder.
DevSecOps Yazılım yaşam döngüsü boyunca geliştirme, güvenlik ve operasyon ekipleri arasındaki işbirliğini vurgulayan, güvenlik uygulamalarını DevOps süreciyle tümleştiren bir yaklaşım.
Dinamik Uygulama Güvenliği Testi (DAST) Gerçek dünya saldırı senaryolarının benzetimlerini yaparak güvenlik açıklarını belirlemek için çalışma zamanı sırasında uygulamaları analiz eden güvenlik testi.
İdare edilen kimlik Uygulamalara Microsoft Entra Id'de otomatik olarak yönetilen bir kimlik sağlayan ve kimlik bilgilerini kodda depolama gereksinimini ortadan kaldıran bir Azure özelliği.
Aşamalı maruz kalma Riski en aza indirmek ve olası sorunları içermek için kullanıcıların alt kümelerinde yapılan değişiklikleri aşamalı olarak yayımlayan bir dağıtım stratejisi.
Güvenlik Geliştirme Yaşam Döngüsü (SDL) Microsoft tarafından sağlanan ve güvenlik güvencesi ve uyumluluk gereksinimlerini destekleyen bir dizi uygulama.
Yazılım geliştirme yaşam döngüsü (SDLC) Yazılım sistemleri geliştirmek için çok aşamalı, sistematik bir süreç.
Statik Uygulama Güvenliği Testi (SAST) Olası güvenlik açıklarını belirlemek için programı yürütmeden kaynak kodu, bayt kodu veya ikili dosyaları analiz eden güvenlik testi.
ADIM Tehditleri altı türe ayıran bir tehdit modelleme metodolojisi: Kimlik sahtekarlığı, Kurcalama, İnkar, Bilgilerin açığa çıkması, Hizmet reddi ve Ayrıcalıkların yükseltilmesi.
Tedarik zinciri güvenliği Üçüncü taraf bileşenler, geliştirme araçları ve işlemler de dahil olmak üzere yazılım tedarik zincirinin tamamının tehlikeye veya kurcalamaya karşı korunması.
Tehdit modelleme Tasarım aşamasının başlarında bir sisteme yönelik olası güvenlik tehditlerini tanımlama, değerlendirme ve azaltmaya yönelik yapılandırılmış bir süreç.

Birinci günden itibaren güvenliği düşünün

En erken planlama ve mimari tartışmaları sırasında, iş hedeflerinin yanı sıra hem işlevsel hem de işlevsel olmayan güvenlik gereksinimlerini tanımlayın. Mimariyi güvenlik kontrolleriyle kapla. Yalıtım sınırlarını, dışarıdan ve içeriden dışarı erişimi ve iş yükü verileri için geçerli olan duyarlılık düzeylerini düşünün. Mimarinin güvenlik boyutunu geliştirmek için Güvenlik denetim listesini dikkatle izlemenizi öneririz. Güvenliği destekleyen mimari tasarım desenlerini de gözden geçirin.

Ekibin sorumlu olmasını sağlamak için güvenlik konuları ve sonuçları, ürünün bir parçası olarak tasarlanıp teslim edilebilmeleri için doğrudan kapsam öğelerine eklenmelidir. Örneğin, kullanıcıların verileri karşıya yüklemesine ve işlemesine olanak tanıyan kritik kullanıcı akışlarını destekleyen bir uygulama düşünün. Güvenlik teslim edilebilirleri, yalnızca izin verilen eylemlere izin verildiğinden emin olmak için kullanıcıların sistemle nasıl etkileşim kuracaklarını (güçlü kimlik doğrulaması ve yetkilendirmeyi zorunlu tutma) ele almalıdır.

Mimarların şeffaflık ve sorumluluk sağlamak için güvenlik dengelerini açıkça belgelemeleri ve risk kabullerini resmileştirmeleri gerekir. Örneğin, bir güvenlik kararı, OWASP güvenlik açıklarını önceden engellemek için ölçüler gerektirebilir. Paydaşlar fon sağlamamayı tercih ederse, sonuçta ortaya çıkan uygulama katmanı saldırı riskini kabul etmeli ve kabul etmelidir.

Güvenliği destekleyen teknoloji seçeneklerini belirleme

İstediğiniz sonuçları elde etmek için gereken güvenlik denetimlerini belirleyin ve mümkün olduğunca Azure'ın yerel özelliklerinden yararlanın. Örneğin, kimlik, ağ ve kaynak sınırlarını kullanarak bir segmentasyon stratejisi tanımlayın ve uygulamayı korumak için Azure Front Door veya Azure Application Gateway gibi web uygulaması güvenlik duvarlarını (WAF) seçin. Girişte WAF gerektiğinde, WAF'in işlevlerini özel uygulama kodunda çoğaltmak yerine bu yönetilen hizmetleri bunun yerine kullanın.

Teknik konular arasında yalnızca doğrulanmış sağlayıcılardan alınan güvenilir çerçevelerin, kitaplıkların ve tedarik zinciri yazılımının seçilmesi de yer alır. Üçüncü taraf satıcılar güvenlik gereksinimlerinizi karşılamalı ve güvenlik olaylarını anında bildirerek sorumlu bir açıklama planı sağlamalıdır. Onaylanan ve izin verilmeyen varlıkların listesini koruyun ve mümkün olduğunda onaylanmamış bileşenlerin kullanımını önlemek için geliştirme işlem hatlarında korumaları zorunlu kılın. Onaylı bağımlılıklar için otomatik tarama, güvenlik açıklarını erken ve tutarlı bir şekilde algılamaya yardımcı olur.

Uygulama gizli dizilerinin ve önceden paylaşılan anahtarların güvenli bir şekilde nasıl depolaneceğine karar verin. Kimlik bilgilerini veya gizli dizileri hiçbir zaman kaynak kod deposunda depolamayın. Azure Key Vault gibi harici araçları kullanın, böylece kaynak kod açığa çıksa bile saldırganlar erişim sağlayamaz. Mümkün olduğunda, yönetilen kimlikleri kullanarak gizli bilgileri tamamen kullanmaktan kaçının. Daha fazla bilgi için bkz. Uygulama sırlarını yönetmeye yönelik öneriler.

Tehdit modellemeyi tasarım disiplini haline getirme

Tehdit modelleme , tasarım aşamasında güvenlik açıklarını belirlemenize, tehditleri değerlendirmenize ve risk azaltmaları tanımlamanıza yardımcı olur. Kapsamı tanımlayarak başlayın: net sistem sınırları ayarlayın ve varlıklarınızı envantere ekleyerek en önemli konulara odaklanın. Veri akışları ve bağımlılıklar da dahil olmak üzere her bileşen hakkında ayrıntılı bilgi toplayın ve her bir bileşenin nasıl kötüye kullanılıp kullanılamayabileceğini belirlemek için her birini bir saldırganın perspektifinden analiz edin. Bir ihlal varsayımı benimseyin : Denetim hatalarını planlayın ve etkiyi sınırlamak için derinlemesine savunma uygulayın.

Tehditleri sınıflandırmak ve risk azaltma kararlarını yönlendirmek için STRIDE gibi bir endüstri metodolojisi kullanın. Tanımlanan her tehdidi, bunu engelleyen denetimleri ve bu denetimlerin başarısız olması durumunda yanıt planını belgeleyin. Güvenlik açıklarını hızlı bir şekilde düzeltmek için belirgin zaman çizelgeleri ve sorumluluk tanımlayın; böylece bunlar ele alınmadan kalmaz.

Tehdit modelleme sonuçlarını takip edin ve iş yükü yaşam döngüsü süreci boyunca tekrar gözden geçirin. Yeni özelliklerin ve değişikliklerin yönetilmeyen risk oluşturmadığından emin olmak için mimari geliştikçe modeli güncelleştirin.

Bkz. Microsoft Tehdit Modelleme Aracı

Güvenli kodlama uzmanlığı oluşturma

Geliştirme ekibinin güvenli kodlama uygulamalarında resmi, role özgü eğitimi tamamladığınızdan emin olun. Örneğin, web ve API geliştiricileri siteler arası betik (XSS) önlemeyi bilmeli, arka uç geliştiricileri ise SQL ekleme ve diğer veritabanı katmanı saldırıları gibi riskleri nasıl azaltacaklarını anlamalıdır. Geliştiricilerin üretim kaynak koduna erişim vermeden önce bu eğitimi tamamlamasını zorunlu bulundurun. Sorumluluk, bilgi paylaşımı ve sürekli iyileştirmeyi teşvik eden iç eş kod incelemeleri ile bu becerileri pekiştirin.

Güvenlik testlerini stratejik denetim olarak kullanma

Güvenlik testlerini temel bir mühendislik uzmanlık alanı haline getirin. Geliştirme yaşam döngüsü boyunca mimari, kod ve çalışma zamanı davranışını sürekli olarak değerlendiren bir test stratejisi oluşturun. Mimari analiz, statik ve dinamik test, bağımlılık tarama ve otomatik korumaların bir karışımını kullanın.

Geliştiriciler yazarken koddaki güvenlik açıklarını algılamak için statik uygulama güvenlik testi (SAST) kullanın. Çalışan uygulamayı değerlendirmek ve gerçek dünya saldırı senaryolarını simüle etmek için bunu dinamik uygulama güvenlik testi (DAST) ile tamamlar.

Otomatik güvenlik taramayı derleme ve entegrasyon iş akışlarına entegre ederek güvenliğin bir kalite kapısı haline gelmesini sağlayın. Bağımlılıkları ve üçüncü taraf bileşenleri sürekli tarayın ve güvenlik açığı olan kitaplıkları etkin yönetim gerektiren tedarik zinciri riskleri olarak değerlendirin. Kimlik bilgileri gibi hassas verilerin kaynak kontrolüne girmesini önlemek ve gizli bilgilerin açığa çıkmasını algılayan ve engelleyen işlem hattı denetimleriyle bu korumaları güçlendirmek için linter'leri ve kod analiz araçlarını kullanın.

Güvenlik dayanıklılığınızın güvenilirliğini artırmanın bir yolu olarak sektör standartlarını benimseyin. Daha fazla bilgi için bu makalenin Topluluk kaynakları bölümüne bakın.

Yeterli kod yazma

Her kod satırı saldırı yüzeyinizi artırır. Yeniden keşfetmeye göre yeniden kullanım önceliklerini belirleyin. Özel kodda işlevselliği yinelemek yerine güvenlik doğrulamasından geçmiş olan iyi oluşturulmuş çerçeveleri ve kitaplıkları kullanın.

Platform öncelikli bir düşünce yapısı benimseyin. Kimlik doğrulaması, şifreleme, ölçeklendirme ve giriş koruması gibi ağır yükleri Azure'a boşaltmak için mümkün olduğunda yönetilen Azure hizmetlerini ve PaaS özelliklerini kullanın. Ne kadar az özel güvenlik mantığı yazarsanız, uzun vadeli riskiniz o kadar düşüktür.

Kod yazdığınızda varsayılan olarak reddet seçeneğini belirleyin. Açıkça izin verilmediği sürece erişimin engellenmesi için yetkilendirme mantığı tasarla. Belirli, onaylanmış varlıklar için izin verilenler listesini kullanın ve ayrıcalıklı işlemlerin yalnızca açıkça yetkilendirildiğinde başarılı olduğundan emin olun.

Geliştirici ortamlarını güçlendirin

Geliştirme ortamınız, saldırı yüzeyinizin bir parçasıdır. Üretim sistemleriyle aynı titizlikle geliştirici iş istasyonlarını koruyun. Bu, güçlü kimlik kontrollerini zorunlu kılma, ağ korumalarını uygulama ve düzenli yama yönetimini sürdürme anlamına gelir. Güvenliği aşılmış bir iş istasyonu, kod tabanınıza ve derleme sistemlerinize doğrudan bir yol haline gelebilir.

Kaynak kod deponuz kritik bir varlıktır. En az ayrıcalıklı, bilinmesi gereken bir temelde erişim izni verin. İş gerekçesine bağlı net onay iş akışlarıyla yapılandırılmış, güvenlik odaklı kod gözden geçirme işlemleri oluşturun. Depolar ve işlem hatları üzerinde güçlü idare, kurcalama olasılığını azaltır ve bir ihlalin etkisini sınırlar.

Ayrıca geliştiricilerin üretim sistemlerine doğrudan erişimi olmayacak şekilde ağ erişimi segmentlere ayrılmış olmalıdır.

Geliştirme araçları ayrıca yazıldıkçe kodu izleyen IDE uzantılarını kullanarak güvenliğin geliştirilmesine yardımcı olabilir ve güvenlik açıkları için yerel derlemeleri tarar. Kimlik bilgileri, gizli bilgilerin yapılandırma dosyalarında depolanmaması ve gizli bilgilere erişim gerektiğinde kimlik bilgisi yöneticilerinin kullanılmasıyla korunmalıdır.

Geliştiriciler onaylı geliştirici araçlarını izlemeli ve merkezi olarak yönetilen yüklemeleri kullanmalıdır. GitHub Codespaces ve Microsoft Dev Box gibi geliştirme ortamları, yalıtılmış, merkezi olarak yönetilen çalışma alanları sağlayarak güvenliği zorunlu kılabilir.

Testler de yalnızca gerekli en düşük izinlerle denetimli bir ortamda çalıştırılmalıdır.

Güvenli derleme ve dağıtım işlem hatları

İnşa ve dağıtım işlem hatları birincil hedef olabilir. Saldırganlar işlem hattınızla oynanabilir, kötü amaçlı kod ekleyebilir, gizli dizilere erişebilir veya aşağı akış ortamlarının güvenliğini tehlikeye atabilir.

Derleme aracılarını yüksek değerli varlıklar olarak değerlendirin. Kaynak koduna ve derleme işlem hatlarına ayrıcalıklı erişimleri vardır ve bu da onları cazip hedefler haline getirir. Erişimi kesin olarak doğrulayıp yetkilendirin, ağ düzeyinde segmentlere ayırır ve sürekli güvenlik izlemesine tabi tutulur. Her işlem hattı çalıştırması için temiz ortamlar sağladığından operasyonel riski azaltmak ve kalıcılığı sınırlamak için şirket içinde barındırılanlar yerine Microsoft tarafından barındırılan derleme aracılarını tercih edin. Özel ajanlar yönetim yükünü artırır ve saldırı yüzeyini genişletir.

Sızıntıyı önlemek için derleme kimlik bilgilerinin güvenliğini sağlayın ve geçici dosyaları kaldırın. Mümkün olduğunda, gelen erişime izin vermeyip ve yalnızca denetimli giden iletişime izin vererek derleme ajanlarını izole etme.

Net görünürlüğü ve denetimi koruyarak başlayın. Tüm tümleşik bileşenlerin ve bağımlılıkların güncel bir envanterini tutun ve işlem hattında çalışanların onaylananlarla eşleştiğini düzenli olarak doğrulayın. Ayrıcalıklı erişimle yürütüldüğünü fark ederek yalnızca güvenilir, doğrulanmış kaynaklardan gelen işlem hattı görevlerini ve uzantılarını kullanın.

Sabit kodlanmış gizli dizileri ortadan kaldırarak ve yönetilen kimlikleri ve güvenli gizli dizi depolarını tercih ederek kimlik bilgilerini koruyun.Hassas varlıkların gereksiz yere maruz kalmasını azaltmak için işlem hattı aşamalarını segmentlere ayırın ve bir aşama tehlikeye atılırsa yanal hareketi sınırlayın.

Ortam yalıtımı da aynı derecede önemlidir. Üretim ve üretim dışı sistemleri kesin olarak ayırın, üretim verilerini eşdeğer korumalar olmadan daha düşük ortamlarda kullanmaktan kaçının ve bir ihlalin yayılmasına izin verebilecek doğrudan bağlantıyı önleyin. Aşamalı maruz kalma yoluyla riski kontrol edin. Özellik bayrakları veya aşamalı dağıtımlar kullanarak sürüm değişikliklerini kademeli olarak uygulayın, böylece bir güvenlik açığı ortaya çıkarsa etkiyi sınırlayabilirsiniz. İşlem hatlarınızı hem normal hem de acil durum dağıtımlarını destekleyecek şekilde tasarlayın. Güvenlik düzeltmeleri genellikle hızlı yanıt gerektirir ve işleminiz sistem kararlılığından ödün vermeden hızlı ileri veya geri alma işlemlerine izin vermelidir. Acil durum değişikliklerini sorumlu bir şekilde hızlandırmak için net iletişim ve onay yordamları oluşturun.

Uyarı

Güvenlik düzeltmelerinin önceliklerini her zaman kolaylık yerine belirleyin. Ancak kaliteyi asla tehlikeye atmayın veya regresyonlar ortaya atmayın. Acil durum işlem hattı aracılığıyla bir düzeltmeyi hızlandırmanız gerekiyorsa, hangi otomatikleştirilmiş testlerin güvenli bir şekilde atlanabileceğini değerlendirin. Her testin değeri ile yürütme süresi arasındaki dengeyi göz önünde bulundurun. Örneğin, birim testleri hızlı ve önemlidir, ancak tümleştirme veya uçtan uca testler daha uzun sürebilir ancak yine de kritik kapsam sağlar. Bu kararları, düzeltmenin güvenilirliği ile hızı dengelemek için kasıtlı olarak alın.

Üretimde kodu koruma

Üretim, kullanıcılara ulaşmadan önce geliştirici kodunu korumaya yönelik son savunma hattıdır . Ekipler, sorun giderme, olay yanıtı ve güvenlik açığı yönetimini desteklemek için üretime dağıtılan altın görüntünün kaydını tutmalı ve dağıtılan tüm varlıkların ve sürümlerinin bir kataloğunu tutmalıdır. Ayrıca yapılandırma kayma mekanizmalarını etkileyebilir. Yayımlanan CVE'lere yönelik otomatik denetimler, eski veya riskli bileşenleri hızla belirlemeye yardımcı olur.

Geliştirme ortamlarının doğrudan üretim erişimi olmamalıdır. Bu erişim kısıtlanmalıdır. Ayrıca gizli anahtarları ve sertifikaları düzenli olarak döndürün ve savunmaları doğrulamak için masa üstü simülasyonları ve kırmızı takım çalışmaları gibi güvenlik odaklı alıştırmalar gerçekleştirin.

Geliştirmeden hizmetten kaldırmaya kadar kodu koruma

Kodu korumak sürekli bir sorumluluktır. SDLC yinelemelidir ve gereksinimler gelişir, bu nedenle önceki aşamalardan gelen uygulamaların zaman içinde uygulanmaya ve pekiştirilmeye devam etmesi gerekir.

Zamanında güvenlik düzeltme ekleriyle tüm yazılımları, kitaplıkları ve altyapı bileşenlerini güncel tutun. Kod incelemelerinden, geri bildirimlerden, olay araştırmalarından ve ortaya çıkan tehditlerden dersler ekleyerek süreçlerinizi sürekli değerlendirin ve geliştirin. Yinelemeyi önlemek için üretim sorunlarından düzeltmeleri hemen geliştirme yaşam döngüsüne geri tümleştirin.

Artık kullanımda olmayan miras varlıkları devre dışı bırakarak saldırı yüzeyini azaltın ve bakımı basitleştirin. Gelişen tehditlerin önüne geçmek için güvenli kodlama uygulamalarını düzenli olarak iyileştirerek güvenlik duruşunuzun yaşam döngüsünün tamamında güçlü ve dayanıklı kalmasını sağlayın.

Azure hizmetlerinin kolaylaştırılması

Microsoft Güvenlik Geliştirme Yaşam Döngüsü (SDL), geliştirme yaşam döngünüze uygulayabileceğiniz güvenli uygulamalar önerir. Daha fazla bilgi için bkz. Microsoft Güvenlik Geliştirme Yaşam Döngüsü.

DevOps için Defender ve SAST araçları GitHub Advanced Security veya Azure DevOps'un bir parçası olarak bulunur. Bu araçlar, kuruluşunuz için güvenlik puanını izlemenize yardımcı olabilir.

Bu kaynaklarda açıklanan Azure güvenlik önerilerini izleyin:

Kaynak kodunda kimlik bilgilerini bulmak için GitHub Gelişmiş Güvenlik ve OWASP kaynak kodu çözümleme araçları gibi araçları kullanmayı göz önünde bulundurun.

Uygulamanızdaki herhangi bir açık kaynak kodunun güvenliğini doğrulayın. Bu ücretsiz araçlar ve kaynaklar değerlendirmenizde size yardımcı olabilir:

Güvenlik denetim listesi

Öneriler kümesinin tamamına bakın.