Насколько полезен монтаж / tmp noexec?

39

Многие люди (включая Руководство по безопасности Debian ) рекомендуют монтировать /tmpс noexec,nodev,nosuidнабором опций. Обычно это представляется как один из элементов стратегии «глубокоэшелонированной защиты», поскольку предотвращает эскалацию атаки, которая позволяет кому-либо записать файл, или атаки пользователя с законной учетной записью, но без другого доступного для записи пространства.

Однако со временем я столкнулся с аргументами (наиболее заметными из которых является разработчик Debian / Ubuntu Колин Уотсон), которые noexecявляются бесполезной мерой по нескольким возможным причинам:

  1. Пользователь может запустить /lib/ld-linux.so <binary>в попытке получить тот же эффект.
  2. Пользователь по-прежнему может запускать предоставленные системой интерпретаторы сценариев, которые не могут быть запущены напрямую

Учитывая эти аргументы, потенциальная debconfмера безопасности - потенциальная потребность в дополнительной конфигурации (например, любит исполняемый временный каталог) и потенциальная потеря удобства? Какие еще дыры вы знаете о том, что позволяют обойти?

Фил Миллер
источник
1
@ neoice: я слышал, что приложения будут иногда ломаться, если / tmp не исполняется. Я еще не видел, как это произошло. Посмотрите на TuxGuitar-1.2 ... это происходит. Не запускается, если / tmp не смонтирован без опции noexec, потому что он распаковывает библиотеки туда и затем пытается их загрузить.
VMware Site Recovery Manager запускает сценарии из «/ tmp»: сбой настройки IP во время отработки отказа или аварийного переключения плана восстановления в vCenter Site Recovery Manager (2021083): kb.vmware.com/selfservice/microsites/…
1
Я знаю, что утилита сжатия, называемая snappy, удаляет файл .so в / tmp и не может работать, если она смонтирована noexec. (это используется по умолчанию в cassandra и kafka) ИМХО это причина не использовать snappy, а не причина не монтировать / tmp noexec
jorfus

Ответы:

31

Вот аргументы за полезность, которую я придумала до сих пор:

Современные ядра исправляют эту /lib/ld-linux.soдыру, так что она не сможет отображать исполняемые страницы из noexecфайловой системы.

Точка зрения переводчиков, безусловно, по-прежнему вызывает озабоченность, хотя я думаю, что меньше, чем люди могут утверждать. Я могу прийти к выводу о том, что было множество уязвимостей, связанных с повышением привилегий, которые основывались на создании определенных искаженных системных вызовов. Без злоумышленника, предоставляющего двоичный файл, было бы намного сложнее создавать злые системные вызовы. Кроме того, интерпретаторы сценариев должны быть непривилегированными (я знаю, что исторически это иногда не имело место, например, с использованием suid perl), и поэтому им нужна была бы их собственная уязвимость, чтобы быть полезной в атаке. По-видимому, можно использовать Python, по крайней мере, для запуска некоторых эксплойтов.

Многие «консервированные» эксплойты могут пытаться писать и запускать исполняемые файлы /tmp, что noexecснижает вероятность попадания в атаку по сценарию (скажем, в окне между раскрытием уязвимости и установкой патча).

Таким образом, есть все еще преимущество безопасности для монтажа /tmpс noexec.

Как описано в трекере ошибок Debian , установка APT::ExtractTemplates::TempDirв apt.confкаталог, который не noexecдоступен и недоступен для root, устранит проблему debconf.

Фил Миллер
источник
Однако, я уже слышал , что приложения будут иногда сломаться , если / TMP не является исполняемым. Я еще не видел, как это произошло.
Neoice
Как отмечено в руководстве, связанном с этим вопросом, он не справляется с предварительной настройкой пакета Debconf без настройки альтернативы.
Фил Миллер
2
Да, noexec - это очень хороший дополнительный уровень безопасности, и я не видел, чтобы из-за этого происходило разрушение. Установка пакета - единственное, и даже это можно обойти, как сказано в ответах здесь. В качестве моего решения у меня есть такой псевдоним: alias update = "mount -o exec, remount / tmp && apt-get update && apt-get upgrade && mount -o noexec, remount / tmp"
Janne Pikkarainen
1
Я предполагаю, что это необычно, но пакеты, которые написаны для выполнения чего-либо из / tmp вне контекста установки пакета, существуют (например, текущая версия промежуточного программного обеспечения для использования бельгийских электронных идентификационных карт).
equaeghe
equaeghe: Что это за пакет? Вероятно, следует сообщить об ошибке. Готов поспорить, что в его использовании тоже есть уязвимость в безопасности.
Фил Миллер
7

Многие пакеты Debian требуют, чтобы / tmp был исполняемым для установки пакета. Они часто помечаются как ошибки (с серьезностью 'normal' / 'wishlist'):

https://www.google.com/#q=site:bugs.debian.org+noexec+/tmp

Я только что получил эту ошибку при установке обновленного ядра в стабильную ветку только сегодня.

Похоже, что Debian (& производные?) Не готов к монтированию / tmp noexec ...

thomasrutter
источник
6

добавьте следующее в /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";};
karmawhore
источник
6
Я заменил mountна /bin/mountв случае изменения PATH. Ты никогда не узнаешь.
Лекенштейн
4

Несмотря на то, что существуют обходные пути для большинства дополнительных мер безопасности, которые вы можете выбрать, даже самые легко обходимые меры безопасности (такие как монтирование / tmp noexec или запуск SSH на альтернативном порту) будут препятствовать автоматическим или скриптовым атакам, которые полагаются на значения по умолчанию в порядке функционировать. Это не защитит вас от решительного и знающего злоумышленника, но в более чем 99% случаев вы не будете против решительного или знающего злоумышленника. Вместо этого вы будете защищаться от сценария автоматической атаки.

tylerl
источник
2

Во-первых: он охватывает множество различных случаев атаки. Отключить его, потому что было несколько известных способов обхода (некоторые из которых даже исправлены), странно. Злоумышленники загружают код в / dev / shm или / tmp - обычное дело.

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

  • Это также может быть остановлено пользовательскими ограничениями iptables.
  • Это также может быть остановлено SELinux.
  • Это может также не быть остановлено из-за легкодоступного другого эксплойта.

Суть в том, чтобы сделать это как можно сложнее , и исключить 99% атак.

Во-вторых, это останавливает плохую практику (запуск вещей из temp, установка основных приложений через / tmp вместо пользовательского tmpdir), оставляя данные в / tmp. Пользовательские установщики обычно также понимают TMPDIR : даже если нет: время установки, как действие на определенный момент времени, не является веской причиной для окончательного отключения проблемы безопасности .

Третье: рассматривая анонимные пространства имен в / tmp («особенность»), вы действительно хотите ограничить то, что помещается туда и запускается оттуда.

В-четвертых: удобство не является важным фактором в этом. Предполагая, что мы запускаем серверы за деньги и с определенной целью: мы несем ответственность за это. «О, я не заблокировал / tmp, потому что тогда мне нужно еще несколько минут, чтобы обновить программное обеспечение в следующем году». Конечно, это не будет только одна вещь, которая стоит между шантажом и просто в порядке. Отличная причина? Я так не думаю.

Как насчет этого:

«Мы узнали, что враги могут атаковать без предупреждения. Они также могут использовать сотни шпионов, чтобы отравить еду. Поэтому мы прекратили раздавать оружие нашим солдатам».

Чего ждать?

Существуют и другие меры, которые требуют гораздо больше усилий, опыта и удачи для обеспечения безопасности системы, а также знание того, что люди имеют ограниченные деньги, продолжительность жизни, а также хотели бы проводить время со своими семьями: не пропустите простые вещи.

Флориан Хейгл
источник
1

Есть приложения, которые требуют, чтобы / tmp был исполняемым для установки. На предыдущей работе до того, как я туда попал, администраторы установили / tmp noexec, но я обнаружил, что пакет db2 не будет установлен. Даже если вы распакуете пакет db2 где-то еще, процедура установки скопирует некоторые файлы в / tmp и ожидает, что сможет выполнить его, что, конечно, не удалось с запрещенным разрешением. Если вы не знаете, что файловая система смонтирована noexec, это может немного ввести в заблуждение. Он смог продолжить установку только после того, как я перемонтировал / tmp без noexec.

В любом случае, дело в том, что по крайней мере один коммерческий продукт требует, чтобы / tmp не монтировался noexec, а могут быть и другие. Я не нашел действительно веской причины для этого. Если вам нужна лучшая безопасность, я бы выбрал selinux.

ЛСД
источник
Анализ эксплойта для уязвимости Samba, который будет остановлен с помощью noexec / tmp: bobao.360.cn/learning/detail/4168.html (рекомендуется Google переводчик Chrome. Он сломает первоначальный эксплойт, а также большая часть полезной нагрузки ...) (Вы можете сломать многие обычные автоматические эксплойты таким образом ....). mount -o remount,exec /tmpработает, когда вам нужно что-то установить ... (Да, обойти это тривиально, но многие злоумышленники, похоже, не беспокоятся ...)
Герт ван ден Берг