Kontrol akışı bütünlüğü - Control-flow integrity

Kontrol akışı bütünlüğü ( CFI ), çok çeşitli kötü amaçlı yazılım saldırılarının bir programın yürütme akışını ( kontrol akışı ) yeniden yönlendirmesini engelleyen bilgisayar güvenlik teknikleri için genel bir terimdir .

teknikler

İlişkili teknikler arasında kod işaretçisi ayrımı (CPS), kod işaretçisi bütünlüğü (CPI), yığın kanaryaları , gölge yığınları ve vtable işaretçi doğrulaması bulunur.

Uygulamalar

İlgili uygulamalar mevcuttur Clang , Microsoft'un Kontrol Akış Muhafız ve İade Akış Muhafız Google'ın Dolaylı Fonksiyon-Çağrı Çek ve Yeniden Saldırı Koruyucu (RAP).

Clang ve Google Android

Google sevk etti Android'i ile Linux çekirdeği ile Clang tarafından derlenen bağlantı zamanlı optimizasyonu 2018 yılından bu yana (LTO) ve CFI.

Intel Kontrol Akışı Uygulama Teknolojisi

Intel Control-flow Enforcement Technology (CET), bir gölge yığını ve dolaylı dal takibi ile akış bütünlüğünü kontrol etmek için tehlikeleri algılar .

Gölge yığını, her ÇAĞRI'nın bir kopyasını özel olarak korunan bir gölge yığınında ve bir RET'de saklar, normal yığında saklanan dönüş adresinin ve gölge yığınında saklanan dönüş adresinin eşit olup olmadığını kontrol eder. Adresler eşit değilse, işlemci bir INT #21 (Kontrol Akışı Koruma Hatası) üretir.

Dolaylı şube takibi, yetkisiz dolaylı JMP veya CALL hedeflerine yapılan çağrıları tespit etmeye çalışır. Dolaylı JMP ve CALL komutlarının davranışını değiştirerek, IDLE'den WAIT_FOR_ENDBRANCH'a bir dahili durum makinesi ayarlayacak şekilde ve her yetkili komut satırının başına dahili durum makinesini WAIT_FOR_ENDBRANCH'dan IDLE'ye değiştiren yeni bir ENDBRANCH komutu yerleştirilerek uygulandı. dolaylı JMP veya CALL hedefi. İşlemci bir WAIT_FOR_ENDBRANCH durumundaysa (yani, önceki talimat dolaylı bir JMP veya CALL idi) ve sonraki talimat bir ENDBRANCH talimatı değilse, işlemci bir INT #21 (Kontrol Akışı Koruma Hatası) üretir.

Microsoft Denetim Akış Koruması

Control Flow Guard (CFG) ilk olarak Kasım 2014'te Windows 8.1 Update 3 (KB3000850) için piyasaya sürüldü . Geliştiriciler, /guard:cfVisual Studio 2015 veya daha yeni sürümlerde program bağlamadan önce bağlayıcı bayrağı ekleyerek programlarına CFG ekleyebilir .

İtibariyle Windows 10 Yaratıcıları Güncelleme (Windows 10 sürüm 1703), Windows çekirdek CFG ile derlenmektedir. Windows çekirdeği, kötü amaçlı çekirdek kodunun CFG bit eşleminin üzerine yazmasını önlemek için Hyper-V kullanır .

CFG, işlem başına bir bit eşlem oluşturarak çalışır, burada bir set bit, adresin geçerli bir hedef olduğunu gösterir. Her dolaylı işlev çağrısını gerçekleştirmeden önce uygulama, hedef adresin bitmap'te olup olmadığını kontrol eder. Hedef adres bitmap'te değilse, program sonlandırılır. Bu, bir saldırganın bir nesnenin içeriğini değiştirerek ve ardından bir yükü yürütmek için dolaylı bir işlev çağrısı kullanarak ücretsiz kullanımdan sonra yararlanmasını zorlaştırır .

Uygulama ayrıntıları

Tüm korumalı dolaylı işlev çağrıları için, _guard_check_icallaşağıdaki adımları gerçekleştiren işlev çağrılır:

  1. Hedef adresi, bitmap'te bir ofset ve bit numarasına dönüştürün.
    1. En yüksek 3 bayt, bitmap'teki bayt ofsetidir
    2. Bit ofseti 5 bitlik bir değerdir. İlk dört bit, adresin 4. ila 8. düşük dereceli bitleridir.
    3. Bit ofsetinin 5. biti, hedef adres 0x10 ile hizalanmışsa (son dört bit 0'dır) 0'a ve değilse 1'e ayarlanır.
  2. Bitmap'te hedefin adres değerini inceleyin
    1. Hedef adres bitmap'teyse, hatasız geri dönün.
    2. Hedef adres bitmap'te değilse, programı sonlandırın.

Bypass teknikleri

CFG'yi atlamak için birkaç genel teknik vardır:

  • Hedefi, aynı işlemde yüklenen CFG olmayan bir modülde bulunan koda ayarlayın.
  • CFG (CALL veya JMP) tarafından korunmayan dolaylı bir çağrı bulun.
  • Çağrının tasarlandığından farklı sayıda bağımsız değişkene sahip bir işlev çağrısı kullanın; bu, bir yığın yanlış hizalanmasına ve işlev döndükten sonra kod yürütülmesine neden olur (Windows 10'da yamalı).
  • Aynı sayıda argümana sahip bir işlev çağrısı kullanın, ancak iletilen işaretçilerden biri bir nesne olarak kabul edilir ve işaretçi tabanlı bir uzaklığa yazar ve bir dönüş adresinin üzerine yazılmasına izin verir.
  • Adresi doğrulamak için CFG tarafından kullanılan işlev çağrısının üzerine yazın (Mart 2015'te yamalı)
  • CFG bit eşlemini tüm 1'lere ayarlayın, tüm dolaylı işlev çağrılarına izin verin
  • Yığındaki bir adresin üzerine yazmak için kontrollü yazma ilkelini kullanın (yığın CFG tarafından korunmadığından)

Microsoft Genişletilmiş Akış Koruması

eXtended Flow Guard (XFG) henüz resmi olarak piyasaya sürülmedi, ancak Windows Insider önizlemesinde mevcut ve 2019'da Bluehat Şanghay'da halka sunuldu.

XFG, dolaylı işlev çağrılarının yalnızca aynı imzaya sahip işlevlerin alt kümesine olmasını sağlamak için işlev çağrısı imzalarını doğrulayarak CFG'yi genişletir. Fonksiyon çağrısı imza doğrulaması, dolaylı çağrıdan hemen önce hedef fonksiyonun hash'ini kayıt r10'a depolamak için talimatlar eklenerek ve hesaplanan fonksiyon hash'ini hedef adresin kodundan hemen önceki hafızada saklayarak gerçekleştirilir. Dolaylı çağrı yapıldığında, XFG doğrulama işlevi, r10'daki değeri hedef işlevin depolanan karma değeriyle karşılaştırır.

Ayrıca bakınız

Referanslar