#linux #security #apparmor
#linux #Безопасность #apparmor
Вопрос:
В документации AppArmor упоминается предоставление приложениям возможности выполнять другие программы с очисткой среды или без нее. По-видимому, очищенная среда более безопасна, но в документации, похоже, не указано, как именно происходит очистка среды.
Что такое очистка среды и что AppArmor делает для очистки среды?
Ответ №1:
«Очистка среды» — это удаление различных «опасных» переменных среды, которые могут использоваться для влияния на поведение двоичного файла — например, LD_PRELOAD
может использоваться для того, чтобы заставить динамический компоновщик извлекать код, который может вносить по существу произвольные изменения в выполнение программы; некоторые переменные могут быть настроены для вывода трассировки в файлы с хорошо известными именами; и т.д.
Эта очистка обычно выполняется для двоичных файлов setuid / setgid в качестве меры безопасности, но ядро предоставляет перехват, позволяющий модулям безопасности включать его и для произвольных других двоичных файлов.
Загрузочный код ELF ядра использует этот хук для установки AT_SECURE
записи во «вспомогательном векторе» информации, которая передается в двоичный файл. (Смотрите здесь и здесь реализацию этого хука в коде AppArmor.)
Когда выполнение начинается в пользовательском пространстве, динамический компоновщик получает это значение и использует его для установки __libc_enable_secure
флага; вы увидите, что та же процедура также содержит код, который устанавливает этот флаг для двоичных файлов setuid / setgid. (В другом месте есть эквивалентный код для двоичных файлов, которые статически связаны.)
__libc_enable_secure
влияет на ряд мест в основной части кода динамического компоновщика и приводит к удалению списка конкретных переменных среды.