Azure üzerinde güvenli uygulamalar geliştirme

Bu makalede, bulut için uygulama geliştirirken göz önünde bulundurmanız gereken güvenlik etkinliklerini ve denetimleri sunuyoruz. Microsoft Güvenlik Geliştirme Yaşam Döngüsü'nin (SDL) uygulama ve doğrulama aşamalarında dikkate alınması gereken güvenlik soruları ve kavramları ele alınmıştır. Amaç, daha güvenli bir uygulama geliştirmek için kullanabileceğiniz etkinlikleri ve Azure hizmetlerini tanımlamanıza yardımcı olmaktır.

Bu makalede aşağıdaki SDL aşamaları ele alınmıştır:

  • Uygulama
  • Doğrulama

Uygulama

Uygulama aşamasının odak noktası, erken önleme için en iyi yöntemleri oluşturmak ve güvenlik sorunlarını algılayıp koddan kaldırmaktır. Uygulamanızın, kullanılmayı amaçlamadığınız şekillerde kullanıldığını varsayalım. Bu, uygulamanızın yanlışlıkla veya kasıtlı olarak kötüye kullanılmasına karşı korumanıza yardımcı olur.

Kod incelemeleri gerçekleştirme

Kodu iade etmeden önce, genel kod kalitesini artırmak ve hata oluşturma riskini azaltmak için kod incelemeleri yapın. Kod gözden geçirme işlemini yönetmek için Visual Studio'yu kullanabilirsiniz.

Statik kod analizini gerçekleştirme

Statik kod analizi ( kaynak kodu analizi olarak da bilinir) bir kod incelemesinin parçası olarak gerçekleştirilir. Statik kod analizi genellikle çalıştırılmayan koddaki olası güvenlik açıklarını bulmak için statik kod analizi araçlarını çalıştırmayı ifade eder. Statik kod analizi , renk tonu denetimi ve veri akışı analizi gibi teknikleri kullanır.

Azure Market statik kod analizi gerçekleştiren ve kod incelemelerine yardımcı olan geliştirici araçları sunar.

Uygulamanız için her girişi doğrulama ve temizleme

Uygulamanızı en yaygın web uygulaması güvenlik açıklarından korumak için tüm girişleri güvenilmeyen olarak değerlendirin. Güvenilmeyen veriler, ekleme saldırılarına yönelik bir araçtır. Uygulamanızın girişinde URL'de parametreler, kullanıcıdan gelen girişler, veritabanından veya API'den alınan veriler ve kullanıcının işleyebileceği herhangi bir şey bulunur. Bir uygulama, verileri herhangi bir şekilde kullanmadan önce verilerin söz dizimsel ve eşanlamlı olarak geçerli olduğunu doğrulamalıdır (kullanıcıya geri görüntüleme dahil).

Yalnızca düzgün biçimlendirilmiş verilerin iş akışına girdiğinden emin olmak için veri akışının başlarında girişi doğrulayın. Yanlış biçimlendirilmiş verilerin veritabanınızda kalıcı olmasını veya aşağı akış bileşeninde bir arıza tetiklemesini istemezsiniz.

Blok listesi ve izin verilenler listesi, giriş söz dizimi doğrulaması gerçekleştirmeye yönelik iki genel yaklaşımdır:

  • Engelleme listesi, belirli bir kullanıcı girişinin "kötü amaçlı olduğu bilinen" içerik içermediğini denetlemeye çalışır.

  • İzin verilen kullanıcı girişinin bir "bilinen iyi" giriş kümesiyle eşleştiğinden emin olmak için izin verilenler listesine ekleme girişimleri. Karakter tabanlı izin verilenler listesi, bir uygulamanın kullanıcı girişinin yalnızca "bilinen iyi" karakterler içerdiğini veya girişin bilinen bir biçimle eşleşdiğini denetlediği bir izin listesi biçimidir.

    Örneğin, bu işlem bir kullanıcı adının yalnızca alfasayısal karakterler içerdiğini veya tam olarak iki sayı içerdiğini denetlemeyi içerebilir.

