Binek dışı okuma ve yazma güvenlik açığı nedir?


Boundsed okundu ve sınır dışı bir güvenlik açığı yazıyor

Sınır dışı okunan ve yazma güvenlik açıkları, yazılım bellek konumlarına, diziler, arabellekler veya diğer bellek bölgeleri gibi veri yapılarının tahsis edilen sınırlarının ötesindeki bellek konumlarına eriştiğinde ortaya çıkan kritik güvenlik açıklarını temsil eder.

Bu güvenlik açıkları, saldırganların etkilenen sistemler üzerinde yetkisiz kontrol kazanmasına izin veren keyfi kod uygulamasına bilgi açıklamasına, sistem çökmesine ve ciddi durumlarda yürütülmesine yol açabilir.

Bu güvenlik açıklarını anlamak, modern yazılım uygulamalarındaki en yaygın ve tehlikeli güvenlik sorunları arasında kaldıkları için geliştiriciler, güvenlik uzmanları ve sistem yöneticileri için gereklidir.

Google Haberleri

Boundsed Infor Güvenlik Açığı

Bir program, bir arabellek veya dizinin tahsis edilen sınırlarının ötesine uzanan bellek konumlarından verileri okumaya çalıştığında, sınır dışı okuma güvenlik açıkları meydana gelir.

Bu tür bir güvenlik açığı, bitişik bellek konumlarında depolanan hassas bilgilerin açıklanmasına, potansiyel olarak şifreleri, şifreleme anahtarlarını veya korunması gereken diğer gizli verilerin ortaya çıkmasına neden olabilir.

Sınır dışı okuma güvenlik açıklarının temel nedeni, bellek erişim işlemleri sırasında yetersiz sınır kontrolünde yatmaktadır. Geliştiriciler dizi indekslerini veya arabellek boyutlarını düzgün bir şekilde doğrulayamadıklarında, programlar istenmeyen veriler içeren bellek bölgelerine yanlışlıkla erişebilir.

Bu, yerleşik sınırlar kontrol mekanizmaları olmadan doğrudan bellek yönetimi özellikleri sağlayan C ve C ++ gibi dillerde özellikle sorunlu hale gelir.

Aşağıdaki savunmasız kod örneğini düşünün:

cchar buffer[10];
char user_input[20];
int index;

// Vulnerable code - no bounds checking
printf("Data: %c\n", buffer[index]);

Bu senaryoda, eğer index Değer, arabelleğin tahsis edilen 10 element boyutunu aşar, program amaçlanan sınırın ötesindeki bellek yerlerinden okuyacaktır.

Bu, diğer değişkenlerden, yığın çerçevelerinden veya yığın yapılarından verileri ortaya çıkarabilir ve bilgi sızıntısı saldırıları için fırsatlar yaratabilir.

Kalpli güvenlik açığı (CVE-2014-0160), sınır dışı okunan bir güvenlik açığının önemli bir gerçek dünyası örneği olarak hizmet eder. OpenSSL’deki bu güvenlik açığı, saldırganların, gerçekte sağlanandan daha büyük yük boyutları belirten kötü biçimlendirilmiş kalp atışı istekleri göndererek savunmasız sunuculardan 64kb’ye kadar bellek okumasına izin verdi.

Saldırganlar, dünya çapında milyonlarca etkilenen sistemden özel anahtarlar, şifreler ve kişisel veriler de dahil olmak üzere hassas bilgileri çıkarmak için bu güvenlik açığından yararlandı.

Bounds Dışı Güvenlik Açığı Yazmak

Yaygın olarak tampon taşma saldırıları olarak bilinen sınır dışı olan güvenlik açıkları, programlar bellek tamponlarının tahsis edilen sınırlarının ötesinde veri yazdığında ortaya çıkar.

Bu güvenlik açıkları özellikle tehlikelidir, çünkü kritik program verilerinin, işlev iade adreslerinin veya diğer yürütülebilir kodların üzerine yazabilirler, bu da potansiyel olarak keyfi kod yürütülmesine ve tam sistem uzlaşmasına yol açar.

Tampon taşma güvenlik açıkları tipik olarak iki birincil formda ortaya çıkar: yığın tabanlı ve yığın tabanlı taşmalar. Yığın tabanlı taşmalar, program yığınında yerel değişkenler veya fonksiyon parametreleri üzerine yazıldığında, yığın tabanlı taşmalar dinamik olarak tahsis edilen bellek bölgelerini hedefler. Her iki tür de Hacging Program Yürütme Akışı için kullanılabilir ve kötü amaçlı kod yürütebilir.

