Полезные флаги GCC для улучшения безопасности ваших программ? - PullRequest
13 голосов
/ 22 февраля 2012

По чистой случайности я наткнулся на статью, в которой говорится, что вы можете «включить» ASLR с помощью -pie -fPIE (или, скорее, сделать ваше приложение поддерживающим ASLR). -fstack-protector также обычно рекомендуется (хотя я редко вижу объяснения, как и от каких видов атак он защищает).

Есть ли список полезных опций и объяснений, как они повышают безопасность?

...

И насколько полезны такие меры в любом случае, когда ваше приложение использует около 30 библиотек, которые не используют ни одну из них? ;)

Ответы [ 3 ]

6 голосов
/ 22 февраля 2012

Hardened Gentoo использует эти флаги:

CFLAGS="-fPIE -fstack-protector-all -D_FORTIFY_SOURCE=2" 
LDFLAGS="-Wl,-z,now -Wl,-z,relro"

Я увидел снижение производительности примерно на 5-10% по сравнению с оптимизированным Gentoo linux (включая PaX / SElinux и другие меры, не только CFLAGS) в phoronix по умолчаниютестовый пакет.

5 голосов
/ 22 февраля 2012

Страница Hardening в вики Debian объясняет, по крайней мере, большинство общих, которые можно использовать в Linux.Отсутствует в вашем списке как минимум -D_FORTIFY_SOURCE = 2, -Wformat, -Wformat-security, а для динамического загрузчика - relro и теперь он доступен.

4 голосов
/ 22 февраля 2012

Что касается вашего последнего вопроса:

И насколько полезны такие меры в любом случае, когда ваше приложение использует около 30 библиотек, которые не используют ни одну из них? ;)

PIE необходим только для загрузки основной программы по произвольному адресу. ASLR всегда работает для разделяемых библиотек, поэтому преимущество PIE одинаково, независимо от того, используете ли вы одну разделяемую библиотеку или 100.

Защитник стека будет полезен только к коду, скомпилированному с защитником стека, поэтому его использование только в основной программе не поможет, если в ваших библиотеках полно уязвимостей.

В любом случае, я бы посоветовал вам не рассматривать эти опции как часть вашего приложения, а вместо этого - интеграцию всей системы. Если вы используете более 30 библиотек (вероятно, большинство из которых являются ненужными, когда речь идет о качестве и безопасности кода) в программе, которая взаимодействует с ненадежными, потенциально вредоносными данными, было бы хорошей идеей построить всю вашу систему с защитой стека и другими вариантами усиления безопасности.

Имейте в виду, однако, что самые высокие уровни _FORTIFY_SOURCE и, возможно, некоторые другие новые параметры безопасности нарушают действительные вещи, которые могут потребоваться легитимным, корректным программам, и, таким образом, вам может потребоваться проанализировать, безопасно ли использовать их. Одна известная и опасная вещь, которую делает один из параметров (я забыл, какой), - это то, что спецификатор %n для printf не работает, по крайней мере, в некоторых случаях. Если приложение использует %n для получения смещения в сгенерированной строке и должно использовать это смещение для последующей записи в него, а значение не заполнено, это потенциальная уязвимость сама по себе ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...