Arabellek aşımı
Bu madde hiçbir kaynak içermemektedir. (Mayıs 2016) (Bu şablonun nasıl ve ne zaman kaldırılması gerektiğini öğrenin) |
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 RPC 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. Sınır denetimi, 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
[değiştir | kaynağı değiştir]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
[değiştir | kaynağı değiştir]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 segmentasyon hatası verir.
Örnekteki arabellek aşımını engellemek için strcopy yerine strncopy 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ü
[değiştir | kaynağı değiştir]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
[değiştir | kaynağı değiştir]Ana Madde : Yığın aşımı sömürüsü
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 [1]
- Başka bir yığın penceresinde yer alan bir veriyi manipüle ederek[2]
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
[değiştir | kaynağı değiştir]Ana Madde : Öbek aşımı sömürüsü
Ö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ı (malloc 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 GDI+ güvenlik açığı, yığın taşması tehlikelerinden bir tanesidir.[3]
Sömürü engellemeleri
[değiştir | kaynağı değiştir]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.[4]
Uygulanabilir Sömürüler
[değiştir | kaynağı değiştir]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
[değiştir | kaynağı değiştir]Ana Madde : NOP kızaklaması
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, kabuk kodunun 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
[değiştir | kaynağı değiştir]"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
[değiştir | kaynağı değiştir]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
[değiştir | kaynağı değiştir]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.[5] 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.[5] 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, Eiffel, Lisp, Modula-2, Smalltalk, OCaml ve Cyclone, 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 interpreted dilde, 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. Değişken kod analizi, 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ı
[değiştir | kaynağı değiştir]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, fingerd'deki bir çağrı istismarını kullandı.[6]
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" [7], Vstr [8] ve Erwin [9] güvenli kütüphane uygulamalarıdır. OpenBSD işletim sisteminin C kütüphanesi, strlcpy ve strlcat işlevlerini sağlar, ancak bunlar tam kasa kitaplığı uygulamalardan daha sınırlıdır.[10]
Arabellek Aşımından Korunma
[değiştir | kaynağı değiştir]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 Libsafe [11] StackGuard [12] ve ProPolice [13] 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.[14]
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, Forth languagede 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ı
[değiştir | kaynağı değiştir]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.[15] 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.[16]
Yürütülebilir Alan Koruması
[değiştir | kaynağı değiştir]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 NX veya XD bitini destekler.
Bazı Unix işletim sistemleri (örneğin OpenBSD, macOS) yürütülebilir alan korumasına sahiptir (ör. W^X). Bazı isteğe bağlı paketler şunları içerir:
Microsoft Windows'un daha yeni sürümleri, Data Execution Prevention adlı yürütülebilir alan korumasını da desteklemektedir. Tescilli eklentiler şunları içerir:
Yürütülebilir alan koruması genellikle return-to-libc saldırılarına veya saldırgan kodunun yürütülmesine dayanmayan diğer saldırılara karşı koruma sağlamaz. Bununla birlikte, ASLR'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
[değiştir | kaynağı değiştir]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.[22]
Derin Paket Kontrolü
[değiştir | kaynağı değiştir]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
[değiştir | kaynağı değiştir]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.[23] 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
[değiştir | kaynağı değiştir]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.[24] 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.[25] Daha sonra 1995’te, Thomas Lopatic arabellek aşımını bağımsız olarak yeniden keşfetti ve bulgularını Bugtraq güvenlik posta listesinde yayımladı. [26] Bir yıl sonra 1996’ da, Elias Levy (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ı.[27]
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 [28] ’ 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.[29]
2003’te, lisanslı Xbox oyunlarında ortaya çıkmış olan arabellek aşımları, konsolu donanım değişiklikleri gerekmeden çalıştırmak amacıyla, modchips olarak bilinen lisanssız yazılımlara (homebrew oyunları içeren) izin vererek kötüye kullanılmışlardır. The PS2 Independence Exploit'de aynı şeyi PlayStation 2 için elde etmede bir arabellek aşımını kullanmıştır.[30] 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
[değiştir | kaynağı değiştir]- ^ "CORE-2007-0219: OpenBSD's IPv6 mbufs remote kernel buffer overflow". 24 Eylül 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 15 Mayıs 2007.
- ^ "Modern Overflow Targets" (PDF). 23 Ekim 2016 tarihinde kaynağından arşivlendi (PDF). Erişim tarihi: 5 Temmuz 2013.
- ^ "Microsoft Technet Security Bulletin MS04-028". 4 Ağustos 2011 tarihinde kaynağından arşivlendi. Erişim tarihi: 15 Mayıs 2007.
- ^ "Creating Arbitrary Shellcode In Unicode Expanded Strings" (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 arşivlendi. Buffer Overflows article on OWASP
- ^ "Arşivlenmiş kopya". 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.
- ^ "The Vstr Homepage". 5 Mart 2017 tarihinde kaynağından arşivlendi. Erişim tarihi: 15 Mayıs 2007.
- ^ "The Erwin Homepage". 13 Şubat 2017 tarihinde kaynağından arşivlendi. 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 arşivlendi. 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 arşivlendi (PDF). Erişim tarihi: 20 Mayıs 2007.
- ^ "ProPolice at X.ORG". 12 Şubat 2007 tarihinde kaynağından arşivlendi. Erişim tarihi: 20 Mayıs 2007.
- ^ "Bypassing Windows Hardware-enforced Data Execution Prevention". 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 arşivlendi. Erişim tarihi: 23 Nisan 2017.
- ^ "Protecting against Pointer Subterfuge (Redux)". 19 Aralık 2009 tarihinde kaynağından arşivlendi. Erişim tarihi: 23 Nisan 2017.
- ^ "PaX: Homepage of the PaX team". 14 Ocak 2017 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Haziran 2007.
- ^ "KernelTrap.Org". 19 Şubat 2012 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Haziran 2007.
- ^ "Openwall Linux kernel patch 2.4.34-ow1". 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 arşivlendi. Erişim tarihi: 3 Haziran 2007.
- ^ "NGSec Stack Defender". 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 arşivlendi. Erişim tarihi: 3 Haziran 2007.
- ^ "The Exploitant - Security info and tutorials". 23 Ekim 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 29 Kasım 2009.
- ^ "Computer Security Technology Planning Study" (PDF). 13 Ocak 2017 tarihinde kaynağından (PDF) arşivlendi. Erişim tarihi: 2 Kasım 2007.
- ^ ""A Tour of The Worm" by Donn Seeley, University of Utah". 20 Mayıs 2007 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Haziran 2007.
- ^ "Bugtraq security mailing list archive". 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 arşivlendi. Erişim tarihi: 5 Eylül 2012.
- ^ "eEye Digital Security". 20 Haziran 2009 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Haziran 2007.
- ^ "Microsoft Technet Security Bulletin MS02-039". 4 Temmuz 2011 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Haziran 2007.
- ^ "Hacker breaks Xbox protection without mod-chip". 27 Eylül 2007 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Haziran 2007.
Dış bağlantılar
[değiştir | kaynağı değiştir]- Raykoid666. "Discovering and exploiting a remote buffer overflow vulnerability in an FTP server". 9 Aralık 2009 tarihinde kaynağından arşivlendi.
- Aleph Bir. "Smashing the Stack for Fun and Profit". 7 Nisan 2014 tarihinde kaynağından arşivlendi.
- "An Overview and Example of the Buffer-Overflow Exploit" (PDF). ss. 16-21. 27 Eylül 2006 tarihinde kaynağından (PDF) arşivlendi.
- "CERT Secure Coding Standards". 10 Ekim 2006 tarihinde kaynağından arşivlendi.
- "CERT Secure Coding Initiative". 10 Nisan 2006 tarihinde kaynağından arşivlendi.
- "Secure Coding in C and C++". 6 Mart 2011 tarihinde kaynağından arşivlendi.
- "SANS: inside the buffer overflow attack". 21 Ekim 2006 tarihinde kaynağından arşivlendi.
- Nomenumbra. "Advances in adjacent memory overflows". 26 Ocak 2013 tarihinde kaynağından arşivlendi.
- "A Comparison of Buffer Overflow Prevention Implementations and Weaknesses" (PDF). 8 Mart 2005 tarihinde kaynağından (PDF) arşivlendi.
- "More Security Whitepapers about Buffer Overflows". 17 Ağustos 2009 tarihinde kaynağından arşivlendi.
- James C. Foster. Chapter 12: Writing Exploits III"Sockets, Shellcode, Porting & Coding: Reverse Engineering Exploits and Tool Coding for Security Professionals" (PDF). ISBN 1-59749-005-9. 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). "Computer Security Technology Planning Study" (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 arşivlendi. Erişim tarihi: 17 Mart 2021.
- Marcel Holtmann (2008). "Secure Programming with GCC and GLibc" (PDF). 21 Kasım 2008 tarihinde kaynağından (PDF) arşivlendi.