Aşağıdaki kod, klasik bir arabellek taşma güvenlik açığı göstermektedir:

cvoid vulnerable_function(char *input) {
    char buffer[256];
    strcpy(buffer, input);  // No bounds checking
    printf("Buffer contents: %s\n", buffer);
}

Ne zaman input Parametre 255’ten fazla karakter (artı null terminatör) içerir, strcpy İşlev, arabelleğin sınırlarının ötesine, potansiyel olarak geri dönüş adreslerinin üzerine yazma, kanaryalar veya diğer kritik veri yapılarının ötesine yazacaktır. Yetenekli saldırganlar, program yürütmeyi kötü amaçlı kodlara yönlendirmek için belirli giriş yükleri oluşturabilir.

1988 Morris Solucanı, tampon taşma sömürüsünün en eski ve en önemli örneklerinden birini temsil eder. Bu kendi kendini tetikleyen program, sömürülen tampon taşma güvenlik açıkları fingerd Daemon ve sendmail Erken İnternet’e bağlı UNIX sistemlerinde yayılmak için program, sınır dışı olan güvenlik açıklarının yıkıcı potansiyelini gösteriyor.

Bağış dışı okuma ve yazma güvenlik açığı nasıl oluşur?

Neden Kategori Tanım Kod örneği/senaryo Güvenlik Açığı Türü Etkilenen ortak diller
Yetersiz giriş doğrulaması Programlar, kullanıcı tarafından sağlanan verilerin işlenmeden önce beklenen aralıklar veya arabellek boyutları içinde olduğunu doğrulamamaktadır. char buffer; int index = user_input; return buffer[index]; – Doğrulama yok index değer Hem okuma hem de yaz C, C ++, montaj
Yanlış dizi dizinleme Döngü sayaçlarını, kullanıcı girişini veya hesaplanan değerleri uygun sınır kontrolü olmadan dizi indeksleri olarak kullanmak for(int i = 0; i <= array_size; i++) { array[i] = value; } -Kullanırken bir hatalı hata <= yerine < Hem okuma hem de yaz C, C ++, JavaScript, PHP
Güvensiz dize işlevleri Dize işlemleri sırasında sınır kontrolü yapmayan C kütüphanesi işlevlerinin kullanımı strcpy(dest, src); strcat(buffer, input); sprintf(buffer, format, data); Öncelikle yaz C, C ++
Tamsayı taşma/alt akış Aritmetik operasyonlar, kontrol mekanizmalarını sınırlayan beklenmedik sonuçlar üretiyor size_t len = strlen(input1) + strlen(input2); char* buffer = malloc(len); - Ek olarak potansiyel taşma Hem okuma hem de yaz C, C ++, montaj
Arabellek boyutu yanlış hesaplama Yetersiz bellek tahsisine yol açan tampon boyutlarının yanlış hesaplanması char* buffer = malloc(strlen(input)); - Null Terminator için Eksik Alan Yazmak C, C ++, Objective-C
İşaretçi aritmetik hatalar Belleğin tahsis edilen sınırların ötesinde erişmesine neden olan yanlış işaretçi manipülasyonu char* ptr = buffer; ptr += offset; *ptr = value; - Doğrulama yok offset Hem okuma hem de yaz C, C ++, montaj
Biçim Dize Güvenlik Açıkları Saldırganların keyfi bellek konumlarını okumasına/yazmasına izin veren format dize işlevlerinin yanlış kullanımı printf(user_input); - Kullanıcı girişinin format dizesi olarak doğrudan kullanımı Hem okuma hem de yaz C, C ++
Yarış koşulları Tampon boyutu doğrulamasının erişimden ayrı olarak gerçekleştiği kullanım süresine (Toctou) kontrol zamanı (Toctou) sorunları Konu 1, arabellek boyutunu doğrularken, iş parçacığı 2 tamponu aynı anda değiştirir Hem okuma hem de yaz C, C ++, Java, Git
Derleyici optimizasyonları Kodları kontrol eden veya bellek düzeni varsayımlarını değiştiren agresif derleyici optimizasyonları Derleyici “Gereksiz” sınırları kaldırır Kontrolleri veya yeniden düzenler Bellek Düzenini Hem okuma hem de yaz C, C ++, pas (güvenli olmayan bloklar)
Dinamik Bellek Yönetimi Kullanımdan sonraki ve çiftsiz koşullar dahil olmak üzere dinamik olarak tahsis edilen belleğin yanlış kullanımı free(buffer); printf("%s", buffer); - Ücretsizden sonra kullanın Hem okuma hem de yaz C, C ++, Objective-C

