Aaron Ballman, hlavný sprievodca kompilátora Clang a účastník tímov vyvíjajúcich štandardy WG21 (C++) a WG14 (C), začal diskusiu o pridávaní režimu zvýšenej bezpečnosti do kompilátora Clang. Nový režim umožní aktivovať sadu možností na posilnenie ochrany podobne ako flag '-fhardened' pridaný v GCC 14, pri ktorom sa aktivujú možnosti '-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'.
Upozorňuje sa, že momentálne prebieha práca na pridávaní možností na zvýšenie bezpečnosti do štandardov C a C++, ale tento proces nie je rýchly, pričom v Clang sú už dostupné samostatné možnosti s realizáciou dodatočných ochranných mechanizmov. Realizované metódy ochrany často vedú k nezlučiteľnostiam so existujúcim kódom alebo porušeniu ABI, čo neumožňuje ich aktiváciu predvolene. Okrem toho, podobné možnosti sú roztrhnuté (flagy na riadenie kompilácie, flagy generovania strojových inštrukcií viazané na hardvérové architektúry, varovania, režimy diagnostiky, makrá), zle zdokumentované a unikajú pozornosti mnohých vývojárov.
Jednotné nastavenie unifikuje zahrnutie súvisiacich bezpečnostných možností a zjednoduší ich použitie. Zvažuje sa niekoľko variantov aktivácie režimu zvýšenej bezpečnosti, napríklad sa diskutuje aktivácia cez flag '-fhardened', súbor nastavení '--config=hardened', samostatný driver (clang --driver-mode) alebo samostatné možnosti '-fhardened, -mhardened a -Whardened', viazané na kompiláciu, generovanie kódu a výstup varovaní. Režim môže zahŕňať:
- Možnosti kompilátora: -ftrivial-auto-var-init, -fPIE, -fcf-protection a podobne.
- Možnosti viazané na generovanie kódu pre cieľové platformy: -mspeculative-load-hardening, -mlvi-hardening a podobne.
- Varovania: -Wall, -Wextra, -Werror=return-type a podobne.
- Režimy zvýšenia bezpečnosti v štandardnej knižnici funkcií.
- Makrá: _FORTIFY_SOURCE, _GLIBCXX_ASSERTIONS a podobne.
- Požiadavka na explicitný výber používaného štandardu jazyka.
- Odmietnutie kompilácie kódu s použitím zastaraných štandardov C89 a C++98.
- Odovzdanie dodatočných flagov linkeru, napríklad na aktiváciu randomizácie adries.
Zdroj: opennet.ru
