Güvenli kodlama
Makale serilerinden |
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.
Arabellek Aşımı önlemi
[değiştir | kaynağı değiştir]Arabellek Aşımı, işlemci belirlenen arabellek 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]
Arabellek 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, arabellek taşması meydana gelebilir. Bu tehlikeli programı düzeltmek için, strncpy metodu olası arabellek 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]- ^ 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.