/guard (Aktifkan Control Flow Guard)

Aktifkan pembuatan kompilator pemeriksaan keamanan Control Flow Guard.

Sintaks

/guard:cf
/guard:cf-

Keterangan

Opsi ini /guard:cf menyebabkan pengkompilasi menganalisis alur kontrol untuk target panggilan tidak langsung pada waktu kompilasi, lalu menyisipkan kode untuk memverifikasi target pada runtime. Secara default, /guard:cf nonaktif dan harus diaktifkan secara eksplisit. Untuk menonaktifkan opsi ini secara eksplisit, gunakan /guard:cf-.

Visual Studio 2017 dan yang lebih baru: Opsi ini menambahkan penjaga untuk switch pernyataan yang menghasilkan tabel lompat.

/guard:cf Ketika opsi Control Flow Guard (CFG) ditentukan, pengkompilasi dan linker menyisipkan pemeriksaan keamanan runtime tambahan untuk mendeteksi upaya untuk membahayakan kode Anda. Selama kompilasi dan penautan, semua panggilan tidak langsung dalam kode Anda dianalisis untuk menemukan setiap lokasi yang dapat dijangkau kode ketika berjalan dengan benar. Informasi ini disimpan dalam struktur tambahan di header biner Anda. Pengkompilasi juga menyuntikkan pemeriksaan sebelum setiap panggilan tidak langsung dalam kode Anda yang memastikan target adalah salah satu lokasi terverifikasi. Jika pemeriksaan gagal pada runtime pada sistem operasi sadar CFG, sistem operasi menutup program.

Serangan umum pada perangkat lunak memanfaatkan bug dalam menangani input ekstrem atau tak terduga. Input yang dibuat dengan hati-hati ke aplikasi dapat menimpa lokasi yang berisi pointer ke kode yang dapat dieksekusi. Teknik ini dapat digunakan untuk mengalihkan alur kontrol ke kode yang dikendalikan oleh penyerang. Pemeriksaan runtime CFG tidak memperbaiki bug kerusakan data di executable Anda. Mereka sebaliknya membuatnya lebih sulit bagi penyerang untuk menggunakannya untuk mengeksekusi kode arbitrer. CFG adalah alat mitigasi yang mencegah panggilan ke lokasi selain titik entri fungsi dalam kode Anda. Ini mirip dengan bagaimana Pencegahan Eksekusi Data (DEP), pemeriksaan tumpukan /GS , dan dan /DYNAMICBASE/HIGHENTROPYVA mengatasi pengacakan tata letak ruang (ASLR) menurunkan kemungkinan kode Anda menjadi vektor eksploitasi.

Opsi /guard:cf harus diteruskan ke compiler dan linker untuk membangun kode yang menggunakan teknik mitigasi eksploitasi CFG. Jika biner Anda dibangun dengan menggunakan satu cl perintah, pengkompilasi meneruskan opsi ke linker. Jika Anda mengkompilasi dan menautkan secara terpisah, opsi harus diatur pada perintah compiler dan linker. Opsi linker /DYNAMICBASE juga diperlukan. Untuk memverifikasi bahwa biner Anda memiliki data CFG, gunakan dumpbin /headers /loadconfig perintah . Biner berkemampuan CFG memiliki Guard daftar karakteristik EXE atau DLL, dan Bendera Penjaga termasuk CF Instrumented dan FID table present.

Opsi /guard:cf ini tidak kompatibel dengan /ZI (Edit dan Lanjutkan informasi debug) atau /clr (Kompilasi Runtime Bahasa Umum).

Kode yang dikompilasi dengan menggunakan /guard:cf dapat ditautkan ke pustaka dan file objek yang tidak dikompilasi dengan menggunakan opsi . Hanya kode ini, ketika juga ditautkan dengan menggunakan /guard:cf opsi dan berjalan pada sistem operasi sadar CFG, memiliki perlindungan CFG. Karena kode dikompilasi tanpa opsi tidak akan menghentikan serangan, kami sarankan Anda menggunakan opsi pada semua kode yang Anda kompilasi. Ada biaya runtime kecil untuk pemeriksaan CFG, tetapi analisis kompilator mencoba untuk mengoptimalkan pemeriksaan lompatan tidak langsung yang dapat terbukti aman.

Untuk mengatur opsi pengkompilasi ini di lingkungan pengembangan Visual Studio

  1. Buka kotak dialog Halaman Properti untuk proyek. Untuk informasi selengkapnya, lihat Mengatur properti kompilator dan build.

  2. Pilih halaman properti Properti>Konfigurasi C/C++>Code Generation.

  3. Pilih properti Control Flow Guard.

  4. Di kontrol dropdown, pilih Ya untuk mengaktifkan Control Flow Guard, atau Tidak untuk menonaktifkannya.

Baca juga

Opsi pengkompilasi MSVC
Sintaks baris perintah pengkompilasi MSVC