Arabellek aşımı ya da arabellek taşkını (İngilizce: Buffer overflow), iki yazılım arasında veri iletişimi için ayrılmış olan bir arabelleğe boyutundan daha fazla veri konulması ile ortaya çıkan durumdur.
Arabellek aşımı, eğer durdurulmaz ise, her türlü işlemi yapmakta kullanılabilir. Örneğin, Bl@ster isimli virüs Windows NT ailesindeki modülündeki bir arabellek aşımı sorununu kullanarak yayılmakta idi.
Arabellek, veri kümelerinin tutulduğu bir bellektir, genellikle bir programın bir bölümünden diğerine veya programlar arasında veri taşınırken kullanılan alandır. Arabellek taşmaları genellikle hatalı biçimlendirilmiş girişler tarafından tetiklenebilir. Eğer bir kişi tüm girdilerin belirli bir boyuttan daha küçük olacağını varsayarsa ve arabellek de bu boyutta olursa, anormal bir hareket daha fazla veri üretirse arabelleğin sınırının dışına yazmasına neden olabilir. Bu aşım, komşu verilerin veya çalıştırılabilir kodun üzerine yazılırsa, bellek erişim hataları, yanlış sonuçlar ve çökmeler de dahil olmak üzere düzensiz program davranışıyla sonuçlanabilir.
Bir arabellek taşmasını istismar etmek bilinen bir saldırıdır. Birçok sistemde, bir programın bellek düzeni veya sistemin tamamı iyi tanımlanmıştır. Arabellek aşımına neden olacak şekilde tasarlanan verilerin gönderilmesi sonucu, çalıştırılabilir kod bulundurduğu bilinen alanlara kötü amaçlı kodların eklenmesi mümkündür. Arabellekler, işletim sistemi (OS) kodunda yaygın olarak kullanıldığından, ayrıcalık yükselmesini gerçekleştiren ve sonrasında bilgisayar kaynaklarına sınırsız erişim hakkı kazanan saldırılar yapmak mümkündür. Ünlü Morris solucanı, saldırı tekniklerinden biri olarak kullanılıyordu.
Arabellek taşmaları ile sıkça ilişkilendirilen programlama dilleri, bellekte herhangi bir bölümdeki verilere erişmek veya bu verilerin üzerine yazmak için yerleşik bir koruma sağlamayan ve bir diziye (yerleşik arabellek türü) yazılan verileri otomatik olarak kontrol etmeyen C ve C ++'tır. , arabellek taşmalarını önleyebilir, ancak ek kod ve işlem süresi gerektirir. Modern işletim sistemleri kötü niyetli arabellek taşmaları ile mücadele etmek için, özellikle bellek düzenini rastgele belirlerler veya arabelleklerin arasına kasıtlı olarak boşluk bırakarak bu alanlara yazılan eylemleri aramak için çeşitli teknikler kullanırlar ("kanarya").
Teknik açıklama
Arabellek taşması, bir arabelleğe yazılan verilerin yetersiz sınır denetimi nedeniyle hedef arabelleğe bitişik bellek adresindeki veri değerlerini de bozmasından dolayı oluşur. Bu olay, ilk başta verilerin hedef arabelleğe sığıp sığmadığını kontrol etmeden verileri bir arabellekten diğerine kopyalarken oluşabilir.
Örnek
Aşağıdaki örnek ifade C diliyle yazılmış bir programdır. Programda iki veri bellekte komşu olarak bulunmaktadır: A, 8 bayt uzunluğunda dizi arabelleği; B, iki baytlık big-endian tam sayı. Başlangıçta, A değişkeni hiçbir şey içermez ve sıfır bayttır; B, 1979 sayısını içerir.
char A[8] = ""; unsigned short B = 1979;
değişken adı | A | B | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
değer | [null string] | 1979 | ||||||||
hex değeri | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 07 | BB |
Şimdi, program ASCII kodlaması kullanarak, "arabellek"
stringini karakter karakter A dizisine atma işlemini gerçekleştirmektedir.
strcpy(A, "arabellek");
"arabellek"
9 karakter uzunluğunda ve null sonlandırıcı ile birlikte toplamda 10 byte uzunluğunda bir veridir. Ancak A veri yapısı sadece 8 byte veri alabilmektedir.
değişken adı | Bir | B | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
değer | 'a' | 'r' | 'a' | 'b' | 'e' | 'l' | 'l' | e' | 27392 | |
hex | 61 | 72 | 61 | 62 | 65 | 6c | 6c | 65 | 6b | 00 |
B'nin değerin A buffer'ından taşan bir karakter ile ve ardından gelen null ile yanlışlıkla değiştirilmiş olur. Bu örnekte, "k" ve sonrasında gelen null değerleri B değerini 27392 olarak değiştirir.
İşletim sistemleri bazen arabelleğin sınırlarını aşan veri yazma işlemlerini tespit eder ve süreci sonlandıran verir.
Örnekteki arabellek aşımını engellemek için yerine kullanılmalıdır. strncopy A'nın alabileceği maksimum değeri parametre olarak alarak, bu değerden fazlasını engeller.
strncpy(A, "arabellek", sizeof(A));
Sömürü
Arabellek aşımından bir güvenlik açığı olarak yararlanmak için kullanılan teknikler mimariye, işletim sistemine ve bellek bölgesine göre değişir. Örneğin heap (dinamik olarak kullanılan bellek) üzerindeki istismar kullanımı, call stack üzerindeki istismar kullanımı ile aynı değildir.
Yığın tabanlı Sömürüler
Ana Madde :
Teknik bilgiye sahip bir saldırgan, farklı yollarla programları manüpüle ederek yığın tabanlı sömürü gerçekleştirebilir. Bu yollar:
- Programın davranışını değiştirmek için, yığında savunmasız arabelleğin yakınında bulunan yerel bir değişkenin üzerine yazarak
- Yığın penceresinde yer alan return adreslerinin üzerine yeni adresler yazılarak
- Sonradan çalıştırılan bir pointer veya exception değiştirilerek
- Başka bir yığın penceresinde yer alan bir veriyi manipüle ederek
Yığın arabelleği taşmasını sağlamak için kullanılacak verilerin adresi öngörülemiyorsa, uzaktan kod yürütülmesine neden olan yığın arabellek taşmasından yararlanmak çok daha zor olur. Böyle bir arabellek taşmasını kullanmak için kullanılabilecek tekniğe "trambolin" denir. Bu teknikte, bir saldırgan savunmasız yığın arabelleğinde bir pointer bulur ve kabuk kodunun bu pointer'a göre konumunu hesaplar. Sonra, hafızada yer alan bir buyruğu tekrar yazarak ikinci bir zıplama ile çalıştırılmak istenen kabuk kod parçacağına ulaşır ve çalıştırır.
Öbek tabanlı sömürüler
Ana Madde :
Öbek veri alanında meydana gelen bir arabellek taşması öbek taşması olarak adlandırılır ve yığın tabanlı taşmalardan farklı bir şekilde kullanılabilir. Öbek üzerindeki bellek, uygulama tarafından çalışma zamanında dinamik olarak ayrılır ve genellikle program verilerini içerir. Sömürme, uygulamanın bağlantılı liste işaretçileri gibi iç yapıların üzerine yazılmasına neden olacak şekilde bu verileri belirli yollarla bozarak gerçekleştirilir. Kanonik yığın taşma tekniği, dinamik bellek ayırma bağlantısını ( meta verileri gibi) üzerine yazar ve bir program işlev pointer'ı üzerine yazmak için sonuçtaki pointer değişimini kullanır.
JPEG'leri işleme konusunda Microsoft güvenlik açığı, yığın taşması tehlikelerinden bir tanesidir.
Sömürü engellemeleri
Okunması veya çalıştırılmasından önce gerçekleşen arabellek manipülasyonu, sömürü girişiminin başarısız olmasına neden olabilir. Bu manipülasyonlar sömürü tehdidini hafifletebilir, ancak imkânsız hale getiremezler. Bununla birlikte, bu filtreleri ve manipülasyonları atlamak için teknikler mevcuttur; Alfanümerik kod, polimorfik kod, kendini değiştiren kod ve libc-dönüş saldırıları. İzinsiz giriş tespit sistemleri tarafından tespit edilmesini önlemek için aynı yöntemler kullanılabilir.
Uygulanabilir Sömürüler
Gerçek dünyadaki istismarlarda, istismarların güvenilir bir şekilde çalışması için üstesinden gelinmesi gereken çeşitli zorluklar vardır. Bu faktörler, adreslerde boş baytlar, kabuk kodunun yerinde değişkenlik, ortamlar arasındaki farklılıklar ve çalışma sırasında çeşitli karşı önlemler içerir.
NOP kızaklaması tekniği
Ana Madde :
NOP kızaklaması, yığın arabellek taşmasının başarıyla kullanılması için en eski ve en yaygın kullanılan tekniktir. Hedef alanın boyutunu etkili bir şekilde artırarak arabelleğin tam adresini bulma problemini çözer. Bunu yapmak için, yığının çok daha büyük bölümleri, işlem yapılmayan makine buyruk ile bozulmuştur. Saldırgan tarafından sağlanan verilerin sonunda, işlem yapılmayan yönergeler sonrasında, saldırgan, bulunduğu arabelleğin üst kısmına göreli olarak sıçrama yapmak için bir buyruk gönderir. NOP'ların bu koleksiyonuna "NOP-kızağı" adı verilir; çünkü, dönüş adresi, arabelleğin çalışmayan bölgesi içindeki herhangi bir adres üzerine yazılırsa, yürütme, işlem tamamlanıncaya kadar işlem yapmazlar. Sonunda atlamayla gerçek zararlı koda yönlendirilir. Bu teknik, saldırganın nispeten küçük kabuk kodu yerine NOP-kızağının nerede olduğunu tahmin etmesini gerektirir.
Bu tekniğin popülaritesinin sebebi, saldırı önleme sistemleri sunan birçok satıcının, kullanılmakta olan kabuk kodunu algılama girişiminde bulunarak bu tür buyruk kümelerini aramakta olmasıdır. Bir NOP kızağının mutlaka sadece geleneksel olmayan işlemci buyruklarını içermediğini belirtmek önemlidir; Makine durumunu kabuk kodunun çalışmayacağı bir noktaya kadar bozmayan herhangi bir buyruk donanımdan destekli no-op'ların yerine kullanılabilir. Sonuç olarak, istismar yazarlarının kabuk kodu çalıştırma üzerinde gerçek bir etkisi olmayacak şekilde rastgele seçilmiş talimatlarla no-op kızağı oluşturmak için ortak uygulama haline gelir.
Yazmaçlarda bulunan adreslere atlama tekniği
"Yazmaçlara atlama" tekniği, bir NOP kızağı için ilave alana ihtiyaç duymadan ve yığın ofsetlerini tahmin etmek zorunda kalmadan, yığın arabellek taşmalarının güvenilir bir şekilde kullanılmasını sağlar. Strateji, programın kontrollü arabelleğe ve dolayısıyla kabuk koduna işaret eden bir kayıtta bulunan bilinen bir işaretçiye atlanmasına neden olacak bir şeyle dönüş işaretçisini üzerine yazmaktır. Örneğin, A yazmacı, bir arabellek başlangıcındaki bir işaretçiyi içeriyorsa, yürütme akışını kontrol altına almak için bu kaydı operand olarak alan herhangi bir atlama veya çağrı kullanılabilir.
Koruyucu karşı önlemler
Birçok değiş tokuş ile çeşitli teknikler, arabellek aşımını saptamak veya engellemek için kullanılmaktadır. Arabellek aşımından kaçınmanın veya arabellek aşımını engellemenin en güvenilir yolu dil düzeyinde otomatik koruma kullanmaktır. Fakat bu tip bir koruma legacy code'a uygulanamaz ve teknik, iş ve kültürel kısıtlamalar sıklıkla korunmasız bir dil gerektirir. Sonraki bölümler kullanılabilir seçenekleri ve uygulamaları tanımlamaktadır.
Programlama Dilinin Seçimi
Assembly ve C / C ++, doğrudan belleğe erişime izin verdikleri için, arabellek aşımına karşı savunmasız olan popüler programlama dilleridir. C, belleğin herhangi bir bölümündeki verilere erişime veya üzerine yazmaya karşı hiçbir dahili koruma sağlamaz; Daha özel olarak, bir arabelleğe yazılan verilerin bu arabelleğin sınırları içerisinde olup olmadığını kontrol etmez. Standart C ++ kitaplıkları, güvenli bir şekilde veri arabelleği yapmanın birçok yolunu sağlar ve C ++'ın Standart Şablon Kütüphanesi (Standard Şablon Kütüphanesi), programcının verilere erişirken denetimleri açıkça çağırması durumunda isteğe bağlı olarak sınır denetimi gerçekleştirebilen kaplar sağlar. Örneğin, bir vektörün üye işlevi at () ile sınır denetimi yapar ve sınır denetimi başarısız olursa bir out_of_range istisnası atar. Ancak, sınırlar denetimi açıkça çağrılmazsa, C ++ sadece C gibi davranır. Arabellek aşımlarını önleme teknikleri C için de mevcuttur.
Güçlü olarak yazılan ve COBOL, Java, Python ve diğerleri gibi doğrudan bellek erişimine izin vermeyen diller, çoğu durumda arabellek aşımının engellenmesini sağlar. C / C ++ dışında birçok programlama dili çalışma zamanı denetimi sağlar ve bazı durumlarda C veya C ++ veri üzerine yazıp yanlış sonuçları elde edilene kadar başka yönergeleri yürütmeye devam ederken, bu programlar uyarı gönderen bir derleme zamanı denetimi sunar. Bu tür dillere örnek olarak Ada, , Lisp, Modula-2, Smalltalk, OCaml ve , Rust ve D gibi C türevleri dahildir. Java ve .NET Framework bayt kodu ortamları ayrıca tüm diziler üzerinde sınır denetimi gerektirir. Neredeyse her , iyi tanımlanmış bir hata koşulu bildirerek arabellek aşımlarına karşı koruma sağlayacaktır. Genellikle, bir dil, sınır denetimi yapmak için yeterli tür bilgileri sağladığında, bu seçeneği etkinleştirmek veya devre dışı bırakmak için bir seçenek sağlanır. , birçok dinamik bağlı ve tür denetimi kaldırabilir, ancak zayıf uygulamalar ve beceriksiz durumlar performansı önemli ölçüde düşürebilir. Yazılım mühendisleri, dil ve derleyici ayarlarını kullanmaya karar verirken, güvenlikle ilgili performans maliyetleri arasındaki dengeyi dikkatlice gözden geçirmelidir.
Güvenli Kütüphanelerin Kullanımı
Arabellek aşımı sorunu, arabelleklerin düşük düzeyli temsilsel ayrıntılarını veri türleri için kapsayıcı olarak ortaya koyduğu için C ve C ++ dillerinde yaygındır. Dolayısıyla, arabellek aşımı gerçekleştiren kodda yüksek doğruluk derecesini koruyarak arabellek aşımlar önlenmelidir. Ayrıca, gets, scanf ve strcpy gibi sınırlamaları kontrol edilmeyen standart kitaplık işlevlerinden kaçınmak da önerilir. The Morris worm, 'deki bir çağrı istismarını kullandı.
Sınır kontrolü de dahil olmak üzere arabellek yönetimini merkezi ve otomatik olarak gerçekleştiren iyi yazılmış ve test edilmiş soyut veri türü kitaplıkları, arabellek aşımlarının oluşumunu ve etkisini azaltabilir. Arabellek aşımlarının yaygın olarak gerçekleştiği bu dillerdeki iki ana yapı bloğu veri türü dizeler ve dizilerdir. Bu nedenle, bu veri türlerinde arabellek aşımlarını önleyen kütüphaneler gerekli kapsama alanının büyük çoğunluğunu sağlayabilir. Yine de, bu güvenli kütüphaneleri doğru bir şekilde kullanmamak, arabellek aşımlarına ve diğer güvenlik açıklarına neden olabilir ve doğal olarak, kütüphanedeki herhangi bir hata olası bir zayıflıktır. "The Better String Library" , Vstr ve Erwin güvenli kütüphane uygulamalarıdır. OpenBSD işletim sisteminin C kütüphanesi, ve işlevlerini sağlar, ancak bunlar tam kasa kitaplığı uygulamalardan daha sınırlıdır.
Arabellek Aşımından Korunma
Arabellek aşımı koruması, bir işlev geri döndüğünde yığının değiştirilmediğini kontrol ederek en yaygın arabellek aşımlarını saptamak için kullanılır. Değiştirilmişse, program segmentasyon hatasıyla çıkar. Bu tür üç sistem ve gcc yamalarıdır.
Microsoft'un Data Execution Prevention (DEP) modunun uygulanması, pointer'ı Structured Exception Handler (SEH) için üzerine yazılmasını açıkça korur.
Yığın, biri veri için, diğeri işlev iadesi için iki kata bölünerek daha güçlü bir yığın koruması mümkündür. Bu bölünme, mevcuttur, ancak güvenlik temelli bir tasarım kararı değildir. Ne olursa olsun, geri gönderme adresi dışındaki hassas veriler üzerine yazılabiliyorsa bu, arabellek aşımları için tam bir çözüm değildir.
İşaretçi Koruması
Arabellek aşımları işleçleri (depolanan adresler dahil) kullanarak işler. PointGuard, saldırganların işaretçiler ve adresleri güvenilir bir şekilde kullanmalarını önlemek için bir derleyici uzantısı olarak önerildi. Yaklaşım, işaretçileri kullanmadan önce ve sonra otomatik olarak XOR kodlamak için derleyici ekleyerek çalışır. Saldırgan (teorik olarak) işaretçiyi kodlamak / kod çözmek için hangi değeri kullanılacağını bilmediğinden yeni bir değer üzerine yazarsa nereyi işaret edeceğini bilemez. PointGuard hiç yayınlanmadı, ancak Microsoft, Windows XP SP2 ve Windows Server 2003 SP1'de başlayan benzer bir yaklaşım uyguladı. İşaretçi korumasını otomatik bir özellik olarak uygulamak yerine Microsoft, programcının takdirine bağlı olarak çağrılabilecek bir API yordamı ekledi. Bu, daha iyi performans sağlar (çünkü her zaman kullanılmaz), ancak yükü programcıya yükler, çünkü ne zaman kullanması gerektiğini bilmesi gerekir.
XOR doğrusal olduğu için, bir saldırgan, kodlanmış bir işaretçiyi yalnızca bir adresin alt baytlarının üzerine yazarak değiştirebilir. Bu, saldırganın birden fazla kere exploit girişiminde bulunması veya bir imlecin birkaç konumdan birine (bir NOP kızağı içindeki herhangi bir konuma) işaret etmesine neden olarak saldırıyı tamamlayabilmesi durumunda bir saldırının başarılı olmasına izin verebilir.
Yürütülebilir Alan Koruması
Yürütülebilir alan koruması, yığının veya yığının kod yürütülmesini önleyen arabellek aşımı korumasına bir yaklaşımdır. Bir saldırgan, bir programın belleğine rastgele kod eklemek için arabellek aşımlarını kullanabilir, ancak yürütülebilir alan koruması ile bu kodu yürütmeye yönelik herhangi bir girişim bir istisna yaratacaktır.
Bazı CPU'lar, yazılımla birlikte verilerin sayfalarını (yığın ve öbek içerenler gibi) okunabilir ve yazılabilir ancak yürütülebilir değil olarak işaretlemek için veya bitini destekler.
Bazı Unix işletim sistemleri (örneğin OpenBSD, macOS) yürütülebilir alan korumasına sahiptir (ör. ). Bazı isteğe bağlı paketler şunları içerir:
Microsoft Windows'un daha yeni sürümleri, adlı yürütülebilir alan korumasını da desteklemektedir. Tescilli eklentiler şunları içerir:
- BufferShield
- StackDefender
Yürütülebilir alan koruması genellikle saldırılarına veya saldırgan kodunun yürütülmesine dayanmayan diğer saldırılara karşı koruma sağlamaz. Bununla birlikte, 'yi kullanan 64-bit sistemlerde, aşağıda açıklandığı gibi, yürütülebilir alan koruması, bu tür saldırıların uygulanmasını çok daha zor hale getirir.
Adres alanı düzenini rastgele seçme
Adres alanı düzenini rastgele seçme (ASLR), genellikle çalıştırılabilir tabanı ve kütüphanelerin konumu, öbek ve istifin konumunu rastgele bir işlemin adres alanına dahil anahtar veri alanlarının konumlarını düzenlemeyi içeren bir bilgisayar güvenlik özelliğidir.
Fonksiyonların ve değişkenlerin bulunabileceği sanal bellek adreslerinin rastgele oluşturulması, bir arabellek aşımının istismarını daha zor hale getirebilir ancak imkânsız hale getirmez. Benzer ancak daha az etkili bir yöntem, sanal adres alanındaki işlemleri ve kitaplıkları yeniden yapılandırmaktır.
Derin Paket Kontrolü
Derin paket denetimi (DPI) kullanımı, ağ çevresine saldırı imzaları ve sezgisel yöntemler kullanarak arabellek aşımlarından faydalanmak için yapılan çok basit uzaktan girişimler tespit edebilir. Bunlar, paketler bilinen bir saldırı imzası taşırsa veya uzun bir No-Operation talimatları serisi (NOP-kızak olarak bilinir) algılanırsa paketleri engeller, bunlar, bir zamanlar, istismarın yükünün(exploit's payload) konumu hafifçe değişken olduğunda kullanılmıştır.
Paket tarama, bilinen saldırıları engelleyebileceğinden etkili bir yöntem değildir ve bir NOP-kızağının kodlanabilmesi için birçok yol vardır. Saldırganlar tarafından kullanılan kabuk kodu, algılamalı paket tarayıcılar ve saldırı tespit sistemlerinden kaçınmak için alphanumeric, metamorphic ya da self-modifying olabilir.
Test etme/deneme
Arabellek aşımlarına sebep olan arabellek aşımlarını denetleme ve hataları düzeltme doğal bir biçimde aşımları önlemeye yardımcı olur. Bunları (arabellek aşımlarını) ortaya çıkarmak için kullanılan ortak bir otomatik teknik fuzzing'dir. Statik analizin yapabildiği gibi en iyi durum testi de arabellek aşımlarını ortaya çıkarabilir. Potansiyel bir arabellek aşımı saptandığında düzeltilmelidir. Bu, gelişmede olan test etme yaklaşımını yazılım için yararlı hale getirir ama artık devam ettirilmeyen veya desteklenmeyen eski yazılım için daha az yararlıdır.
Tarih
Arabellek aşımları 1972’nin başlarında, Bilgisayar Güvenlik Teknolojisi Planlama Çalışmasının, "bu işlevi yerine getiren kod, kullanıcı tarafından yer paylaşımı için monitörün bölümlerine izin veren kaynağı ve varış adreslerini düzgün bir şekilde denetlememektedir. Bu durum kodu, kullanıcının makinenin kontrolünü ele almasına izin veren monitörün içine enjekte etmesinde kullanılabilir" tekniğini tasarladığında anlaşılmış ve kısmen kamuya açık olarak belgelendirilmiştir. Günümüzde monitör, çekirdek(kernel) olarak anılabilir.
Arabellek aşımının düşmanca kötüye kullanımının belgelenmiş en eski hali 1988’de olmuştur. Bu, Morris solucanının Internet üzerinden kendini çoğaltmak için kullandığı çeşitli kötüye kullanımlardan biriydi. Finger adındaki kötüye kullanılan bu program Unix üzerinden bir servisti. Daha sonra 1995’te, Thomas Lopatic arabellek aşımını bağımsız olarak yeniden keşfetti ve bulgularını güvenlik posta listesinde yayımladı. Bir yıl sonra 1996’ da, (Aleph One olarak da bilinen) Phrack dergisinde yığın tabanlı arabellek aşımı zafiyetlerini kötüye kullanmanın adım adım tanıtımı olan “Eğlence ve Kar için Yığını Parçalamak” raporunu yayımladı.
O zamandan beri, en az iki önemli internet solucanı, çok sayıda sistemin güvenliğini aşmak için arabellek aşımlarından yararlandı. 2001’de, Code Red worm bir arabellek aşımını, Microsoft’un Internet Information Services (IIS) 5.0 ’ lerinde kötüye kullanmıştır ve 2003’te, SQL Slammer solucanı, Microsoft SQL Server 2000 çalıştıran makinelerde kötüye kullanım göstermiştir.
2003’te, lisanslı Xbox oyunlarında ortaya çıkmış olan arabellek aşımları, konsolu donanım değişiklikleri gerekmeden çalıştırmak amacıyla, olarak bilinen lisanssız yazılımlara ( içeren) izin vererek kötüye kullanılmışlardır. The 'de aynı şeyi PlayStation 2 için elde etmede bir arabellek aşımını kullanmıştır. Twilight hack aynısını The Legend of Zelda: Twilight Princess’da bir arabellek aşımı kullanan Wii ile başarmıştır.
Kaynakça
- ^ "CORE-2007-0219: OpenBSD's IPv6 mbufs remote kernel buffer overflow". 24 Eylül 2015 tarihinde kaynağından . Erişim tarihi: 15 Mayıs 2007.
- ^ "Modern Overflow Targets" (PDF). 23 Ekim 2016 tarihinde kaynağından (PDF). Erişim tarihi: 5 Temmuz 2013.
- ^ "Microsoft Technet Security Bulletin MS04-028". 4 Ağustos 2011 tarihinde kaynağından . Erişim tarihi: 15 Mayıs 2007.
- ^ (PDF). 26 Ocak 2013 tarihinde kaynağından (PDF) arşivlendi. Erişim tarihi: 15 Mayıs 2007.
- ^ a b https://www.owasp.org/index.php/Buffer_Overflows 29 Ağustos 2016 tarihinde Wayback Machine sitesinde . Buffer Overflows article on OWASP
- ^ . 26 Mart 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 23 Nisan 2017.
- ^ "The Better String Library". 10 Temmuz 2012 tarihinde kaynağından arşivlendi. Erişim tarihi: 23 Nisan 2017.
- ^ . 5 Mart 2017 tarihinde kaynağından arşivlendi. Erişim tarihi: 15 Mayıs 2007.
- ^ "The Erwin Homepage". 13 Şubat 2017 tarihinde kaynağından . Erişim tarihi: 15 Mayıs 2007.
- ^ "CERT Secure Coding Initiative". 28 Aralık 2012 tarihinde kaynağından arşivlendi. Erişim tarihi: 30 Temmuz 2007.
- ^ "Libsafe at FSF.org". 16 Mayıs 2008 tarihinde kaynağından . Erişim tarihi: 20 Mayıs 2007.
- ^ "StackGuard: Automatic Adaptive Detection and Prevention of Buffer-Overflow Attacks by Cowan et al" (PDF). 8 Haziran 2011 tarihinde kaynağından (PDF). Erişim tarihi: 20 Mayıs 2007.
- ^ . 12 Şubat 2007 tarihinde kaynağından arşivlendi. Erişim tarihi: 20 Mayıs 2007.
- ^ . 28 Mart 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 20 Mayıs 2007.
- ^ "PointGuard: Protecting Pointers From Buffer Overflow Vulnerabilities". 8 Haziran 2011 tarihinde kaynağından . Erişim tarihi: 23 Nisan 2017.
- ^ "Protecting against Pointer Subterfuge (Redux)". 19 Aralık 2009 tarihinde kaynağından . Erişim tarihi: 23 Nisan 2017.
- ^ . 14 Ocak 2017 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Haziran 2007.
- ^ . 19 Şubat 2012 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Haziran 2007.
- ^ . 19 Şubat 2012 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Haziran 2007.
- ^ "BufferShield: Prevention of Buffer Overflow Exploitation for Windows". 11 Mayıs 2013 tarihinde kaynağından . Erişim tarihi: 3 Haziran 2007.
- ^ . 13 Mayıs 2007 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Haziran 2007.
- ^ "PaX at GRSecurity.net". 14 Nisan 2016 tarihinde kaynağından . Erişim tarihi: 3 Haziran 2007.
- ^ "The Exploitant - Security info and tutorials". 23 Ekim 2016 tarihinde kaynağından . Erişim tarihi: 29 Kasım 2009.
- ^ (PDF). 13 Ocak 2017 tarihinde kaynağından (PDF) arşivlendi. Erişim tarihi: 2 Kasım 2007.
- ^ . 20 Mayıs 2007 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Haziran 2007.
- ^ . 1 Eylül 2007 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Haziran 2007.
- ^ ""Smashing the Stack for Fun and Profit" by Aleph One". 6 Şubat 2013 tarihinde kaynağından . Erişim tarihi: 5 Eylül 2012.
- ^ "eEye Digital Security". 20 Haziran 2009 tarihinde kaynağından . Erişim tarihi: 3 Haziran 2007.
- ^ "Microsoft Technet Security Bulletin MS02-039". 4 Temmuz 2011 tarihinde kaynağından . Erişim tarihi: 3 Haziran 2007.
- ^ "Hacker breaks Xbox protection without mod-chip". 27 Eylül 2007 tarihinde kaynağından . Erişim tarihi: 3 Haziran 2007.
Dış bağlantılar
- Raykoid666. . 9 Aralık 2009 tarihinde kaynağından arşivlendi.
- Aleph Bir. . 7 Nisan 2014 tarihinde kaynağından arşivlendi.
- (PDF). ss. 16-21. 27 Eylül 2006 tarihinde kaynağından (PDF) arşivlendi.
- . 10 Ekim 2006 tarihinde kaynağından arşivlendi.
- . 10 Nisan 2006 tarihinde kaynağından arşivlendi.
- . 6 Mart 2011 tarihinde kaynağından arşivlendi.
- . 21 Ekim 2006 tarihinde kaynağından arşivlendi.
- Nomenumbra. . 26 Ocak 2013 tarihinde kaynağından arşivlendi.
- (PDF). 8 Mart 2005 tarihinde kaynağından (PDF) arşivlendi.
- . 17 Ağustos 2009 tarihinde kaynağından arşivlendi.
- James C. Foster. Chapter 12: Writing Exploits III (PDF). ISBN . 29 Kasım 2007 tarihinde kaynağından (PDF) arşivlendi.
Detailed explanation of how to use Metasploit to develop a buffer overflow exploit from scratch.
- James P. Anderson (Ekim 1972). (PDF). ESD-TR-73-51, ESD/AFSC, Hanscom AFB, Bedford, MA 01731 [NTIS AD-758 206]. 13 Ocak 2017 tarihinde kaynağından (PDF) arşivlendi.
- Nevermore. "Buffer Overflows: Anatomy of an Exploit". 20 Mart 2021 tarihinde kaynağından . Erişim tarihi: 17 Mart 2021.
- Marcel Holtmann (2008). (PDF). 21 Kasım 2008 tarihinde kaynağından (PDF) arşivlendi.
wikipedia, wiki, viki, vikipedia, oku, kitap, kütüphane, kütübhane, ara, ara bul, bul, herşey, ne arasanız burada,hikayeler, makale, kitaplar, öğren, wiki, bilgi, tarih, yukle, izle, telefon için, turk, türk, türkçe, turkce, nasıl yapılır, ne demek, nasıl, yapmak, yapılır, indir, ücretsiz, ücretsiz indir, bedava, bedava indir, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, resim, müzik, şarkı, film, film, oyun, oyunlar, mobil, cep telefonu, telefon, android, ios, apple, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, pc, web, computer, bilgisayar
Arabellek asimi ya da arabellek taskini Ingilizce Buffer overflow iki yazilim arasinda veri iletisimi icin ayrilmis olan bir arabellege boyutundan daha fazla veri konulmasi ile ortaya cikan durumdur Arabellek asimi eger durdurulmaz ise her turlu islemi yapmakta kullanilabilir Ornegin Bl ster isimli virus Windows NT ailesindeki modulundeki bir arabellek asimi sorununu kullanarak yayilmakta idi Arabellek veri kumelerinin tutuldugu bir bellektir genellikle bir programin bir bolumunden digerine veya programlar arasinda veri tasinirken kullanilan alandir Arabellek tasmalari genellikle hatali bicimlendirilmis girisler tarafindan tetiklenebilir Eger bir kisi tum girdilerin belirli bir boyuttan daha kucuk olacagini varsayarsa ve arabellek de bu boyutta olursa anormal bir hareket daha fazla veri uretirse arabellegin sinirinin disina yazmasina neden olabilir Bu asim komsu verilerin veya calistirilabilir kodun uzerine yazilirsa bellek erisim hatalari yanlis sonuclar ve cokmeler de dahil olmak uzere duzensiz program davranisiyla sonuclanabilir Bir arabellek tasmasini istismar etmek bilinen bir saldiridir Bircok sistemde bir programin bellek duzeni veya sistemin tamami iyi tanimlanmistir Arabellek asimina neden olacak sekilde tasarlanan verilerin gonderilmesi sonucu calistirilabilir kod bulundurdugu bilinen alanlara kotu amacli kodlarin eklenmesi mumkundur Arabellekler isletim sistemi OS kodunda yaygin olarak kullanildigindan ayricalik yukselmesini gerceklestiren ve sonrasinda bilgisayar kaynaklarina sinirsiz erisim hakki kazanan saldirilar yapmak mumkundur Unlu Morris solucani saldiri tekniklerinden biri olarak kullaniliyordu Arabellek tasmalari ile sikca iliskilendirilen programlama dilleri bellekte herhangi bir bolumdeki verilere erismek veya bu verilerin uzerine yazmak icin yerlesik bir koruma saglamayan ve bir diziye yerlesik arabellek turu yazilan verileri otomatik olarak kontrol etmeyen C ve C tir arabellek tasmalarini onleyebilir ancak ek kod ve islem suresi gerektirir Modern isletim sistemleri kotu niyetli arabellek tasmalari ile mucadele etmek icin ozellikle bellek duzenini rastgele belirlerler veya arabelleklerin arasina kasitli olarak bosluk birakarak bu alanlara yazilan eylemleri aramak icin cesitli teknikler kullanirlar kanarya Teknik aciklamaArabellek tasmasi bir arabellege yazilan verilerin yetersiz sinir denetimi nedeniyle hedef arabellege bitisik bellek adresindeki veri degerlerini de bozmasindan dolayi olusur Bu olay ilk basta verilerin hedef arabellege sigip sigmadigini kontrol etmeden verileri bir arabellekten digerine kopyalarken olusabilir Ornek Asagidaki ornek ifade C diliyle yazilmis bir programdir Programda iki veri bellekte komsu olarak bulunmaktadir A 8 bayt uzunlugunda dizi arabellegi B iki baytlik big endian tam sayi Baslangicta A degiskeni hicbir sey icermez ve sifir bayttir B 1979 sayisini icerir char A 8 unsigned short B 1979 degisken adi A Bdeger null string 1979hex degeri 00 00 00 00 00 00 00 00 07 BB Simdi program ASCII kodlamasi kullanarak arabellek stringini karakter karakter A dizisine atma islemini gerceklestirmektedir strcpy A arabellek arabellek 9 karakter uzunlugunda ve null sonlandirici ile birlikte toplamda 10 byte uzunlugunda bir veridir Ancak A veri yapisi sadece 8 byte veri alabilmektedir degisken adi Bir Bdeger a r a b e l l e 27392hex 61 72 61 62 65 6c 6c 65 6b 00 B nin degerin A buffer indan tasan bir karakter ile ve ardindan gelen null ile yanlislikla degistirilmis olur Bu ornekte k ve sonrasinda gelen null degerleri B degerini 27392 olarak degistirir Isletim sistemleri bazen arabellegin sinirlarini asan veri yazma islemlerini tespit eder ve sureci sonlandiran verir Ornekteki arabellek asimini engellemek icin yerine kullanilmalidir strncopy A nin alabilecegi maksimum degeri parametre olarak alarak bu degerden fazlasini engeller strncpy A arabellek sizeof A SomuruArabellek asimindan bir guvenlik acigi olarak yararlanmak icin kullanilan teknikler mimariye isletim sistemine ve bellek bolgesine gore degisir Ornegin heap dinamik olarak kullanilan bellek uzerindeki istismar kullanimi call stack uzerindeki istismar kullanimi ile ayni degildir Yigin tabanli Somuruler Ana Madde Teknik bilgiye sahip bir saldirgan farkli yollarla programlari manupule ederek yigin tabanli somuru gerceklestirebilir Bu yollar Programin davranisini degistirmek icin yiginda savunmasiz arabellegin yakininda bulunan yerel bir degiskenin uzerine yazarak Yigin penceresinde yer alan return adreslerinin uzerine yeni adresler yazilarak Sonradan calistirilan bir pointer veya exception degistirilerek Baska bir yigin penceresinde yer alan bir veriyi manipule ederek Yigin arabellegi tasmasini saglamak icin kullanilacak verilerin adresi ongorulemiyorsa uzaktan kod yurutulmesine neden olan yigin arabellek tasmasindan yararlanmak cok daha zor olur Boyle bir arabellek tasmasini kullanmak icin kullanilabilecek teknige trambolin denir Bu teknikte bir saldirgan savunmasiz yigin arabelleginde bir pointer bulur ve kabuk kodunun bu pointer a gore konumunu hesaplar Sonra hafizada yer alan bir buyrugu tekrar yazarak ikinci bir ziplama ile calistirilmak istenen kabuk kod parcacagina ulasir ve calistirir Obek tabanli somuruler Ana Madde Obek veri alaninda meydana gelen bir arabellek tasmasi obek tasmasi olarak adlandirilir ve yigin tabanli tasmalardan farkli bir sekilde kullanilabilir Obek uzerindeki bellek uygulama tarafindan calisma zamaninda dinamik olarak ayrilir ve genellikle program verilerini icerir Somurme uygulamanin baglantili liste isaretcileri gibi ic yapilarin uzerine yazilmasina neden olacak sekilde bu verileri belirli yollarla bozarak gerceklestirilir Kanonik yigin tasma teknigi dinamik bellek ayirma baglantisini meta verileri gibi uzerine yazar ve bir program islev pointer i uzerine yazmak icin sonuctaki pointer degisimini kullanir JPEG leri isleme konusunda Microsoft guvenlik acigi yigin tasmasi tehlikelerinden bir tanesidir Somuru engellemeleri Okunmasi veya calistirilmasindan once gerceklesen arabellek manipulasyonu somuru girisiminin basarisiz olmasina neden olabilir Bu manipulasyonlar somuru tehdidini hafifletebilir ancak imkansiz hale getiremezler Bununla birlikte bu filtreleri ve manipulasyonlari atlamak icin teknikler mevcuttur Alfanumerik kod polimorfik kod kendini degistiren kod ve libc donus saldirilari Izinsiz giris tespit sistemleri tarafindan tespit edilmesini onlemek icin ayni yontemler kullanilabilir Uygulanabilir Somuruler Gercek dunyadaki istismarlarda istismarlarin guvenilir bir sekilde calismasi icin ustesinden gelinmesi gereken cesitli zorluklar vardir Bu faktorler adreslerde bos baytlar kabuk kodunun yerinde degiskenlik ortamlar arasindaki farkliliklar ve calisma sirasinda cesitli karsi onlemler icerir NOP kizaklamasi teknigi Ana Madde Bir NOP ornek yiginda yuk kizagi NOP kizaklamasi yigin arabellek tasmasinin basariyla kullanilmasi icin en eski ve en yaygin kullanilan tekniktir Hedef alanin boyutunu etkili bir sekilde artirarak arabellegin tam adresini bulma problemini cozer Bunu yapmak icin yiginin cok daha buyuk bolumleri islem yapilmayan makine buyruk ile bozulmustur Saldirgan tarafindan saglanan verilerin sonunda islem yapilmayan yonergeler sonrasinda saldirgan bulundugu arabellegin ust kismina goreli olarak sicrama yapmak icin bir buyruk gonderir NOP larin bu koleksiyonuna NOP kizagi adi verilir cunku donus adresi arabellegin calismayan bolgesi icindeki herhangi bir adres uzerine yazilirsa yurutme islem tamamlanincaya kadar islem yapmazlar Sonunda atlamayla gercek zararli koda yonlendirilir Bu teknik saldirganin nispeten kucuk kabuk kodu yerine NOP kizaginin nerede oldugunu tahmin etmesini gerektirir Bu teknigin popularitesinin sebebi saldiri onleme sistemleri sunan bircok saticinin kullanilmakta olan kabuk kodunu algilama girisiminde bulunarak bu tur buyruk kumelerini aramakta olmasidir Bir NOP kizaginin mutlaka sadece geleneksel olmayan islemci buyruklarini icermedigini belirtmek onemlidir Makine durumunu kabuk kodunun calismayacagi bir noktaya kadar bozmayan herhangi bir buyruk donanimdan destekli no op larin yerine kullanilabilir Sonuc olarak istismar yazarlarinin kabuk kodu calistirma uzerinde gercek bir etkisi olmayacak sekilde rastgele secilmis talimatlarla no op kizagi olusturmak icin ortak uygulama haline gelir Yazmaclarda bulunan adreslere atlama teknigi Yazmaclara atlama teknigi bir NOP kizagi icin ilave alana ihtiyac duymadan ve yigin ofsetlerini tahmin etmek zorunda kalmadan yigin arabellek tasmalarinin guvenilir bir sekilde kullanilmasini saglar Strateji programin kontrollu arabellege ve dolayisiyla kabuk koduna isaret eden bir kayitta bulunan bilinen bir isaretciye atlanmasina neden olacak bir seyle donus isaretcisini uzerine yazmaktir Ornegin A yazmaci bir arabellek baslangicindaki bir isaretciyi iceriyorsa yurutme akisini kontrol altina almak icin bu kaydi operand olarak alan herhangi bir atlama veya cagri kullanilabilir Koruyucu karsi onlemlerBircok degis tokus ile cesitli teknikler arabellek asimini saptamak veya engellemek icin kullanilmaktadir Arabellek asimindan kacinmanin veya arabellek asimini engellemenin en guvenilir yolu dil duzeyinde otomatik koruma kullanmaktir Fakat bu tip bir koruma legacy code a uygulanamaz ve teknik is ve kulturel kisitlamalar siklikla korunmasiz bir dil gerektirir Sonraki bolumler kullanilabilir secenekleri ve uygulamalari tanimlamaktadir Programlama Dilinin Secimi Assembly ve C C dogrudan bellege erisime izin verdikleri icin arabellek asimina karsi savunmasiz olan populer programlama dilleridir C bellegin herhangi bir bolumundeki verilere erisime veya uzerine yazmaya karsi hicbir dahili koruma saglamaz Daha ozel olarak bir arabellege yazilan verilerin bu arabellegin sinirlari icerisinde olup olmadigini kontrol etmez Standart C kitapliklari guvenli bir sekilde veri arabellegi yapmanin bircok yolunu saglar ve C in Standart Sablon Kutuphanesi Standard Sablon Kutuphanesi programcinin verilere erisirken denetimleri acikca cagirmasi durumunda istege bagli olarak sinir denetimi gerceklestirebilen kaplar saglar Ornegin bir vektorun uye islevi at ile sinir denetimi yapar ve sinir denetimi basarisiz olursa bir out of range istisnasi atar Ancak sinirlar denetimi acikca cagrilmazsa C sadece C gibi davranir Arabellek asimlarini onleme teknikleri C icin de mevcuttur Guclu olarak yazilan ve COBOL Java Python ve digerleri gibi dogrudan bellek erisimine izin vermeyen diller cogu durumda arabellek asiminin engellenmesini saglar C C disinda bircok programlama dili calisma zamani denetimi saglar ve bazi durumlarda C veya C veri uzerine yazip yanlis sonuclari elde edilene kadar baska yonergeleri yurutmeye devam ederken bu programlar uyari gonderen bir derleme zamani denetimi sunar Bu tur dillere ornek olarak Ada Lisp Modula 2 Smalltalk OCaml ve Rust ve D gibi C turevleri dahildir Java ve NET Framework bayt kodu ortamlari ayrica tum diziler uzerinde sinir denetimi gerektirir Neredeyse her iyi tanimlanmis bir hata kosulu bildirerek arabellek asimlarina karsi koruma saglayacaktir Genellikle bir dil sinir denetimi yapmak icin yeterli tur bilgileri sagladiginda bu secenegi etkinlestirmek veya devre disi birakmak icin bir secenek saglanir bircok dinamik bagli ve tur denetimi kaldirabilir ancak zayif uygulamalar ve beceriksiz durumlar performansi onemli olcude dusurebilir Yazilim muhendisleri dil ve derleyici ayarlarini kullanmaya karar verirken guvenlikle ilgili performans maliyetleri arasindaki dengeyi dikkatlice gozden gecirmelidir Guvenli Kutuphanelerin Kullanimi Arabellek asimi sorunu arabelleklerin dusuk duzeyli temsilsel ayrintilarini veri turleri icin kapsayici olarak ortaya koydugu icin C ve C dillerinde yaygindir Dolayisiyla arabellek asimi gerceklestiren kodda yuksek dogruluk derecesini koruyarak arabellek asimlar onlenmelidir Ayrica gets scanf ve strcpy gibi sinirlamalari kontrol edilmeyen standart kitaplik islevlerinden kacinmak da onerilir The Morris worm deki bir cagri istismarini kullandi Sinir kontrolu de dahil olmak uzere arabellek yonetimini merkezi ve otomatik olarak gerceklestiren iyi yazilmis ve test edilmis soyut veri turu kitapliklari arabellek asimlarinin olusumunu ve etkisini azaltabilir Arabellek asimlarinin yaygin olarak gerceklestigi bu dillerdeki iki ana yapi blogu veri turu dizeler ve dizilerdir Bu nedenle bu veri turlerinde arabellek asimlarini onleyen kutuphaneler gerekli kapsama alaninin buyuk cogunlugunu saglayabilir Yine de bu guvenli kutuphaneleri dogru bir sekilde kullanmamak arabellek asimlarina ve diger guvenlik aciklarina neden olabilir ve dogal olarak kutuphanedeki herhangi bir hata olasi bir zayifliktir The Better String Library Vstr ve Erwin guvenli kutuphane uygulamalaridir OpenBSD isletim sisteminin C kutuphanesi ve islevlerini saglar ancak bunlar tam kasa kitapligi uygulamalardan daha sinirlidir Arabellek Asimindan Korunma Arabellek asimi korumasi bir islev geri dondugunde yiginin degistirilmedigini kontrol ederek en yaygin arabellek asimlarini saptamak icin kullanilir Degistirilmisse program segmentasyon hatasiyla cikar Bu tur uc sistem ve gcc yamalaridir Microsoft un Data Execution Prevention DEP modunun uygulanmasi pointer i Structured Exception Handler SEH icin uzerine yazilmasini acikca korur Yigin biri veri icin digeri islev iadesi icin iki kata bolunerek daha guclu bir yigin korumasi mumkundur Bu bolunme mevcuttur ancak guvenlik temelli bir tasarim karari degildir Ne olursa olsun geri gonderme adresi disindaki hassas veriler uzerine yazilabiliyorsa bu arabellek asimlari icin tam bir cozum degildir Isaretci Korumasi Arabellek asimlari islecleri depolanan adresler dahil kullanarak isler PointGuard saldirganlarin isaretciler ve adresleri guvenilir bir sekilde kullanmalarini onlemek icin bir derleyici uzantisi olarak onerildi Yaklasim isaretcileri kullanmadan once ve sonra otomatik olarak XOR kodlamak icin derleyici ekleyerek calisir Saldirgan teorik olarak isaretciyi kodlamak kod cozmek icin hangi degeri kullanilacagini bilmediginden yeni bir deger uzerine yazarsa nereyi isaret edecegini bilemez PointGuard hic yayinlanmadi ancak Microsoft Windows XP SP2 ve Windows Server 2003 SP1 de baslayan benzer bir yaklasim uyguladi Isaretci korumasini otomatik bir ozellik olarak uygulamak yerine Microsoft programcinin takdirine bagli olarak cagrilabilecek bir API yordami ekledi Bu daha iyi performans saglar cunku her zaman kullanilmaz ancak yuku programciya yukler cunku ne zaman kullanmasi gerektigini bilmesi gerekir XOR dogrusal oldugu icin bir saldirgan kodlanmis bir isaretciyi yalnizca bir adresin alt baytlarinin uzerine yazarak degistirebilir Bu saldirganin birden fazla kere exploit girisiminde bulunmasi veya bir imlecin birkac konumdan birine bir NOP kizagi icindeki herhangi bir konuma isaret etmesine neden olarak saldiriyi tamamlayabilmesi durumunda bir saldirinin basarili olmasina izin verebilir Yurutulebilir Alan Korumasi Yurutulebilir alan korumasi yiginin veya yiginin kod yurutulmesini onleyen arabellek asimi korumasina bir yaklasimdir Bir saldirgan bir programin bellegine rastgele kod eklemek icin arabellek asimlarini kullanabilir ancak yurutulebilir alan korumasi ile bu kodu yurutmeye yonelik herhangi bir girisim bir istisna yaratacaktir Bazi CPU lar yazilimla birlikte verilerin sayfalarini yigin ve obek icerenler gibi okunabilir ve yazilabilir ancak yurutulebilir degil olarak isaretlemek icin veya bitini destekler Bazi Unix isletim sistemleri ornegin OpenBSD macOS yurutulebilir alan korumasina sahiptir or Bazi istege bagli paketler sunlari icerir Microsoft Windows un daha yeni surumleri adli yurutulebilir alan korumasini da desteklemektedir Tescilli eklentiler sunlari icerir BufferShield StackDefender Yurutulebilir alan korumasi genellikle saldirilarina veya saldirgan kodunun yurutulmesine dayanmayan diger saldirilara karsi koruma saglamaz Bununla birlikte yi kullanan 64 bit sistemlerde asagida aciklandigi gibi yurutulebilir alan korumasi bu tur saldirilarin uygulanmasini cok daha zor hale getirir Adres alani duzenini rastgele secme Adres alani duzenini rastgele secme ASLR genellikle calistirilabilir tabani ve kutuphanelerin konumu obek ve istifin konumunu rastgele bir islemin adres alanina dahil anahtar veri alanlarinin konumlarini duzenlemeyi iceren bir bilgisayar guvenlik ozelligidir Fonksiyonlarin ve degiskenlerin bulunabilecegi sanal bellek adreslerinin rastgele olusturulmasi bir arabellek asiminin istismarini daha zor hale getirebilir ancak imkansiz hale getirmez Benzer ancak daha az etkili bir yontem sanal adres alanindaki islemleri ve kitapliklari yeniden yapilandirmaktir Derin Paket Kontrolu Derin paket denetimi DPI kullanimi ag cevresine saldiri imzalari ve sezgisel yontemler kullanarak arabellek asimlarindan faydalanmak icin yapilan cok basit uzaktan girisimler tespit edebilir Bunlar paketler bilinen bir saldiri imzasi tasirsa veya uzun bir No Operation talimatlari serisi NOP kizak olarak bilinir algilanirsa paketleri engeller bunlar bir zamanlar istismarin yukunun exploit s payload konumu hafifce degisken oldugunda kullanilmistir Paket tarama bilinen saldirilari engelleyebileceginden etkili bir yontem degildir ve bir NOP kizaginin kodlanabilmesi icin bircok yol vardir Saldirganlar tarafindan kullanilan kabuk kodu algilamali paket tarayicilar ve saldiri tespit sistemlerinden kacinmak icin alphanumeric metamorphic ya da self modifying olabilir Test etme deneme Arabellek asimlarina sebep olan arabellek asimlarini denetleme ve hatalari duzeltme dogal bir bicimde asimlari onlemeye yardimci olur Bunlari arabellek asimlarini ortaya cikarmak icin kullanilan ortak bir otomatik teknik fuzzing dir Statik analizin yapabildigi gibi en iyi durum testi de arabellek asimlarini ortaya cikarabilir Potansiyel bir arabellek asimi saptandiginda duzeltilmelidir Bu gelismede olan test etme yaklasimini yazilim icin yararli hale getirir ama artik devam ettirilmeyen veya desteklenmeyen eski yazilim icin daha az yararlidir TarihArabellek asimlari 1972 nin baslarinda Bilgisayar Guvenlik Teknolojisi Planlama Calismasinin bu islevi yerine getiren kod kullanici tarafindan yer paylasimi icin monitorun bolumlerine izin veren kaynagi ve varis adreslerini duzgun bir sekilde denetlememektedir Bu durum kodu kullanicinin makinenin kontrolunu ele almasina izin veren monitorun icine enjekte etmesinde kullanilabilir teknigini tasarladiginda anlasilmis ve kismen kamuya acik olarak belgelendirilmistir Gunumuzde monitor cekirdek kernel olarak anilabilir Arabellek asiminin dusmanca kotuye kullaniminin belgelenmis en eski hali 1988 de olmustur Bu Morris solucaninin Internet uzerinden kendini cogaltmak icin kullandigi cesitli kotuye kullanimlardan biriydi Finger adindaki kotuye kullanilan bu program Unix uzerinden bir servisti Daha sonra 1995 te Thomas Lopatic arabellek asimini bagimsiz olarak yeniden kesfetti ve bulgularini guvenlik posta listesinde yayimladi Bir yil sonra 1996 da Aleph One olarak da bilinen Phrack dergisinde yigin tabanli arabellek asimi zafiyetlerini kotuye kullanmanin adim adim tanitimi olan Eglence ve Kar icin Yigini Parcalamak raporunu yayimladi O zamandan beri en az iki onemli internet solucani cok sayida sistemin guvenligini asmak icin arabellek asimlarindan yararlandi 2001 de Code Red worm bir arabellek asimini Microsoft un Internet Information Services IIS 5 0 lerinde kotuye kullanmistir ve 2003 te SQL Slammer solucani Microsoft SQL Server 2000 calistiran makinelerde kotuye kullanim gostermistir 2003 te lisansli Xbox oyunlarinda ortaya cikmis olan arabellek asimlari konsolu donanim degisiklikleri gerekmeden calistirmak amaciyla olarak bilinen lisanssiz yazilimlara iceren izin vererek kotuye kullanilmislardir The de ayni seyi PlayStation 2 icin elde etmede bir arabellek asimini kullanmistir Twilight hack aynisini The Legend of Zelda Twilight Princess da bir arabellek asimi kullanan Wii ile basarmistir Kaynakca CORE 2007 0219 OpenBSD s IPv6 mbufs remote kernel buffer overflow 24 Eylul 2015 tarihinde kaynagindan Erisim tarihi 15 Mayis 2007 Modern Overflow Targets PDF 23 Ekim 2016 tarihinde kaynagindan PDF Erisim tarihi 5 Temmuz 2013 Microsoft Technet Security Bulletin MS04 028 4 Agustos 2011 tarihinde kaynagindan Erisim tarihi 15 Mayis 2007 PDF 26 Ocak 2013 tarihinde kaynagindan PDF arsivlendi Erisim tarihi 15 Mayis 2007 a b https www owasp org index php Buffer Overflows 29 Agustos 2016 tarihinde Wayback Machine sitesinde Buffer Overflows article on OWASP 26 Mart 2016 tarihinde kaynagindan arsivlendi Erisim tarihi 23 Nisan 2017 The Better String Library 10 Temmuz 2012 tarihinde kaynagindan arsivlendi Erisim tarihi 23 Nisan 2017 5 Mart 2017 tarihinde kaynagindan arsivlendi Erisim tarihi 15 Mayis 2007 The Erwin Homepage 13 Subat 2017 tarihinde kaynagindan Erisim tarihi 15 Mayis 2007 CERT Secure Coding Initiative 28 Aralik 2012 tarihinde kaynagindan arsivlendi Erisim tarihi 30 Temmuz 2007 Libsafe at FSF org 16 Mayis 2008 tarihinde kaynagindan Erisim tarihi 20 Mayis 2007 StackGuard Automatic Adaptive Detection and Prevention of Buffer Overflow Attacks by Cowan et al PDF 8 Haziran 2011 tarihinde kaynagindan PDF Erisim tarihi 20 Mayis 2007 12 Subat 2007 tarihinde kaynagindan arsivlendi Erisim tarihi 20 Mayis 2007 28 Mart 2016 tarihinde kaynagindan arsivlendi Erisim tarihi 20 Mayis 2007 PointGuard Protecting Pointers From Buffer Overflow Vulnerabilities 8 Haziran 2011 tarihinde kaynagindan Erisim tarihi 23 Nisan 2017 Protecting against Pointer Subterfuge Redux 19 Aralik 2009 tarihinde kaynagindan Erisim tarihi 23 Nisan 2017 14 Ocak 2017 tarihinde kaynagindan arsivlendi Erisim tarihi 3 Haziran 2007 19 Subat 2012 tarihinde kaynagindan arsivlendi Erisim tarihi 3 Haziran 2007 19 Subat 2012 tarihinde kaynagindan arsivlendi Erisim tarihi 3 Haziran 2007 BufferShield Prevention of Buffer Overflow Exploitation for Windows 11 Mayis 2013 tarihinde kaynagindan Erisim tarihi 3 Haziran 2007 13 Mayis 2007 tarihinde kaynagindan arsivlendi Erisim tarihi 3 Haziran 2007 PaX at GRSecurity net 14 Nisan 2016 tarihinde kaynagindan Erisim tarihi 3 Haziran 2007 The Exploitant Security info and tutorials 23 Ekim 2016 tarihinde kaynagindan Erisim tarihi 29 Kasim 2009 PDF 13 Ocak 2017 tarihinde kaynagindan PDF arsivlendi Erisim tarihi 2 Kasim 2007 20 Mayis 2007 tarihinde kaynagindan arsivlendi Erisim tarihi 3 Haziran 2007 1 Eylul 2007 tarihinde kaynagindan arsivlendi Erisim tarihi 3 Haziran 2007 Smashing the Stack for Fun and Profit by Aleph One 6 Subat 2013 tarihinde kaynagindan Erisim tarihi 5 Eylul 2012 eEye Digital Security 20 Haziran 2009 tarihinde kaynagindan Erisim tarihi 3 Haziran 2007 Microsoft Technet Security Bulletin MS02 039 4 Temmuz 2011 tarihinde kaynagindan Erisim tarihi 3 Haziran 2007 Hacker breaks Xbox protection without mod chip 27 Eylul 2007 tarihinde kaynagindan Erisim tarihi 3 Haziran 2007 Dis baglantilarRaykoid666 9 Aralik 2009 tarihinde kaynagindan arsivlendi Aleph Bir 7 Nisan 2014 tarihinde kaynagindan arsivlendi PDF ss 16 21 27 Eylul 2006 tarihinde kaynagindan PDF arsivlendi 10 Ekim 2006 tarihinde kaynagindan arsivlendi 10 Nisan 2006 tarihinde kaynagindan arsivlendi 6 Mart 2011 tarihinde kaynagindan arsivlendi 21 Ekim 2006 tarihinde kaynagindan arsivlendi Nomenumbra 26 Ocak 2013 tarihinde kaynagindan arsivlendi PDF 8 Mart 2005 tarihinde kaynagindan PDF arsivlendi 17 Agustos 2009 tarihinde kaynagindan arsivlendi James C Foster Chapter 12 Writing Exploits III PDF ISBN 1 59749 005 9 29 Kasim 2007 tarihinde kaynagindan PDF arsivlendi Detailed explanation of how to use Metasploit to develop a buffer overflow exploit from scratch James P Anderson Ekim 1972 PDF ESD TR 73 51 ESD AFSC Hanscom AFB Bedford MA 01731 NTIS AD 758 206 13 Ocak 2017 tarihinde kaynagindan PDF arsivlendi Nevermore Buffer Overflows Anatomy of an Exploit 20 Mart 2021 tarihinde kaynagindan Erisim tarihi 17 Mart 2021 Marcel Holtmann 2008 PDF 21 Kasim 2008 tarihinde kaynagindan PDF arsivlendi