Yazılım güvenliği sağlama

**Yazılım Güvenliği Sağlama**, Siber güvenlik bilgi teknolojileri, kablosuz iletişim teknolojileri ve sistemlerine yapılan saldırıların yarattığı zararı önlemeye çalışan ve bu sistemlerin  korunmasını amaçlayan yöntemlerdir.

Siber güvenlik yalnızca özel şirketleri ilgilendiren bir mesele değildir. Devlet kurumlarının aldığı kararları etkileyebilen toplumun politik algısını manipüle edebilen sosyolojik bir yanı da bulunmaktadır.

Bu tür bir örnek 2018'in başlarında tespit edilmiştir; Atlanta Şehri hükûmetine zarar veren bir fidye yazılımı saldırısı (Conti vd., 2018) ve diğer yakın tarihli siber ihlaller (Ruohonen, 2019).

Bu durum hukuki alanda sınırlarının net bir şekilde çizilmesini ve genel geçer bir tanımının yapılmasını zorunlu kılar.

Bu tanım çerçevesinde stratejiler geliştirilerek gerekli önlemlerin alınması gerekmektedir.

Yazılım Güvenliği Sağlama (SSA), yazılımın güvenliğini sağlamak amacıyla tasarım aşamasından itibaren belirli standartlar ve yöntemler kullanarak, verilerin ve kaynakların kaybı, yanlışlığı, değiştirilmesi, ulaşılamaması veya kötüye kullanılmasına karşı koruma sağlamayı hedefler. Bu süreç, yazılımın güvenlik seviyesinin sürekli olarak izlenmesini ve güncellenmesini içerir.

## Tarihçesi
Siber güvenlik kapsamında ortaya atılan terimlerden ilki kriptografidir. Milattan önce 400'lü tarihlerde Spartatılar tarafından askerleri arasında güvenli veri alışverişini sağlamak amacıyla ortaya atılmış bir terimdir. İletecekleri metinleri  şifrelemek amacıyla kullandıkları anahtarı silindir şifreleme anahtarı olarak adlandırırlar.

Daha eski tarihlerde metinleri şifrelemek için kaydırma yöntemleri kullanılmıştır. İletilecek mesajın harfleri  0-25 aralığında bir sayı kadar kaydırılarak alfabedeki başka bir harfle sembolize edilmiştir. Bu metnin çözülmesi için harfin alfabede kaç sayı kaydırıldığı bilinmelidir. Örneğin 'modern' kelimesinin kaydırması “421636”  olduğunda şifrelenmiş metin “rqekut”  haline gelir.Şifrelenecek metindeki 'm' harfi alfabede 4 birim kaydırıldığında 'r' harfine karşılık gelir.'o' harfi 2 birim kaydırıldığında 'q' harfine denk gelir.

Tek kullanımlık anahtarlar ise metnin aynı uzunlukta rastgele değerlerden oluşan anahtarla birleştirilmesiyle oluşur.

Günümüzde kullanılan erişim saldırıları, pasif saldırılar, aktif saldırılar, kötü amaçlı yazılım saldırıları gibi saldırılar daha karmaşık olmalarına rağmen temel mantıkları milattan önce 400'lü tarihlerdeki saldırılara dayanmaktadır.

## Erken Nesil Siber Güvenlik Algoritmalarının Sınıflandırılması
** Kriptografik saldırı**

Saldırganın anahtar kullanmaksızın düz metni elde etmek amacıyla protokol, kod veya şifrelerdeki zayıf yönleri tespit ettiği saldırı türüdür. Kaba kuvvet saldırıları, Ortadaki Adam saldırısı, Doğrusal Kriptanaliz, Farklılık kriptanalizi şeklinde alt başlıklara ayrılır.

