Security Expert Network Editor Login | Register Ekle

root > Yazılım Güvenliği
Yazılım Güvenliğine Genel Bakış - Yazılım Güvenliği - root \ Cyber-Security
EmineGÜMÜŞ
(Date : 21.03.2009 17:16:51)


Yazılım Güvenliğine Genel Bakış

Yazılım mühendisliğinde yazılım güvenliği fikrinin ilk ortaya atılması, karşılaşılan attacklara bağlı olarak güvenliğin sağlanmasında her ne kadar anti programlar ve güvenlik duvarları kullanarak sağlanmaya çalışıldıysa da kesin bir çözüm getirememesinden kaynaklanmıştır. Bu nedenle bir çok yöntem denenerek optimum kod, optimum işlevsellik ve maximum güvenlik sağlayacak yöntemler araştırılmaya başlanmıştır.

Bilgisayar güvenlik problemlerinin merkezi ve kritik yönü yazılım sorunlarıdır. Yazılım kusurları arasında baş gösteren, buglar, buffer overflows(ara bellek taşması) ve tasarım hatalarından kaynaklanan tutasızlıklar bazı güvenlik takviyeleri(yama) ile sağlanmaya çalışılmaktadır. Çoğu zaman kötü niyetli davetsiz misafirler, bu yazılım hatalarından kaynaklanan açıklıkları kullanarak sistemlere sızmayı ve içerik bütünlüğünü bozmayı başarmışlardır. Ayrıca her geçen gün hızla artan yazılım kompleksliği, internet üzerindeki hedef istismarın artmasına büyük ölçüde etkili olmuştur.

Bilgisayar sistemleri ve ağ güvenliğinin kalitesi, kurulu olan yazılımın güvenliği ile sınırlıdır. İnternet üzerinde etkin olan saldırıların ne yazık ki ortak hedefi Özellikle web uygulamalarıdır.

Aşağıdaki grafikte CERT Coordination Center"in (CERT / CC) 1995-2004 arasında yayınladığı yazılım zayıflıklarından kaynaklanan açıklıklar görülmektedir.

Güvenlik riskleri ve bunların nasıl yönetildiğini anlamak yazılım güvenliğinin temelini oluşturur. Yazılım mühendisliği uygulamalarını iyi bilmek, iyi bir yazılım ortaya çıkarmak hem yazılımın güvenliğini sağlamak hem de yaşam döngüsü için ayrı bir önem taşır. Temel unsurlardan kaynaklanan hataları bilmek, güvenlik için tasarım ve risk analizlerini yapmak ve test etmek hata oranını minimuma indirgeyecektir.

Yazılım heryerde, hayatın her aşamında büyük oranda ihtiyaç duyulan bir unsur haline gelimiştir. Arabamızda, cep telefonumuzda, ev ve ofisimizde kullandığımız bir çok araçta en önemlisi bilgisayarımızı kullanamamızı sağlayan yazılımlara ihtiyaç vardır. Nasıl ki yazılım vazgeçilmez bir unsur olarak hayatımıza yerleşti ise yazılım güvenliği de iyi bir yazılım ve güvenliğimiz için hızla önem kazanmaya devam etmektedir.

Güvenlik açıklarının hemen hemen tamamı yazılımların güvenli mimari ve kodlama teknikleri kullanılmadan yazılmasından kaynaklanmaktadır. Bu nedenle yazılım geliştirme sürecinin nasıl işlediği bu noktada çok önem taşımaktadır. Öncelikle OWASP (Web Uygulamaları Güvenlik Platformu) tarafından açıklanmış olan güvenlik açıklarında ilk 10 sıralamasında;

1- Unvalidated Input (Kontrol edilmemiş girdi): Web de kullanıcıdan alınan veri kontrol edilmeden işlemeye geçilirse.

2- Broken Access Control (Ezilmiş erişim kontrolü): Yetkilendirilmiş kullanıcıların sistemde neler yapabileceği uygun şekilde belirtilmediği durumlarda; başka kullanıcı haklarını kullanma, yetkisiz olduğu halde verilere erişebilme gibi sakıncalar.
 
3- Broken Authentication and Session Management (Ezilmiş yetkilendirme ve oturum yönetimi): Hesabın önemli verileri ve token"lar korunmazsa, şifreler, anahtarlar, çerezlerin ele geçirilmesi.

4- Cross Site Scripting - XSS (Çapraz site betikleri): Web yazılımının kullanıcı bilgisayarında bir atak aracı olarak kullanılması durumu.
 
5- Buffer Overflow (Tampon taşması): Kontrolü ele almak üzere tamponların taşırılması olayı. Veri kontrolü yine önem kazanıyor.

6- Injection flaws (Sokuşturma açıkları): Parametreler yazılım dışından verilebilir olmamalı. Bu durumda sokuşturma yapılabilir. Örneğin sql kodu sokuşturma vb.
 
7- Improper Error Handling (Uygunsuz hata yönetimi): Hatalar uygun bir şekilde kontrol edilmezse, sistem ile ilgili bilgiler verebilir, uç durumlarda göçmeye yol açabilir.

