Теоретические основы компьютерной безопасности: Методические указания к выполнению лабораторных работ, страница 22

имя атрибута - имя, выбранное пользователем и не совпадающее со служеб­ными словами языка описания или языка Си++ и уже описанными атрибутами. служебные функции ASи АО - возвращают значение атрибута, номер которо­го задан параметром номер атрибута, а номер сущности определяется пара­метром номер субъекта(объекта). Причем, вызов AS без номера сущности эк­вивалентен А5(номер атрибута, THISS), аналогичное действует и для АО -АO(номер атрибута, THISO). Служебные слова THISS и THISO будут рассмот­рены позднее в секции «правила доступа», в которых используются имена ат­рибутов. Ответственность за выход за границы, определенные для номера ат­рибута или субъекта, лежит на пользователе.

В файле описания модели пользователь может также присвоить новое значение уже объявленной переменной:

имя атрибута = АS(номер атрибута, <номер субъекта>);

или

          имя атрибута = АО(номер атрибута, <номер объекта>);

без служебного слова ATTRNAME. Это эквивалентно присвоению нового зна­чения некогда объявленной переменной в Си++.

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

Секция «правила доступа»

Язык описания модели позволяет описать правила, по которым будет определяться право доступа активной сущности к пассивной.

Блок с правилами должен обязательно обозначаться служебным словом RULES, заканчиваться - ENDRULES. Внутри блок может быть пустым или со­держать правила доступа, задаваемые пользователем.

В системе возможны следующие операции, инициируемые активными сущностями:

1.  READS - чтение субъекта;

2.  READO - чтение объекта;

3.  WRITES - запись в субъект;

4.  WRITEO - запись в объект;

5.  CREATES - создание субъекта;

6.  CREATED - создание объекта;

7.  DELETES - удаление субъекта;

8.  DELETED - удаление объекта;

9.  CHATTRS - смена атрибутов субъекта;

10.  CHATTRO - смена атрибутов объекта.

Следовательно, пользователю необходимо следующим образом опре­делить правила доступа:

RULES

            Имя операции 1 <код> IF  (правило)  

…………..

            имя операции n <код> IF  (правило)  

ENDRULES

имя операции i - имя из упомянутого списка из 10 операций.

Внутри блока может быть определено сколько угодно правил доступа с одним именем операции, но решение по доступу будет приниматься на основе последнего. Порядок записи операций непринципиален.

Следует учесть, что при описании модели некоторые операции могут не понадобиться. Если пользователь не объявит их, то они будут считаться раз­решенными. Пустой блок RULES-ENDRULES эквивалентен разрешению всех операций доступа. Чтобы гарантированно запретить некоторый вид доступа, необходимо применить всегда ложное условие доступа в теле IF.

 код - любой код на языке Си++.

После RULES и до первого определения правила доступа, после IF( ), a также перед ENDRULES код запрещен. Код может включать определение пе­ременных, вызовы функций и т.д. Следует отметить, что определения и опи­сания вызываемых функций и используемых переменных должны содержаться в дополнительных файлах prefile и postfile.

Переменные, объявленные в файле инициализации, видны только в нем. Чтобы описать глобальную переменную, следует объявить ее в prefile. Эти ог­раничения связаны с особенностями программной реализации «Монитора безопасности» {при вызове служебной программы expert.exe до и после текста, написанного пользователем, в файл инициализации вставляется код. Таким образом, получается завершенное приложение, в котором содержимое файла инициализации оказывается внутри функции main(), prefile записывается до нее, a postfile - после).

правило - собственно условие, на основе которого принимается решение о разрешении доступа на выполнение данной операции над пассивной сущно­стью.

Внутри IF с использованием соглашений языка Си++ записывается усло­вие доступа. После объявления операции доступа допустим только вызов од­ного IF. Например, WRITES IF(...) IF(...) приводит к ошибке на этапе компиля­ции.