RPM/hardening: различия между версиями
< RPM
Vt (обсуждение | вклад) (Новая страница: «= Включено по умолчанию в GCC = Эти опции не нужно добавлять вручную так как они включены по умолчанию. Список взят из <tt>info gcc</tt> поиском по <tt>ALT.*gcc</tt> * <tt>-Wformat=2</tt> и <tt>-Wformat-security</tt> * <tt>-Wtrampolines</tt> * <tt>-D_FORTIFY_SOURCE=2</tt> (activated when <tt>-O</tt> is set to <tt>2</tt> or higher) * <tt>-fstack-protector</tt>...») |
|||
(не показаны 22 промежуточные версии 3 участников) | |||
Строка 1: | Строка 1: | ||
= Включено по умолчанию в GCC = | = Включено по умолчанию в GCC = | ||
Эти опции не нужно добавлять вручную так как они включены по умолчанию. Список взят из < | Эти опции не нужно добавлять вручную в <code>CFLAGS</code>, так как они включены у нас в ALT по умолчанию. Список взят из <code>info gcc</code> поиском по <code>ALT.*gcc</code> | ||
* < | * <code>-Wformat=2</code> и <code>-Wformat-security</code> | ||
* < | * <code>-Wtrampolines</code> | ||
* < | * <code> -D_FORTIFY_SOURCE=2</code> (activated when <code>-O2</code> or higher from gcc 4.1.1-alt9 up to 12.2.1-alt1) | ||
* < | * <code> -D_FORTIFY_SOURCE=3</code> (activated when <code>-O1</code> or higher from gcc 12.2.1-al2) | ||
* < | * <code>-fstack-protector</code> и <code>-fstack-protector-strong</code> | ||
* <code>-fstack-clash-protection</code> | |||
Также наш GCC [[UpStream/AsNeeded|всегда]] передает линкеру: <code>-pie -z now</code> и <code>--as-needed</code>. | |||
= Что еще может быть в CFLAGS = | |||
* <code>-fanalyzer</code>, но остерегайтесь ложных срабатываний, а так же эта опция потребляет много памяти. | |||
* Старайтесь не собирать с <code>-O0</code>, так как это отключает многие проверки. | |||
* Для устранения verify-elf варнинга при сборке библиотек:<pre>verify-elf: ERROR: ./usr/lib64/..: found executable STACK entry: GNU_STACK ... RWE 0x10</pre> (он возникает, например, если в asm файлах нет соответствующего заголовка) может быть полезно добавить <code>-Wa,--noexecstack</code> или <code>-Wl,-z,noexecstack</code> (выбор в зависимости от обстоятельств). | |||
* В GCC-12 появилось <code>-D_FORTIFY_SOURCE=3</code> (конфликтует с <code>-Werror</code> и может замедлять код <ref>[https://developers.redhat.com/blog/2021/04/16/broadening-compiler-checks-for-buffer-overflows-in-%20fortify%20source Broadening compiler checks for buffer overflows in _FORTIFY_SOURCE]</ref>). | |||
= CFLAGS для тестирования пакета = | |||
Нельзя добавлять в итоговый пакет, но полезно использовать для (периодического) тестирования. | |||
* <code>-fsanitize=address</code>. (NB: Медленно работает leak detector на aarch64 (отключается <code>ASAN_OPTIONS=detect_leaks=0</code>).) | |||
[[LTO]] может скрывать так и добавлять новые сообщения об ошибках, поэтому рекомендуется для эксперимента собрать пакет (с и) без LTO. | |||
= В будущем ожидается = | |||
Пока нет поддержки следующих hardening'ов: | |||
* Control-flow integrity (CFI) -- есть поддержка в hardware (на x86-64 и aarch64), в GCC и Clang<ref>[https://developers.redhat.com/articles/2022/06/02/use-compiler-flags-stack-protection-gcc-and-clang Use compiler flags for stack protection in GCC and Clang]</ref>, но, к сожалению, до сих пор нет поддержки в Linux kernel<ref>[https://lwn.net/Articles/900099/ Kernel support for hardware-based control-flow integrity]</ref><ref>[https://lwn.net/Articles/885220/ Shadow stacks for user space]</ref>. | |||
<hr><references /> | |||
{{Category navigation|title=RPM|category=RPM}} |
Текущая версия от 16:39, 17 июля 2024
Включено по умолчанию в 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].