Arabellek taşması, bir arabelleğe veri yazan yazılımın arabelleğin kapasitesini aşarak bitişik bellek konumlarının üzerine yazılmasına neden olan bir anormalliktir. Başka bir deyişle, yeterli alana sahip olmayan bir kapsayıcıya çok fazla bilgi aktarılıyor ve bu bilgi, bitişik kapsayıcılardaki verilerin yerini alıyor.
Arabellek taşmaları, saldırganlar tarafından, bir bilgisayarın belleğini değiştirmek veya programın yürütülmesinin kontrolünü ele geçirmek için değiştirmek amacıyla istismar edilebilir.
Buffer 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 arabellek kullanır; çoğu modern sabit disk, verilere verimli bir şekilde erişmek için ara belleğe alma işleminden yararlanır ve birçok çevrimiçi hizmet de arabellek kullanır. Örneğin, arabellekler, kesintiyi önlemek için çevrimiçi video akışında sıklıkla kullanılır. Bir video akışı yapıldığında, video oynatıcı bir seferde videonun belki de %20'sini indirir ve bir arabellekte saklar ve ardından bu arabellekten akış yapar. Bu şekilde, bağlantı hızındaki küçük düşüşler veya hızlı hizmet kesintileri, video akışı performansını etkilemeyecektir.
Tamponlar, belirli miktarda veri içerecek şekilde tasarlanmıştır. Arabelleği kullanan program, ara belleğe çok fazla gönderildiğinde verileri atmak için yerleşik talimatlara sahip değilse, program arabelleğe bitişik bellekteki verilerin üzerine yazacaktır.
Arabellek taşmaları, saldırganlar tarafından yazılımı bozmak için kullanılabilir. İyi anlaşılmasına rağmen, arabellek taşması saldırıları hala siber güvenlik ekiplerine eziyet eden büyük bir güvenlik sorunudur. 2014'te 'kalp kanaması' olarak bilinen bir tehdit, SSL yazılımındaki bir arabellek taşması güvenlik açığı nedeniyle yüz milyonlarca kullanıcının saldırıya uğramasına neden oldu.
Saldırganlar arabellek taşmalarından nasıl yararlanır?
Saldırgan, programın bu girdiyi yeterince büyük olmayan bir arabellekte depolamaya çalışmasına ve arabellek alanına bağlı bellek bölümlerinin üzerine yazmasına neden olacak şekilde, bir programa kasıtlı olarak özenle hazırlanmış bir girdi besleyebilir. Programın bellek düzeni iyi tanımlanmışsa, saldırgan yürütülebilir kod içerdiği bilinen alanların üzerine kasıtlı olarak yazabilir. Saldırgan daha sonra bu kodu kendi yürütülebilir koduyla değiştirebilir ve bu da programın çalışma biçimini büyük ölçüde değiştirebilir.
Örneğin, bellekteki üzerine yazılan kısım bir işaretçi (bellekteki başka bir yeri işaret eden bir nesne) içeriyorsa, saldırganın kodu bu kodu bir istismar yüküne işaret eden başka bir işaretçiyle değiştirebilir. Bu, tüm programın kontrolünü saldırganın koduna aktarabilir.
Örneğin, bellekteki üzerine yazılan kısım bir işaretçi (bellekteki başka bir yeri işaret eden bir nesne) içeriyorsa, saldırganın kodu bu kodu bir istismar yüküne işaret eden başka bir işaretçiyle değiştirebilir. Bu, tüm programın kontrolünü saldırganın koduna aktarabilir.
Kimler arabellek taşması saldırılarına karşı 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şı yerleşik koruma içermediklerinden yüksek güvenlik açığına sahip iki popüler dildir. Windows, Mac OSX ve Linux'un tümü, 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 bunu tamamen engelleyemeyen yerleşik özelliklere sahiptir.
Java, PERL ve C# gibi daha modern diller, arabellek taşması olasılığını azaltmaya yardımcı olan, ancak bunu 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 yaygın korumayı inceleyelim:
- Adres alanı rastgeleleştirme - Bir işlemin anahtar veri alanlarının adres alanı konumlarını rastgele yeniden düzenler. Arabellek taşması saldırıları genellikle önemli yürütülebilir kodun tam yerinin bilinmesine dayanır, adres alanlarının rastgele hale getirilmesi bunu neredeyse imkansız hale getirir.
- Veri yürütme engellemesi - Yürütülebilir veya yürütülemez belleğin belirli alanlarını işaretleyerek, bir istismarın yürütülemez bir alanda bulunan kodu çalıştırmasını önler.
Yazılım geliştiriciler 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şı önlem alabilirler.
Önlemlere rağmen, bazen başarılı bir istismarın ardından geliştiriciler tarafından yeni arabellek taşması güvenlik açıkları keşfedilmeye devam ediyor. Yeni güvenlik açıkları keşfedildiğinde, mühendislerin etkilenen yazılımı düzeltmesi ve yazılım kullanıcılarının yamaya erişmesini sağlaması gerekir.
Kaynak: Cloudflare - The Web Performance & Security Company