Kategoriler
CloudFlare

Arabellek taşması nedir?

Arabellek Taşması Öğrenme hedefleri

Arabellek taşması, bir arabelleğe veri yazan yazılımın arabelleğin kapasitesini aşması ve bitişik bellek konumlarının üzerine yazılmasıyla sonuçlanan bir anormalliktir. Başka bir deyişle, yeterli alana sahip olmayan bir kaba çok fazla bilgi aktarılıyor ve bu bilgi bitişik kaplardaki verilerin yerini alıyor.

Arabellek taşmaları, bir bilgisayarın belleğini değiştirmek amacıyla saldırganlar tarafından program yürütülmesini zayıflatmak veya denetimini ele geçirmek için kullanılabilir.

Arabellek Taşması

Tampon nedir?

Bir arabellek veya veri arabelleği, verileri bir yerden diğerine taşınırken geçici olarak depolamak için kullanılan bir fiziksel bellek depolama alanıdır. Bu arabellekler tipik olarak RAM belleğinde yaşar. Bilgisayarlar, performansı artırmaya yardımcı olmak için sık sık arabellekleri kullanır; modern sabit disklerin çoğu verilere verimli bir şekilde erişmek için arabelleğe alma avantajından yararlanır ve birçok çevrimiçi hizmet de arabellek kullanır. Örneğin, ara bellekler kesintiyi önlemek için çevrimiçi video akışında sıklıkla kullanılır. Bir video akışı gerçekleştirildiğinde, video oynatıcı bir seferde videonun belki% 20’sini bir arabellekte indirip depolar ve ardından bu arabellekten akış gerçekleştirir. Bu şekilde, bağlantı hızında küçük düşüşler veya hızlı servis kesintileri video akışı performansını etkilemez.

Tamponlar, belirli miktarlarda veri içerecek şekilde tasarlanmıştır. Arabelleği kullanan program, arabelleğe çok fazla gönderildiğinde verileri atmak için yerleşik talimatlara sahip olmadığı sürece, program arabelleğe bitişik bellekteki verilerin üzerine yazacaktır.

Arabellek taşmaları, yazılımları bozmak için saldırganlar tarafından kullanılabilir. İyi anlaşılmış olmasına rağmen, arabellek taşması saldırıları, siber güvenlik ekiplerine eziyet eden önemli bir güvenlik sorunudur. 2014 yılında ‘kalp kanaması’ olarak bilinen bir tehdit, SSL yazılımındaki bir arabellek taşması güvenlik açığı nedeniyle yüz milyonlarca kullanıcıyı saldırıya maruz bıraktı .

Saldırganlar arabellek taşmalarından nasıl yararlanır?

Bir saldırgan, dikkatlice hazırlanmış bir girdiyi, programın bu girdiyi yeterince büyük olmayan bir arabellekte saklamasına ve arabellek alanına bağlı bellek bölümlerinin üzerine yazmasına neden olacak bir programa kasıtlı olarak besleyebilir. Programın bellek düzeni iyi tanımlanmışsa, saldırgan çalıştırılabilir kod içerdiği bilinen alanların üzerine kasıtlı olarak yazabilir. Saldırgan daha sonra bu kodu kendi çalıştırılabilir koduyla değiştirebilir ve bu da programın çalışma şeklini büyük ölçüde değiştirebilir.

Örneğin, bellekteki üzerine yazılan kısım bir işaretçi (bellekte başka bir yere işaret eden bir nesne) içeriyorsa, saldırganın kodu, bu kodu, bir yararlanma yüküne işaret eden başka bir işaretçi ile değiştirebilir. Bu, tüm programın kontrolünü saldırganın koduna aktarabilir.

Arabellek taşması saldırılarına karşı kimler savunmasızdır?

Bazı kodlama dilleri, diğerlerine göre arabellek taşmasına karşı daha hassastır. C ve C ++, belleklerindeki verilere erişmeye veya verilerin üzerine yazmaya karşı hiçbir yerleşik koruma içermediğinden, yüksek güvenlik açığına sahip iki popüler dildir. Windows, Mac OSX ve Linux, bu dillerden birinde veya her ikisinde yazılmış kod içerir.

Java, PERL ve C # gibi daha modern diller, arabellek taşması olasılığını azaltmaya yardımcı olan, ancak tamamen engelleyemeyen yerleşik özelliklere sahiptir.

Arabellek taşması saldırılarına karşı nasıl korunulur

Neyse ki, modern işletim sistemleri, arabellek taşması saldırılarını azaltmaya yardımcı olan çalışma zamanı korumalarına sahiptir. Sömürü riskini azaltmaya yardımcı olan 2 ortak korumayı inceleyelim:

  • Adres alanı randomizasyonu – Bir işlemin önemli veri alanlarının adres alanı konumlarını rastgele yeniden düzenler. Arabellek taşması saldırıları genellikle önemli çalıştırılabilir kodun tam yerini bilmeye dayanır, adres alanlarının rastgele hale getirilmesi bunu neredeyse imkansız hale getirir.
  • Veri yürütme engellemesi – Belli bellek alanlarını, yürütülebilir veya yürütülemez olarak işaretleyerek, çalıştırılamayan bir alanda bulunan kodun çalıştırılmasını engeller.

Yazılım geliştiricileri ayrıca, yerleşik korumaları olan dillerde yazarak veya kodlarında özel güvenlik prosedürleri kullanarak arabellek taşması güvenlik açıklarına karşı önlemler alabilirler.

Önlemlere rağmen, yeni arabellek taşması güvenlik açıkları geliştiriciler tarafından, bazen başarılı bir istismarın ardından keşfedilmeye devam ediyor. Yeni güvenlik açıkları keşfedildiğinde, mühendislerin etkilenen yazılımı yamalamaları ve yazılım kullanıcılarının yamaya erişimini sağlamaları gerekir.

Farklı arabellek taşması saldırıları nelerdir?

Farklı stratejiler kullanan ve farklı kod parçalarını hedefleyen bir dizi farklı arabellek taşması saldırısı vardır. Aşağıda en çok bilinenlerden birkaçı bulunmaktadır.

  • Yığın taşma saldırısı – Bu, en yaygın arabellek taşması saldırısı türüdür ve çağrı yığınındaki bir arabelleğin taşmasını içerir *.
  • Yığın taşma saldırısı – Bu tür saldırı, yığın * olarak bilinen açık bellek havuzundaki verileri hedefler.
  • Tamsayı taşma saldırısı – Bir tamsayı taşmasında, bir aritmetik işlem, onu depolaması amaçlanan tam sayı türü için çok büyük olan bir tamsayı (tam sayı) ile sonuçlanır; bu bir arabellek taşmasına neden olabilir.
  • Unicode taşması – Unicode taşması, ASCII karakterleri bekleyen bir girdiye unicode karakterler ekleyerek bir arabellek taşması oluşturur. (ASCII ve unicode, bilgisayarların metni temsil etmesine izin veren kodlama standartlarıdır. Örneğin ASCII’de ‘a’ harfi 97 sayısı ile temsil edilir. ASCII kodları yalnızca Batı dillerinden karakterleri kapsarken, unicode dünyadaki hemen hemen her yazı dili için karakterler oluşturabilir. . Unicode’da çok daha fazla karakter olduğundan, birçok unicode karakteri en büyük ASCII karakterinden daha büyüktür.)

* Bilgisayarlar, yığın ve yığın olarak bilinen iki farklı bellek ayırma modeline dayanır; her ikisi de bilgisayarın RAM’inde yaşıyor. Yığın düzgün bir şekilde düzenlenmiştir ve verileri Son Giren İlk Çıkar modelinde tutar. Yığına en son yerleştirilen veri parçası ilk çıkan olacaktır, tıpkı bir mühimmat şarjörüne yerleştirilen son merminin ilk ateşlenecek olması gibi. Yığın, düzensiz bir fazladan bellek havuzudur, veriler yığına belirli bir sırayla girmez veya çıkmaz. Yığından belleğe erişmek, yığından erişmekten çok daha hızlı olduğundan, yığın genellikle bir programcının açıkça yönetmek istediği daha büyük veri parçaları veya veriler için ayrılmıştır.

Hayat Paylaşınca Güzel: