Введение
Ровным счетом ничего секретного не сообщаю, излагаю самые банальные вещи. Но с практической точки зрения:)
Мандарторная модель безопасности, упрощенно
Лениво мне описывать всю модель, идите на wikipedию и читайте про модель Бела-ЛаПадулы, мандаторный способ защиты и прочее. Я изложу практический аспект. Самые неприятности при построении информационной системы начинаются, когда некоторый тип данных является секретным. Никто не может его ни прочесть, ни исказить, не распечатать, ни переслать по каким-либо каналам. В общем, вот есть комната, охраняемая автоматчиками, и там терминал. Даже принтера нет. А если и есть, то выносить распечатки нельзя – дальше определенной зоны. И язык следует держать за зубами, или пуля в лоб. Вот так. Сложные условия.
Как делается. Ряд определений. Контейнер. Это все, что содержит информацию – терминал (в том плане, что физическое устройство, с которого можно глазами данные считать), принтер, канал связи, носитель (а хоть бы и флешка). Данные – все, что эти сведения содержит. Субъект – разумное существо (и программа, выступающая от лица субъекта). И данным, и контейнерам, и субъектам приписываются так называемые метки безопасности. В простом случае – это просто число, характеризующее благонадежность субъекта, секретность данных или уровень доступа контейнера. Метки сортируются по возрастанию (собственно, необязательно). Правила просты:
- Данные нельзя записать в контейнер, если уровень его метки ниже метки данных
- Субъект может записывать (но не может читать) данные на более высокий уровень секретности.
- Субъект может читать (но не записывать) на более низкий уровень секретности.
Таким образом, информация течет только в одном направлении – в сторону большой секретности. Рассекретить ее можно, но если с помощью специальных процедур. В теории это все ужасно просто выглядит. На практике за такую систему возмется штук от силы 5 контор на планете.
Контейнеры – терминал
Как раз с ними самый большой проблем. Вот, скажем, терминал. Это необязательно старый СМ-овский или ЕС-вский терминал а в смысле клиентская программа, и выполняющий ее компьютер. Там где гриды, кнопочки и менюшки. Вопросы тут возникают такие:
- Каков уровень доверия к данному терминалу? Какого уровня секретности материалы можно на нем показывать? И кому?
- Как убедиться в том, что терминал не был физически перемещен? Злой предатель может подключить свой ноутбук к сети WiFi и используя свой легитимный логин, свистнуть секретные данные. Например, терминал уровня 0 стоит в охраняемой комнате. Пропускная система. Программа как-то должна определить, что имеет место с таким-то набором железа, а не с другим. Железо можно подмахнуть. Сами знаете как.
- Вначале работы все терминалы нужно разметить. Какой какого уровня. Занести в базу данных (секретную) вместе с хардверным неизменяемым ID.
- Также надо убедиться, что с этого терминала нельзя украсть данные. Нельзя подключить внешние накопители (неучтенные и неразмеченные), флешки там, и пр. Также надо убедиться, что по сети с этого терминала никуда, кроме сервера, нельзя попасть.
Контейнеры – принтер
С этим гемора еще больше. Как убедиться что принтер тот, за кого он себя выдает. Как обеспечить его ID ( и его безопасную передачу)? Вообще говоря, компания HP производит такие принтеры, но вывоз их за пределы США запрещен под страхом пожизненного заключения. Что делать-то? Паяем сами железку и вкрячиваем туда. Опять же, принтера надо разметить. Учесть, кто где стоит и какой уровень доступа может печатать.
Печатать просто так мы не можем. Этож секретные документы. Мы баннер должны сверху присобачить. Так и написать. под двумя Сережами. И еще баркод сверху, чтобы охранник на выходе, чирикнув по нему сканнером, убедился, что это документ правильный и распечатан легитимно. И в базе безопасности отметить. Такой-то тогда-то документик получил.
Контейнеры – носители
Тут вообще один сплошной ахтунг. Носители надо учитывать, но как? Как HardID неизменяемый на флешку запихать? Опять же данные шифровать надо, причем на каком-то общем для всего уровня безопасности ключе. Опять же (как в любом другом случае) все это надо проверять…
Контейнеры – каналы передачи данных
Опять таки приятного мало. Но полегче. Там аутентификация, сертификаты, их кому попало выдавать не будем, будем HardID в оконечной железки в них записывать и пр. Полегче.
А теперь – данные!
Вот тут, похоже, начинаются главные трудности. Как отбеспечить “неотрываемость” метки от данных, которые она отмечает? Вычислить совместный хеш? Хеш с секретом? Подпись? Кто будет менять эту метку? И как эту софтину (назовем ее Ядром Безопасности) контролировать? Чтобы не упала? Не отключилась? И через нее не свистнули данные?
Побочные каналы
Вот тут теория и дает сбой. Даже с высокого уровня секретности данные можно тихонечко украсть. И никто не заметит. В этот как раз и состоит главная трудность реализации мандаторной модели. Предположим – я плохой. У меня высокий уровень доступа и моим сообщникам потребовалась копия секретных данных. Мне надо ее выкрасть. Физически это сделать нельзя – все предусмотрено. Ладно. Обзаводимся помошником, пусть даже программным. Запускаем программного помощника на низком уровне хоть бы даже с какого-нибудь удаленного терминала. Помошник следит за 2 двумя файлами – файлом A и файлов B. И определяет, имеет ли к ним доступ кто-нибудь в данных момент. И регистрирует эти факты. Отлично. Я, сверху, тоже имею доступ к этим файлам. Сначала я читаю файл A. Потом B. Потом снова B. Сопоставим чтение файла A двоичной единице, а чтение B – двоичному нулю. Таким образом я кодирую всю секретную информациюю Потом мне остается только забрать данные у программы – помошника.
Побочные каналы могут быть крайне разнообразными. Я могу включать и выключать мотор принтера, мигать лампочкой на низкоприоритетном терминале, в общем, надо проявить фантазию !!! А самое главное, что никакая теория меня не остановит.
На практике, конечно, большую часть очевидных каналов зашумляют, чтобы они имели скорость пониже, да качество похуже. Кроме того невредно будет запустить эвристический анализатор событий в системе. В общем, большую часть времени вы будете бороться вот с этими каналами.
Такие дела. Если попадется такой проект – знайте, я завидую Вам. Have fun.
Tags: Безопасность