Aaron Ballman, hovedkompilator for Clang og deltager i udviklingsteamene for standarderne WG21 (C++) og WG14 (C), har startet en diskussion om at tilføje en sikkerhedsforstærkningsmode til Clang-kompilatoren. Den nye mode vil muliggøre aktivering af et sæt muligheder for at forbedre beskyttelsen, ligesom den tilføjede flag «-fhardened» i GCC 14, som aktiverer mulighederne «-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».
Det bemærkes, at der i øjeblikket arbejdes på at tilføje sikkerhedsforstærkningsmuligheder til C og C++ standarderne, men denne proces går ikke hurtigt, idet Clang allerede har forskellige muligheder tilgængelige med implementering af yderligere beskyttelsesmekanismer. De implementerede beskyttelsesmetoder fører ofte til uforeneligheder med eksisterende kode eller brud på ABI, hvilket forhindrer, at de kan aktiveres som standard. Desuden er sådanne muligheder uensartede (flags til kompilering, flags til maskinkodegenerering knyttet til hardwarearkitekturer, advarsler, diagnostiske tilstande, makroer), dårligt dokumenterede og falder uden for mange udvikleres opmærksomhed.
En centraliseret indstilling vil ensarte aktiveringen af sikkerhedsrelaterede muligheder og gøre deres anvendelse enklere. Der overvejes flere metoder til at aktivere den forbedrede sikkerhedsmode, for eksempel diskuteres aktivering via flaget «-fhardened», indstillingspakken «—config=hardened», en separat driver (clang —driver-mode) eller separate muligheder «-fhardened, -mhardened og -Whardened», knyttet til kompilering, kodegenerering og advarselsudskrift. Moden kan dække:
- Kompilatorens muligheder: -ftrivial-auto-var-init, -fPIE, -fcf-protection osv.
- Muligheder relateret til kodegenerering for målplatforme: -mspeculative-load-hardening, -mlvi-hardening osv.
- Advarsler: -Wall, -Wextra, -Werror=return-type osv.
- Sikkerhedsforstærkningsmetoder i standardbiblioteket af funktioner.
- Makroer: _FORTIFY_SOURCE, _GLIBCXX_ASSERTIONS osv.
- Krav om eksplicit valg af det anvendte sprogstandard.
- Afvisning af at kompilere kode ved brug af forældede standarder C89 og C++98.
- Overførsel af ekstra flags til linker, for eksempel til aktivering af adresserotation.
Kilde: opennet.ru
