Praktik Terbaik Keamanan untuk C++
Artikel ini berisi informasi tentang alat dan praktik keamanan. Menggunakannya tidak membuat aplikasi kebal dari serangan, tetapi membuat serangan yang berhasil lebih kecil kemungkinannya.
Fitur Keamanan Visual C++
Fitur keamanan ini dibangun ke dalam pengkompilasi dan linker Microsoft C++:
/guard
(Aktifkan Control Flow Guard)
Menyebabkan pengkompilasi menganalisis alur kontrol untuk target panggilan tidak langsung pada waktu kompilasi, lalu menyisipkan kode untuk memverifikasi target pada runtime.
/GS
(Pemeriksaan Keamanan Buffer)
Menginstruksikan pengkompilasi untuk memasukkan kode deteksi overrun ke dalam fungsi yang berisiko dieksploitasi. Ketika overrun terdeteksi, eksekusi dihentikan. Secara default, opsi ini aktif.
/SAFESEH
(Gambar memiliki Handler Pengecualian Aman)
Menginstruksikan linker untuk menyertakan dalam gambar output tabel yang berisi alamat setiap handler pengecualian. Pada waktu proses, sistem operasi menggunakan tabel ini untuk memastikan bahwa hanya penangan pengecualian yang sah yang dijalankan. Ini membantu mencegah eksekusi handler pengecualian yang diperkenalkan oleh serangan berbahaya pada run time. Secara default, opsi ini tidak aktif.
/NXCOMPAT
, /NXCOMPAT
(Kompatibel dengan Pencegahan Eksekusi Data) Opsi pengkompilasi dan pengtaut ini mengaktifkan kompatibilitas Pencegahan Eksekusi Data (DEP). DEP menjaga CPU terhadap eksekusi halaman non-kode.
/analyze
(Analisis Kode)
Opsi kompilator ini mengaktifkan analisis kode yang melaporkan potensi masalah keamanan seperti buffer overrun, memori yang tidak diinisialisasi, dereferensi pointer null, dan kebocoran memori. Secara default, opsi ini tidak aktif. Untuk informasi selengkapnya, lihat Analisis Kode untuk Ringkasan C/C++.
/DYNAMICBASE
(Gunakan pengacakan tata letak ruang alamat)
Opsi linker ini memungkinkan pembuatan gambar yang dapat dieksekusi yang dapat dimuat di lokasi yang berbeda dalam memori di awal eksekusi. Opsi ini juga membuat lokasi tumpukan dalam memori jauh lebih sedikit dapat diprediksi.
CRT yang Ditingkatkan Keamanan
Pustaka Runtime C (CRT) telah ditambungkan untuk menyertakan versi fungsi aman yang menimbulkan risiko keamanan—misalnya, fungsi salinan string yang tidak dicentang strcpy
. Karena versi lama yang tidak aman dari fungsi-fungsi ini tidak digunakan lagi, fungsi ini menyebabkan peringatan waktu kompilasi. Kami mendorong Anda untuk menggunakan versi aman fungsi CRT ini alih-alih menekan peringatan kompilasi. Untuk informasi selengkapnya, lihat Fitur Keamanan di CRT.
SafeInt Library
Pustaka SafeInt membantu mencegah luapan bilangan bulat dan kesalahan lain yang dapat dieksploitasi yang mungkin terjadi ketika aplikasi melakukan operasi matematika. SafeInt
Pustaka mencakup Kelas SafeInt, Kelas SafeIntException, dan beberapa Fungsi SafeInt.
Kelas SafeInt
melindungi dari luapan bilangan bulat dan eksploitasi divide-by-zero. Anda dapat menggunakannya untuk menangani perbandingan antara nilai dari berbagai jenis. Ini menyediakan dua kebijakan penanganan kesalahan. Kebijakan default adalah agar SafeInt
kelas melemparkan SafeIntException
pengecualian kelas untuk melaporkan mengapa operasi matematika tidak dapat diselesaikan. Kebijakan kedua adalah agar SafeInt
kelas menghentikan eksekusi program. Anda juga dapat menentukan kebijakan kustom.
Setiap SafeInt
fungsi melindungi satu operasi matematika dari kesalahan yang dapat dieksploitasi. Anda dapat menggunakan dua jenis parameter yang berbeda tanpa mengonversinya ke jenis yang sama. Untuk melindungi beberapa operasi matematika, gunakan SafeInt
kelas .
Iterator Yang Diperiksa
Iterator yang diperiksa memberlakukan batas kontainer. Secara default, ketika iterator yang diperiksa berada di luar batas, iterator tersebut menghasilkan pengecualian dan mengakhiri eksekusi program. Iterator yang dicentang memberikan tingkat respons lain yang bergantung pada nilai yang ditetapkan ke pendefinisian prapemrosedur seperti _SECURE_SCL_THROWS
dan _ITERATOR_DEBUG_LEVEL
. Misalnya, di _ITERATOR_DEBUG_LEVEL=2
, iterator yang diperiksa memberikan pemeriksaan kebenaran komprehensif dalam mode debug, yang tersedia dengan menggunakan pernyataan. Untuk informasi selengkapnya, lihat Perulangan yang Diperiksa dan _ITERATOR_DEBUG_LEVEL
.
Analisis Kode untuk Kode Terkelola
Analisis Kode untuk Kode Terkelola, juga dikenal sebagai FxCop, memeriksa rakitan agar sesuai dengan pedoman desain kerangka kerja the.NET. FxCop menganalisis kode dan metadata di setiap perakitan untuk memeriksa cacat di area berikut:
Desain pustaka
Pelokalan
Konvensi penamaan
Performa
Keamanan
Pemverifikasi Aplikasi Windows
Pemverifikasi Aplikasi (AppVerifier) dapat membantu Anda mengidentifikasi potensi kompatibilitas, stabilitas, dan masalah keamanan aplikasi.
AppVerifier memantau bagaimana aplikasi menggunakan sistem operasi. Ini mengawasi sistem file, registri, memori, dan API saat aplikasi berjalan, dan merekomendasikan perbaikan kode sumber untuk masalah yang terungkap.
Anda dapat menggunakan AppVerifier untuk:
Uji potensi kesalahan kompatibilitas aplikasi yang disebabkan oleh kesalahan pemrograman umum.
Periksa aplikasi untuk masalah terkait memori.
Identifikasi potensi masalah keamanan dalam aplikasi.
Akun Pengguna Windows
Menggunakan akun pengguna Windows yang termasuk dalam grup Administrator mengekspos pengembang dan--oleh ekstensi--pelanggan terhadap risiko keamanan. Untuk informasi selengkapnya, lihat Berjalan sebagai Anggota Grup Pengguna dan Bagaimana Kontrol Akun Pengguna (UAC) Memengaruhi Aplikasi Anda.
Panduan untuk Saluran Sisi Eksekusi Spekulatif
Untuk informasi tentang cara mengindentifikasi dan mengurangi kerentanan perangkat keras saluran samping eksekusi spekulatif dalam perangkat lunak C++, lihat Panduan Pengembang C++ untuk Saluran Sisi Eksekusi Spekulatif.
Lihat juga
System.Security
Keamanan
Bagaimana Kontrol Akun Pengguna (UAC) Memengaruhi Aplikasi Anda