Насколько полезен монтаж /tmp noexec?
Многие люди (включая Руководство по безопасности Debian) рекомендуют монтировать /tmp
с noexec,nodev,nosuid
множество вариантов. Обычно это представляется как один из элементов стратегии "глубокоэшелонированной защиты", поскольку предотвращает эскалацию атаки, которая позволяет кому-либо записать файл, или атаки пользователя с законной учетной записью, но без другого доступного для записи пространства.
Однако со временем я столкнулся с аргументами (наиболее заметными из которых является разработчик Debian/Ubuntu Колин Уотсон) noexec
бесполезная мера по нескольким причинам:
- Пользователь может запустить
/lib/ld-linux.so <binary>
в попытке получить тот же эффект. - Пользователь по-прежнему может запускать предоставленные системой интерпретаторы сценариев, которые не могут быть запущены напрямую
Учитывая эти аргументы, потенциальная необходимость в дополнительной конфигурации (например, debconf
любит исполняемый временный каталог), и это может привести к потере удобства? Какие еще дыры вы знаете о том, что позволяют обойти?
6 ответов
Вот аргументы за полезность, которую я придумала до сих пор:
Современные ядра исправляют /lib/ld-linux.so
дыра, так что он не сможет отобразить исполняемые страницы из noexec
файловая система.
Точка зрения переводчиков, безусловно, по-прежнему вызывает озабоченность, хотя я думаю, что меньше, чем люди могут утверждать. Я могу прийти к выводу о том, что было множество уязвимостей, связанных с повышением привилегий, которые основывались на создании определенных искаженных системных вызовов. Без злоумышленника, предоставляющего двоичный файл, было бы намного сложнее создавать злые системные вызовы. Кроме того, интерпретаторы сценариев должны быть непривилегированными (я знаю, что исторически это иногда не имело место, например, с использованием suid perl), и поэтому им нужна была бы их собственная уязвимость, чтобы быть полезной в атаке. По-видимому, можно использовать Python, по крайней мере, для запуска некоторых эксплойтов.
Многие "консервированные" эксплойты могут пытаться писать и запускать исполняемые файлы в /tmp
, так что noexec
уменьшает вероятность попадания в атаку по сценарию (скажем, в окне между раскрытием уязвимости и установкой патча).
Таким образом, есть еще преимущество безопасности для монтажа /tmp
с noexec
,
Как описано в трекере ошибок Debian, настройка APT::ExtractTemplates::TempDir
в apt.conf
в каталог, который не noexec
и доступ к root устранит проблему debconf.
Добавьте следующее в /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";};
Многие пакеты Debian требуют, чтобы / tmp был исполняемым для установки пакета. Они часто помечаются как ошибки (с серьезностью 'normal'/'wishlist'):
https://www.google.com/#q=site:bugs.debian.org+noexec+/tmp
Я только что получил эту ошибку при установке обновленного ядра в стабильную ветку только сегодня.
Похоже, что Debian (& производные?) Не готов к монтированию / tmp noexec...
Несмотря на то, что существуют обходные пути для большинства дополнительных мер безопасности, которые вы можете выбрать, даже самые легкие обходные меры безопасности (такие как монтирование /tmp noexec или запуск SSH на альтернативном порту) будут препятствовать автоматическим атакам или атакам по сценарию, которые основаны на настройках по умолчанию. функционировать. Это не защитит вас от решительного и знающего злоумышленника, но в более чем 99% случаев вы не будете против решительного или знающего злоумышленника. Вместо этого вы будете защищаться от сценария автоматической атаки.
Во-первых: он охватывает множество различных случаев атаки. Отключить его, потому что было несколько известных способов обхода (некоторые из которых даже исправлены), странно. Злоумышленники загружают код в /dev/shm или /tmp - обычное дело.
Глубокая защита - это защита наиболее распространенных путевых точек, каждая из которых останавливает их, делает вашу систему более жизнеспособной. Не безопасно. Но у него тоже будет шанс. Если они не могут получить свою дополнительную полезную нагрузку, это очень хороший шанс, который вы получаете.
- Это также может быть остановлено пользовательскими ограничениями iptables.
- Это также может быть остановлено SELinux.
- Это может также не быть остановлено из-за легкодоступного другого эксплойта.
Суть в том, чтобы сделать это как можно сложнее, и исключить 99% атак.
Второе: это прекращает плохую практику (запуск вещей из temp, установка основных приложений через /tmp вместо пользовательского tmpdir), оставляя данные в /tmp. Пользовательские установщики обычно также понимают TMPDIR: даже если нет: время установки, как действие на определенный момент времени, не является веской причиной для окончательного отключения проблемы безопасности.
Третье: рассматривая анонимные пространства имен в /tmp ("особенность"), вы действительно хотите ограничить то, что помещается туда и запускается оттуда.
В-четвертых: удобство не является важным фактором в этом. Предполагая, что мы запускаем серверы за деньги и с определенной целью: мы несем ответственность за это. "О, я не заблокировал /tmp, потому что тогда мне нужно еще несколько минут, чтобы обновить программное обеспечение в следующем году". Конечно, это не будет только одна вещь, которая стоит между шантажом и просто в порядке. Отличная причина? Я так не думаю.
Как насчет этого:
"Мы узнали, что враги могут атаковать без предупреждения. Они также могут использовать сотни шпионов, чтобы отравить еду. Поэтому мы прекратили раздавать оружие нашим солдатам".
Чего ждать?
Существуют и другие меры, которые требуют гораздо больше усилий, опыта и удачи для обеспечения безопасности системы, а также знание того, что люди имеют ограниченные деньги, продолжительность жизни, а также хотели бы проводить время со своими семьями: не пропустите простые вещи.
Есть приложения, которые требуют, чтобы /tmp был исполняемым для установки. На предыдущей работе до того, как я туда попал, администраторы установили /tmp noexec, но я обнаружил, что пакет db2 не будет установлен. Даже если вы распакуете пакет db2 где-то еще, процедура установки скопирует некоторые файлы в /tmp и ожидает, что сможет выполнить его, что, конечно, не удалось с запрещенным разрешением. Если вы не знаете, что файловая система смонтирована noexec, это может немного ввести в заблуждение. Он смог продолжить установку только после того, как я перемонтировал /tmp без noexec.
В любом случае, дело в том, что по крайней мере один коммерческий продукт требует, чтобы /tmp не монтировался noexec, а могут быть и другие. Я не нашел действительно веской причины для этого. Если вам нужна лучшая безопасность, я бы выбрал selinux.