Güvenli Yazılım Geliştirme Ve Yazılım Güvenliği Ders-7

Yazılım Güvenliği Sağlama Yöntemleri

Yazılım geliştirme süreçlerinde yazılım geliştiricilerin üzerinde durması gereken önemli konudur.

Yazılımdaki muhtemek hataları azaltmak, kaliteli ve güvenilir bir yazılım gekiştirmek için başvurulan bir çok yöntem ve teknik mevcuttur.

Bu yöntem ve teknikler; sezgisel ve benzetime dayalı yöntemler, biçimsel yöntemler, yazılım çalışma ortamı güvenliğini sağlayan yöntemler, birden fazla araçta analiz yöntemleri ve yazılım güvenliğini sağlamada diğer yöntemler şeklinde sıralayabiliriz (Tubitak, Bilgem).

Sezgisel ve Benzetime Dayalı Yöntemler

Statik analiz ve sembolik oluşturma yöntemler ile dinamik analiz, negatif test ve rasgele test yöntemlerini içermektedir.

Statik Analiz ve Sembolik Oluşturma Yöntemler

Yazılımın çalıştırılan halini yansıtan bir modeli veya benzetimi oluşturulur ve bilinen yazılım hataları bu model üzerinde aranır.

Dinamik Analiz – Negatif Test – Rasgele Test Yöntemleri

Doğrudan yazılımın koşturulması sırasında gerçek ortamın benzetimi oluşturularak yazılımın bazı hatalara zorlanması sağlanır. Oluşan hatalar analiz edilerek, çözümlenmeye ve genelleştirilmiş sonuçlara ulaşılmaya çalışılır.

Statik Analiz

Bir yazılımın özelliklerini onu çalıştırmadan analiz etmeyi amaçlayan yöntemdir. Gereksinim, mimari, kaynak kodu, çalıştırılabilir dosya analize tabi tutulabilir.

Kaynak Kodu

Statik analizde en çok başvurulan yöntemlerdir.

Statik Analiz

Bir yazılımdaki tüm hataların bulunmasını sağlayamayabilir, genellikle bazı hataları bulmayı sağlar.

Sembolik Koşturma

Yazılımın kodu üzerinde bir soyutlama yapılarak tüm olası çalıştırmalara modellenmektedir. Bir sembolik koşturma ağacı oluşturulur. Bu ağaç üzerindeli her dal (yol) gerçek program çalışma akışına eşdeğerdir. Her bir yol sanki program koşturuluyormuş gibi işletilir. Böylelikle, daha fazla kapsam sağlanılmaktadır.

Yazılım Testi

Sadece tanımlanan akış kapsamındaki hataları bulabilir, sembolik koşturma test yöntemini genelleştirmekte ve daha fazla analiz etmektedir.

Dinamik Analiz

Uygulamadaki açıklıkları tespit etmek için çalışan yazılım üzerinde ve çalışma ortamında gerçekleştirilen analiz araç ve yöntemleridir. Bunlar;

Ağ Tarayıcısı

Ağ üzerindeki cihazlar ile yazılımları belirleyen ve bunların özelliklerini tespit eden araçlardır(nmap, v.b).

Ağ Dinleyicisi

Ağ üzerinde trafiği dinleyerek anlık analiz eden veya sonradan analiz için kaydeden araçlardır(Wireshark, v.b)

Ağ Zayıdflık Tarayıcısı

Bir ağ cihazına, yazılıma veya ağ servisine daha önceden oluşturulmuş ağ trafiği göndererek güvenlik politikalarında uygunluğunu veya bilinen zayıflıkları tespit için kullanılan araçlardır(OpenVas, v.b).

Bilgisayar Tabanlı Zayıflık Tarayıcısı

Kurulum ve işletim sırasındaki yazılım ile ilgili güvenlik açıklıklarını tespit etmek için bilgisayar üzerindeki yapılandırmaları ve denetim araçlarını test eden araçlardır(OpenScap, v.b).

Uygulama Zayıflık Tarayıcısı

Bir uygulamaya girdi üreterek bilinen veya bilinmeyen zayıflıkları tespit etmeye yarayan araçlardır(OWASP ZAP, Nikto, Vega(Web Uygulama/Servis Zayıflık Tarayıcıları) yada SQLmap, Scuba(veritabanı zayıflık tarayıcıları)).

Negatif Test

Hatalı veya güvenli kurallarına uymayan durumların ve istisnaların yazılım tarafından kontrol edildiğinin test edilmesine denir.

Örneğin: 8 karakterlik bir parola gerektiren bir login sayfasının 7 karakter ile test edilmesini ve sonuöta eksik karakter ile ilgili hata mesajı verilmesi.

Bir başka örnek ise SQL Injectin gibi saldırıları client tarafında önlemeye yönelik karakter filtrelemesi ve girilen karakterlerin yazılım tarafından kontrol edilerek, güvenli kurulanı ihlal eden karakterle ilgili hata mesajını yazılım tarafından verilmesi gibi.

Eğer karakter fazla girilirse ve yazılım tarafından bu kontrol edilmezse bellek taşmasına neden olabilir.

Rasgele Test

Bir yazılıma geçersiz, beklenmeyen veya rasgele veri girdisinde bulunarak istenmeyen davranışta bulunup bulunmayacağının tespit edilmesidir.

Örneğin: Bir web uygulamasının login sayfasında girilen geçersiz, beklenmeyen veya rasgele karakterlerin yazılım tarafından kontrol edilerek, hata mesajı verilmesi gibi.

Biçimsel Yöntemler

Matematik ve mantık temelli yazılım analiz yöntemleridir.

Biçimsel Yöntemler

Teorem doğrulama, model doğrulama, ayrıştırma(parsing), tip denetlemesi(type checking), doğruluk ispatları, model tabanlı geliştirme ve doğrulanmış kod gibi yöntemleri içerir.

Biçimsel Yöntemler

Bir yazılımın hatalarını tamamen engelleyebilmeye, sürekli test ve hata düzeltmeden oluşan maliyetler azaltilabilmektedir.

Örneğin; DO-178C havacılık yazılım kalite standardının DO-333 eki, biçimsel yöntemlerin yazılım doğrulamadında kullanımı.

Biçimsel Program Analizi

Statik analizlerin matematik ve mantık temelli olarak gerçekleştirimesidir.

Biçimsel PRogram Analizi

Nükleer enerji, ulaştırma, havacılı ve savunma gibi ritik sektörlerde yazılım hatasında cidi bir oranda düşüş sağlanmıştır.

Örneğin: TAI, Havelsan gibi havacılık alanında faaliyet gösteren kurumlar biçimsel program analizi etkin kullanmaktadırlar.

Model Doğrulayıcılar

Yazılımda gizlilik, kimlik doğrulama, erişim denetimi, bütünlük gibi tespit edilmesi gereken özelliklerin bir yazılımda mevcut lup olmadığınn doğrulanması için kullanılan yöntemdir. Yazılım güvenliği açısından oldukça önemli olan kimlik doğrulama, gizlilik, erişim denetimi ve bütünlük gibi hususların model doğrulayıcılar tarafından doğrulanması muhtemel enjeksiyon saldırılarını önleyecektir. Ayrıca, model doğrulayıcılar bir yazılımın bir bütün olarak güvenlik çerçevesini oluşturmada önemli bir görevi de üstlenmiş olmaktadırlar.

Mantık Yöntemleri

Bir yazılımdaki kodun içerisinde varsayılan ve beklenen sonuçların mantıksal ifadelerle tanımlanmasından sonra otomatik doğrulayıcı araçlar yardımıyla beklenen sonuçların doğrulanmasıdır. Kodun içerisine yerleştirilmiş mantıksal ifadelerden otomatik test durumu üretebilmektedir. Böylelikle, yazılımdaki hatalar çok daha erken tespit edilebilmekte ve hatanın kaynağı ve yeri büyük doğrulukla belirlenebilmektedir.

