Platform güvenliği için Flow Guard'ı denetleme
Control Flow Guard nedir?
Control Flow Guard (CFG), bellek bozulması güvenlik açıkları ile mücadele etmek için oluşturulmuş, yüksek oranda iyileştirilmiş bir platform güvenlik özelliğidir. Bir uygulamanın kod çalıştırabileceği yere sıkı kısıtlamalar getirerek, açıklardan yararlanmaların arabellek taşmaları gibi güvenlik açıkları yoluyla rastgele kod yürütmesini çok daha zor hale getirir. CFG, /GS (Arabellek Güvenlik Denetimi), Veri Yürütme Engellemesi (DEP)ve Adres Alanı Düzeni Rastgele (ASLR)gibi önceki güvenlik ihlali azaltma teknolojilerini genişletir.
CFG kullanmak şu işlemlere yardımcı olabilir:
- Bellek bozulmasını ve fidye yazılımı saldırılarını önleyin.
- Saldırı yüzeyini azaltmak için sunucunun özelliklerini yalnızca belirli bir noktada gerekenlerle kısıtlayın.
- Arabellek taşması gibi güvenlik açıkları aracılığıyla rastgele kodlardan yararlanmayı zorlaştırın.
Bu özellik Microsoft Visual Studio'da kullanılabilir ve Windows'un CFG Kullanan sürümlerinde çalışır; İstemcide Windows 10 ve Windows 11 ve sunucu tarafında Windows Server 2019 ve üzeri.
Geliştiricilerin uygulamaları için CFG'yi etkinleştirmeleri kesinlikle teşvik edilir. CFG etkin ve CFG etkin olmayan kodun bir karışımı sorunsuz yürütüleceği için kodunuzun her bölümü için CFG'yi etkinleştirmeniz gerekmez. Ancak CFG'nin tüm kodlar için etkinleştirilmemiş olması, korumada boşluklar açabilir. Ayrıca CFG özellikli kod, Windows'un CFG-Unaware sürümlerinde düzgün çalışır ve bu nedenle onlarla tamamen uyumludur.
CFG'yi nasıl etkinleştirebilirim?
Çoğu durumda kaynak kodu değiştirmeniz gerekmez. Tek yapmanız gereken Visual Studio projenize bir seçenek eklemektir; derleyici ve bağlayıcı CFG'yi etkinleştirir.
En basit yöntem
Alternatif olarak,
Ek bilgi için bkz. /guard (Denetim Akışı Koruyucusunu Etkinleştirme).
Projenizi komut satırından oluşturuyorsanız, aynı seçenekleri ekleyebilirsiniz. Örneğin, test.cpp adlı bir proje derlediyseniz cl /guard:cf test.cpp /link /guard:cf
Ayrıca, Bellek Yönetimi API'sinden setProcessValidCallTargets
İkiliNin Denetim Akış Koruması Altında Olduğunu Nasıl Anlarım?
çıkışının ekran görüntüsü
CFG Gerçekten Nasıl Çalışır?
Yazılım güvenlik açıkları genellikle çalışan bir programa olası olmayan, olağan dışı veya aşırı veriler sağlayarak kötüye kullanılır. Örneğin, bir saldırgan, bir programın beklediğinden daha fazla veri girerek arabellek taşması güvenlik açığından yararlanabilir ve böylece bir yanıtı saklamak için program tarafından ayrılmış alanı aşabilir. Bu, bir işlev işaretçisini tutabilen bitişik belleği bozabilir. Program bu işlev aracılığıyla çağırdığında saldırgan tarafından belirtilen istenmeyen bir konuma atlayabilir.
Ancak CFG'den gelen derleme ve çalışma zamanı desteğinin güçlü bir birleşimi, dolaylı çağrı yönergelerinin yürütülebileceği yerleri sıkı bir şekilde kısıtlayan denetim akışı bütünlüğünü uygular.
Derleyici aşağıdakileri yapar:
- Derlenen koda basit güvenlik denetimleri ekler.
- Uygulamadaki dolaylı çağrılar için geçerli hedefler olan işlev kümesini tanımlar.
Windows çekirdeği tarafından sağlanan çalışma zamanı desteği:
- Geçerli dolaylı çağrı hedeflerini tanımlayan durumu verimli bir şekilde korur.
- Dolaylı çağrı hedefinin geçerli olduğunu doğrulayan mantığı uygular.
Göstermek için:
CFG denetimi çalışma zamanında başarısız olduğunda, Windows programı hemen sonlandırır ve böylece dolaylı olarak geçersiz bir adres çağırmaya çalışan herhangi bir güvenlik açığından yararlanmayı önler.