Многие люди (в том числе Руководство по обеспечению безопасности Debian) рекомендую монтаж /tmp
с noexec,nodev,nosuid
набор опций. Обычно это представляется как один из элементов стратегии «глубокой защиты», предотвращая эскалацию атаки, которая позволяет кому-либо записать файл, или атаки пользователя с законной учетной записью, но без другого доступного для записи пространства.
Однако со временем я столкнулся с аргументами (в первую очередь со стороны разработчика Debian / Ubuntu Колина Ватсона), что noexec
Это бесполезная мера по паре возможных причин:
/lib/ld-linux.so <binary>
в попытке добиться того же эффекта.Учитывая эти аргументы, потенциальная потребность в дополнительной конфигурации (например, debconf
любит исполняемый временный каталог), и потенциальная потеря удобства, стоит ли это мера безопасности? Какие еще дыры, которые позволяют обходиться, вы знаете?
Вот аргументы в пользу полезности, которые я придумал:
Современные ядра исправляют /lib/ld-linux.so
дыра, так что он не сможет отображать исполняемые страницы из noexec
файловая система.
Точка зрения переводчиков, безусловно, по-прежнему вызывает беспокойство, хотя я думаю о ней меньше, чем люди могут утверждать. Обоснование, которое я могу придумать, состоит в том, что было множество уязвимостей повышения привилегий, которые основывались на выполнении определенных некорректных системных вызовов. Без злоумышленника, предоставляющего двоичный файл, было бы намного труднее делать злые системные вызовы. Кроме того, интерпретаторы сценариев должны быть непривилегированными (я знаю, что исторически иногда этого не было, например, с suid perl), и поэтому им потребуется их собственная уязвимость, чтобы быть полезными при атаке. Видимо, это возможно использовать Python, по крайней мере, для запуска некоторых эксплойтов.
Многие «консервированные» эксплойты могут пытаться писать и запускать исполняемые файлы в /tmp
, так что noexec
снижает вероятность попадания в сценарий атаки (например, в промежутке между обнаружением уязвимости и установкой патча).
Таким образом, установка /tmp
с участием noexec
.
Как описано в Трекер ошибок Debian, установка APT::ExtractTemplates::TempDir
в apt.conf
в каталог, который не noexec
и доступность для root избавит от проблем с debconf.
Многие пакеты Debian требуют, чтобы / tmp был исполняемым для установки пакета. Они часто помечаются как ошибки (степени серьезности "нормальная" / "список желаний"):
https://www.google.com/#q=site:bugs.debian.org+noexec+/tmp
Я получил именно эту ошибку при установке обновленного ядра в стабильную ветку только сегодня.
Итак, похоже, что Debian (и производные?) Не готов для монтирования / tmp noexec ...
добавьте следующее в /etc/apt.conf или /etc/apt/apt.conf.d/50remount
DPkg::Pre-Install-Pkgs {"mount -o remount,exec /tmp";};
DPkg::Post-Invoke {"mount -o remount /tmp";};
Несмотря на то, что существуют обходные пути для большинства дополнительных мер безопасности, которые вы можете выбрать для реализации, даже самые легко обходимые меры безопасности (такие как монтирование / tmp noexec или запуск SSH на альтернативном порту) будут препятствовать автоматическим атакам или атакам по сценариям, которые полагаются на значения по умолчанию в порядке функционировать. Он не защитит вас от решительного и знающего злоумышленника, но более чем в 99% случаев вы не столкнетесь с решительным или знающим злоумышленником. Вместо этого вы будете защищаться от сценария автоматической атаки.
Первый: Он охватывает множество различных случаев атак. Отключение его, потому что было несколько известных способов обойти его (некоторые из которых даже исправлены), странно. Злоумышленники загружают код в / dev / shm или / tmp - обычное дело.
Глубокая защита - это защита наиболее распространенных путевых точек, каждая из которых останавливает их, делая вашу систему более жизнеспособной. Не безопасно. Но у него также будет шанс. Если они не могут получить свою вторичную полезную нагрузку, это очень хороший шанс.
Дело в том, чтобы сделать это так же сложно, как вы без труда может и 99% атак отсечь.
Второй: Он останавливает плохую практику (запуск файлов из temp, установка основных приложений через / tmp вместо пользовательского tmpdir), оставляя данные в / tmp. Пользовательские установщики обычно понимаю TMPDIR Также: даже если нет: время установки, как действие на определенный момент времени, не является веской причиной для отключения проблемы безопасности. постоянно.
Третий: Принимая во внимание анонимные пространства имен в / tmp («функция»), вы действительно хотите ограничить то, что помещается туда и запускается оттуда.
Четвертый: Удобство здесь не играет роли. Предположим, мы запускаем серверы за деньги и с определенной целью: мы несем ответственность за все это. «О, я не заблокировал / tmp, потому что тогда мне понадобится еще несколько минут, когда я обновлю свое программное обеспечение в следующем году». Конечно, это будет не одна вещь, которая стоит между шантажом и нормальным состоянием. Хорошая причина? Я так не думаю.
Как насчет этого:
«Мы узнали, что враги могут атаковать без предупреждения. Они также могут использовать сотни шпионов, чтобы отравить еду. Поэтому мы прекратили раздавать оружие нашим солдатам».
Чего ждать?
Есть и другие меры, которые требуют гораздо больше усилий, опыта и удачи для защиты системы, а также знания людей, которые имеют ограниченные деньги, продолжительность жизни и также хотели бы проводить время со своими семьями: Не пропускайте легкие вещи.
Есть приложения, которым для установки требуется, чтобы / tmp был исполняемым. На предыдущей работе, до того, как я туда попал, администраторы настроили / tmp noexec, но я обнаружил, что пакет db2 не устанавливается. Даже если вы распакуйте пакет db2 в другом месте, процедура установки копирует некоторые файлы в / tmp и ожидает, что сможет их выполнить, что, конечно, не удалось из-за отказа в разрешении. Если вы не знаете, что файловая система смонтирована как noexec, это может ввести вас в заблуждение. Продолжить установку удалось только после того, как я перемонтировал / tmp без noexec.
В любом случае, дело в том, что по крайней мере один коммерческий продукт требует, чтобы / tmp не монтировался noexec, а могут быть и другие. Я не нашел для этого действительно веской причины. Если вам нужна лучшая безопасность, я бы выбрал selinux.