Model Tabanlı Geliştirme

Yazılımın güvenlik davranışını uygulama alanına özel üst seviye dille(Domain Specific Language-DSL) tanımlanarak kaynak kodun büyük bir kısmının veya tamamının oluşturulan modelden üretilmesi yöntemidir. Önceden güvenliği doğrulanmış kodlar kullanıldığında, yazılımcının yeni bir güvenlik açığına neden olma olasılığı düşer. Bu yöntem daha çok gömülü sistemlerde uygulanan bir yöntemdir. Kullanıcı arayüzü yoğun olan sistemler için bu yöntem önerilmemektedir.

Doğrulanmış Aram ve Kod Depoları Kullanma

Doğrulanmış araç ve kod depoları, yazılımcıların sıralama, veritabanı erişimi, web protokolleri erişimi, kriptografik işlemler gibi ihtiyaç duydukları genel amaçlı işlemler için daha önceden doğrulanmış kodları, araçları ve güvenlik testine tabi tutulmuş kütüphaneleri kullandığı bir yöntemdir. İnternette paylaşılan kodlar, doğrulanmamış olabilir bu nedenle güvenlik sorunu oluşabilmektedir. Dolayısıyka, tedarik edilen araç ve kodların doğrulanmış kodlar olması önemlidir. Örneğin, OWASP ESAPI projesinde güvenlik standartlarına uyumlu arayüz ve kütüphaneler geliştirilmiştir.

Kod Güçlendirme

Önceden yazılmıi bir yazılımın güvenlik bakış açısı ile kaynak kodlarının, yapılandırma dostalarının, derleticisinin, dinamik kütüphanelerin ve özel amaçlıı diğer kütüphanelerin biçimsel yöntemlerle doğrulanması ve güçlendirilmesidir. Bu yöntemin başarısı yazılımın bileşenlerinin analizi ile sağlanır.

İspat Taşıyan Kod

Uygulamanın çalıştırılabilir kodunu takip ederek biçimsel yöntemlerle analiz ederek kodun güvenli şekilde çalışıp çalışmayacağına karar veren yöntemdir. Bu yöntem, daha maliyetli ve işgücü açısından ihtiyacı yüksek yöntemdir. Buna karşın, kritik güvenlik ihtiyaçları olan yazılımlarda geliştirme sürecinde maliyet ve konuşlandırma sonrası değişiklik ihtiyacının azltılması nedeniyle maliyet etkinlikliği de sağlayabilmektedir.

Yazılım Çalışma Ortamı Güvenliği Sağlayan Yöntemler

Yazılım güvenliğinin arttırmak için, güvenliğin sistem tarafından ortak kullanılabilir mekanizmakarka sağlanması, saldırılara karşı dayanıklı ve güvenlik hizmetleri varsayılan olarak sağlayan çalışma oluşturulması gerekir. Dolayısıyla, ortak füvenli mimari örüntülerinin kullanılması yeni nesil yazılım teknolojilerinde güvenliği arttırmaktadır.

Ortak güvenli mimari örüntüler; ygulama koyteyneri kullanımı, servis tabanlı mimaride mikro-servisler ile güvenlik işlevlerinin gerçekleştirilmesi ve özellikle bulut ortamında yaygın olarak kullanılan sanallaştırma ortamının güvenliğinin sağlanması yer almaktadır.

Uygulama Konteyneri Kullanımı

Koyteyner, üzerinde çalıştığı bilgisayarın bazı kaynaklarını, kendi içierisinde çalışan uygulama veua sistem için yalıtan bir nesnedir. Bağımsız bir bilgisayar veya bütün bir sanal makinenin yalıtım özelliklerini sağlayabilmesine rağmen kısa sürede başlatavilme özelliğine sahiptir. Bir uygulama paket olarak yalıtarak, bir programo en düşük yetki prensibine göre en düşük kaynak erişimiyle çalıştırabilmek mümkün olmaktadır. Kritik alt yapı bileşenlerinin zararlı girdilere karşı dayanıklı olduğundan emin olunması gerekir.