* Kaba Kuvvet Saldırısı: Tüm anahtar kombinasyonlarını tek tek deneyerek şifrelemeyi kırmaya çalışan yöntemdir.Bu saldırının etkili olduğu durumlar anahtar uzunluğunun daha kısa olduğu durumlardır.Genellikle otomatik yazılımlar aracılığıyla saldırı gerçekleştirilir. Belirli süre içinde doğru anahtarı tespit edene kadar kullanıcı adı ve şifre kombinasyonlarını dener.Önlem olarak adımızı soyadımızı, doğum tarihimizi belirtmeyen şifreler tanımlanabilir, giriş denemeleri sınırlandırılıp çok faktörlü kimlik doğrulamaları kullanılabilir.
* Ortadaki Adam Saldırısı (Man-in-the-Middle Attack):Taraflar arasındaki iletişimi gizlice kesen ve iki tarafın birbirleriyle doğrudan iletişim kurduğunu düşünmesini sağlayarak bu iletişimi manipüle eden bir siber saldırı türüdür. Saldırgan, araya girer ve iletilen verileri dinleyebilir veya değiştirebilir.
* Doğrusal Kriptanaliz: Blok şifreleme algoritmasının güvenliğini değerlendiren saldırı türüdür.Doğrusal kriptanaliz, bitler arasındaki düzeni tespit etmeye dayanan bir öntemdir.
* Farklılık Kriptanalizi: Blok şifreleme yöntemine karşı etkili bir saldırı yöntemidir. Bu saldırı, girişteki farklılıkların çıktıda nasıl bir etki yarattığını inceleyerek, şifreleme sisteminin zayıf noktalarını keşfetmeyi amaçlar.

**Erişim saldırısı** Saldırganın, bilgileri manipüle etmek amacıyla kullanma hakkı olmadığı ana makineye giriş sağladığı saldırı türü. Web uygulama hizmetleri ve Dosya Aktarım hizmetleri, saldırganların e-hesaplara, veritabanlarına ve diğer özel bilgilere erişebildiği yerlerde tehlikeye atılmaktadır.

**Keşif saldırısı** Failin bilgi toplamak amacıyla makinedeki herhangi bir güvenlik açığını taramak için hedeflenen sistemlerle eşleştiği bir saldırıdır. Güçlü olmayan ve birleştirilmiş kilitleri, kapıları ve pencereleri kırmak için savunmasız olan evdeki hırsızlığa benzer bir senaryodur.

**Aktif saldırı** Veri iletimi sırasında verinin içeriğini değiştirerek işlemleri etkileyen saldırı türüdür.

**Pasif saldırı** Verinin iletimi boyunca saldırganın bilgiye erişmeye çalıştığı saldırı türüdür. Ana bilgisayarlar arasındaki konuşmaları dinleme amacı taşır. Temel amacı bilgi toplamaktır. Veritabanına saldırgan tarafından izinsiz girilmesi ve bilgilerin değiştirilmesi gibi bir amacı yoktur.

**Oltalama saldırısı** Meşru bir kaynaktan geliyormuş gibi görünen e-posta, kısa mesaj vb. birçok yolla yanlış mesajlar gönderme, böylece kullanıcıları aldatma ve giriş şifreleri, kart numaraları gibi hassas ve gizli bilgileri elde etme eylemidir.

**Kötü amaçlı yazılım saldırısı** Bir failin, sadece virüs yaymak değil, aynı zamanda bilgisayarı enfekte etmek ve zarar vermek, böylece özel verileri elde etmek amacıyla ana bilgisayara kasıtlı olarak kötü amaçlı yazılım yüklediği bir saldırı.

**Kuantum anahtar dağıtımına saldırı** Bir kuantum kanalı üzerinden herhangi bir veri iletilirken tek bir foton, birden fazla foton taklit edilerek veya darbelerin zaman aşımına uğramasıyla bir saldırı yapılmıştır.

## Saldırılara Karşı Alınabilecek Önlemler
Siber güvenliği sağlamak için çeşitli yöntemler önerilmektedir.

* Güvenlik Duvarları: Ağ trafiğini kontrol ederek yetkisiz erişimleri engeller. Erişim Kontrolü sağlar. Sisteme erişim yetkileri belirlenmeli ve kontrol edilmelidir.
* Antivirüs Yazılımları: Zararlı yazılımları tespit edip yok eder.
* Şifreleme: Verilerin gizliliğini korumak için kullanılır. Kullanılan verilerin kaybı veya kötüye kullanılmasına karşı koruma sağlanmalıdır.
* Eğitim ve Farkındalık: Kullanıcıları siber tehditler konusunda bilgilendirir.
* Güvenli Kodlama: Yazılım geliştirme sürecinde güvenli kodlama standartlarına uyulmalıdır.

Bu yöntemlerin her biri, siber saldırılara karşı savunma mekanizmaları oluşturmakta önemli bir rol oynamaktadır

## Yazılım Güvenlik Seviyeleri
Siber saldırılar için önlem alınırken ağda iletilen verinin ve yazılımın güvenlik derecesi tespit edilmelidir.

SSA'nın güvenlik derecelerini belirlemekte kullandığı kriterler:

* **Yüksek Güvenlik Açıkları:** Saldırganlar tarafından kolayca kötüye kullanılabilir.
* **Orta Güvenlik Açıkları:** Hassas sistem bilgilerine ulaşılmasına neden olabilir.
* **Düşük Güvenlik Açıkları:** Basit bilgilere erişimi kolaylaştırabilir.

## Yazılım Güvenliğini Sağlama Stratejileri

Yazılım güvenliği sağlamak amacıyla siber güvenlik yöntemleri bilgi sisteminin tasarımında, uygulanmasında ve bakımında güvenlik gereksinimlerinin karşılanması için kullanılır.

Kod analizinin performansında kullanılan teknikler, tasarım analizinde kullanılanları yansıtır.

Güvenli Kod incelemeleri, belirlenen güvenlik gereksinimlerinin, güvenlik tasarım konseptlerinin ve güvenlikle ilgili tanımların karşılanıp karşılanmadığını belirlemek için geliştirme aşaması sırasında ve sonunda gerçekleştirilir.

### Güvenli Yazılım Geliştirme Yaşam Döngüsü (SDLC)

* Güvenli Yazılım Geliştirme Yaşam Döngüsü, yazılım geliştirme sürecinin her aşamasında güvenlik önlemlerinin alınmasını sağlar. Bu süreç, yazılımın tasarımından dağıtımına kadar olan her aşamada güvenlik standartlarının uygulanmasını içerir.

### Sızma Testleri

* Yazılıma yönelik kötü amaçlı yazılım saldırıları gibi potansiyel saldırıları simüle ederek zayıf noktaların tespit edilmesi.
* **Bilgi Toplama Aşaması** hedef sistem hakkında mümkün olduğunca fazla bilgi toplanır. İnternet, arama motorları, e-posta grupları ve DNS kayıtları gibi kaynaklardan veri elde edilir. Bu bilgiler, sistemin mimarisi ve kullanılan teknolojiler hakkında fikir verir.
* **Keşif aşaması**, pasif ve aktif bilgi toplama yöntemlerini içerir. Pasif bilgi toplamada, sistemle doğrudan etkileşimde bulunmadan bilgi toplanırken; aktif bilgi toplamada, sistemle etkileşime girerek daha fazla veri elde edilir. Bu aşamada port tarama, çalışan servislerin belirlenmesi ve ağ haritalama gibi işlemler gerçekleştirilir.
* **Zafiyet tarama aşaması**  sistemdeki potansiyel zafiyetler tespit edilir. Zafiyet tarama araçları kullanılarak veya manuel olarak açıklıklar belirlenir. Örneğin, bir veritabanında SQL açıklığı olup olmadığı kontrol edilir.
* **Açıklıkların İstismar Edilmesi aşaması** Tespit edilen zafiyetlerin kullanılması aşamasıdır. Örneğin, bir SQL açıklığı kullanılarak veritabanına SQL injection saldırısı gerçekleştirilir.
* **Sistemin Ele Geçirilmesi aşaması** sisteme sızılır ve sistem yöneticisi haklarına ulaşılır. Hedef sistem üzerinde tam kontrol sağlanmaya çalışılır.
* **İzlerin Temizlenmesi aşaması:** Sızma testinin sonunda, yapılan işlemlerin izleri temizlenir. Bu, sistem günlüğü (LOG) kayıtlarının silinmesi gibi işlemleri içerir. İzlerin temizlenmesi, gerçek bir saldırı durumunda ne tür izlerin bırakılabileceğini anlamak açısından önemlidir.

### Kod İncelemesi