Güvenli yazılım oluşturmak için izin verilenler listesi tercih edilen yaklaşımdır. Engelleme listesi hataya açıktır çünkü hatalı olabilecek girişlerin tam listesini düşünmek imkansızdır.

Bunu istemci tarafında değil sunucuda (veya sunucuda ve istemci tarafında) yapın.

Uygulamanızın çıkışlarını doğrulama

Görsel olarak veya belge içinde sunduğunuz tüm çıkışlar her zaman kodlanmış ve kaçış şeklinde olmalıdır. Çıkış kodlaması olarak da bilinen kaçış, güvenilmeyen verilerin bir ekleme saldırısı için bir araç olmadığından emin olmak için kullanılır. Kaçış, veri doğrulama ile birlikte sistemin bir bütün olarak güvenliğini artırmak için katmanlı savunma sağlar.

Kaçış, her şeyin çıkış olarak görüntülenmesini sağlar . Kaçış, yorumlayıcının verilerin yürütülmek üzere tasarlanmadığını bilmesini sağlar ve bu da saldırıların çalışmasını engeller. Bu, siteler arası betik oluşturma (XSS) olarak adlandırılan bir diğer yaygın saldırı tekniğidir.

Üçüncü taraf bir web çerçevesi kullanıyorsanız, OWASP XSS önleme bilgi sayfasını kullanarak web sitelerinde çıkış kodlaması seçeneklerinizi doğrulayabilirsiniz.

Veritabanıyla iletişim kurarken parametreli sorgular kullanma

Hiçbir zaman kodunuzda "anında" satır içi veritabanı sorgusu oluşturmayın ve doğrudan veritabanına gönderin. Uygulamanıza eklenen kötü amaçlı kod, veritabanınızın çalınmasına, silinmesine veya değiştirilmesine neden olabilir. Uygulamanız, veritabanınızı barındıran işletim sisteminde kötü amaçlı işletim sistemi komutlarını çalıştırmak için de kullanılabilir.

Bunun yerine parametreli sorgular veya saklı yordamlar kullanın. Parametreli sorgular kullandığınızda, kodunuzdan yordamı güvenli bir şekilde çağırabilir ve sorgu deyiminin bir parçası olarak ele alınacağı konusunda endişelenmeden bir dize geçirebilirsiniz.

Standart sunucu üst bilgilerini kaldırma

Sunucu, X-Powered-By ve X-AspNet-Version gibi üst bilgiler sunucu ve temel teknolojiler hakkındaki bilgileri gösterir. Uygulamanın parmak iziyle yakalanmasını önlemek için bu üst bilgileri gizlemenizi öneririz. Bkz. Azure web sitelerindeki standart sunucu üst bilgilerini kaldırma.

Üretim verilerinizi ayırma

Üretim verileriniz veya "gerçek" verileriniz geliştirme, test veya işletmenin amaçladığı amaç dışında herhangi bir amaç için kullanılmamalıdır. Tüm geliştirme ve testlerde maskelenmiş (anonimleştirilmiş) bir veri kümesi kullanılmalıdır.

Bu, gerçek verilerinize daha az kişinin erişerek saldırı yüzeyinizi azalttığı anlamına gelir. Ayrıca daha az çalışanın kişisel verileri gördüğü anlamına gelir ve bu da olası gizlilik ihlalini ortadan kaldırır.

Güçlü bir parola ilkesi uygulama

Deneme yanılma ve sözlük tabanlı tahminlere karşı savunmak için, kullanıcıların karmaşık bir parola (örneğin, en az 12 karakter uzunluğunda ve alfasayısal ve özel karakterler gerektiren) oluşturmasını sağlamak için güçlü bir parola ilkesi uygulamanız gerekir.

Azure Active Directory B2C, self servis parola sıfırlama, parola sıfırlamayı zorlama ve daha fazlasını sağlayarak parola yönetimi konusunda size yardımcı olur.

Varsayılan hesaplardaki saldırılara karşı savunmak için tüm anahtarların ve parolaların değiştirilebilir olduğunu ve kaynakları yükledikten sonra bunların oluşturulduğunu veya değiştirildiğini doğrulayın.

Uygulamanın parolaları otomatik olarak oluşturması gerekiyorsa, oluşturulan parolaların rastgele olduğundan ve yüksek entropiye sahip olduğundan emin olun.

Dosya karşıya yüklemelerini doğrulama

Uygulamanız dosya yüklemelerine izin veriyorsa, bu riskli etkinlik için alabileceğiniz önlemleri göz önünde bulundurun. Birçok saldırının ilk adımı, saldırı altında olan bir sisteme bazı kötü amaçlı kodlar almaktır. Karşıya dosya yükleme kullanmak, saldırganın bunu gerçekleştirmesine yardımcı olur. OWASP, karşıya yüklediğiniz dosyanın güvenli olduğundan emin olmak için bir dosyayı doğrulamaya yönelik çözümler sunar.

Kötü amaçlı yazılımdan koruma virüsleri, casus yazılımları ve diğer kötü amaçlı yazılımları tanımlamaya ve kaldırmaya yardımcı olur. Microsoft Antimalware veya bir Microsoft iş ortağının uç nokta koruma çözümünü (Trend Micro, Broadcom, McAfee, Windows'da virüsten koruma Microsoft Defender ve Endpoint Protection) yükleyebilirsiniz.

Microsoft Antimalware gerçek zamanlı koruma, zamanlanmış tarama, kötü amaçlı yazılım düzeltme, imza güncelleştirmeleri, altyapı güncelleştirmeleri, örnek raporlama ve dışlama olayı koleksiyonu gibi özellikleri içerir. Dağıtım kolaylığı ve yerleşik algılamalar (uyarılar ve olaylar) için Microsoft Antimalware ve iş ortağı çözümlerini Bulut için Microsoft Defender ile tümleştirebilirsiniz.

Hassas içeriği önbelleğe alma

Hassas içeriği tarayıcıda önbelleğe alma. Tarayıcılar önbelleğe alma ve geçmiş bilgilerini depolayabilir. Önbelleğe alınan dosyalar, Internet Explorer söz konusu olduğunda Geçici İnternet Dosyaları klasörü gibi bir klasörde depolanır. Bu sayfalara yeniden başvurulduğunda tarayıcı, sayfaları önbelleğinden görüntüler. Kullanıcıya hassas bilgiler (adres, kredi kartı ayrıntıları, Sosyal güvenlik numarası, kullanıcı adı) gösteriliyorsa, bilgiler tarayıcının önbelleğinde depolanabilir ve tarayıcının önbelleği incelenerek veya tarayıcının Geri düğmesine basılarak alınabilir.

Doğrulama

Doğrulama aşaması, kodun önceki aşamalarda oluşturulan güvenlik ve gizlilik ilkelerini karşıladığından emin olmak için kapsamlı bir çaba gerektirir.

Uygulama bağımlılıklarınızdaki güvenlik açıklarını bulma ve düzeltme

Bilinen güvenlik açığı olan bileşenleri belirlemek için uygulamanızı ve bağımlı kitaplıklarını tararsınız. Bu taramayı gerçekleştirmek için kullanılabilen ürünler arasında OWASP Bağımlılık Denetimi, Snyk ve Black Duck bulunur.

Uygulamanızı çalışma durumunda test etme

Dinamik uygulama güvenlik testi (DAST), güvenlik açıklarını bulmak için bir uygulamayı işletim durumunda test etme işlemidir. DAST araçları, yürütülürken bellek bozulması, güvenli olmayan sunucu yapılandırması, siteler arası betik oluşturma, kullanıcı ayrıcalık sorunları, SQL ekleme ve diğer kritik güvenlik sorunları gibi güvenlik açıklarını bulmak için programları analiz eder.

DAST, statik uygulama güvenlik testinden (SAST) farklıdır. SAST araçları, güvenlik açıklarını bulmak için kod yürütülmezse kaynak kodu veya kod derlenmiş sürümlerini analiz eder.

Tercihen bir güvenlik uzmanının ( sızma test edicisi veya güvenlik açığı değerlendiricisi ) yardımıyla DAST gerçekleştirin. Bir güvenlik uzmanı kullanılamıyorsa, DAST'ı bir web proxy tarayıcısı ve biraz eğitimle kendiniz gerçekleştirebilirsiniz. Kodunuzla ilgili belirgin güvenlik sorunlarına neden olmadığından emin olmak için bir DAST tarayıcısını erken saatte takın. Web uygulaması güvenlik açığı tarayıcılarının listesi için OWASP sitesine bakın.

Fuzz testi gerçekleştirme

Fuzz testinde, bir uygulamaya kasıtlı olarak hatalı biçimlendirilmiş veya rastgele veriler ekleyerek program hatalarına neden olursunuz. Program hatasının ortaya çıkması, uygulama yayınlanmadan önce olası güvenlik sorunlarının ortaya çıkmasında yardımcı olur.

Güvenlik Riski Algılama , yazılımda güvenlik açısından kritik hataları bulmak için Microsoft'un benzersiz fuzz test hizmetidir.

Saldırı yüzeyi incelemesi gerçekleştirin

Kod tamamlandıktan sonra saldırı yüzeyinin gözden geçirilmesi, bir uygulama veya sistemde yapılan tüm tasarım veya uygulama değişikliklerinin dikkate alındığından emin olunmasını sağlar. Tehdit modelleri de dahil olmak üzere değişiklikler sonucunda oluşturulan yeni saldırı vektörlerinin gözden geçirilmesini ve azaltılmasını sağlamaya yardımcı olur.

Uygulamayı tarayarak saldırı yüzeyinin resmini oluşturabilirsiniz. Microsoft, Saldırı Yüzeyi Çözümleyicisi adlı bir saldırı yüzeyi analiz aracı sunar. OWASP Saldırı Yüzeyi Algılayıcısı, Arachni ve w3af dahil olmak üzere birçok ticari dinamik test ve güvenlik açığı tarama aracı veya hizmeti arasından seçim yapabilirsiniz. Bu tarama araçları, uygulamanızı tarar ve uygulamanın web üzerinden erişilebilen bölümlerini eşler. Azure Market benzer geliştirici araçları için de arama yapabilirsiniz.

Güvenlik sızma testi gerçekleştirme

Uygulamanızın güvenliğini sağlamak, diğer işlevleri test etme kadar önemlidir. Sızma testini derleme ve dağıtım işleminin standart bir parçası haline getirin. Dağıtılan uygulamalarda düzenli güvenlik testleri ve güvenlik açığı taraması zamanlayın ve açık bağlantı noktalarını, uç noktaları ve saldırıları izleyin.

Güvenlik doğrulama testleri çalıştırma

Azure için Güvenli DevOps Seti'nden (AzSK) Azure Kiracı Güvenlik Çözümü (AzTS), Azure platformunun birden çok hizmeti için SVT'ler içerir. Azure aboneliğinizin ve uygulamanızı oluşturan farklı kaynakların güvenli durumda olduğundan emin olmak için bu SVT'leri düzenli aralıklarla çalıştırırsınız. Bu testleri, SVT'leri Visual Studio uzantısı olarak kullanılabilir hale getiren AzSK'nin sürekli tümleştirme/sürekli dağıtım (CI/CD) uzantıları özelliğini kullanarak da otomatikleştirebilirsiniz.

Sonraki adımlar

Aşağıdaki makalelerde, güvenli uygulamalar tasarlamanıza ve dağıtmanıza yardımcı olabilecek güvenlik denetimleri ve etkinlikler önerilir.