2009-03-20 18 views
19

Yığın taşması saldırıları nasıl yapılır?yığın taşması saldırıları

Yığın aktarma saldırıları durumunda, saldırgan, işlev dönüş adresini adresiyle değiştirir.

Bu, yığın taşması saldırılarında nasıl yapılır? Ayrıca, koddan kod çalıştırmak mümkün mü?

cevap

32

Not: Bu, platforma göre değişir ve örneğim aşırı basitleştirilmiş. Temelde taşması muhtemel listeleri olan yöneticileri yığınlamak için aşağı gelir ve işlem belleğinin rasgele parçalarının üzerine yazmak için bağlantılı liste işaretçileri kullanabilirsiniz. Sonraki/önceki işaretçisi değiştirerek

yığın serbest alır
struct HeapBlockHeader 
{ 
    HeapBlockHeader* next; 
    HeapBlockHeader* prev; 
    int size; 

    // Actual heap buffer follows this structure. 
}; 

, bu kontrol blok serbest blokların bir liste halinde uzanır:

Kimin kontrol blokları böyle olduğu bir naif yığın uygulaması var düşünün . Bir yığın arabelleği taşarsa, veri kontrolündeki bir sonraki kontrol bloğundaki işaretlerin üzerine yazabilirim. Farz edelim ki bu bağlantıları bir işaretçiye işaret etmek için (muhtemelen sadece I arabağında tamponda) ve yığındaki işlevin dönüş adresini işaret ediyorum. Yığın yöneticisi, bloğu serbest bir listeye geri bağlamaya çalıştığında, aslında kodun I kontrolüne işaret eden bir işaretçi ile geri dönüş adresinin üzerine yazacaktır. http://www.blackhat.com/presentations/bh-usa-06/BH-US-06-Marinescu.pdf

EDIT: http://www.h-online.com/security/features/A-Heap-of-Risk-747161.html

Bu makale saldırının bu tür önlemek için Vista'nın yığın yöneticisinin girdi sertleşme bazıları açıklanmaktadır:

Bu makale yığın taşması saldırıları güzel bir bakış vardır Açık kod yığınından çalıştırma olanağı, evet mümkün. Pek çok platform artık öntanımlı olarak çalıştırılamayan kod elde etmek için engeli yükselten yığın belleği öntanımlı hale getiriyor. Ancak yine de "libc atlama" stil saldırısı yapabilirsiniz - Geri dönüş adresini, çalıştırılacak bilinen bir işlevin üzerine yaz.

+0

10 Harika bir yanıt - Programlama alanım hakkında çok şey bildiğimi hissediyorum, ancak derleyicilerin, bellek yönetiminin, koruma mekanizmalarının içine asla giremedim - işlemcinin sorumluluklarının nerede durduğunu ve işletim sisteminin başladığını bilerek. Sonra OS ve uygulama kodu arasında tekrar. Kapak için intel x86 manuel (vol 1) kapağını okudum. Bunları öğrenmek için nasıl geldiniz? –

İlgili konular