Ana içeriğe geç
Güvenlik

C dilinde sembol adı belirtmeden fonksiyon çağırma yöntemi geliştirildi

Öne çıkanlar

  • ASLR koruması kesit içi bağıl fonksiyon mesafelerini değiştirmediği için ofset hesaplamasıyla adres tespit edildi.
  • AddressSanitizer kütüphanesindeki printf ve mmap fonksiyonları arasındaki sabit mesafe referans alındı.
  • Tahsis edilen çalıştırılabilir bellek alanına doğrudan x86 assembly kodu yazılarak execve sistem çağrısı tetiklendi.

Bir yazılım öğrencisi, okulunun otomatik ödev puanlama platformundaki sembol kısıtlamalarını aşmak için C dilinde doğrudan isim belirtmeden fonksiyon çalıştırma yöntemi geliştirdi. Değerlendirme sistemi, AST analiziyle yalnızca izin verilen standart fonksiyonların kullanımına olanak tanıyor ve execve gibi sistem çağrısı yapabilen fonksiyonları engelliyordu. Geliştirici, izin verilen bir fonksiyonun bellek adresinden yararlanarak hedef fonksiyonu dolaylı yoldan çalıştırmayı başardı.

Sistemde ASLR etkin olmasına rağmen, aynı bellek kesiti içindeki fonksiyonların göreceli ofset mesafelerinin sabit kalması zafiyetin temelini oluşturdu. Derleyicide AddressSanitizer (ASan) kullanılmasından ötürü printf gibi fonksiyonların glibc yerine ASan kütüphanesine yönlendirildiği belirlendi. Bu doğrultuda ASan kesiti içindeki mmap fonksiyonuna odaklanıldı; izin verilen bir egzersiz üzerinden printf ile mmap arasındaki sabit ofset hesaplanarak hedef adrese ulaşıldı.

Elde edilen mmap çağrısıyla hem yazılabilir hem de çalıştırılabilir bir bellek sayfası tahsis edildi. Ardından bu alana x86-64 sistem çağrısı yürüten makine kodları yerleştirildi ve 59 numaralı execve sistem çağrısı doğrudan çalıştırılarak komut satırı erişimi sağlandı. Geliştirici, -pedantic derleme kısıtlamalarını aşmak için C birliklerini (union) kullandı ve durumu okul yönetimine bildirdi.

Kaynak

Bu özet yapay zekâ ile hazırlanmıştır; ayrıntılar ve doğrulama için orijinal kaynağa başvurun.