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 Brankas)
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 Brankas Int membantu mencegah luapan bilangan bulat dan kesalahan lain yang dapat dieksploitasi yang mungkin terjadi ketika aplikasi melakukan operasi matematika. Pustaka SafeInt mencakup Brankas Int Class, Brankas IntException Class, dan beberapa Brankas Int Functions.

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.

Baca juga

System.Security
Keamanan
Bagaimana Kontrol Akun Pengguna (UAC) Memengaruhi Aplikasi Anda