Güvenli kodlama

Vikipedi, özgür ansiklopedi

Güvenli kodlama, bilgisayarın yazılımsal olarak güvenlik zafiyetlerinden korumayı amaçlayan bir yöntemdir. Yazılım hata ve kusurları ile mantıksal hatalar yazılımı sömürme amaçlı kullanılan güvenlik zafiyetlerin başında gelir.[1] Raporlanan zafiyetlerden elde edilen bilgiler ışığında güvenlik uzmanları çoğu zafiyetin ufak programlama hatalarından kaynaklandığını keşfetmiştir. Güvenli olmayan bu kodlar incelenerek eğitimci yazılım geliştiren kişiler ve kurumlar bu açıklıkları azaltmayı hedeflemektedir.

Ara Bellek Aşımı önlemi[değiştir | kaynağı değiştir]

Arabellek Aşımı, işlemci belirlenen ara bellek uzunluğunu aştığında ortaya çıkan genel yazılım güvenlik açığıdır. Örneğin veri ögelerini saklamak için 8 bölüt varsa, 9 veri ögesi saklanmak istenildiğinde problem ortaya çıkar. Bilgisayar belleği taşan veri sorunuyla karşılaştığında verinin bir sonraki yerine üstüne yazma işlemi gerçekleştirir, bu da güvenlik zafiyetine(yığın aşılması) veya programın bitirilmesine(bölümlendirme hatası) sebebiyet verebilir.[1]

Ara bellek aşımına eğilimi olan bir C programı aşağıda verilmiştir.

int vulnerable_function(char * large_user_input) {
char dst[SMALL];
strcpy(dst, large_user_input);
}

Eğer kullanıcı hedef bellekten daha büyük bir girdi verirse, ara bellek taşması meydana gelebilir. Bu tehlikeli programı düzeltmek için, strncpy metodu olası ara bellek taşması problemini önleyebilir.

int secure_function(char * user_input) {
char dst[BUF_SIZE];
   //copy a maximum of BUF_SIZE bytes
strncpy(dst, user_input,BUF_SIZE);
}

Diğer güvenli seçenek ise hafızayı dinamik olarak yığın yapısıyla ayırmaktır. Bazı programlama dillerinde malloc yardımıyla hafızada alan ayrılıp, geri bırakılabilir demalloc.

char * secure_copy(char * src) {
int len = strlen(src);
char * dst = (char *) malloc(len + 1);
if(dst != NULL){
strncpy(dst, src, len);
//append null terminator 
   dst[len] = '\0';
}
return dst;
}

Yukarıdaki kod parçasında, program src into dst, içeriklerini kopyalar, bunu yaparken de malloc'tan gelen dönüş tipini kontrol eder, bu şekilde hedef belleğin yeterli hafızası olup olmadığını kontrol etmiş olur.

Biçim-Dizgi Saldırısı Önlemleri[değiştir | kaynağı değiştir]

Biçim Dizgi Saldırısı kötü amaçlı kullanıcının fonksiyon içine argüman olarak spesifik girdiler vererek biçimlendirmeye çalışmasıdır, örneğin printf() bir biçim-dizgi saldırısıdır. Düşman kişi okuma ve yazma yaparak saldırıyı gerçekleştirebilir.

C fonksiyonu çıktıyı stdout a yazar.Eğer parametreler biçimsel olarak uygun değilse, çeşitli güvenlik hatalarıyla karşılaşılabilir. Aşağıda biçim dizgi hatasına sebebiyet verebilecek örnek bir program verilmiştir.

int vulnerable_print(char * malicious_input) {
printf(malicious_input);
}

Programın uygunsuz hafıza okumasından dolayı sona erdirebilecek hatalı olarak verilebilecek argüman “%s%s%s%s%s%s%s”, parametre olarak verilmiştir.

Kaynakça[değiştir | kaynağı değiştir]

  1. ^ a b John Viega, Gary McGraw (2001). Building Secure Software: How to Avoid Security Problems the Right Way. MAddison-Wesley Professional. s. 528. ISBN 978-0201721522.