15.14. Реализация защищенной среды с MAC

Нижеследующая демонстрация реализует защищенную среду с использованием различных MAC модулей с соответственно настроенными политиками. Используйте этот пример только для тестирования, он не предназначен для удовлетворения всех требований к защите. Реализация этих политик без понимания принципа их работы неприменима в реальных задачах.

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

15.14.1. Создание insecure класса пользователя

Начните процедуру добавлением следующего класса пользователя к файлу /etc/login.conf:

insecure:
:copyright=/etc/COPYRIGHT:
:welcome=/etc/motd:
:setenv=MAIL=/var/mail/$,BLOCKSIZE=K:
:path=~/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
:manpath=/usr/share/man /usr/local/man:
:nologin=/usr/sbin/nologin:
:cputime=1h30m:
:datasize=8M:
:vmemoryuse=100M:
:stacksize=2M:
:memorylocked=4M:
:memoryuse=8M:
:filesize=8M:
:coredumpsize=8M:
:openfiles=24:
:maxproc=32:
:priority=0:
:requirehome:
:passwordtime=91d:
:umask=022:
:ignoretime@:
:label=partition/13,mls/5:

и добавлением следующей строки к default классу пользователя:

:label=mls/equal,biba/equal,partition/equal:

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

# cap_mkdb /etc/login.conf

15.14.2. Загрузка с необходимыми модулями

Добавьте к /boot/loader.conf следующие строки, чтобы необходимые модули были загружены при старте системы:

mac_biba_load="YES"
mac_mls_load="YES"
mac_seeotheruids_load="YES"
mac_partition_load="YES"

15.14.3. Установка всех пользователей в insecure

Всем учетным записям, кроме root или системных пользователей теперь потребуется присвоить класс (login class). При отсутствии класса пользователи не смогут получить доступа к обычным командам, таким как vi(1). Следующий скрипт sh сделает все необходимое:

# for x in `awk -F: '($3 >= 1001) && ($3 != 65534) { print $1 }' 
 /etc/passwd`; do pw usermod $x -L insecure; done;

После этого изменения необходимо запустить команду cap_mkdb на файле /etc/master.passwd.

15.14.4. Завершение настройки

Должен быть создан файл контекста; следующий пример взят из примера политики от Robert Watson, он может быть помещен в /etc/policy.contexts:

# This is the default BIBA/MLS policy for this system.

.*        biba/high,mls/high
/sbin/dhclient     biba/high(low),mls/high(low)
/dev(/.*)?      biba/equal,mls/equal
# This is not an exhaustive list of all "privileged" devices.
/dev/mdctl      biba/high,mls/high
/dev/pci      biba/high,mls/high
/dev/k?mem      biba/high,mls/high
/dev/io       biba/high,mls/high
/dev/agp.*      biba/high,mls/high
(/var)?/tmp(/.*)?    biba/equal,mls/equal
/tmp/.X11-unix     biba/high(equal),mls/high(equal)
/tmp/.X11-unix/.*    biba/equal,mls/equal
/proc(/.*)?      biba/equal,mls/equal
/mnt.*       biba/low,mls/low
(/usr)?/home     biba/high(low),mls/high(low)
(/usr)?/home/.*     biba/low,mls/low
/var/mail(/.*)?     biba/low,mls/low
/var/spool/mqueue(/.*)?   biba/low,mls/low
(/mnt)?/cdrom(/.*)?    biba/high,mls/high
(/usr)?/home/(ftp|samba)(/.*)? biba/high,mls/high
/var/log/sendmail.st   biba/low,mls/low
/var/run/utmp     biba/equal,mls/equal
/var/log/(lastlog|wtmp)   biba/equal,mls/equal

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

Он может быть внесен в систему следующими командами:

# setfsmac -ef /etc/policy.contexts /
# setfsmac -ef /etc/policy.contexts /usr

Замечание: Раскладка вышеприведенной файловой системы может быть различной для разных систем.

Файл /etc/mac.conf требует следующих изменений в основном разделе:

default_labels file ?biba,?mls
default_labels ifnet ?biba,?mls
default_labels process ?biba,?mls,?partition
default_labels socket ?biba,?mls

15.14.5. Тестирование настройки

Добавьте пользователя с помощью команды adduser и поместите его в класс insecure для этих тестов.

В примерах ниже тестирование root и обычных пользователей будет смешиваться; форма приглашения поможет различить этих пользователей.

15.14.5.1. Основное тестирование меток

% getpmac
biba/15(15-15),mls/15(15-15),partition/15
# setpmac partition/15,mls/equal top

Замечание: Процесс top будет уничтожен перед тем, как мы запустим другой процесс top.

15.14.5.2. Тестирование MAC seeotheruids

% ps Zax
biba/15(15-15),mls/15(15-15),partition/15 1096 #C: S  0:00.03 -su (bash)
biba/15(15-15),mls/15(15-15),partition/15 1101 #C: R+  0:00.01 ps Zax

Просмотр процессов всех других пользователей должен быть запрещен.

15.14.5.3. Тестирование MAC partition

Отключите политику MAC seeotheruids для остальных тестов:

# sysctl security.mac.seeotheruids.enabled=0
% ps Zax
LABEL             PID TT STAT  TIME COMMAND
 biba/equal(low-high),mls/equal(low-high),partition/15 1122 #C: S+  0:00.02 top
 biba/15(15-15),mls/15(15-15),partition/15    1096 #C: S  0:00.05 -su (bash)
 biba/15(15-15),mls/15(15-15),partition/15    1123 #C: R+  0:00.01 ps Zax

Все пользователи должны видеть каждый процесс в своем разделе (partition).

15.14.5.4. Тестирование меток Biba и MLS

# setpmac partition/15,mls/equal,biba/high(high-high) top
% ps Zax
LABEL             PID TT STAT TIME COMMAND
 biba/high(high-high),mls/equal(low-high),partition/15 1251 #C: S+  0:00.02 top
 biba/15(15-15),mls/15(15-15),partition/15    1096 #C: S  0:00.06 -su (bash)
 biba/15(15-15),mls/15(15-15),partition/15    1157 #C: R+  0:00.00 ps Zax

Политика Biba позволяет чтение объектов с более высокими метками.

# setpmac partition/15,mls/equal,biba/low top
% ps Zax
LABEL          PID TT STAT  TIME COMMAND
 biba/15(15-15),mls/15(15-15),partition/15 1096 #C: S  0:00.07 -su (bash)
 biba/15(15-15),mls/15(15-15),partition/15 1226 #C: R+  0:00.01 ps Zax

Политика Biba не позволяет чтение объектов с более низкими метками; тем не менее, MLS разрешает это.

% ifconfig bge0 | grep maclabel
maclabel biba/low(low-low),mls/low(low-low)
% ping -c 1 192.0.34.166
PING 192.0.34.166 (192.0.34.166): 56 data bytes
ping: sendto: Permission denied

Пользователи не могут выполнить ping на example.com, или на любой домен по этой причине.

Для устранения этой ошибки, запустите следующую команду:

# sysctl security.mac.biba.trust_all_interfaces=1

Она устанавливает метку интерфейса по умолчанию в незащищенный режим, так что политика Biba по умолчанию не будет применена.

# ifconfig bge0 maclabel biba/equal(low-high),mls/equal(low-high)
% ping -c 1 192.0.34.166
PING 192.0.34.166 (192.0.34.166): 56 data bytes
64 bytes from 192.0.34.166: icmp_seq=0 ttl=50 time=204.455 ms
--- 192.0.34.166 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max/stddev = 204.455/204.455/204.455/0.000 ms

Установив более корректную метку, мы можем использовать ping.

Теперь создадим файлы для процедуры тестирования чтения и записи:

# touch test1 test2 test3 test4 test5
# getfmac test1
test1: biba/equal,mls/equal
# setfmac biba/low test1 test2; setfmac biba/high test4 test5; 
 setfmac mls/low test1 test3; setfmac mls/high test2 test4
# setfmac mls/equal,biba/equal test3 && getfmac test?
test1: biba/low,mls/low
test2: biba/low,mls/high
test3: biba/equal,mls/equal
test4: biba/high,mls/high
test5: biba/high,mls/equal
# chown testuser:testuser test?

Все эти файлы должны принадлежать пользователю testuser. Тесты на чтение:

% ls
test1 test2 test3 test4 test5
% ls test?
ls: test1: Permission denied
ls: test2: Permission denied
ls: test4: Permission denied
test3 test5

Доступ на чтение не должен быть разрешен для пар: (biba/low,mls/low), (biba/low,mls/high) и (biba/high,mls/high). Теперь несколько тестов на запись:

% for i in `echo test*`; do echo 1 > $i; done
-su: test1: Permission denied
-su: test4: Permission denied
-su: test5: Permission denied

Подобно тестам на чтение, доступ на запись должен быть запрещен для пар: (biba/low,mls/high) и (biba/equal,mls/equal).

% cat test?
cat: test1: Permission denied
cat: test2: Permission denied
1
cat: test4: Permission denied

А теперь от root:

# cat test2
1

Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите <doc@FreeBSD.org>.
По вопросам, связанным с русским переводом документации, пишите в рассылку <frdp@FreeBSD.org.ua>.
Информация по подписке на эту рассылку находится на сайте проекта перевода.

Обновлено: 12.03.2015