Как AppArmor выполняет «очистку среды»?

#linux #security #apparmor

#linux #Безопасность #apparmor

Вопрос:

В документации AppArmor упоминается предоставление приложениям возможности выполнять другие программы с очисткой среды или без нее. По-видимому, очищенная среда более безопасна, но в документации, похоже, не указано, как именно происходит очистка среды.

Что такое очистка среды и что AppArmor делает для очистки среды?

Ответ №1:

«Очистка среды» — это удаление различных «опасных» переменных среды, которые могут использоваться для влияния на поведение двоичного файла — например, LD_PRELOAD может использоваться для того, чтобы заставить динамический компоновщик извлекать код, который может вносить по существу произвольные изменения в выполнение программы; некоторые переменные могут быть настроены для вывода трассировки в файлы с хорошо известными именами; и т.д.

Эта очистка обычно выполняется для двоичных файлов setuid / setgid в качестве меры безопасности, но ядро предоставляет перехват, позволяющий модулям безопасности включать его и для произвольных других двоичных файлов.

Загрузочный код ELF ядра использует этот хук для установки AT_SECURE записи во «вспомогательном векторе» информации, которая передается в двоичный файл. (Смотрите здесь и здесь реализацию этого хука в коде AppArmor.)

Когда выполнение начинается в пользовательском пространстве, динамический компоновщик получает это значение и использует его для установки __libc_enable_secure флага; вы увидите, что та же процедура также содержит код, который устанавливает этот флаг для двоичных файлов setuid / setgid. (В другом месте есть эквивалентный код для двоичных файлов, которые статически связаны.)

__libc_enable_secure влияет на ряд мест в основной части кода динамического компоновщика и приводит к удалению списка конкретных переменных среды.