Aaron Ballman, Clangi peamine hooldaja ja standardite arendusmeeskondade WG21 (C++) ja WG14 (C) liige, alustas arutelu Clangi kompilaatori tugevdatud turvarežiimi lisamise üle. Uus režiim võimaldab korraga aktiveerida komplekti valikuid, et tugevdada kaitset, sarnaselt GCC 14-sse lisatud lipule „-fhardened“, mis aktiveerib valikud „-D_FORTIFY_SOURCE=3 -D_GLIBCXX_ASSERTIONS -ftrivial-auto-var-init=zero -fPIE -pie -Wl,-z,relro,-z,now -fstack-protector-strong -fstack-clash-protection -fcf-protection=full“.
Praegu on töös C ja C++ standardite täiendavate turvalahenduste rakendamine, kuid see protsess ei ole kiire. Samas on C-s juba olemas eraldi valikud, mis sisaldavad täiendavaid kaitsemehhanisme. Rakendatavad kaitsemeetodid põhjustavad sageli erinevaid ühilduvuse probleeme olemasoleva koodiga või ABI rikkumisi, mis takistab nende vaikimisi aktiveerimist. Lisaks on sellised võimalused killustatud (kompilaatoriflagid, masina käskude genereerimise flagid, mis on seotud riistvaraarhitektuuridega, hoiatusteated, diagnostikarežiimid, makrod), halvasti dokumenteeritud ja jäävad paljude arendajate silmist.
Ühtne seadistus ühendab turvavalikute aktiveerimise ja lihtsustab nende rakendamist. Arvestatakse mitmeid tugevdustaseme aktiveerimise variante, näiteks käsitletakse aktiveerimist lipu „-fhardened” kaudu, seadistuste komplekti „—config=hardened”, eraldi draiverit (clang —driver-mode) või eraldi valikuid „-fhardened, -mhardened ja -Whardened”, mis on seotud kompileerimise, koodi genereerimise ja hoiatuste väljastamisega. Režiim võib katab:
- Kompilaatori võimalused: -ftrivial-auto-var-init, -fPIE, -fcf-protection jne.
- Võimalused, mis on seotud koodi genereerimisega sihtplatvormide jaoks: -mspeculative-load-hardening, -mlvi-hardening jne.
- Hoidised: -Wall, -Wextra, -Werror=return-type jne.
- Turvataseme tugevdamise režiimid standardfunktsioonide teegis.
- Maksud: _FORTIFY_SOURCE, _GLIBCXX_ASSERTIONS jne.
- Nõue, et kasutada tuleb selgesõnaliselt valitud keele standardit.
- Koodi kompileerimise keeld vananenud standardite C89 ja C++98 kasutamisel.
- Täiendavate lippude edastamine linkerile, näiteks aadresside randomiseerimise aktiveerimiseks.
Allikas: opennet.ru
