Aaron Ballman, huvudansvarig kompilator för Clang och deltagare i standardiseringsgrupperna WG21 (C++) och WG14 (C), har inlett diskussioner om att lÀgga till en sÀkerhetsförstÀrkningslÀge i Clang-kompilatorn. Det nya lÀget gör det möjligt att aktivera en uppsÀttning alternativ för att förbÀttra skyddet, liknande det som lagts till i GCC 14 med flaggan "-fhardened", dÀr alternativen "-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" aktiveras.
Det pÄpekas att det för nÀrvarande pÄgÄr arbete med att lÀgga till sÀkerhetsförstÀrkande funktioner i standarderna C och C++, men denna process Àr inte snabb, eftersom Clang redan erbjuder enskilda alternativ med implementering av ytterligare skyddsmekanismer. De implementerade skyddsmekanismerna leder ofta till separata inkompatibiliteter med befintlig kod eller ABI-brott, vilket hindrar deras aktivering som standard. Dessutom Àr sÄdana alternativ spridda (kompilationsflaggor, signalgenereringsflaggor kopplade till hÄrdvaruarkitekturer, varningsmeddelanden, diagnostiklÀgen, makron), dÄligt dokumenterade och faller ofta ur mÄnga utvecklares synfÀlt.
En enhetlig instĂ€llning förenklar aktiveringen av relaterade sĂ€kerhetsalternativ och gör dem lĂ€ttare att tillĂ€mpa. Flera alternativ för att aktivera sĂ€kerhetsförstĂ€rkningslĂ€get övervĂ€gs, till exempel diskuteras aktivering genom flaggan "-fhardened", instĂ€llningarna "âconfig=hardened", en separat drivrutin (clang âdriver-mode) eller separata alternativ "-fhardened, -mhardened och -Whardened" kopplade till kompilering, kodgenerering och varningsutskrift. LĂ€ge kan omfatta:
- Kompilatorns funktioner: -ftrivial-auto-var-init, -fPIE, -fcf-protection etc.
- Funktioner kopplade till kodgenerering för mÄlarplattformer: -mspeculative-load-hardening, -mlvi-hardening etc.
- Varningar: -Wall, -Wextra, -Werror=return-type etc.
- SÀkerhetsförstÀrkningslÀgen i standardbiblioteket för funktioner.
- Makron: _FORTIFY_SOURCE, _GLIBCXX_ASSERTIONS etc.
- Krav pÄ tydligt val av vilket sprÄkstandard som anvÀnds.
- Avslag av att kompilera kod med förÄldrade standarder C89 och C++98.
- Ăverföring av ytterligare flaggor till lĂ€nkaren, exempelvis för att inkludera adressrandomisering.
KĂ€lla: opennet.ru