* Kod incelemesi, yazılımın güvenlik standartlarına uygunluğunun düzenli olarak gözden geçirilmesini içerir.
* Bu süreçte, yazılımın kodu uzman ekipler tarafından incelenerek potansiyel güvenlik açıkları tespit edilir.
* **Kaynak Kod Zafiyet Analizi aşaması:**  Kaynak kodu zayıflık analiz araçları, yazılım kaynak kodunu inceleyerek bilinen açıklık türlerine karşı örüntü eşleştirmeleri kullanarak zayıflıkları arar. Bu tür araçlar, "kaynak kodu güvenlik analiz aracı", "statik uygulama güvenlik testi aracı" veya "kod zayıflığı analiz aracı" gibi isimlendirmelere sahiptir.
* **Kaynak Kodundan Mimari, Tasarım ve İşlevlerin Çıkarılması aşaması:** Bu araçlar, analize yardımcı olmak için kaynak kodundan mimari ve tasarıma ilişkin bilgileri çıkarır. Bu bilgiler, kaynak kodu kalitesi veya zayıflık analizi yapmak için temel olarak kullanılabilir.
* **İkili Kod/Sekizli Kod Analizleri aşaması:** Geleneksel virüs tarayıcıları, ikili kod veya sekizli kod içinde imza taraması yapar. Modern virüs tarayıcıları ise davranış analizi de gerçekleştirebilir.
* **Uygulamalar Arası Akış Analizi :**  Bu araçlar, haberleşme arayüzlerini ve izinleri tespit ederek uygulamalar arası veri ve kontrol akışını inceleyip güvenlik politikalarını ihlal eden akışları kontrol eder.
* **İnsan Tarafından Gözden Geçirme aşaması:** Gözden geçirme genellikle kaynak kodu ile yapılır ancak makine kodu ile de gerçekleştirilebilir. İnsan incelemeleri, gereksinimlere, mimariye, tasarıma ve test bulgularına uygulanabilir.
* **Odaklı Manuel Kontrol aşaması:**  Belirli soruları cevaplamak için manuel kod analizi yapılır. Genellikle 100 satırlık koddan daha azı için uygulanır.
* **Biçimsel Yöntemler aşaması:** Yazılım ve donanım sistemlerinin geliştirilmesi ve doğrulanması için matematiksel teknikler ve araçların kullanılmasını içerir.

### Güvenlik Prosedürleri ve Protokoller

* **HTTPS (Güvenli Hiper Metin Aktarım Protokolü):** HTTPS, HTTP protokolünün güvenli bir versiyonudur ve veri iletimini şifrelemek için SSL/TLS teknolojilerini kullanır. Bu protokol, kullanıcıların tarayıcıları ile web sunucuları arasındaki veri iletimini korur. HTTPS, kullanıcıların kişisel bilgilerini (örneğin kredi kartı bilgileri) kötü niyetli kullanımlara karşı koruma sağlar 14.
* **SSL/TLS:** HTTPS, SSL (Secure Socket Layer) veya TLS (Transport Layer Security) protokolleri ile birlikte çalışır. Bu protokoller, veri güvenliğini sağlamak için şifreleme ve kimlik doğrulama işlevleri sunar.
* **FTPS (File Transfer Protocol Secure):** FTPS, standart FTP protokolünün güvenli bir versiyonudur. SSL/TLS kullanarak veri iletimini şifreler ve böylece dosya transferi sırasında güvenliği artırır. FTPS, hem kontrol hem de veri bağlantıları için güvenli bir iletişim sağlar.
* **SFTP (SSH File Transfer Protocol):** SFTP, SSH (Secure Shell) protokolü üzerinden çalışan bir dosya transfer protokolüdür. SFTP, verilerin şifrelenmesini ve güvenli bir şekilde iletilmesini sağlarken, aynı zamanda dosya yönetimi işlevlerini de destekler. Bu protokol, kullanıcı kimlik doğrulaması ve veri bütünlüğü sağlamak için güçlü şifreleme yöntemleri kullanır.
* **SCP (Secure Copy Protocol):** SCP, SSH protokolü kullanarak dosyaların güvenli bir şekilde kopyalanmasını sağlar. SCP, dosyaların bir ağ üzerinden güvenli bir şekilde aktarılmasını sağlarken, aynı zamanda hızlı bir transfer yöntemi sunar. Ancak, SFTP kadar esnek değildir ve yalnızca dosya kopyalama işlemleri için kullanılır.

## Yazılım güvenliği sağlama süreci
Yazılım güvenliği sağlama süreci, yazılımın içereceği veya kullanacağı bilgilerin tanımlanması ve kategorize edilmesi aşamasını içerir. Bu süreç, bilgilerin hassasiyetine göre sınıflandırılmasını ve her bir kategorinin potansiyel etkilerini belirlemeyi amaçlar.

### Yazılımın içereceği veya kullanacağı bilgilerin tanımlanması ve kategorize edilmesi

