// новый вид файла инициализации - b_I_m-z.ini
S(1, 1, 0,0,0,0,0,0,0);
S(2, 0, 0,0,0,0,0,0,0);
O(1, 0, 0,0,0,0,0,0,0);
O(2, 1, 0,0,0,0,0,0,0);
ATTRNAME seclevelS IS ATTRS(1);
ATTRNAME seclevelO IS ATTRO(1);
RULES
READO
// если второй субъект хочет прочитать второй объект, то его уровень повышается до необходимого
if(THISS==2 && THISO==2)
{
make_secret(); // прописываем новые атрибуты субъекта
seclevelS[THISS]=AS(1,2), // заносим изменения в массив первого атрибута. Это разрешает чтение второго объекта
}
IF(seclevelS[THISS]>=seclevelO[THISO])
WRITEO
// после чтения второй субъект хочет записать информацию в первый объект. Для этого он понижает свой уровень секретности до уровня объекта №1
if(THISS==2)
{
make_nonsecret();
seclevelS[THISS]=AS(1,2);
}
IF(seclevelO[THISO]>=seclevelS[THISS])
ENDRULES
Содержимое файла prefile:
void make_secret(void)
{
S(2, 1, 0,0,0,0,0,0,0);
}
void make_nonsecret(void)
{
S(2, 0, 0,0,0,0,0,0,0);
}
Заполнение массива первых атрибутов субъектов seclevelS[] происходит в файле b_l_m-z.ini, т.к. данный массив не является глобальной переменной. Его изменения допустимы только в файле описания модели. Дополнительный файл postfile ничего не содержит.
После внесенных изменений была произведена проверка работы определенной таким образом Z-системы. Второй субъект повысил свой уровень секретности, ему было разрешено читать информацию, хранящуюся во втором объекте, затем он понизил степень доверия, и ему было разрешено произвести запись в объект №1. Такая последовательность действий не противоречит правилам модели Белла-ЛаПадула, но приводит к утечке информации.
4. Далее, чтобы избежать проблему Z-системы, файл описания был изменен следующим образом:
S(1, 1, 0,0,0,0,0,0,0);
S(2, 0, 0,0,0,0,0,0,0);
O(1, 0, 0,0,0,0,0,0,0);
O(2, 1, 0,0,0,0,0,0,0);
ATTRNAME secievelS IS ATTRS(1);
ATTRNAME seclevelO IS ATTRO(1);
RULES
READO
if(THISS==2 && THISO==2) // для чтения секретного объекта субъект №2 повышает степень доверия
{
make_secret();
seclevelS[THISS]=AS(1,2);
}
IF(seclevelS[THISS]>=seclevelO[THISO])
WRITEO
// субъект №2 понижает уровень секретности для записи в несекретный
// объект №1
if(THISS==2)
{
make_nonsecret();
seclevelS[THISS]=AS(1,2);
}
// правило слабого спокойствия: если запись в несекретный объект №1, то вернуть субъект на уровень «секретно» и т.о. не разрешить запись
if(THISS==2 &&THISO==1)
{
rnake_secret();
seclevelS[THISS]=AS(1,2);
}
IF(seclevelO[THISO]>=seclevelS[THISS])
ENDRULES
Файлы prefile и postfile остались прежними.
Здесь введено правило слабого спокойствия, т.е. второй субъект может изменять свой уровень секретности, но ему не разрешено производить запись в несекретный объект №1. Для проведения записи субъект №2 понижает свою степень доверия. Далее осуществляется проверка направления записи, в ходе которой выясняется, что второй субъект пытается записать информацию в несекретный объект. Это могут быть конфиденциальные данные, поэтому субъекту не разрешается выполнить данную операцию.
Контрольные вопросы по лабораторной работе
1. На основе каких идей построена модель Белла-ЛаПадула?
2. Какое правило позволяет решить проблему троянских коней?
3. Приведите примеры критики модели Белла-ЛаПадула.
4. В чем заключается проблема системы Z?
5. Как можно избежать недостатков Z-системы?
Лабораторная работа № 3.
Ролевое управление доступом
Цель работы: овладеть методикой формирования моделей безопасности, воснову которых положено ролевое управление доступом. Исследовать возможности моделей безопасности, воснову которых положено ролевое управление доступом.
Средства: методика проведения лабораторной работы, теоретический материал, персональный компьютер.
Время: 4 часа
Теоретические сведения
Ролевое управление доступом
Ролевое управление доступом (RoleBasedAccessControl) было предложено в качестве альтернативы и дополнения к дискреционному и мандатному.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.