8- Insecure Storage (Güvensiz Saklama): Verilerin saklandıkları yerden kullanıcıya verilmeleri sırasında kullanılan verilerin decrypt edilmesi sırasındaki parçalar iyi kodlanmayabilir ya da veri şifrelenmeden saklanıyor olabilir.

9- Denial of Service (Servis Reddi): Servisi performans ya da kısıtlamaları yönünden zorlayıp doğru hizmet vermelerini engelleme olayı.
 
10- Insecure Configuration Management (Güvensiz Ayar Yönetimi): Sunucu tarafındaki konfigürasyonların güvenli şekilde yapılmaması olayı.

Web tabanlı uygulamalarının çoğunda bu sorunların oluşabileceği ve yine uygun denetimler sonucu yok edilebilir. İşte yazılım denetimi servisi ile amaçlanan da çeşitli denetleme yazılımlarını ve daha da önemlisi bilgili insan gücünü ortaya koyarak güvenlik açıklarına yol açabilecek “zayıflıklar”ın belirlenmesidir. Bunların neler olabileceği ile ilgili OWASP’ın tanımlamalarına ek olarak şunlar da örnek verilebilir:

·         Tampon taşması

·         Mimari yanlışları

·         Yanlış transaction kullanımı

·         Biçim kelimesi problemleri

·         Sayı taşmaları (Integer Overflow)

·         SQL sokuşturma

·         Komut sokuşturma

·         Hataların ele alınmaması

·         İstisnaların ele alınmaması

·         Çapraz site betikleri

·         Ağ trafiğine sonsuz güven

·         URL bazlı veri girdisi

·         Uygunsuz SSL kullanımı

·         Zayıf şifre yapıları

·         Güvensiz veri saklama

·         Veri sızıntısı

·         Uygunsuz dosya erişimi (veri kaybı)

·         Yarış durumları

·         Yetkilendirilmemiş anahtar değişimleri

·         Kriptografi için yetersiz rastgelelik

·         Kullanışsızlık

Diğer yandan güvenlik işi “optimumu bulma” işidir. Yazılımın kullanılabilirliğini artırmak, kullanıcının erişebilirliğini de sağlamak gerekir.

Diğer yandan maliyet de bir optimum alanı oluşturmaktadır. Örneğin verileri disk üzerinde dahi şifrelenmiş halde saklamak ve kullanıcıya imzası karşılığı vermek bir çözüm iken, verileri teker teker güvensiz fakat bütün olarak güven altında saklayıp imzasını gösterenlere vermek diğer bir çözümdür. Bunlardan ilki çok daha maliyetli ve bazı durumlarda kullanışsız bir yapı ortaya koymaktadır. Bu nedenle yazılım güvenlik denetimi sonucunda çıkacak metinler aynı zamanda birer risk analizi raporu parçası niteliği de taşır.

Analiz-Tasarım süreci sonunda bir dizi denetim grubu projeye uygulanacaktır. Bunlar daha çok mimari seçimi, modül ilişkileri, veri tutma stratejileri gibi birimleri sorgulayan denetimler olacaktır.

Modüllerin tamamlanmasının ardından da, geçiş öncesi, bir diğer grup denetim yapılacaktır. Bunlar parça parça bir anlamı olmayan ancak sistemin genel bütününde gözlenebilecek denetimlerdir. Örneğin yetkilendirme, single sign on, yetersiz rastgelelik, elektronik imza güvenliği ve benzeri.

Güvenli yazılım geliştirme sürecide belli aralıklarla yapılan toplantılarda takip edilecektir.

Final raporu ile beraber yapılan işler, uygulanan yöntemler, bunların çıktıları, çıktı analizleri, ve öneriler verilir.

Genel itibarı ile raporda belirtilmesi gerekenleri sıralayacak olursak;

1- Problemin ismi
2- Risk seviyesi
3- Problemin Düzeltilme Durumu
4- Problem Sınıfı (Integrity, availability, accountability, secrecy, recovery)
5- Problemin Etkisi
6- Problemli Noktalar
7- Problemi kullanabilecekler (Son kullanıcı, yazılımcı, bilgisayar saldırganı, suç organizasyonları, istihbarat kuruluşları)
8- Problemin Kısa Tanımı
9- Kısa Vadeli Çözüm Yöntemi ve Aksiyonlar (devre dışı bırakma, bölümü durdurma, hızlı ve kirli çözüm, bütün çözüm)

Özetlemek gerekirse; en modern bilgi sistemlerinin güvenliği bile sahip olduğu yazılıma bağlıdır. Bir zincir en zayıf halkası kadar güçlüdür. Buna göre güçlü bir sistem için güçlü bir altyapı inşa edilmelidir. Yazılım alanında meydana gelen ilerlemelere pararlel olarak güvenlik içinde gerekli önlemler alınmalı, optimum kod ve maxsimum güvenlik amaçlanmalıdır.  

 


 




Derecelendir
Kaynak EmineGÜMÜŞ Tarafından yazılmış/derlenmiştir.
İçerik İhbarı
Bağlantılar Bg.org.tr

CS - Security Expert Network AUP&TOS