Защита данных ликбез.
Мотивом написания данной статьи стали вопросы о безопасности поднятые в комментариях к моим статьям. Так что же такое безопасность и с чем ее «едят»? Тут я бы хотел процитировать кузнеца из фильма «формула любви» - «Что один человек сделал, другой завсегда сломать может». Нет абсолютно безопасных систем — есть системы с повышенной безопасностью.
Что же нам предпринять что бы повысить безопасность нашей системы? Давайте по порядку:
-
Поставить брандмауэр и ограничив тем самым площадь для атаки.
-
Ограничить права пользователя для доступа к нашим таблицам на сервере баз данных см. примечание 1.
Начнем по порядку брандмауэр:
Что же такое брандмауэр?
Фаервол это некая программа которая фильтрует проходящую через нее информацию. Они работают на разных уровнях модели OSI/ISO — но мы рассмотрим только пакетный фильтр и и прокси (он же брандмауэр уровня приложений).
Какие брандмауэры бывают?
Будем выбирать из следующих вариантов:
-
Microsoft ISA server
-
Kerio firewall
-
iptables
-
PF
-
IPFW
-
IPFILTER
Microsoft ISA server и Kerio firewall будут исключены мной по следующим соображениям:
-
Это платный и не дешевый продукт.
-
По требованиям безопасности исходный код должен быть открыт. То есть данные системы не могут быть сертифицированы выше класса С2 американского или пятого класса нашего стандарта безопасности см примечание 2.
IPTABLES — прекрасный брандмауэр, но работает на линукс-системах.
Почему нет спросити вы?
Просто потому, что линукс — это только ядро, а системы на его базе это плод работы многих компаний. И тут я просто боюсь нарваться на спор какой из сборок линукс лучше. Вторая причина — некоторые сборки линукс ставят с собой кучу того, чего нам не потребуется, а отключать это все - не для новичков. Так что, красота — это когда ничего лишнего, и осмелюсь добавить сложного. Третий момент — это моя предвзятость. На клиентских машинах у меня прекрасно работает линукс, но как серверная система она мне не нравится. И это субъективно!!! Вот мои субъективные причины:
-
Свалка в /etc
-
Автоматическая разбивка диска при установке есть только некоторых дистрибутивах.
-
Многие настройки по умолчанию не безопасны.
Что оcталось?
Оставшиеся варианты работают на BSD системах. Самые известные из них — это OpenBSD (цель проекта полностью безопасная система), NetBSD (цель проекта самая переносимая система, говорят, что она будет работать даже на кофеварке, если у той будет процессор) и FreeBSD (золотая середина, заточена на быстродействие). Почему не OpenBSD или NetSD? Первая сложна в установке, но не волнуйтесь мы будем использовать её штатный брандмауэр. А на кофеварку мы ставить его то же не будем — поэтому не NetBSD(шутка).
Установка.
Итак: получение дистрибутива.
Получить его можно с фтп сервера по адресу: ftp://ftp.freebsd.org/pub/FreeBSD/. Полный список источников: http://www.freebsd.org/releases/8.0R/announce.html. И ссылка на русскую документацию. Перед установкой НАСТОЯТЕЛЬНО РЕКОМЕНДУЮ ПРОЧЕСТЬ!!!
Скачали записали. Дальше вставляем записанный диск в DVD привод (надеюсь вы скачали и установили DVD образ) и видим экран из семи пунктов — нам нужен первый пункт. После загрузки мы видим выбор региона и выбираем 182 Russian Federation. Приятно видеть, что иностранный дистрибутив (американский) знает, что есть другие страны. В пункте OPTIONS я поменял только источник установки на CDROM (можно ставить и с фтп сервера и из многих других мест). После чего заходим в Partitions, тут я выбрал нажав клавишу английскую «A», весь диск, но его можно было и порезать вопрос для чего. Нажав «Q» мы видим запрос о том надо ли записывать загрузчик.
-
Вариант это просто поставить стандартый MBR(без загрузчика).
-
Стандартный загрузчик BSD(если есть еще системы).
-
Ничего никуда не писать.
Дальше перейдя в label я рекомендую нажать «А», так как разбивка партиции на слайсы по умолчанию нас вполне устроит.
Distributions — здесь я рекомендую зайти в custom и добавить пункты ports и src — это программное обеспечение и исходные тексты ядра которые вам могут потребоваться в дальнейшем.
До нажатия comit ничего не будет записано. Сохраним же результаты нашей работы.
После распаковки и установки файлов sysinstall, а именно так называется программа в которой мы работали, предложит сделать еще пару настроек. Согласимся и перейдем к ним.
-
Выбрав root password зададим пароль суперпользователя.
-
Перейдем в Console и зададим шрифт Font я всегда выбираю IBM 866,
-
Keymap Koi-8r .
-
Screen map зададим как KOI-8R to IBM 866.
-
Осталась зайти в ttys и выбрать cons25r.
-
Возвращаемся через exit и задаём временную зону (Time zone).
-
Кому как, а мне с мышь в консоли удобно. Заходим в mouse и выбираем enable. В 90% случаев мышь начинает работать. Exit.
-
Networking — здесь мы зададим пару параметров.
-
Interfaces — настроим ip адрес шлюз dns server. (задайте только внешний интерфейс)
-
Поставить надо галочку Gateway — мы же должны через себя пропускать трафик.
-
И SSHD — это даст нам возможность заходить на машину удаленно.
-
Уф.. Кажется все... Как же это элементарно сделать и сложно описать. Более подробно смотрите на виде которое я прикрепил. Перезагрузка....
Продолжение следует...
Продолжение после перезагрузки.
Что бы зайти на компьютер набираем root и пароль который мы для него задали. Надеюсь вы его ещё не забыли. Но работать из-под суперпользователя, так ещё называют пользователя root — это дурной тон администраторов windows систем (не всех правда). Так что давайте создадим нового пользователя. Сделать это можно с помощью sysinstall или скриптом adduser. Я предпочитаю второй вариант, просто потому, что он не сложнее, а возможностей предоставляет больше. А точнее он предоставляет возможность поставить класс пользователя, а это, если ставить программы, позволяет не утруждать себя их русификацией (если ставить из портов). Но об том позже.
Добавление пользователя.
freebsd#adduser
Username: ЖелаемоеИмяПользователя
Full name:Полное имя нашего пользователя можно писать по русски и с пробелами
Uid (Leave empty for default):Просто нажмите ввод
Login group [ad]:Просто нажмите ввод
Login group is ad. Invite ad into other groups? []:wheel //Если не указать, то пользователь не сможет получить права суперпользователя.
Login class [default]:russian // Это что бы работать с системой на родном языке.
Shell (sh csh tcsh nologin) [sh]:tcsh // Остальное кому что нравится
Home directory [/home/ad]:Просто нажмите ввод
Home directory permissions (Leave empty for default):Просто нажмите ввод
Use password-based authentication? [yes]:Просто нажмите ввод
Use an empty password? (yes/no) [no]:Просто ввод нам не нужно отсутствие пароля
Use a random password? (yes/no) [no]:Если лень придумывать пароль, то yes, иначе no, мне лень.
Lock out the account after creation? [no]:Просто ввод
И тут появиться то что вы ввели. Проверяйте. Правильно — yes иначе no. Если вы указали случайный пароль, то вам его покажут и спросят добавить ли еще пользователя.
Установка ip адресов.
В юниксподобных системах для задания ip адресов для сетевых интерфейсов(карт) есть команда ifconfig. Набрав эту команду в консоли(командной строке) — вы увидите список ваших интерфейсов. Так выглядит вывод этой команды на одном из моих брандмауэров:
rl0: flags=8843 metric 0 mtu 1500
options=8
ether 00:c0:0c:72:66:23
inet 192.168.11.10 netmask 0xffffff00 broadcast 192.168.11.255
media: Ethernet autoselect (100baseTX )
status: active
rl1: flags=8843 metric 0 mtu 1500
options=8
ether 00:e0:30:50:15:94
inet 192.168.1.3 netmask 0xffffff00 broadcast 192.168.1.255
media: Ethernet autoselect (100baseTX )
status: active
rl2: flags=8843 metric 0 mtu 1500
options=8
ether 00:e0:4c:76:be:37
inet «Цензура. Здесь мой внешний ip» netmask 0xffffff00 broadcast «То же цензура»
media: Ethernet autoselect (100baseTX )
status: active
lo0: flags=8049 metric 0 mtu 16384
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
pfsync0: flags=0<> metric 0 mtu 1460
syncpeer: 224.0.0.240 maxupd: 128
pflog0: flags=141 metric 0 mtu 33204
gif0: flags=8051 metric 0 mtu 1280
tunnel inet «Цензура. Здесь мой внешний ip» --> «Цензура. Здесь другой мой внешний ip»
inet 192.168.1.3 --> 192.168.0.1 netmask 0xffffff
gif1: flags=8051 metric 0 mtu 1280
tunnel inet «Цензура. Здесь мой внешний ip» --> «Цензура. Здесь другой мой внешний ip»
inet 192.168.1.3 --> 192.168.10.1 netmask 0xffffff
rl0, rl1, rl2 — это сетевые карты. lo0 — это интерфейс обратной петли. Вот выдержка из Википедии:
Виртуальный сетевой интерфейс
Все TCP/IP реализации поддерживают loopback механизмы, которые реализует виртуальный сетевой интерфейс исключительно программно и не связаны с каким-либо оборудованием, но при этом полностью интегрированы во внутреннюю сетевую инфраструктуру компьютерной системы. Любой трафик, который посылается компьютерной программой на интерфейс loopback тут же получается тем же интерфейсом.
Соответственно, Internet Protocol специфицирует сеть loopback. В IPv4 это сеть с префиксом 127/8 («this network», RFC 3330). Наиболее широко используемый IP адрес в механизмах loopback — 127.0.0.1. В IPv4, в него также отражается любой адрес в пределах от 127.0.0.0 до 127.255.255.255. IPv6 определяет единственный адрес для этой функции — 0:0:0:0:0:0:0:1 (также записывается как ::1), имеющий префикс ::1/128 (RFC 3513). Стандартное, официально зарезервированное, доменное имя для этих адресов — localhost (RFC 2606).
На системах Unix, интерфейс loopback обычно имеет имя lo или lo0.
Интерфейс loopback имеет несколько путей применения. Он может быть использован сетевым клиентским программным обеспечением, чтобы общаться с серверным приложением, расположенном на том же компьютере. То есть если на компьютере, на котором запущен веб сервер, указать в веб браузере URL http://127.0.0.1/ или http://localhost/ , то он попадает на веб сайт этого компьютера. Этот механизм работает без какого-либо активного подключения, поэтому он полезен для тестирования служб, не подвергая их безопасность риску, как при удаленном сетевом доступе. Подобным образом, пингование интерфейса loopback — это основной тест функционирования IP стека в операционной системе.
Почему я про него так подробно рассказываю, а для того, что бы не объяснять, почему мы этот интерфейс исключим из фильтрации брандмауэра. Однако давайте зададим настройки ваших сетевых карт:
ifconfig <ваша внешний сетевой интерфйс> inet <ваш внешний ip> netmask <уточните у провайдера>
ifconfig <ваша внутренний сетевой интерфйс> inet <ваш внутренний ip> netmask <маска вашей сети>
Если не угадаете внешний и внутренний интерфейс — нестрашно, всегда можно переставить провода. А вот с сетевой маской сложнее. Для начала, что это за «зверь»?
Сетевая маска.
В терминологии сетей TCP/IP маской подсети или маской сети называется битовая маска, определяющая, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу самого узла в этой сети. Например, узел с IP-адресом 12.34.56.78 и маской подсети 255.255.255.0 находится в сети 12.34.56.0/24 с длиной префикса 24 бита. В случае адресации IPv6 адрес 2001:0DB8:1:0:6C1F:A78A:3CB5:1ADD с длиной префикса 32 бита (/32) находится в сети 2001:0DB8::/32.
Другой вариант определения— это определение подсети IP-адресов. Например, с помощью маски подсети можно сказать, что один диапазон IP-адресов будет в одной подсети, а другой диапазон соответственно в другой подсети.
Чтобы получить адрес сети, зная IP-адрес и маску подсети, необходимо применить к ним операцию поразрядной конъюнкции (логическое И). Например, в случае более сложной маски (битовые операции в IPv6 выглядят идентично)
Был у меня забавный случай. Принимали мы человека на должность системного администратора. И вот спрашиваю я его, он рассказывает складно так. И образование у него высшее. И тут на вопрос о маске подсети он отвечает. Ну я точного определения не помню, но это то, чем ограничевают доступ в интернет. После пары наводящих вопросов, он понял что сморозил глупость. На работу я его не взял. Маской доступ не закрывают и не открывают. Маской делят сеть на подсети и отделяют адреса компьютеров от адресов сетей.
Однако продолжим. Что бы все что мы натворили осталось после перезагрузки, нам надо это все добавить в /etc/rc.conf.
RC.CONF
rc.conf — это главный конфигурационный файл системы. В нем дожны быть строки жизненно важные для нашего будущего брандмауэра:
gateway_enable="YES"
ifconfig_<ваша внешний сетевой интерфйс> inet <ваш внешний ip> netmask <уточните у провайдера>
ifconfig_<ваша внутренний сетевой интерфйс> inet <ваш внутренний ip> netmask <маска вашей сети>
defaultrouter="ip шлюза вашего провайдера"
gateway_enable="YES" — должно присутствовать, т. к. мы это сделали при установке, да и один из интерфейсов должен был быть задан. Defaultrouter — должен был быть задан, но о нем мы еще не говорили. А это всего навсего адрес куда будут посланы все пакеты адреса назначения которых неизвестны нашей системе. У русских это слово из трёх букв.
Что мы еще не сделали? А мы с вами не задали мы адреса DNS.
Что такое DNS?
DNS (англ. Domain Name System — система доменных имён) — распределённая система (распределённая база данных), способная по запросу, содержащему доменное имя хоста (компьютера или другого сетевого устройства), сообщить IP адрес или (в зависимости от запроса) другую информацию. DNS работает в сетях TCP/IP. Как частный случай, DNS может хранить и обрабатывать и обратные запросы, определения имени хоста по его IP адресу — IP адрес по таблице соответствия преобразуется в доменное имя.
Или иначе это те машины которые скажут вам IP адрес mail.ru, ya.ru и т. д. Где же они задаются? А задаются они в файле /etc/resolv.conf вот пример моего:
# cat /etc/resolv.conf
search selenia.ru
nameserver 194.8.160.90
nameserver 195.131.52.130
nameserver 192.168.11.1
После подстановки DNS вашего провайдера мы можем сделать ping ya.ru и если все в порядке на этом пока закончить. Продолжение, как всегда следует.
Обычно после этого я ухожу из серверной в свой любимый кабинет.
Итак мы у себя в кабинете, в удобном кресле с чашечкой кофе (опционально).
Как же нам добраться до только что поставленного сервера? Если вы работаете в Linux, то ssh <имя пользователя(не root)>@<адрес машины>. Но как гласит статистика — 95% используют системы Windows. Этим системам ничего не известно ни о ssh ни о sftp. Поэтому давайте немного о программном обеспечении, для доступа:
PuTTY
Putty — свободно распространяемый клиент для протоколов SSH, TELNET и RLOGIN. Там все просто и информации в интернете достаточно.
WinSCP
WinSCP — графический клиент протоколов SCP и SFTP. Поддерживает интеграцию с pagent (putty). Его особенностью является возможность написания скриптов. И поддержка файловой синхронизации. Детальнее его описание можно посмотреть на http://winscp.net/eng/docs/lang:ru.
Брандмауэр.
Поскольку на FreeBSD присутствует пакетный фильтр портированный из OpenBSD не вижу причин его не использовать. Для начала маленькое отступление. Что бы что-то защищать надо знать что мы хотим защитить. И как должны реагировать на нарушения.
Случай из жизни:
Работал я в одной компании. И уже не помню почему, но оказался у президента компании в кабинете подключая не помню уже что к чему. В один прекрасный момент, на мониторе появляется порнуха. Мы с админом посмеялись и забыли об этом. Нам до личной жизни президента компании, да и до рядовых сотрудников дела нет. Политики то же не было и мы руководствуясь принципом не вмешательства и не разглашения ушли. Через два часа. В кабинете президента компании заседание директоров. И на экран во всеувидинье вылетает эта сценка. На что все поворачиваясь к Директору по IT (женщине): «Что это?». Та невозмутимо сообщает: «Порнуха». Финансовый директор: «А почему на моём компьютере такого нет?». Дело кончилось чисткой компьютера президента компании.
Почему же это произошло? Потому, что системный администратор не имел понятия, как реагировать на появившуюся порнографию. И принял единственно верное решение — не делать ничего.
Нам надо выработать так называемую «политику безопасности». Я рекомендую указать в ней следующие пункты:
-
Какие ресурсы мы собираемся защищать. (нельзя защитить все)
-
Кто имеет право использовать эти ресурсы.
-
Кто отвечает за информационную безопасность.
-
Как реагировать на нарушение безопасности.
-
Предовать ли огласке? (по закону "Об информации, информационных технологиях и о защите информации" статье 16. должны)
-
Определить приоритет отказоустойчивости по отношению безопасности.
-
Самое сложное скорее всего будет убедить руководство в необходимости данного документа. А без него дальнейшее бессмысленно или является самодейтельностью.
Допустим мы все же умудрились создать данный документ и теперь знаем что нам надо защищать, от кого и как.
Допустим наш внешний интерфейс на брандмауэре em0 ip xxx.xxx.xxx.xx2 шлюз xxx.xxx.xxx.xx1 внутренний интерфейс em1 ip 192.168.0.1 подсеть 192.168.0.0/24 запишем:
ext_if=«em0»
int_if=«em1»
my_lan=«192.168.0.0/24»
gw=«xxx.xxx.xxx.xx1»
Пусть у нас в сети есть веб сервер, сервер баз данных, терминальный сервер и сервер 1С. Возьмём листок блокнот и напишем:
www_srv=«192.168.0.2»
sql_srv=«192.168.0.3»
rdp_srv=«192.168.0.4»
Теперь нам надо определить какие снаружи порты нам нужны. И тут многие делают ошибку — я не знаю что мне надо я открою всё. Это только и ждут «трояны», «черви» и «бэк доры». Поверьте, о том что вам надо узнать намного проще, чем о взломе системы. Что же мы откроем? Я бы открыл: http — да и пожалуй все. Все остальное должно быть внутри сети. Но... Но не волнуйтесь как только мы включим брандмауэр, то сразу узнаем что нам надо.
inet_ports= «http 3128» # Сюда мы будем дописывать по необходимости
Теперь какие порты нужны для доступа к нашему брандмауэру? Только ssh. Обычно у меня он является ещё и почтовым сервером и веб сервером, и сервером DNS, и сервером DHCP — так что сюда то же можно в последствии дописать много.
self_ports=«ssh»
Теперь давайте определим места откуда наши внутренние сервисы будут доступны:
serv_users = «ip1 ip2 ... ipN»
Теперь какие нужны опции.
set skip on lo0
scrub in all
Думаю этого вполне достаточно. Первая опция нормализует входящий трафик, вторая не фильтрует пакеты на интерфейсе обратной петли.
Теперь займёмся переадресацией. У нас вроде только один адрес, а серверов целых три.
rdr on $ext_if proto tcp \
from { $serv_users } \
to $ext_if port http \
tag RDR_TAG → $www_srv port http
Как это звучит по русски? Пакеты приходящие на внешний интерфейс по протоколу tcp экранирование перевода строки от пользователей таких-то экранирование перевода строки на порт http экранирование перевода строки помечаем тегом RDR_TAG и переадресуем на веб сервер порт http.
rdr on $ext_if proto tcp \
from { $serv_users } \
to $ext_if port 3128 \
tag RDR_TAG → $rdp_srv port 3128
Пакеты приходящие на внешний интерфейс по протоколу tcp экранирование перевода строки от пользователей таких-то экранирование перевода строки на порт 3128 экранирование перевода строки помечаем тегом RDR_TAG и переадресуем на веб сервер порт 3128.
А переадресацию На SQL сервер — давайте оставим на домашнее задание.
Но как же пользователи внутри нашей сети? Они не попадут на наш www сервер по внешнему ip адресу. Давайте их переадресуем.
rdr on $int_if proto tcp \
to ($ext_if:0) port http \
tag RDR_TAG → $www_srv port http
Теперь давайте разберёмся с исходящими пакетами. Наверное неплохо было бы скрыть адрес в пользователя из локальной сети и поставить наш внешний адрес вместо него. Это называется натирование или ip маскарадинг.
nat on $ext_if from $my_lan to any -> ($ext_if:0)
Перейдем теперь к правилам фильтрации. Правила в pf работают по принципу победы последнего из правил. То есть чем ниже правило — тем оно важнее.
# Политика
block drop all # Все что ниже не будет разрешено — запрещено
pass on $ext_if icmp # разрешаем пинг
pass on { $int_if $ext_if } from self # разрешим трафик от брандмауэра
pass in on $int_if from $my_lan to port { $inet_ports } # разрешаем входящий трафик к внешним портам
pass out on $ext_if from $my_lan to { $inet_ports } # Разрешим исходящий трафик к внешним портам
pass in $ext_if tagged RDR_TAG # Разрешаем трафик помеченный как переадресация.
pass out $int_if tagged RDR_TAG #
В принципе минимальный набор... Осталось только определить откуда можно по ssh на брандмауэр заходить. Это будет домашним заданием.
Теперь этот файл сохраняем как pf.conf и отправляем на брандмауэр.
Если вам что-то не понятно, задавайте вопросы, но сначала советую почитать http://house.hcn-strela.ru/BSDCert/BSDA-course/apcs02.html.
Если вы не делали ничего сверх описанного, то файл вы сохранили в домашней папке пользователя под которым заходите на брандмауэр. Теперь его надо поместить в директорию /etc
#cp ~/pf.conf /etc/
и добавить разрешение на запуск брандмауэра.
#echo 'pf_enable=«Yes»' >> /etc/pf.conf
Теперь запустим сам брандмауэр.
#pfctl -nf /etc/pf.conf
Этим мы проверим файл на ошибки. Не забывайте перед внесении изменений тестировать на ошибки. Если все хорошо то:
#/etc/rc.d/pf start
Продолжение следует....
Примечание 1: 1С использует только одного пользователя, поэтому если вы даете доступ напрямую к 1С, то теоретически можно разрушить базу или внести в неё любую другую информацию. Как вариант это атаки типа «инъекция» или «переполнение буфера». Так же вы можете получить успешную атаку на отказ в обслуживании как связанную с особенностью защиты 1С с помощью аппаратных ключей, так и с другими особенностями реализаций сервера 1С.
Примечание 2: Классы безопасности
В "Оранжевой книге" определяется четыре уровня доверия - D, C, B и A. Уровень D предназначен для систем, признанных неудовлетворительными. По мере перехода от уровня C к A к системам предъявляются все более жесткие требования. Уровни C и B подразделяются на классы (C1, C2, B1, B2, B3) с постепенным возрастанием степени доверия.
Всего имеется шесть классов безопасности - C1, C2, B1, B2, B3, A1. Чтобы в результате процедуры сертификации систему можно было отнести к некоторому классу, ее политика безопасности и уровень гарантированности должны удовлетворять заданным требованиям, из которых мы упомянем лишь важнейшие.
Класс C1:
-
доверенная вычислительная база должна управлять доступом именованных пользователей к именованным объектам;
-
пользователи должны идентифицировать себя, прежде чем выполнять какие-либо иные действия, контролируемые доверенной вычислительной базой. Для аутентификации должен использоваться какой-либо защитный механизм, например пароли. Аутентификационная информация должна быть защищена от несанкционированного доступа;
-
доверенная вычислительная база должна поддерживать область для собственного выполнения, защищенную от внешних воздействий (в частности, от изменения команд и/или данных) и от попыток слежения за ходом работы;
-
должны быть в наличии аппаратные и/или программные средства, позволяющие периодически проверять корректность функционирования аппаратных и микропрограммных компонентов доверенной вычислительной базы;
-
защитные механизмы должны быть протестированы на предмет соответствия их поведения системной документации. Тестирование должно подтвердить, что у неавторизованного пользователя нет очевидных способов обойти или разрушить средства защиты доверенной вычислительной базы;
-
должны быть описаны подход к безопасности, используемый производителем, и применение этого подхода при реализации доверенной вычислительной базы.
Класс C2 (в дополнение к C1):
-
права доступа должны гранулироваться с точностью до пользователя. Все объекты должны подвергаться контролю доступа;
-
при выделении хранимого объекта из пула ресурсов доверенной вычислительной базы необходимо ликвидировать все следы его использования;
-
каждый пользователь системы должен уникальным образом идентифицироваться. Каждое регистрируемое действие должно ассоциироваться с конкретным пользователем;
-
доверенная вычислительная база должна создавать, поддерживать и защищать журнал регистрационной информации, относящейся к доступу к объектам, контролируемым базой;
-
тестирование должно подтвердить отсутствие очевидных недостатков в механизмах изоляции ресурсов и защиты регистрационной информации.
Класс B1 (в дополнение к C2):
-
доверенная вычислительная база должна управлять метками безопасности, ассоциируемыми с каждым субъектом и хранимым объектом;
-
доверенная вычислительная база должна обеспечить реализацию принудительного управления доступом всех субъектов ко всем хранимым объектам;
-
доверенная вычислительная база должна обеспечивать взаимную изоляцию процессов путем разделения их адресных пространств;
-
группа специалистов, полностью понимающих реализацию доверенной вычислительной базы, должна подвергнуть описание архитектуры, исходные и объектные коды тщательному анализу и тестированию;
-
должна существовать неформальная или формальная модель политики безопасности, поддерживаемой доверенной вычислительной базой.
Класс B2 (в дополнение к B1):
-
снабжаться метками должны все ресурсы системы (например, ПЗУ), прямо или косвенно доступные субъектам;
-
к доверенной вычислительной базе должен поддерживаться доверенный коммуникационный путь для пользователя, выполняющего операции начальной идентификации и аутентификации;
-
должна быть предусмотрена возможность регистрации событий, связанных с организацией тайных каналов обмена с памятью;
-
доверенная вычислительная база должна быть внутренне структурирована на хорошо определенные, относительно независимые модули;
-
системный архитектор должен тщательно проанализировать возможности организации тайных каналов обмена с памятью и оценить максимальную пропускную способность каждого выявленного канала;
-
должна быть продемонстрирована относительная устойчивость доверенной вычислительной базы к попыткам проникновения;
-
модель политики безопасности должна быть формальной. Для доверенной вычислительной базы должны существовать описательные спецификации верхнего уровня, точно и полно определяющие ее интерфейс;
-
в процессе разработки и сопровождения доверенной вычислительной базы должна использоваться система конфигурационного управления, обеспечивающая контроль изменений в описательных спецификациях верхнего уровня, иных архитектурных данных, реализационной документации, исходных текстах, работающей версии объектного кода, тестовых данных и документации;
-
тесты должны подтверждать действенность мер по уменьшению пропускной способности тайных каналов передачи информации.
Класс B3 (в дополнение к B2):
-
для произвольного управления доступом должны обязательно использоваться списки управления доступом с указанием разрешенных режимов;
-
должна быть предусмотрена возможность регистрации появления или накопления событий, несущих угрозу политике безопасности системы. Администратор безопасности должен немедленно извещаться о попытках нарушения политики безопасности, а система, в случае продолжения попыток, должна пресекать их наименее болезненным способом;
-
доверенная вычислительная база должна быть спроектирована и структурирована таким образом, чтобы использовать полный и концептуально простой защитный механизм с точно определенной семантикой;
-
процедура анализа должна быть выполнена для временных тайных каналов;
-
должна быть специфицирована роль администратора безопасности. Получить права администратора безопасности можно только после выполнения явных, протоколируемых действий;
-
должны существовать процедуры и/или механизмы, позволяющие произвести восстановление после сбоя или иного нарушения работы без ослабления защиты;
-
должна быть продемонстрирована устойчивость доверенной вычислительной базы к попыткам проникновения.
Класс A1 (в дополнение к B3):
-
тестирование должно продемонстрировать, что реализация доверенной вычислительной базы соответствует формальным спецификациям верхнего уровня;
-
помимо описательных, должны быть представлены формальные спецификации верхнего уровня. Необходимо использовать современные методы формальной спецификации и верификации систем;
-
механизм конфигурационного управления должен распространяться на весь жизненный цикл и все компоненты системы, имеющие отношение к обеспечению безопасности;
-
должно быть описано соответствие между формальными спецификациями верхнего уровня и исходными текстами.
Такова классификация, введенная в "Оранжевой книге". Коротко ее можно сформулировать так:
-
уровень C - произвольное управление доступом;
-
уровень B - принудительное управление доступом;
-
уровень A - верифицируемая безопасность.