/guard (Denetim Flow Guard'ı etkinleştir)

Control Flow Guard güvenlik denetimlerinin derleyici oluşturulmasını etkinleştirin.

Sözdizimi

/guard:cf
/guard:cf-

Açıklamalar

seçeneği, /guard:cf derleyicinin derleme zamanında dolaylı çağrı hedefleri için denetim akışını çözümlemesine ve ardından çalışma zamanında hedefleri doğrulamak için kod eklemesine neden olur. Varsayılan olarak kapalıdır /guard:cf ve açıkça etkinleştirilmesi gerekir. Bu seçeneği açıkça devre dışı bırakmak için kullanın /guard:cf-.

Visual Studio 2017 ve üzeri: Bu seçenek atlama tabloları oluşturan deyimler için switch korumalar ekler.

/guard:cf Control Flow Guard (CFG) seçeneği belirtildiğinde, derleyici ve bağlayıcı kodunuzu tehlikeye atma girişimlerini algılamak için ek çalışma zamanı güvenlik denetimleri ekler. Derleme ve bağlama sırasında, kodunuzdaki tüm dolaylı çağrılar, kodun doğru çalıştığında ulaşabileceği her konumu bulmak için analiz edilir. Bu bilgiler ikili dosyalarınızın üst bilgilerinde ek yapılarda depolanır. Derleyici ayrıca kodunuzdaki her dolaylı çağrıdan önce hedefin doğrulanmış konumlardan biri olmasını sağlayan bir denetim ekler. CFG kullanan bir işletim sisteminde çalışma zamanında denetim başarısız olursa, işletim sistemi programı kapatır.

Yazılımlara yönelik yaygın bir saldırı, aşırı veya beklenmeyen girişleri işlemedeki hatalardan yararlanır. Uygulamaya dikkatle hazırlanmış giriş, yürütülebilir kod işaretçisi içeren bir konumun üzerine yazabilir. Bu teknik, denetim akışını saldırgan tarafından denetlenen koda yeniden yönlendirmek için kullanılabilir. CFG çalışma zamanı denetimleri yürütülebilir dosyanızdaki veri bozulması hatalarını düzeltmez. Bunun yerine, bir saldırganın rastgele kod yürütmek için bunları kullanmasını daha zor hale getirir. CFG, kodunuzda işlev giriş noktaları dışındaki konumlara çağrı yapılmasını engelleyen bir azaltma aracıdır. Veri Yürütme Engellemesi (DEP), /GS yığın denetimleri ve /DYNAMICBASE/HIGHENTROPYVA adres alanı düzeni rastgele seçiminin (ASLR) kodunuzun açıklardan yararlanma vektörüne dönüşmesi olasılığını azaltmasına benzer.

SEÇENEĞI, /guard:cf CFG açıklarını azaltma tekniğini kullanan kod oluşturmak için hem derleyiciye hem de bağlayıcıya geçirilmelidir. İkili dosyanız tek cl bir komut kullanılarak oluşturulduysa, derleyici bağlayıcıya seçeneğini geçirir. Ayrı olarak derleyip bağlarsanız, seçeneğin hem derleyici hem de bağlayıcı komutlarında ayarlanması gerekir. /DYNAMICBASE bağlayıcı seçeneği de gereklidir. İkili dosyanızda CFG verilerinin bulunduğunu doğrulamak için komutunu kullanın dumpbin /headers /loadconfig . CFG özellikli ikili dosyalar EXE veya DLL özellikleri listesinde bulunur Guard ve Guard Bayrakları ve FID table presentdeğerlerini içerirCF Instrumented.

Bu /guard:cf seçenek (Hata ayıklama bilgilerini düzenle ve devam et) veya /clr (Ortak Dil Çalışma Zamanı Derlemesi) ile /ZI uyumsuz.

kullanılarak /guard:cf derlenen kod, seçeneği kullanılarak derlenmemiş kitaplıklara ve nesne dosyalarına bağlanabilir. Seçeneği kullanılarak /guard:cf da bağlanıp CFG kullanan bir işletim sisteminde çalıştırıldığında yalnızca bu kod CFG korumasına sahiptir. seçeneği olmadan derlenen kod bir saldırıyı durdurmayacağından, derlediğiniz tüm kodlarda seçeneğini kullanmanızı öneririz. CFG denetimleri için küçük bir çalışma zamanı maliyeti vardır, ancak derleyici analizi, güvenli olduğu kanıtlanabilecek dolaylı atlamalardaki denetimleri iyileştirmeye çalışır.

Bu derleyici seçeneğini Visual Studio geliştirme ortamında ayarlamak için

  1. Proje için Özellik Sayfaları iletişim kutusunu açın. Daha fazla bilgi için bkz . Derleyici ve derleme özelliklerini ayarlama.

  2. Yapılandırma Özellikleri>C/C++>Kod Oluşturma özellik sayfasını seçin.

  3. Control Flow Guard özelliğini seçin.

  4. Açılan denetimde, Control Flow Guard'ı etkinleştirmek için Evet'i veya devre dışı bırakmak için Hayır'ı seçin.

Ayrıca bkz.

MSVC derleyici seçenekleri
MSVC derleyicisi komut satırı söz dizimi