Aaron Ballman, de hoofdcompiler van Clang en lid van de ontwikkelteams voor de standaarden WG21 (C++) en WG14 (C), is begonnen met het bespreken van het toevoegen van een beveiligingsmodus aan de Clang-compiler. Deze nieuwe modus stelt gebruikers in staat om in ƩƩn keer een set opties voor verbeterde beveiliging te activeren, vergelijkbaar met de '-fhardened' vlag die in GCC 14 is toegevoegd, waarbij opties zoals '-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' worden ingeschakeld.
Het wordt opgemerkt dat er momenteel wordt gewerkt aan het toevoegen van beveiligingsfuncties aan de C- en C++-standaarden, maar dit proces gaat niet snel, terwijl in Clang al afzonderlijke opties beschikbaar zijn met de implementatie van extra beveiligingsmechanismen. De geĆÆmplementeerde beveiligingsmethoden leiden vaak tot incompatibiliteit met bestaande code of schending van de ABI, waardoor ze niet standaard kunnen worden ingeschakeld. Bovendien zijn dergelijke opties verspreid (compilatieflags, machine-instructie-generatieflags gekoppeld aan hardwarearchitecturen, waarschuwingen, diagnostische modi, macro's), slecht gedocumenteerd en vallen ze buiten het zicht van veel ontwikkelaars.
Een enkele instelling uniformiseert het inschakelen van veiligheid gerelateerde opties en vereenvoudigt hun toepassing. Er worden verschillende opties besproken voor het inschakelen van de verbeterde beveiligingsmodus, zoals het inschakelen via de '-fhardened' vlag, een instellingenset '-config=hardened', een aparte driver (clang --driver-mode) of afzonderlijke opties '-fhardened, -mhardened en -Whardened', gekoppeld aan compilatie, codegeneratie en waarschuwingoutput. De modus kan omvatten:
- Compilerfuncties: -ftrivial-auto-var-init, -fPIE, -fcf-protection, enz.
- Functies gekoppeld aan codegeneratie voor doelplatforms: -mspeculative-load-hardening, -mlvi-hardening, enz.
- Waarschuwingen: -Wall, -Wextra, -Werror=return-type, enz.
- Veiligheidsmodi in de standaard functie bibliotheek.
- Macro's: _FORTIFY_SOURCE, _GLIBCXX_ASSERTIONS, enz.
- Vereiste expliciete keuze voor de gebruikte programmeertaalstandaard.
- Weigering om code te compileren die gebruik maakt van verouderde standaarden C89 en C++98.
- Doorgeven van extra linkerflags, bijvoorbeeld voor het inschakelen van adresrandomisatie.
Bron: opennet.ru
