RPM/hardening

Материал из ALT Linux Wiki
< RPM

Включено по умолчанию в GCC

Эти опции не нужно добавлять вручную в CFLAGS, так как они включены у нас в ALT по умолчанию. Список взят из info gcc поиском по ALT.*gcc

  • -Wformat=2 и -Wformat-security
  • -Wtrampolines
  • -D_FORTIFY_SOURCE=2 (activated when -O2 or higher from gcc 4.1.1-alt9 up to 12.2.1-alt1)
  • -D_FORTIFY_SOURCE=3 (activated when -O1 or higher from gcc 12.2.1-al2)
  • -fstack-protector и -fstack-protector-strong
  • -fstack-clash-protection

Также наш GCC всегда передает линкеру: -pie -z now и --as-needed.

Что еще может быть в CFLAGS

  • -fanalyzer, но остерегайтесь ложных срабатываний, а так же эта опция потребляет много памяти.
  • Старайтесь не собирать с -O0, так как это отключает многие проверки.
  • Для устранения verify-elf варнинга при сборке библиотек:
    verify-elf: ERROR: ./usr/lib64/..: found executable STACK entry: GNU_STACK ... RWE 0x10
    (он возникает, например, если в asm файлах нет соответствующего заголовка) может быть полезно добавить -Wa,--noexecstack или -Wl,-z,noexecstack (выбор в зависимости от обстоятельств).
  • В GCC-12 появилось -D_FORTIFY_SOURCE=3 (конфликтует с -Werror и может замедлять код [1]).

CFLAGS для тестирования пакета

Нельзя добавлять в итоговый пакет, но полезно использовать для (периодического) тестирования.

  • -fsanitize=address. (NB: Медленно работает leak detector на aarch64 (отключается ASAN_OPTIONS=detect_leaks=0).)

LTO может скрывать так и добавлять новые сообщения об ошибках, поэтому рекомендуется для эксперимента собрать пакет (с и) без LTO.

В будущем ожидается

Пока нет поддержки следующих hardening'ов:

  • Control-flow integrity (CFI) -- есть поддержка в hardware (на x86-64 и aarch64), в GCC и Clang[2], но, к сожалению, до сих пор нет поддержки в Linux kernel[3][4].