* Bilgiler, hassasiyetine göre kategorize edilmelidir.Bu kategoriler genellikle üç ana düzeyde belirlenir: düşük, orta ve yüksek hassasiyet.
* **Düşük Hassasiyet :** Bu kategori altında yer alan bilgiler için güvenlik ihlali durumunda etkisi minimaldir. Örneğin, yazılım sahibinin misyonu veya itibarı üzerinde önemsiz bir etki yaratır. Bu tür bilgiler genellikle genel bilgi veya kamuya açık verilerden oluşur.
* **Orta Hassasiyet :** Orta hassasiyet kategorisindeki bilgiler, güvenlik ihlali durumunda daha belirgin bir etki yaratabilir. Bu durum, yazılım sahibinin işlevleri veya itibarında kayıplara yol açabilir. Örneğin, müşteri bilgileri veya finansal raporlar bu kategoriye girebilir.
* **Yüksek Hassasiyet :** En üst düzeydeki bu kategori, insan hayatına tehdit oluşturabilecek bilgiler içerir. Güvenlik ihlali durumunda yazılım sahibinin misyonları, işlevleri veya itibarı üzerinde onarılamaz bir etkiye yol açabilir ve önemli varlıkların kaybına neden olabilir. Örneğin, sağlık verileri veya kritik altyapı bilgileri bu kategoriye dahil edilir.
* Güvenlik kategorisi belirlemek, yazılımın korunması gereken bilgilerin türünü ve bu bilgilerin korunması için gerekli önlemleri belirlemek açısından kritik öneme sahiptir.

### Güvenlik Gereksinimleri Geliştirilmesi
Güvenlik gereksinimleri,

* **[[Erişim kontrolü]]** yalnızca yetkili kullanıcıların hassas verilere ulaşmasını sağlamak amacıyla gerçekleştirilir. Erişim kontrolü mekanizmaları arasında rol tabanlı erişim kontrolü (RBAC), zorunlu erişim kontrolü (MAC) ve isteğe bağlı erişim kontrolü (DAC) gibi yöntemler bulunmaktadır. Bu sistemler, kullanıcıların hangi verilere erişebileceğini ve hangi işlemleri gerçekleştirebileceğini tanımlar
* **[[Bilgisayar ağı|Ağ]] erişimi** yazılımın veri iletiminde güvenli iletişim protokollerinin kullanılmasını gerektirir. Güvenli ağ erişimi sağlamak için şifreleme yöntemleri, özellikle SSL/TLS gibi protokoller kullanılmalıdır. SSL/TLS sertifikaları, internet üzerinden güvenli bağlantılar kurarak verilerin gizliliğini korur ve yetkisiz erişimleri engellemek için güvenlik duvarları ile diğer ağ güvenlik önlemleri uygulanmalıdır (AWS, 2023).
* **Fiziksel erişim**  Fiziksel güvenlik önlemleri, sunucuların bulunduğu odaların kilitlenmesi, izinsiz girişlerin engellenmesi ve fiziksel ortamın izlenmesi gibi uygulamaları içerir. Bu tür önlemler, donanımın ve verilerin fiziksel olarak korunmasını sağlar.
* **Veri yönetimi**  verilerin güvenli bir şekilde saklanması ve işlenmesini ifade eder.
* **Veri erişimi** ise kullanıcıların verilere nasıl ulaşabileceğini belirler. Güvenli veri yönetimi için şifreleme, veri yedekleme ve veri bütünlüğü kontrolleri gibi yöntemler kullanılmalıdır. Ayrıca, veri iletiminde güvenli iletişim protokollerinin kullanılması da önemlidir.
* Çevrimdışı depolama; Verilerin çevrimdışı depolanması, hassas bilgilerin internetten izole edilerek daha güvenli bir ortamda saklanmasını sağlar. Bu yöntem, siber saldırılara karşı ek bir koruma katmanı sunar ve verilerin yetkisiz erişimden korunmasına yardımcı olur.

## Yazılım Güvenliği Problemlerinin Nedenleri
Yazılımdaki tüm güvenlik açıkları, yazılım içindeki güvenlik hataları veya kusurların sonucudur. Çoğu durumda, bu kusurlar iki ana nedenden kaynaklanmaktadır: **uyumsuzluk veya gereksinimlerin karşılanmaması** ve **yazılım gereksinimlerinde bir hata veya eksiklik**.

### Uyumsuzluk veya gereksinimlerin karşılanmaması

