Kör dönüş odaklı programlama - Blind return oriented programming

Kör dönüş odaklı programlama (BROP) saldırgan hedef ikiliye sahip olmasa bile başarılı bir şekilde istismar yaratabilen bir istismar tekniğidir. Bittau ve diğerleri tarafından gösterilen BROP saldırıları. yendi adres alanı düzeni randomizasyonu (ASLR) ve kanaryalar 64 bit sistemlerde.

ROP Geçmişi

İşletim sistemi güvenliği ve donanımındaki mevcut iyileştirmelerle, Linux gibi güvenlik özellikleri SULH proje, kod enjeksiyonu artık imkansız. Güvenlik araştırmacıları daha sonra adını verdikleri yeni bir saldırı tasarladılar. geri dönüş odaklı programlama yenmek NX (yürütülemez) bellek. Bu saldırı, yığını, özellikle de dönüş adreslerini kontrol ederek program akışını etkilemeye dayanır. Aletler bu saldırının temel birimleridir. Gadget'lar, yığının belirli bir durumu ile birlikte bir dönüş talimatıyla biten bir talimat dizisi grubudur. Bir gadget, hafızadan bir kayda bir kelime yüklemek veya koşullu atlama gibi daha karmaşık bir işlem gerçekleştirmek gibi bir işlemi gerçekleştirebilir. Yeterince büyük bir hedef ikili ile, bir Turing tamamlandı bir shellcode çalıştırılması için fazlasıyla yeterli olan alet koleksiyonu oluşturulabilir. ROP'un yaptığı bir varsayım, saldırganın hedef ikili dosyalara sahip olduğu ve dolayısıyla cihazların adreslerini önceden bildiği yönündedir.

BROP senaryoları

BROP olan üç yeni senaryo var. [1] ile alakalı olabilir. Onlar:
(i) Kapalı ikili hizmetler durumunda, fuzz ve sızma testi gibi tekniklerin kullanılması gereken güvenlik açıklarını keşfetmek.
(ii) Açık kaynak kitaplığındaki bilinen bir güvenlik açığı, onu kullanan tescilli ikili dosya kapalı kaynak olsa bile, bir açıktan yararlanma sağlamak için kullanılabilir.
(iii) İkilinin bilinmediği açık kaynaklı bir sunucuyu hacklemek için de kullanılabilir.
Saldırı, sunucuda bilinen bir yığın güvenlik açığına sahip bir hizmet olduğunu ve ayrıca hizmetin kilitlenme durumunda yeniden başlatılması gerektiğini varsayar.

Saldırının aşamaları

Yığın okuma

Dönüş talimatı işaretçileri genellikle yığın kanaryaları tarafından korunur. Bir yığın kanaryası, değeri bir arabellek taşmasıyla değiştirilirse programın çökmesine neden olur. BROP saldırı modelinde, arabellek aşımı bayt tarafından taşınır. Taşma işlemindeki her deneme, bir programın çökmesine veya devam eden yürütmeye neden olur. Bir program çökmesi, yığın değerinin yanlış tahmin edildiğini gösterir, bu nedenle 256 denemede (ortalama durum 128 denemedir), yığın değeri muhtemelen tahmin edilebilir. 64 bit makinelerde, kanaryayı sızdırmak için bu tür 4 yığın okuma gerekir. Kanarya sızdırıldıktan sonra, dönüş talimatı göstericisi aynı şekilde bozulabilir. Bununla birlikte, yığın kanaryasının tahmini kesin olmasına rağmen, aynı şeyin dönüş talimat adresi için söylenemeyeceği not edilebilir. Saldırgan, adres alanının metin parçası içindeki herhangi bir adresi sızdırabilmekten memnun olacaktır.

Kör ROP

Bu aşama, saldırının kalbidir. Bu aşamadaki amaç, saldırgana ikili dosyanın bir dökümünü göndererek bir yazma sistemi çağrısı başlatmaktır. Yazma sistemi çağrısının üç parametresi vardır: soket, tampon ve uzunluk. X86-64 çağrı kuralları, parametrelerin kayıtlardan geçirilmesini gerektirdiğinden, yazma sistem çağrısı için argümanları ayarlamak için uygun pop komutları rsi, rdi ve rdx'e ihtiyaç duyulacaktır. Pop rdi, ret ve benzeri gibi komut dizileri bu konuda yardımcı olacaktır. Yazma sistem çağrısının basit bir ROP versiyonu şöyle olacaktır:
(1) pop rdi; ret (soket)
(2) pop rsi; ret (tampon)
(3) pop rdx; ret (uzunluk)
(4) pop rax; ret (sistem çağrı numarasını yaz)
(5) sistem çağrısı

