Aaron Ballman, principale mantenitore del compilatore Clang e membro dei comitati di sviluppo degli standard WG21 (C++) e WG14 (C), ha iniziato una discussione sull'aggiunta di una modalità di potenziamento della sicurezza nel compilatore Clang. Questa nuova modalità consentirà di attivare un insieme di opzioni per migliorare la protezione, simile al flag "-fhardened" introdotto in GCC 14, che attiva 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".
Si osserva che attualmente sono in corso lavori per aggiungere funzionalità di potenziamento della sicurezza agli standard C e C++, ma questo processo non è rapido, dato che in Clang sono già disponibili opzioni singole con l'implementazione di meccanismi di protezione aggiuntivi. I metodi di protezione implementati portano spesso a incompatibilità con il codice esistente o a violazioni dell'ABI, rendendo impossibile attivarli per impostazione predefinita. Inoltre, queste opzioni sono disperse (flag per la compilazione, flag per la generazione di istruzioni di macchina legate ad architetture hardware, avvisi, modalità di diagnostica, macro), poco documentate e sfuggono all’attenzione di molti sviluppatori.
Un'unica impostazione unifica l'attivazione delle opzioni legate alla sicurezza e ne semplifica l'applicazione. Si stanno considerando diverse opzioni per attivare la modalità di sicurezza avanzata, ad esempio si discute della sua attivazione tramite il flag "-fhardened", un insieme di impostazioni "—config=hardened", un driver separato (clang —driver-mode) o opzioni distinte "-fhardened, -mhardened e -Whardened", legate alla compilazione, generazione di codice e output di avvisi. La modalità può coprire:
- Funzionalità del compilatore: -ftrivial-auto-var-init, -fPIE, -fcf-protection, ecc.
- Funzionalità legate alla generazione di codice per piattaforme target: -mspeculative-load-hardening, -mlvi-hardening, ecc.
- Avvisi: -Wall, -Wextra, -Werror=return-type, ecc.
- Modalità di potenziamento della sicurezza nella libreria standard delle funzioni.
- Macro: _FORTIFY_SOURCE, _GLIBCXX_ASSERTIONS, ecc.
- Requisito di scelta esplicita dello standard di linguaggio utilizzato.
- Divieto di compilare codice utilizzando standard obsoleti C89 e C++98.
- Passaggio di flag aggiuntivi al linker, ad esempio per abilitare la randomizzazione degli indirizzi.
Fonte: opennet.ru
