Как AppArmor выполняет «Очистку среды»? - PullRequest
8 голосов
/ 29 апреля 2011

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

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

1 Ответ

4 голосов
/ 25 мая 2011

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

Эта очистка обычно выполняется для двоичных файлов setuid / setgid в качестве меры безопасности, но ядро ​​обеспечивает ловушку, позволяющую модулям безопасности включать ее для других произвольных двоичных файлов.Код загрузчика ELF ядра использует этот хук для установки записи AT_SECURE во «вспомогательном векторе» информации, которая передается в двоичный файл.(См. здесь и здесь для реализации этой ловушки в коде AppArmor.)

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

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

...