Yukarıdaki tablo, kırılganlıkların yazılım uygulamalarında ortaya çıkabileceği çeşitli yolları göstermektedir. Her kategori, hafıza yolsuzluğuna ve potansiyel güvenlik sömürüsüne yol açabilecek farklı bir programlama hatası sınıfını temsil eder.

Bu kök nedenleri anlamak, geliştiricilerin daha etkili önleme stratejileri ve güvenlik profesyonellerinin daha kapsamlı güvenlik açığı değerlendirmeleri yapmalarını sağlar.

Etki ve hafifletme

Bağlı olmayan güvenlik açıklarının etkisi, küçük bilgi açıklamasından tam sistem uzlaşmasına kadar değişmektedir. Bilgi açıklama saldırıları, şifreleme anahtarları, kimlik doğrulama kimlik bilgileri ve kişisel bilgiler dahil olmak üzere hassas verileri ortaya çıkarabilir.

Hizmet reddi saldırıları, kritik veri yapılarını bozarak uygulamaları veya tüm sistemleri çarpabilir. En ciddi şekilde, keyfi kod yürütülmesi, saldırganların savunmasız başvurunun ayrıcalıklarıyla kötü amaçlı kod çalıştırmasına olanak tanır ve potansiyel olarak tam sistem devralmasına yol açar.

Etkili azaltma stratejileri birden fazla savunma katmanını kapsar. Güvenli kodlama uygulamaları temel oluşturur, uygun giriş doğrulamasını, sınır kontrolünü ve güvenli dize işleme işlevlerinin kullanımını vurgular.

Geliştiriciler, tüm giriş parametrelerinin işlemeden önce beklenen aralıklara girdiğini doğrulayan kapsamlı doğrulama rutinleri uygulamalıdır.

Derleyici tabanlı korumalar, sömürü girişimlerine karşı çalışma zamanı güvenceleri sağlar. Yığın kanaryalar, bozulduğunda programın sonlandırılmasını tetikleyen nöbetçi değerler yerleştirerek yığın tabanlı tampon taşmalarını tespit eder.

Adres Alanı Düzeni Randomizasyonu (ASLR), bellek düzenini randomize ederek sömürüyü daha zor hale getirirken, Veri Yürütülmesi Önleme (DEP) veri segmentlerinde kod yürütmeyi önler.

Statik ve dinamik analiz araçları, geliştirme ve test aşamaları sırasında potansiyel güvenlik açıklarını tanımlayabilir. Valgrind, AdresSanitizer ve kapaklık gibi araçlar, konuşlandırılmadan önce sınır dışı erişim denemelerini ve bellek bozulması sorunlarını algılayabilir.

Rust, Go ve Modern Java uygulamaları gibi bellek güvenli programlama dilleri, birçok geleneksel tampon taşma güvenlik açıklarını ortadan kaldıran yerleşik sınır kontrolü ve bellek yönetimi sağlar. Mümkün olduğunda, bu dillere göç etmek, saldırı yüzeyine maruz kalmayı önemli ölçüde azaltır.

Bağımsız okuma ve yazma güvenlik açıkları, onlarca yıllık farkındalık ve azaltma çabalarına rağmen modern yazılım sistemlerinde önemli güvenlik risklerini temsil etmeye devam etmektedir.

Eski kod tabanlarının, karmaşık yazılım mimarilerinin ve bellek-safe programlama dillerinin sürekli kullanımının birleşimi, bu güvenlik açıklarının ilgili tehdit olmasını sağlar.

Kuruluşlar, bu kalıcı saldırı vektörlerine karşı etkili bir şekilde savunmak için güvenli kodlama uygulamalarını, otomatik test araçlarını, çalışma zamanı korumalarını ve düzenli güvenlik değerlendirmelerini birleştiren kapsamlı güvenlik stratejileri uygulamalıdır.

Yazılım sistemleri giderek karmaşıklaştıkça ve birbirine bağlı hale geldikçe, sınır dışı güvenlik açıklarına karşı uyanıklığı korumak, hassas verileri korumak ve sistem bütünlüğünü korumak için her zamankinden daha kritik hale gelir.

Bu hikayeyi ilginç bul! Daha fazla güncelleme almak için bizi LinkedIn ve X'te takip edin.



Source link