Aaron Ballman, Clang'i põhikompilaator ja WG21 (C++) ning WG14 (C) standardite arendusgruppide liige, alustas arutelu Clang'i kompilaatori turvaseisundi tugevdamise režiimi lisamiseks. Uus režiim võimaldab korraga aktiveerida rida valikuid turvatahe tugevdamiseks, sarnaselt GCC 14-sse lisatud lippudele „-fhardened“, mille puhul aktiveeritakse valikud „-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“.
Şu anda C ve C++ standartlarına güvenliği artırma özellikleri ekleme konusunda çalışmalar yapıldığını belirtmek gerekir, ancak bu süreç hızlı değil. Clang'da, ek koruma mekanizmalarını gerçekleştiren ayrı seçenekler zaten mevcuttur. Uygulanan koruma yöntemleri genellikle mevcut kodla ayrı uyumsuzluklar veya ABI ihlalleri doğurur, bu da bunların varsayılan olarak etkinleştirilmesine izin vermez. Ayrıca, bu tür seçenekler dağınık (derleme yönetimi için bayraklar, donanım mimarilerine yönelik makine talimatları üretimi için bayraklar, uyarılar, tanılama modları, makrolar) kötü belgelenmiş ve birçok geliştiricinin gözünden kaçmaktadır.
Üksik seadistus standardiseerib seotud turvalisuse valikute aktiveerimise ning lihtsustab nende kasutamist. Arutatakse mitmeid võimalusi tugevdatud turvarežiimi aktiveerimiseks, näiteks arutatakse aktiveerimist lipu „-fhardened“ kaudu, seadistuste komplekti „—config=hardened”, eraldi draiverit (clang —driver-mode) või eraldi valikuid „-fhardened, -mhardened ja -Whardened”, mis on seotud kompileerimise, koodi genereerimise ja hoiatuste andmisega. Režiim võib hõlmata:
- Derleyici yetenekleri: -ftrivial-auto-var-init, -fPIE, -fcf-protection vb.
- Hedef platformlar için kod üretimine bağlı yetenekler: -mspeculative-load-hardening, -mlvi-hardening vb.
- Uyarılar: -Wall, -Wextra, -Werror=return-type vb.
- Standart işlev kütüphanesindeki güvenlik güçlendirme modları.
- Makrolar: _FORTIFY_SOURCE, _GLIBCXX_ASSERTIONS vb.
- Kullanılan dil standardının açıkça seçilmesi gerekliliği.
- Eski C89 ve C++98 standartlarına sahip kodu derlemeyi reddetme.
- Rastgele adresleme etkinleştirmek için bağlayıcıya ek bayraklar geçişi.
Allikas: opennet.ru
