W Clang planują dodać tryb wzmocnionej bezpieczeństwa

Aaron Ballman, główny kompilator Clang i członek zespołów opracowujących standardy WG21 (C++) i WG14 (C), rozpoczął dyskusję na temat dodania do kompilatora Clang trybu wzmocnienia bezpieczeństwa. Nowy tryb pozwoli na jednoczesne włączenie zestawu opcji zwiększających ochronę, podobnie do flagi „-fhardened” dodanej w GCC 14, przy której aktywowane są opcje „-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.”

Zauważono, że obecnie trwają prace nad dodaniem możliwości zwiększenia bezpieczeństwa do standardów C i C++, ale proces ten nie jest szybki, mimo że w Clang już dostępne są poszczególne opcje z dodatkowymi mechanizmami ochrony. Wdrażane metody ochrony często prowadzą do określonych niekompatybilności z istniejącym kodem lub naruszenia ABI, co uniemożliwia ich domyślne włączenie. Ponadto, takie opcje są rozproszone (flagi do zarządzania kompilacją, flagi generowania instrukcji maszynowych związane z architekturami sprzętowymi, ostrzeżenia, tryby diagnostyczne, makra), słabo udokumentowane i umykają wielu programistom.

Jedna konfiguracja ujednolica włączenie opcji związanych z bezpieczeństwem i upraszcza ich stosowanie. Rozważane są różne opcje aktywacji trybu wzmocnionego bezpieczeństwa, na przykład próbuje się aktywacji za pomocą flagi „-fhardened”, zestawu ustawień „—config=hardened”, osobnego sterownika (clang —driver-mode) lub oddzielnych opcji „-fhardened, -mhardened i -Whardened” związanych z kompilacją, generowaniem kodu i wyświetlaniem ostrzeżeń. Tryb może obejmować:

  • Możliwości kompilatora: -ftrivial-auto-var-init, -fPIE, -fcf-protection itd.
  • Możliwości związane z generowaniem kodu dla platform docelowych: -mspeculative-load-hardening, -mlvi-hardening itd.
  • Ostrzeżenia: -Wall, -Wextra, -Werror=return-type itd.
  • Tryby wzmacniania bezpieczeństwa w standardowej bibliotece funkcji.
  • Makra: _FORTIFY_SOURCE, _GLIBCXX_ASSERTIONS itd.
  • Wymaganie do wyraźnego wyboru używanego standardu języka.
  • Odmowa kompilacji kodu z użyciem przestarzałych standardów C89 i C++98.
  • Przekazywanie dodatkowych flag do łącznika, na przykład w celu włączenia randomizacji adresów.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster