Aaron Ballman, principale responsabile del compilatore Clang e membro dei gruppi di sviluppo degli standard WG21 (C++) e WG14 (C), ha avviato la discussione sull'aggiunta di una modalità di rafforzamento della sicurezza nel compilatore Clang. Questa nuova modalità permetterà di attivare un insieme di opzioni per migliorare la protezione analogamente al flag "-fhardened" introdotto in GCC 14, che abilita le opzioni "-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".
Attualmente, si sta lavorando per aggiungere funzionalità di rafforzamento della sicurezza agli standard C e C++, ma questo processo non è veloce, considerando che in Clang sono già disponibili opzioni separate con implementazioni di meccanismi di protezione aggiuntivi. I metodi di protezione implementati spesso portano a incompatibilità con il codice esistente o violazioni dell'ABI, rendendo impossibile attivarli per impostazione predefinita. Inoltre, tali opzioni sono sparse (flags per la gestione della compilazione, flags per la generazione delle istruzioni macchina legate alle architetture hardware, avvisi, modalità di diagnostica, macro), sono poco documentate e spesso sfuggono all'attenzione di molti sviluppatori.
Un'unica configurazione unificherà l'attivazione delle opzioni legate alla sicurezza e ne semplificherà l'applicazione. Sono in discussione diverse modalità di attivazione della modalità di sicurezza avanzata, ad esempio si sta discutendo l'attivazione tramite il flag "-fhardened", un insieme di impostazioni "--config=hardened", un driver separato (clang --driver-mode) o opzioni disaccoppiate "-fhardened, -mhardened e -Whardened" legate alla compilazione, alla generazione del codice e all'output degli avvisi. La modalità può includere:
- Capacità del compilatore: -ftrivial-auto-var-init, -fPIE, -fcf-protection e altro.
- Capacità legate alla generazione del codice per piattaforme target: -mspeculative-load-hardening, -mlvi-hardening e altro.
- Avvisi: -Wall, -Wextra, -Werror=return-type e altro.
- Modalità di rafforzamento della sicurezza nella libreria standard di funzioni.
- Macro: _FORTIFY_SOURCE, _GLIBCXX_ASSERTIONS e altro.
- Requisito di esplicita selezione dello standard di lingua da utilizzare.
- Divieto di compilazione di codice che utilizza standard obsoleti C89 e C++98.
- Passaggio di flag aggiuntivi al linker, ad esempio per abilitare la randomizzazione degli indirizzi.
Fonte: opennet.ru
