Уровни безопасности


Уровни безопасности — это параметры настройки ядра, которые изменяют поведение базовой системы, запрещая те или иные действия. С повышением уровня безопасности ядро будет вести себя немного иначе. Например, на низких уровнях безопасности флаги файлов, рассмотренные выше, могут быть сняты. Например, флаг «неизменяемости» можно снять, отредактировать файл, а затем снова установить флаг. На более высоких уровнях безопасности флаг файла не может быть снят. Подобные изменения имеют место в других частях системы. В целом, изменение поведения системы, вызванное повышением уровня безопасности, либо сорвет планы злоумышленника, либо остановит его. Уровень безопасности системы, вступающий в силу при начальной загрузке, можно задать с помощью параметра kern_securelevel_enable="YES" в файле rc.conf.

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

Установка уровней безопасности

Существует пять уровней безопасности: -1, 0, 1, 2 и 3, где -1 является низшим уровнем, а 3 — наивысшим. Как уже говорилось, разрешить использование уровней безопасности можно с помощью параметра kern_securelevel_enable в файле rc.conf. После этого уровень безопасности можно автоматически задавать при загрузке, указав его в переменной kernsecurelevel файла rc.conf. Когда бы вы ни увеличили уровень безопасности системы, его нельзя снизить без перезагрузки в однопользовательском режиме. Если бы снизить уровень можно было без перезагрузки, этим воспользовался бы злоумышленник!

Уровень безопасности -1

Уровень безопасности -1, устанавливаемый по умолчанию, не подразумевает применения дополнительных средств защиты, предоставляемых ядром. Если вы изучаете FreeBSD и часто изменяете конфигурацию, оставьте уровень безопасности -1 и применяйте права доступа к файлам, встроенные в систему FreeBSD, а также другие меры безопасности UNIX, достаточные в большинстве ситуаций.

Уровень безопасности 0

Уровень безопасности 0 используется только в начале загрузки системы. Он не предлагает никаких специальных функций. Когда система переходит в многопользовательский режим, уровень безопасности автоматически увеличивается до 1. Установка kern_securelevel=0 в /etc/rc.conf эквивалентна установке kern_securelevel=1. Однако это может быть полезно, если во время загрузки системы запускаются сценарии, которые не могут выполнять необходимые действия на более высоких уровнях безопасности.

Уровень безопасности 1

На уровне безопасности 1 ситуация интереснее:

  • Системные флаги файлов не могут быть сняты.
  • Нельзя загружать и выгружать модули ядра (см. главу 5).
  • Программы не могут записывать данные напрямую в системную память через устройства /dev/mem или /dev/kmem.
  • Закрыт доступ к /dev/io.
  • На монтированные диски нельзя записывать данные напрямую, а значит, нельзя форматировать разделы. (Файлы можно записывать на диск через стандартный интерфейс ядра, нельзя лишь обращаться к диску, как к физическому устройству.)

Самое наглядное следствие уровня безопасности 1 в том, что нельзя изменять флаги файловой системы, специфичные для BSD. Если файл помечен системным флагом «неизменяемый», то заменить его не удастся.

Уровень безопасности 2

Уровень безопасности 2 предоставляет все преимущества уровня безопасности 1 с двумя добавлениями:

  • Нельзя записывать данные напрямую в монтированные и немонтированные файловые системы.
  • Системное время за раз можно изменить не более чем на 1 секунду.

Начинающий системный администратор может посчитать эти особенности несущественными, однако это важные приемы обеспечения безопасности. Хотя UNIX предоставляет удобные инструменты, например текстовые редакторы для записи данных в файл, без них можно обойтись. Точно так же можно обойтись и без файловой системы и получить прямой доступ к нулям и единицам, которые записаны на диске. В таком случае можно изменить любой файл вне зависимости от прав доступа. На практике такая возможность применяется лишь при установке нового жесткого диска. Обычно напрямую записывать данные на диск может только пользователь root. При уровне безопасности 2 это не позволяется даже ему.

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

Уровень безопасности 3

Уровень безопасности 3 называют сетевым режимом безопасности. Он проявляет себя точно так же, как уровень безопасности 2, но не допускает изменений правил пакетного фильтра. Правила брандмауэра невозможно изменить на этом уровне безопасности. Если в системе включена фильтрация пакетов или управление полосой пропускания, а их правила хорошо настроены и вряд ли будут изменяться, то можно установить уровень безопасности 3.

Какой уровень безопасности выбрать?

Уровень безопасности, необходимый для той или иной операционной среды, зависит от ситуации. Например, если машина FreeBSD только что введена в эксплуатацию и ее требуется точно настроить, следует оставить уровень безопасности -1. По окончании настройки уровень безопасности можно увеличить. Для большинства систем вполне подходит уровень безопасности 2.

Если применяется одна из программ FreeBSD, предназначенных для фильтрации пакетов и организации брандмауэра, то стоит задуматься об уровне безопасности 3. Однако убедитесь в надежности правил брандмауэра, прежде чем выбрать уровень 3! Уровень безопасности 3 не позволит изменять конфигурацию брандмауэра без разрыва соединения с Интернетом. Вы должны быть уверены на все 100%, что ни один из ваших клиентов не скажет: «Я доплатил, удвойте мою полосу пропускания».

Когда уровни безопасности и флаги файлов не помогают?

Рассмотрим случай, когда взломщик находит «дыру» в сценарии CGI на веб-сервере Apache, получает через него доступ к командному интерпретатору (shell), а затем с его помощью получает права root.

Если уровень безопасности выбран правильно, планы взломщика, вероятно, сорвутся, так как он не сможет заменить ядро системы на свое, специально скомпилированное ядро. Тем не менее он сможет заменить множество системных исполняемых файлов на «троянских коней» с тем, чтобы при следующем входе в систему ваш пароль был отправлен на анонимный почтовый ящик с веб-интерфейсом или в сетевую телеконференцию.

Итак, для защиты своих ключевых файлов вы запускаете chflags schg -R /bin/*, chflags schg -R /usr/lib и т. д. Отлично. Если вы забыли про один файл, скажем, какой-нибудь непонятный /etc/rc.bsdextended, то хакер сможет отредактировать его, добавив chflags -R noschg /.Позднее он может перезагрузить систему — ночью, когда вы этого не заметите. Как часто вы садитесь и основательно проверяете файлы /etc/rc?

Вы думаете, что все файлы полностью защищены и система в безопасности. А что у вас в каталоге /usr/local/etc/rc.d, где находятся локальные программы, запускаемые при начальной загрузке? В процессе загрузки система будет выполнять все файлы с расширением .sh, найденные в этом каталоге. Значит, гипотетический хакер может причинить немало вреда, разместив здесь простенький сценарий командного интерпретатора. В конце концов, /etc/rc увеличивает уровень безопасности в последнюю очередь, когда все программы уже запущены. А что если хакер создаст сценарий, который убьет запущенный /etc/rc перед тем, как он увеличит уровень безопасности, а затем запустит свой собственный /var/.hidden/rc.rootkit, чтобы завершить подключение к сети?

Конечно, это только один путь, есть и другие, количество которых ограничивается только способностями взломщика. Важно помнить, что организация защиты системы — это нелегкая задача, для которой не существует простого решения. Как только взломщик получил доступ к командной строке, начинается схватка. И, если он имеет достаточно хорошую подготовку, о его появлении вы узнаете слишком поздно. Следуйте надежным рекомендациям по обеспечению безопасности и постоянно обновляйте систему, это самое первое средство предотвратить вторжения. Не позволяйте себе облениться, положившись на уровни безопасности!

Жизнь с уровнями безопасности

Если вы использовали флаг schg направо и налево, вы скоро обнаружите, что установка обновлений или «заплат» стала неудобной. На самом деле, те условия, которые усложняют жизнь хакерам, могут сделать и вашу жизнь невыносимой, если не знать обходных путей. Итак, каковы же обходные пути?

Если файл /etc/rc.conf защищен флагом schg, то для редактирования системных файлов сначала надо понизить уровень безопасности. Конечно, параметр, задающий уровень безопасности, находится в /etc/rc.conf, поэтому для редактирования этого файла необходимо получить контроль над системой до запуска /etc/rc. Для этого загрузите систему в однопользовательском режиме (как рассказывалось в главе 3), смонтируйте требуемые файловые системы, запустите chflags noschg на задействованных файлах и продолжите загрузку. Можно даже полностью отключить уровни безопасности в /etc/rc.conf и потом спокойно работать. В этом случае процесс обновлений пойдет быстрее, но защита с помощью флагов файлов будет потеряна.

После внесения необходимых изменений уровень безопасности можно увеличить (но не уменьшить), не прибегая к перезагрузке. Для этого достаточно изменить параметр sysctl kern.securelevel, установив желаемый уровень безопасности.

# sysctl kern.securelevel=3

Теперь, когда вы можете управлять изменениями файлов, рассмотрим управление доступом к системе из сети.

Комментарии запрещены.