Bu metodolojiyle ilgili bir sorun, adres alanında adres boşluğundaki adresi döndürdükten sonra yararlı araçlar bulunsa bile, yüksek olasılıkla yürütülemez bir yığına yol açacak olmasıdır. Bunu düzeltmek için, BROP önericileri durdurma cihazlarını tasarladılar. Durdurma aygıtı, sonsuz bir döngü veya engelleyen bir sistem çağrısı (uyku gibi) gibi programın engellenmesine neden olabilecek herhangi bir şeydir. Bu aynı zamanda, saldırıdan etkilenen çalışan işlemcilerin sonsuz bir döngüde kalmasına ve dolayısıyla saldırganın saldırıyı sürdürmesine izin verir.

Yukarıda bahsedilen, saldırının basit metodolojisidir. Gerçekte, saldırının verimli bir şekilde gerçekleştirilmesine yardımcı olan birkaç optimizasyon gerçekleştirilebilir. Bunların birincisi, sistem çağrı numarasını sistem çağrısı işlevine geçirmek yerine sistem çağrısını yazmak için Prosedür Bağlayıcı Tablolarının (PLT'ler) kullanılmasıdır. Diğerleri, RDX yazmacını doldurmak için strcmp kullanmayı içerir, çünkü pop RDX, ret komut dizileri oldukça nadirdir.

İstismarı oluşturun

Yazma PLT'de bulunduğunda, saldırgan daha fazla gadget bulmak için hedef ikilinin içeriğini atabilir. Saldırgan, yeterince toplamak ve bir kabuk kodu oluşturmak için geleneksel ROP gadget arama tekniklerini kullanabilir. Kabuk koduna sahip olduklarında, sömürülen sistem, root erişimi ile tam kontrol altına alınabilir.

BROP önleme

BROP saldırısında büyük bir varsayım, sunucunun her çökmeden sonra yeniden başlatılması ve yeniden başlatıldığında adres alanını yeniden rastgele hale getirmemesidir. Bu nedenle, başlangıçta adres alanının yeniden rastgele hale getirilmesini etkinleştirmek, BROP'a karşı neredeyse tam koruma sağlayabilir. NetBSD ve Linux tarafından kullanılan bir başka teknik de çökme anında uyku. Bu, saldırıyı önemli ölçüde yavaşlatır ve sistem yöneticisinin herhangi bir şüpheli etkinliğe bakmasına izin verir. Bunun dışında, ROP tarzı kontrol akışı kaçırma saldırılarına karşı geleneksel koruma olan Control Flow Integrity, kanıtlanabilir bir önleme sağlayabilir, ancak önemli bir performans yükü ile.

Benzer saldırılar

Doğası gereği BROP'a benzer bir başka saldırı, JIT (Just-In-Time) -ROP veya JIT-ROP'tur. Aynı zamanda, bilgi ifşasına dayanan başka bir saldırıdır ve aynı zamanda Adres Alanı Düzeni Randomizasyonu. Hem BROP hem de JIT-ROP, amacın bir tür veri sızıntısından yararlanmak olduğu bir ROP saldırısı başlatmak için ikili sistemdeki aygıtları bulmaya çalışacaktır. Ancak, BROP'tan farklı olarak, JIT-ROP etkileşimli bir saldırı değildir ve çarpışma / çökme olmayan durumlara uyum sağlamaya çalışır, bunun yerine saldırgan aygıtları keşfedecek bir komut dosyası gönderir ve ardından teslimat için bir saldırı oluşturur. . Ayrıca, JIT-ROP'un saldırıdan önce bilinen iki farklı güvenlik açığına (hem yığın hem de yığın) sahip olması gerekirken, BROP yalnızca bir yığın güvenlik açığının farkında olmayı gerektirir.[2]

Referanslar

  1. ^ "Kör Dönüş Odaklı Programlama (BROP)". Stanford Güvenli Bilgisayar Sistemleri grubu. Alındı 2016-02-24.
  2. ^ Keener, Lawrence (Aralık 2015). "Geri Dönüşe Yönelik Kör Programlama Saldırılarının Genelliğini ve Sınırlarını Değerlendirme" (PDF). Calhoun: NPS Kurumsal Arşivi: 26. Alındı 28 Şubat 2016.