ScholarGate
Asistan

Güvenli Yazılım Geliştirme

Güvenli yazılım geliştirme, yazılım oluşturmanın her aşamasında — tehdit modellemesinden güvenli tasarıma, kodlama standartlarından test ve incelemeye kadar — güvenliği entegre ederek, güvenlik açıklarının yayınlandıktan sonra yamalanması yerine önlenmesini sağlamaktadır.

PaperMind ile konu bulYakındaMakale ve konu bul
Tools & resources
Slaytları indir
Learn & explore
VideoYakında

Tanım

Güvenli yazılım geliştirme, teslim edilen yazılımlardaki güvenlik açıklarının sayısını ve ciddiyetini azaltmak amacıyla yazılım geliştirme yaşam döngüsü boyunca güvenlik faaliyetlerini ve kontrollerini dahil etme disiplinidir.

Kapsam

Bu konu, güvenli yazılım üreten uygulamaları ve süreçleri kapsamaktadır: tehdit modellemesi, güvenli tasarım ilkeleri, güvenli kodlama standartları, statik ve dinamik analiz, fuzzing, güvenlik testi, kod incelemesi ve güvenli geliştirme yaşam döngüsü ile DevSecOps. Tedarik zinciri ve bağımlılık güvenliğini ele almaktadır. İstismarın saldırgan çalışmasını ve kötü amaçlı yazılımların yayın sonrası analizini dışlamaktadır; bunlar ilgili diğer konularda incelenmektedir.

Temel sorular

  • Güvenlik, yazılıma sonradan eklenmek yerine başlangıçtan itibaren nasıl tasarlanmaktadır?
  • Tehdit modellemesi nedir ve güvenli tasarıma nasıl rehberlik etmektedir?
  • Statik analiz, dinamik analiz ve fuzzing, yayınlanmadan önce güvenlik açıklarını nasıl bulmaktadır?
  • Güvenli geliştirme faaliyetleri modern CI/CD işlem hatlarına (DevSecOps) nasıl entegre edilmektedir?
  • Üçüncü taraf bağımlılıklarından ve yazılım tedarik zincirinden kaynaklanan riskler nasıl yönetilmektedir?

Anahtar kavramlar

  • tehdit modellemesi
  • güvenli tasarım ilkeleri
  • güvenli kodlama standartları
  • statik uygulama güvenlik testi (SAST)
  • dinamik analiz (DAST)
  • fuzzing
  • kod incelemesi
  • güvenli geliştirme yaşam döngüsü
  • tedarik zinciri güvenliği

Temel kuramlar

Güvenlik geliştirme yaşam döngüsü
Yapılandırılmış bir süreç, güvenlik kontrollerini her geliştirme aşamasına — gereksinimler, tasarım (tehdit modellemesi), uygulama (güvenli kodlama, analiz), doğrulama (test, fuzzing) ve yayınlama — entegre ederek, sevk edilen güvenlik açıklarını ölçülebilir şekilde azaltmaktadır.
Sola kaydırma ve otomatik güvence
Kusurları erken bulmak ve düzeltmek ('sola kaydırma'), dağıtımdan sonrasına göre çok daha ucuzdur; sürekli entegrasyona gömülü otomatik statik/dinamik analiz ve fuzzing, ölçeklenebilir, tekrarlanabilir güvence sağlamaktadır.

Mekanizmalar

Güvenli geliştirme, nelerin yanlış gidebileceğini belirlemek için tehdit modellemesi (örn. STRIDE) ile başlamakta, en az ayrıcalık ve derinlemesine savunma uygulayan bir tasarımı bilgilendirmektedir. Uygulama sırasında, güvenli kodlama standartları ve statik analiz riskli kalıpları işaretlerken, dinamik analiz ve fuzzing, çalışan programı hatalı girdilerle çalıştırarak çökmeleri ve bellek hatalarını ortaya çıkarmaktadır. Kod incelemesi ve güvenlik testleri yayınlanmadan önce yapılmakta olup, DevSecOps'ta bu kontroller derleme hattında otomatik olarak çalışmakta, bağımlılık taraması ve imzalı derlemeler tedarik zincirini korumaktadır.

Klinik önem

Güvenli geliştirme, insanların kullandığı hemen hemen tüm yazılımların temel güvenliğini belirlemektedir. Microsoft'un 2002 sonrası SDL'yi benimsemesi, ürünlerindeki güvenlik açıklarını önemli ölçüde azaltmış, sürekli fuzzing (Google'ın OSS-Fuzz'u) yaygın olarak kullanılan açık kaynak kodlarda binlerce hata bulmuş ve SolarWinds ve Log4Shell gibi saldırılardan sonra tedarik zinciri uygulamaları aciliyet kazanmıştır. Bu uygulamalar, düzenleyici beklentileri ve tedarik gereksinimlerini şekillendirmektedir.

Kanıt ve kılavuzlar

Çerçeveler arasında Microsoft SDL, OWASP SAMM ve ASVS, BSIMM (gerçek programların bir ölçümü) ve NIST'in Güvenli Yazılım Geliştirme Çerçevesi (SSDF, SP 800-218) bulunmaktadır. ABD yürütme yönergeleri artık devlet yazılım tedarikçileri için SSDF tasdikini zorunlu kılmakta ve SBOM (yazılım malzeme listesi) standartları tedarik zinciri şeffaflığını desteklemektedir.

Tarihçe

Güvenli geliştirme, 1990'ların sonları ve 2000'lerin başlarında sevk edilen yazılımları yamalamanın ölçeklenemediği farkındalığından doğmuştur. Microsoft'un 2002 tarihli Güvenilir Hesaplama girişimi Güvenlik Geliştirme Yaşam Döngüsü'nü ortaya çıkarmış ve McGraw'ın 'Software Security' (2006) adlı eseri 'güvenliği içeriye inşa etme' kavramını kodlamıştır. 2010'lar bu uygulamaları çevik ve DevOps iş akışlarına (DevSecOps) entegre etmiş ve büyük tedarik zinciri olaylarından sonra bunları bağımlılıklara ve derleme bütünlüğüne genişletmiştir.

Öne çıkan isimler

  • Gary McGraw
  • Michael Howard
  • Steve Lipner
  • Ross Anderson

İlgili konular

Temel eserler

  • howard2006
  • mcgraw2006
  • anderson2020

Sıkça sorulan sorular

Tehdit modellemesi nedir?
Tehdit modellemesi, tasarım aşamasında yapılan, bir saldırganın neyi ve nasıl hedefleyebileceğine dair yapılandırılmış bir analizdir. Ekipler sistemi şematize eder, tehditleri listeler (genellikle STRIDE gibi bir kontrol listesiyle) ve kod yazılmadan önce hafifletme önlemlerine karar verir, böylece güvenlik mimariye dahil edilmiş olur.
Neden sadece bir güvenlik tarayıcısı çalıştırmak yeterli değildir?
Otomatik tarayıcılar bilinen birçok kalıbı yakalar ancak tasarım hatalarını, iş mantığı hatalarını ve yeni sorunları gözden kaçırabilir ve yanlış pozitifler üretebilirler. Etkili programlar, otomatik analizi tehdit modellemesi, manuel inceleme ve tüm yaşam döngüsü boyunca test ile birleştirmektedir.

Bu kavram için yöntemler

İlgili kavramlar