Pasukan pengkompil Clang telah memperkenalkan cadangan yang bercita-cita tinggi untuk mod pengukuhan baharu yang direka untuk meningkatkan keselamatan dan sekuriti dalam program C dan C++. Inisiatif ini bertujuan untuk menyatukan mekanisme keselamatan yang tersebar ke dalam satu ciri yang mudah digunakan yang boleh secara automatik membolehkan pelbagai langkah perlindungan seperti pemeriksaan sempadan, perlindungan tindanan, dan diagnostik yang dipertingkatkan.
Cadangan ini datang pada masa kebimbangan keselamatan dalam C dan C++ telah mencapai titik kritikal, dengan agensi kerajaan dan pemimpin industri mendesak amalan pengaturcaraan yang lebih selamat. Walaupun Clang sudah menawarkan banyak ciri keselamatan, ia kini tersebar di seluruh bendera, makro, dan tetapan yang berbeza yang didapati sukar dinavigasi oleh ramai pembangun.
Ciri-ciri Mod Pengukuhan yang Dicadangkan:
- Bendera amaran:
-Wall
,-Wextra
,-Wshadow
,-Wunused
- Pilihan sanitizer:
-fsanitize=address
,-fstack-protector-strong
- Makro keselamatan:
__FORTIFY_SOURCE
,_GLIBCXX_ASSERTIONS
- Perlindungan peringkat mesin: retpoline, LVI/LFence
- Langkah keselamatan pengecam Unicode
- Spesifikasi standard bahasa yang wajib
Komuniti Membahaskan Pertukaran Prestasi vs. Keselamatan
Perbincangan telah mencetuskan minat yang ketara mengenai implikasi prestasi langkah-langkah pengukuhan tersebut. Perkembangan terkini dalam pemeriksaan sempadan menunjukkan keputusan yang menjanjikan, dengan beberapa pelaksanaan mencapai overhed serendah 0.3% untuk pemeriksaan sempadan perpustakaan standard. Ini mewakili peningkatan besar daripada andaian awal bahawa perlindungan sedemikian akan terlalu mahal untuk kegunaan pengeluaran.
Walau bagaimanapun, komuniti kekal terbahagi mengenai pendekatan pelaksanaan. Sesetengah pembangun menunjuk kepada penyelesaian sedia ada seperti Valgrind untuk pengesanan ralat memori, walaupun alat-alat ini datang dengan penalti prestasi yang besar - selalunya meningkatkan masa jalan sebanyak 10 hingga 30 kali ganda. Mod pengukuhan yang dicadangkan bertujuan untuk menyediakan jalan tengah dengan perlindungan bermakna pada kos prestasi yang boleh diterima.
Penanda Aras Prestasi:
- Overhed pemeriksaan sempadan: Serendah 0.3% untuk operasi perpustakaan standard
- Pemeriksaan memori Valgrind : Peningkatan masa larian 10-30x
- Pemeriksaan sempadan mod nyahpepijat: Sudah tersedia dalam MSVC dan Clang dengan Microsoft STL
Perubahan yang Merosak Mencetuskan Kontroversi
Mungkin aspek yang paling kontroversi dalam cadangan ini adalah pendirian pasukan mengenai keserasian ke belakang. RFC secara eksplisit menyatakan bahawa kod yang rosak antara keluaran pengkompil akan menjadi ciri, bukan pepijat dalam mod pengukuhan. Pendekatan ini telah menjana perdebatan hangat dalam komuniti.
Kod sedia ada yang berfungsi adalah kod sedia ada yang berfungsi, saya tidak peduli jika ia kelihatan mencurigakan kepada ciri pengkompil rawak lelaki rawak.
Sentimen ini mencerminkan kebimbangan yang lebih luas mengenai penekanan tradisional komuniti C++ terhadap keserasian ke belakang. Ramai penyelenggara pakej dan pengguna perusahaan bimbang tentang implikasi praktikal pendekatan sedemikian, bimbang ia boleh mewujudkan beban penyelenggaraan dan memaksa organisasi untuk mengekalkan beberapa versi pengkompil.
Pilihan Pelaksanaan Dalam Pertimbangan
Pasukan Clang telah menggariskan beberapa pendekatan berpotensi untuk melaksanakan mod pengukuhan. Ini terdiri daripada fail konfigurasi yang boleh dihantar dengan pengkompil, kepada mod pemandu baharu, bendera ortogonal untuk aspek keselamatan yang berbeza, atau bendera komprehensif tunggal. Setiap pendekatan mempersembahkan pertukaran yang berbeza dari segi kebolehgunaan, fleksibiliti, dan integrasi dengan sistem binaan sedia ada.
Cadangan ini juga menangani keserasian dengan mod -fhardened
sedia ada GCC sambil menekankan bahawa pelaksanaan Clang mungkin berbeza dalam tingkah laku tertentu. Pendekatan pragmatik ini mengakui bahawa keserasian sempurna antara pengkompil selalunya tidak praktikal sambil masih bekerja ke arah matlamat keselamatan bersama.
Pendekatan Pelaksanaan Yang Sedang Dipertimbangkan:
- Fail Konfigurasi: Hantar konfigurasi pengukuhan dengan Clang , diaktifkan melalui
-config=hardened
- Mod Pemacu: Cipta pemacu kompiler "hardened" yang berasingan
- Bendera Ortogonal: Bendera berasingan untuk pilihan bahasa, diagnostik, dan sanitizer
- Bendera Tunggal: Bendera bersepadu (contohnya,
-fhardened
) yang mengawal semua aspek pengukuhan
Ciri Keselamatan Melangkaui Pemeriksaan Sempadan
Mod pengukuhan akan merangkumi lebih daripada sekadar keselamatan memori. Cadangan ini termasuk peruntukan untuk menangani kerentanan pengecam Unicode yang membolehkan serangan homoglyph, di mana aksara yang serupa secara visual boleh digunakan untuk mencipta kod yang mengelirukan. Serangan sedemikian mengeksploitasi aksara Unicode yang kelihatan sama dengan huruf ASCII tetapi mempunyai makna yang berbeza kepada pengkompil.
Selain itu, mod ini boleh membolehkan pelbagai bendera amaran, sanitizer, mekanisme perlindungan tindanan, dan makro yang berfokus keselamatan seperti __FORTIFY_SOURCE
dan _GLIBCXX_ASSERTIONS
. Pendekatan komprehensif ini bertujuan untuk mencipta persekitaran pembangunan yang mengutamakan keselamatan tanpa memerlukan pembangun untuk mengkonfigurasi secara manual berpuluh-puluh tetapan individu.
Melihat ke Hadapan
Pasukan Clang kini sedang mencari maklum balas komuniti mengenai hala tuju peringkat tinggi sebelum meneruskan dengan rancangan pelaksanaan terperinci. Kejayaan inisiatif ini boleh mempengaruhi secara ketara bagaimana pembangunan C dan C++ berkembang sebagai tindak balas kepada permintaan keselamatan yang semakin meningkat, berpotensi menetapkan piawaian baharu untuk pengukuhan program yang dibantu pengkompil di seluruh ekosistem.