Bsdadmin.ru

Записки администратора FreeBSD

Путь на сайте

Домашняя FreeBSD Укрепление FreeBSD с помощью уровней безопасности

Укрепление FreeBSD с помощью уровней безопасности

Уровни безопасности — это один из тех инструментов, что может быть использован для поддержания состояния системы на должной  отметке.
Назначение функции уровня безопасности заключается в ограничении возможностей ядра, в зависимости от выбираемого уровня. По умолчанию, полная функциональность во все BSD-ядра включена,включая возможность производить изменения на этапе старта системы. Изменения проводятся в соответствии с настройками в файле rc.conf. Уровень безопасности может быть повышен в работающей системе, но понизить получится только из однопользовательского режима, либо перезагрузившись. Во FreeBSD, очевидно, опция REGRESSION вкомпилирована в ядро, так, чтобы можно было задействовать значение sysctl для понижения уровня безопасности.
Настройки этого уровня совпадают практически для всего семейства BSD.
 В Листинге 1 приведены начальные значения для каждой операционной системы: FreeBSD 8.2, OpenBSD 5.0, NetBSD 5.1, DragonFlyBSD 2.10.
Самой отличительной системой является Open-BSD, в которой уровень безопасности по умолчанию равен 1. Другие же три системы находятся по умолчанию в незащищенном режиме. В OpenBSD и NetBSD применяются одинаковые настройки, также  как и в паре FreeBSD / DragonFlyBSD. На уровне со значением -1, все устройства/файлы/память можно читать и писать в них. Как указывается в man-справке, эти настройки во FreeBSD, NetBSD и DragonFlyBSD должны быть изменены на нужные. Файловые свойства могут быть усилены с помощью утилиты chflags, как проиллюстрировано в Листинге 2.
 
Листинг 1. Следующие значения используются при старте каждой системы.
FreeBSD 8.2
kern.securelevel: -1
OpenBSD 5.0
kern.securelevel=1
NetBSD 5.1
kern.securelevel = -1
DragonFlyBSD 2.10
kern.securelevel: -1
 
Листинг 2. 
Следующие команды применяются в семействе систем BSD для выставления флагов sappnd и schg (соответственно, «system append-only» и «system immutable»). Обратите внимание, как на этом фоне выделяется OpenBSD — она не позволяет изменить эти флаги, т.к. по умолчанию находится на первом безопасном уровне.
 Выставляем флаги schg и sappnd в системах FreeBSD, NetBSD и DragonFlyBSD:
 
f reebsd# ls
test.conf
freebsd# chflags schg test.conf
freebsd# ls -lo
total 2
-rw-r----- 1 root wheel schg 22 Nov 16 12:00 test.
conf
freebd# rm -rf test.conf
rm: test.conf: Operation not permitted
freebsd# chflags noschg test.conf
freebsd# rm -rf test.conf
freebsd# ls
freebsd#
freebsd# echo “LogEntry: Test” >> test.log
freebsd# wc -l test.log
1 test.log
freebsd# chflags sappnd test.log
freebsd# ls -lo
total 2
-rw-r--r-- 1 root wheel sappnd 15 Nov 16 12:24 test.
log
freebsd# echo “LogEntry: Test” >> test.log
freebsd# wc -l test.log
2 test.log
freebsd# rm -rf test.log
rm: test.log: Operation not permitted
freebsd# chflags nosappnd test.log
freebsd# rm -rf test.log
freebsd# ls
freebsd#
 
Уровень безопасности может быть повышен за счет обновления с помощью утилиты sysctl значения для переменной kern.securelevel.
Вывод команды chflags для систем  FreeBSD, Net-BSD и DragonFlyBSD, которые находятся на первом уровне безопасности, аналогичен ситуации с Open-BSD, т.е. когда она уже находится на стандартном для нее первом уровне. Применение флага schg для конфигурационных файлов, позволяет заблокировать их изменение, и тем самым сохранить целостность системы. Такую же операцию можно произвести и над лог-файлами. Во FreeBSD и DragonFlyBSD можно ограничить загрузку и выгрузку из памяти модулей ядра. Это повлияет на работу утилит kldload и kldunload.
Другой важной стороной является то, как реализованы уровны безопасности внутри jail-контейнеров FreeBSD. Контейнер внутри может использовать более высокое значение, даже если сам хост использует более низкое. Данная особенность позволяет хосту искусно манипулировать нужными файлами даже находящими внутри jail-контейнера. 
Отличительной особенностью в операционных системах семейства BSD является максимальный уровень безопасности. Во FreeBSD и DragonFlyBSD используется максимальное значение 3, что по функционалу равно второму уровню в OpenBSD и NetBSD. Разница заключается в разном  формате работы с сетевыми настройками, которые используются в OpenBSD и NetBSD на уровне 2, но не используются во FreeBSD/DragonFlyBSD. Для последних, этот фунционал располагается в третьем уровне.
Второй уровень безопасности препятствует переводу времени часов назад, или же увеличению более, чем на одну секунду вперед. Такая настройка,будучи применена вместе с флагом sappnd, позволяет вести лог-файлы не только в полной сохранности, но и быть абсолютно точными с тем временем,когда туда добавлялись новые записи событий. На третьем уровне безопасности (равному уровня 2 в отношении OpenBSD/NetBSD) уже правила файрвола нельзя будет изменить. Системный уровень нужно будет понизить, прежде чем внести изменения в операционную систему.
Хотя эти функции действительно очень помогают заблокировать операционную систему на модификацию, они должны быть хорошо изучены и поняты прежде, чем вы отправите систему в реальную эксплуатацию. В книге по FreeBSD в разделе, посвященном безопасности, отмечается, что системные файлы перед загрузкой должны быть защищены — тогда применение различных уровней безопасности будет эффективным. Если же атакующий способен запустить какой-либо свой код,прежде чем уровень выставлен, то защиту можно будет обойти. Помимо этого, надо читывать, что для обновления системы придется или же переходить в однопользовательский режим, либо выводить ее полностью из работы.
Как и любой другой инструмент безопасности,настройка уровня безопасности само по себе не является решением. Он просто предоставляет механизм поддерживания целостности работающей операционной системы. Существует ряд других, более гибких, вариантов ограничения доступа к файлам.
Например, контрольные листы доступа (access control lists — ACL) и мандатный контроль доступа (mandatory access controls — MAC). Задействуя все доступные инструменты в BSD-системах, можно содержать серверы в крайне защищенном состоянии,и на протяжении всего срока эксплуатации держать в том виде, в котором они были настроены в самом начале.

Домашняя FreeBSD Укрепление FreeBSD с помощью уровней безопасности