Mikro Servis Mimarisi ile Yazılımların Geliştirilmesi

Mikro servis mimarisi, yazılımın küçük servisler halinde ve her bir servisin kendi süreci içerisinde birbirleri ile konteyner ile iletişim kuracak şekilde tasarlanması olarak ifade edilmektedir. Buna göre, bu mimari ile tasarlanan bir yazılımda yer alan her bir servis mikro servis olarak tanımlanmaktadır.

Mikro servisler farklı programlama dilleri ile geliştirilebilir.

Sanallaştırma Ortamının Kullanılması

Sanallaştırma, tek bir ortamın ya da fiziksel sunucu üzerinde birden çok program yığının sanallaştırmata özgü bazı yazılımlar ve donanımlar sayesinde çalıştırılmasını sağlayan bir çözümdür.

Sanallaştırma, ortak erişilen kaynaklara farklı kanallardan erişme prensibini hayata geçirmek için kullanılabilecek yöntemlerden biridir.

Örneğin, sunucuları sanallaştırma oldukça kolay ve hozlı uygulama imkanı sağlar. Buna karşın, güvenlik risklerini de beraberinde getirir.

Birden Fazla Araçla Analiz Yöntemleri

Yazılım güvenliğini ssağlamada, mevcutta bir çok ticari ve açık kaynak kodlu araç bulunmaktadır. Bu araçlar arasında veri standardı olmaması nedeniyle farklı analiz araçları arasında bilgi aktarımında sorunlar oluşabilmektedir.

Örneğin; bir yazılımdaki yazılım hatası bir diğerinde zayıflık olarak nitelendirilebilmekte ve bu hatanın yorumlanmasına ilişkin tutarsızlıklar olabilmektedir.

Dolayısıyla, birden fazla araca ihtiyaç duyulabilmektedir. Bu durumda, araçların çıktılarının ortak bir formata dönüştürükmesi, aynı zayıflık için birbirini destekleyen/çelişen sonuçların incelenmesi, doğru aracın belirlenerek kullanılması gerekir.

Yazılım Güvenliğini Sağlamada Diğer Yöntemler

Yazılım güvenliğini sağlamada, belirtilen yöntemler dışında programlama dilleri ile güvenliğin arttırılması, değişen hedef savunmasının uygulanması, ağ ve sistem seviyesinde önlem alınması gibi diğer yöntemlerde kullanılabilir. Örneğin, yazılım geliştirilirken yazılımdan beklenen işlevsellik yeterli değiildir, yazılım güvenlik hale de getirilmesi gerekir. Dolayısıyle, programlama dili seçilirken dilin güvenlik konusundaki zafiyetleri(veri tipi denetimi, hata yönetim mekanizması v.b.) ve güvenliği saülamak için sağladığı kabiliyetlerin değerlendirilmesi gerekir.

Ağ ve Sistem Seviyesinde Önlem Alınması

Yazılım, doğası gereği iç yapısında bir çok prosedür ve akış ile bir sistem veya ağ üzerinde koşturulmaktadır. Dolayısıyla, ağ ve sistem seviyesinde alınacak önlemler yazılımdaki açıklıkların sömürülmesini zorlaştıracaktır. Uygun gözden geçirme, sızma testi, sıkılaştırma yöntemlerinin uygulanması gerkemektedir.

İşletim Sistemi Arayüzü Seviyesinde Önlem Alınması

Yazılım, bir işletim sistemine bağımlı olarak çalıştırıldığında ilgili işletim sisteminin alt yapısına uygun güvenlik tedbirlerinin de alınması gerekir. işletim sistemleri ile yazılım iletişiminde saldırı yüzeyini azaltmak ve zafiyetlerin sömürülme olasılığını düşürmek için arayüz seviyesinde savunma derinliği ve çeşitlendirme uygulaması gerekebilir.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir