SROP - Sigreturn-Oriented Programming
Temel Bilgiler
Sigreturn
, özellikle bir sinyal işleyicisinin yürütmesini tamamladıktan sonra temizlik yapmak için kullanılan özel bir sistem çağrısıdır. Sinyaller, genellikle olağanüstü bir durumun meydana geldiğini belirtmek için işletim sistemi tarafından bir programa gönderilen kesintilerdir. Bir program bir sinyal aldığında, mevcut çalışmasını geçici olarak durdurur ve sinyali bir sinyal işleyici ile işlemek üzere tasarlanmış özel bir işlevle ele alır.
Sinyal işleyicisi işini bitirdikten sonra, programın önceki durumuna geri dönmesi gerekir, sanki hiçbir şey olmamış gibi. İşte burada sigreturn
devreye girer. Programı, sinyal işleyicisinden geri dönmeye ve sinyal işleyicisi tarafından kullanılan yığın çerçevesini (işlev çağrılarını ve yerel değişkenleri depolayan bellek bölümü) temizleyerek programın durumunu geri yüklemeye yardımcı olur.
İlginç olan kısım, sigreturn
'un programın durumunu nasıl geri yüklediğidir: bunu yaparak, CPU'nun tüm kayıt değerlerini yığında depolar. Sinyal artık engellenmediğinde, sigreturn
bu değerleri yığından çıkarır, CPU'nun kayıtlarını etkin bir şekilde sinyal işlendiğinden önceki durumlarına sıfırlar. Bu, mevcut yığının en üstüne işaret eden yığın işaretçisi kaydını (RSP) de içerir.
Bir ROP zincirinden sigreturn
sistem çağrısını çağırarak ve yığında yüklemek istediğimiz kayıt değerlerini ekleyerek tüm kayıt değerlerini kontrol etmek ve bu nedenle örneğin /bin/sh
ile execve
sistem çağrısını çağırmak mümkündür.
Dikkat edin, bu, diğer Ret2syscall'ları çağırmayı kolaylaştıran bir tür Ret2syscall olacaktır:
pageRet2syscallMerak ediyorsanız, bu, daha sonra değerleri kurtarmak için yığında depolanan sigcontext yapısı'dır (şemaya buradan bakın):
Daha iyi bir açıklama için aşağıdaki linke bakabilirsiniz:
Örnek
Bir örnek bulabilirsiniz burada burada signeturn çağrısı ROP aracılığıyla oluşturulmuştur (rxa'ya 0xf
değeri yerleştirilmiştir), ancak bu oradan gelen son saldırıdır:
Ayrıca buradan exploit'u kontrol edin, burada ikili zaten sigreturn
çağırıyordu ve bu nedenle bunu bir ROP ile oluşturmak gerekli değil:
Diğer Örnekler ve Referanslar
sigreturn
sistem çağrısını çağıran ve ardından yığını doldurmayı sağlayan derleme ikili dosyası. Yığında bir ret2syscall yazmak ve yığında bulunan bayrağı okumak mümkündür, bayrak derleme ikilisinin belleğinde bulunmaktadır.sigreturn
sistem çağrısını çağıran ve ardından yığını doldurmayı sağlayan derleme ikili dosyası. Yığında bir ret2syscall yazmak mümkündür, derleme ikilisinde/bin/sh
dizesi bulunmaktadır.64 bit, relro yok, canary yok, nx, pie yok.
gets
işlevini kötüye kullanarak basit bir tampon taşması, ret2syscall gerçekleştiren kıyafetlerin eksikliği ile. ROP zinciri,/bin/sh
'yi.bss
'ye yazmak için tekrar gets çağırarak yazar,alarm
işlevini kullanarak eax'ı0xf
olarak ayarlamak için SROP çağırmak ve bir kabuk çalıştırmak için.64 bit derleme programı, relro yok, canary yok, nx, pie yok. Akış, yığında yazma, birkaç kaydı kontrol etme ve bir sistem çağrısı yapma ve ardından
exit
çağırma izni verir. Seçilen sistem çağrısı, registreleri ayarlayacak birsigreturn
'dır ve bir önceki sistem çağrısı talimatını çağırmak vememprotect
'i çalıştırmak içineip
'yi ayarlayacaktır, böylece ikili alanırwx
olarak ayarlar ve ESP'yi ikili alana ayarlar. Akışı takip ederek, program ESP'yi tekrar okumak için ESP'yi ikinci kez okuyacak, ancak bu durumda ESP bir sonraki talimatı işaret edeceği için bir kabuk kodu geçirerek onu bir sonraki talimat olarak yazacak ve çalıştıracaktır.SROP, bir kabuk kodunun yerleştirildiği yere yürütme ayrıcalıkları (memprotect) vermek için kullanılır.
Last updated