* Yazılımda uyumsuzluk nedenleri kodlama hataları gibi basit nedenler olabileceği gibi zamanlama hataları veya kullanıcı girişi doğrulama hataları gibi daha karmaşık nedenler de olabilir.
* **Zamanlama hataları**, yazılımın belirli bir zaman diliminde beklenmedik veya istenmeyen davranışlar sergilemesine neden olan durumlardır. Bu tür hatalar genellikle çoklu iş parçacığı (threading) veya asenkron işlemlerle ilgili sorunlardan kaynaklanır. Örneğin, bir uygulama aynı anda birden fazla işlem yapmaya çalıştığında, bu işlemler arasında zamanlama sorunları ortaya çıkabilir.
* **Kullanıcı girişi doğrulama hataları** kullanıcıların sisteme giriş yaparken sağladıkları bilgilerin doğrulanmasında meydana gelen sorunlardır. Bu tür hatalar, genellikle kullanıcıdan alınan verilerin yeterince kontrol edilmemesi veya yanlış işlenmesi sonucunda ortaya çıkar. Örneğin, 3D Secure gibi online ödeme sistemlerinde kullanıcı girişi doğrulama hataları sıkça karşılaşılan bir durumdur. Bu tür hatalar, kart sahibinin kimliğinin doğrulanamaması nedeniyle oluşur ve sonuç olarak işlem başarısız olabilir.
* 3D Secure doğrulama hatalarının yaygın nedenleri arasında **hatalı doğrulama bilgileri** (Kullanıcıların cep telefonuna veya e-posta adresine gönderilen doğrulama kodunu yanlış girmesi) ; **Kartın İnternet Alışverişlerine Kapalı Olması**(Kartın internet alışverişlerine kapalı olması durumunda, 3D Secure doğrulama işlemi gerçekleştirilemez), **Yetersiz Bakiye**(Kartta yeterli bakiye bulunmaması durumunda işlem gerçekleştirilemez) gibi nedenler bulunabilir..

Bu tür kullanıcı girişi doğrulama hataları, yazılımların güvenliğini tehlikeye atabilir ve dolandırıcılık gibi ciddi sorunlara yol açabilir. Özellikle SQL enjeksiyonu gibi saldırılar, kullanıcı girişi doğrulama hatalarının bir sonucu olarak ortaya çıkabilir.

#### Doğrulama Ve Geçerlilik Teknikleri

* **Doğrulama**: Yazılımın belirli gereksinimleri karşıladığını ve beklenen sonuçları ürettiğini kontrol eder.
* **Geçerlilik:** Yazılımın doğru bir şekilde çalıştığını ve kullanıcı ihtiyaçlarını karşıladığını garanti eder.

#### Zamanlama Ve Kullanıcı Girişi Doğrulama Hatalarının Tespitinde Kullanılan Yöntemler
Güvenlik güvencesi teknikleri, yazılımda potansiyel güvenlik açıklarını önlemek için tasarlanmıştır. Bu teknikler arasında şunlar bulunur:

* **Statik Analiz:** Kodun derlenmeden önce analiz edilmesi, güvenlik açıklarını tespit etmek için kullanılır.
* **Dinamik Analiz:** Yazılım çalışırken gerçek zamanlı olarak güvenlik açıklarını tespit etmeye yönelik testlerdir.
* **Penetrasyon Testleri(Sızma Testleri):** Yazılıma dışarıdan sızma girişimleri simüle edilerek güvenlik açıklarının belirlenmesi sağlanır.

**'Giriş Doğrulama Testleri:** Kullanıcı girişlerinin doğru bir şekilde doğrulandığını kontrol etmek için yapılan testlerdir.

### Yazılım Gereksinimlerindeki Hatalar Veya Eksiklikler

* Yazılıma dayalı sistemlerdeki en ciddi güvenlik problemleri, yazılım mühendisliği süreçlerinden biri olan sistem gereksinimleriyle ilgili süreçlerden kaynaklanır.
* Örneğin, yazılım normal kullanımda tam olarak gerekli şekilde çalışabilir, ancak gereksinimler bazı sistem durumlarını doğru şekilde ele almıyor olabilir.
* Sistem bu problem durumuna girdiğinde, beklenmeyen ve istenmeyen davranışlar ortaya çıkabilir.
* Normal Kullanım Senaryosu: Bir e-ticaret uygulaması, kullanıcıların ürünleri sepete eklemesine ve satın alma işlemi gerçekleştirmesine olanak tanır. Yazılım, genel olarak bu işlevleri doğru bir şekilde yerine getirir.
* Gereksinim Eksikliği: Ancak, yazılımın gereksinimleri, kullanıcıların aynı anda birden fazla tarayıcı sekmesinde işlem yapabileceğini göz önünde bulundurmayabilir. Bu durumda, sistemin birden fazla oturum açma veya işlem yapma durumunu yönetme yeteneği eksik kalır.
* Problem Durumu: Kullanıcı, bir ürün satın almak için bir sekmede işlem yaparken başka bir sekmede de aynı ürünü sepete eklemeye çalıştığında, sistem beklenmedik bir şekilde davranabilir. Örneğin: Sepet güncellenmeyebilir.Kullanıcının önceki sepet içeriği kaybolabilir.Hatalı fiyatlandırmalar veya stok bilgileri gösterilebilir.
* Sonuç: Bu tür bir durum, kullanıcı deneyimini olumsuz etkileyebilir ve güvenlik açıklarına yol açabilir. Kullanıcıların kişisel bilgileri veya ödeme bilgileri yanlışlıkla başka bir oturumda açığa çıkabilir.

## Yazılım Güvenliğinin Sağlaması  Gereken Aşamaları
Yazılım güvenliği sağlama faaliyetlerinin iki temel türü vardır.

# Bazıları, bir bilgi sisteminin işlediği bilgilere uygun bir hassasiyet kategorisi atanmasını ve uygun koruma gereksinimlerinin geliştirilip karşılanmasını sağlamaya odaklanır.
# Diğerleri ise, yazılımın ve yazılım destek araçlarının ve verilerin kontrolü ve korunmasını sağlamaya odaklanır.

En azından bir yazılım güvenliği sağlama programı şunları sağlamalıdır:

# Yazılım için bir güvenlik değerlendirmesi yapılmış olmalıdır.
# Yazılım için güvenlik gereksinimleri belirlenmiş olmalıdır.
# Yazılım geliştirme ve/veya işletim ve bakım süreçleri için güvenlik gereksinimleri belirlenmiş olmalıdır.
# Her yazılım incelemesi veya denetimi, güvenlik gereksinimlerinin bir değerlendirmesini içermelidir.
# Mevcut yazılım için güvenliği sağlamak ve önerilen değişikliklerin istemeden güvenlik ihlalleri veya zayıflıklar oluşturmadığını garanti etmek için bir konfigürasyon yönetimi ve düzeltici eylem süreci uygulanmalıdır.
# Yazılım için fiziksel güvenlik yeterli olmalıdır.

## Güvenliği İnşa Etmenin Yolları
Yazılım geliştirme sürecini iyileştirmek ve daha iyi yazılımlar üretmek, daha az hata ve zayıflık içeren yazılımlar üreterek yazılım güvenliğini artırmanın yollarıdır.

### Kritik Yazılım Bileşenlerinin Tanımlanması

* Kritik yazılım bileşenleri, yazılımın güvenliğini doğrudan etkileyen ve güvenlik işlevlerini kontrol eden unsurlardır.
* **Kimlik Doğrulama Modülleri:** Kullanıcıların kimliğini doğrulamak için kullanılan bileşenlerdir. Güçlü şifreleme yöntemleri ve çok faktörlü kimlik doğrulama (MFA) gibi teknikler içerebilir.
* **Yetkilendirme Modülleri:** Kullanıcıların sisteme erişim haklarını belirleyen bileşenlerdir. Rol tabanlı erişim kontrolü (RBAC) gibi yöntemlerle, kullanıcıların hangi verilere erişebileceği ve hangi işlemleri gerçekleştirebileceği tanımlanır.
* **Veri Şifreleme Bileşenleri:** Hassas bilgilerin korunması için kullanılan şifreleme algoritmalarıdır. Bu bileşenler, verilerin hem depolama hem de iletim sırasında güvenliğini sağlamak için kritik öneme sahiptir.
* **Güvenlik Duvarları ve Ağ Güvenlik Modülleri:** Ağ trafiğini izleyen ve yetkisiz erişimleri engelleyen bileşenlerdir. Bu modüller, dış saldırılara karşı koruma sağlar.
* **Günlükleme ve İzleme Modülleri:** Sistemdeki etkinliklerin kaydedilmesi ve izlenmesi için kullanılan bileşenlerdir. Bu modüller, olası güvenlik ihlallerinin tespit edilmesine yardımcı olur.
* **Hata Yönetimi ve İyileştirme Bileşenleri:** Yazılımda meydana gelen hataların yönetimi ve düzeltilmesi için kullanılan bileşenlerdir. Bu modüller, yazılımın sürekli olarak güncellenmesini ve güvenliğinin artırılmasını sağlar.

### Araçlar ve Teknikler

* Ticari Yazılım Paketleri: Yazılım güvenliği faaliyetlerini destekleyen birçok COTS (Commercial Off-The-Shelf) yazılım paketi bulunmaktadır. Bunlar kullanılmadan önce dikkatlice değerlendirilmelidir.
* **COTS (Commercial Off-The-Shelf) yazılımı**, ticari piyasada bulunan ve belirli bir uygulama için özel olarak yapılmamış, hazır yazılım ürünlerini ifade eden bir terimdir. Bu tür yazılımlar, geniş bir kullanıcı kitlesine hitap eder ve genellikle kullanıma hazır olacak şekilde tasarlanmıştır. Örnekler arasında Microsoft Office, virüsten koruma yazılımları ve diğer standart iş uygulamaları bulunmaktadır.

### Yaygın Zayıflıkların Listesi

* Yazılım güvenliğini artırmanın bir yolu, yazılım güvenliğini etkileyebilecek en yaygın zayıflıkları daha iyi anlamaktır. Bu amaçla, MITRE Corporation tarafından desteklenen ve bu tür zayıflıkları tanımlamayı ve açıklamayı amaçlayan mevcut bir topluluk temelli program olan Yaygın Zayıflıklar Listesi projesi vardır.

CWE, aşağıdaki gibi çeşitli zayıflık kategorilerini içerir:

* **Buffer Overflows** (Tampon Taşmaları):Bellek yönetimi hatalarıdır ve genellikle kötü niyetli kodların çalıştırılmasına olanak tanır.
* **Improper Input Validation** (Yanlış Girdi Doğrulama):Kullanıcıdan alınan verilerin yeterince kontrol edilmemesi durumunda ortaya çıkar. Bu zayıflık, SQL enjeksiyonu gibi saldırılara kapı aralayabilir.
* **'Race Conditions** (Zamanlama Hataları):Çoklu işlem veya iş parçacığı kullanımı sırasında ortaya çıkan hatalardır ve sistemin beklenmedik davranışlar sergilemesine neden olabilir.
* **Cross-Site Scripting (XSS):**Kullanıcıların tarayıcılarında kötü niyetli kod çalıştırılmasına neden olan bir güvenlik açığıdır.
* **Hard-coded Passwords** (Sertifika Şifreleri):Yazılım içinde sabit olarak yer alan şifreler, güvenlik risklerini artırır.
* **Insecure Random Numbers** (Güvensiz Rastgele Sayılar):Güvenlik uygulamalarında kullanılan rastgele sayıların tahmin edilebilir olması, saldırganların bu sayıları kullanarak sisteme sızmasına neden olabilir.

### Güvenlik Mimarisi/Tasarım Analizi
Güvenlik mimarisi/tasarım analizi, yazılım tasarımının güvenlik gereksinimlerini doğru bir şekilde uygulayıp uygulamadığını doğrular. Genel olarak, güvenlik mimarisi/tasarım analizi için dört temel teknik kullanılmaktadır.

#### Mantık Analizi
Mantık analizi, yazılım tasarımının denklemler, algoritmalar ve kontrol mantığı'nı değerlendirir.

#### Veri analizi
Veri analizi, yazılım bileşeninin tasarımında kullanılan her veri öğesinin tanımını ve amaçlanan kullanımını değerlendirir. Kesintilerin kullanımı ve bunların veri üzerindeki etkisi özel dikkat gerektirir; bu, kritik verilerin diğer rutinler tarafından değiştirilmediğinden emin olmaktır.

#### Prosedür analizi
Prosedür analizi, bir bileşenin dışa bağımlı olan veya başka bir dış bileşene erişen belirli tüm çağrıların kontrol edilmesi için tasarlanmış bir süreçtir.

#### Kısıtlama analizi
Genel bilgi analizi, bileşenlerin hangi bilgi öğelerine eriştiğini ve dış kaynaklarla (veri akışları, protokoller vb.) olan etkileşimlerini değerlendirir.

## Kaynakça