Содержание
- Модели безопасности
- Модель безопасности Pred
- Модель безопасности Bool
- Модель безопасности Math
- Модель безопасности Struct
- Модель безопасности Base
- Модель безопасности Regex
- Модель безопасности HashSet
- Модель безопасности StaticMap
- Объект модели безопасности StaticMap
- Правило init модели безопасности StaticMap
- Правило fini модели безопасности StaticMap
- Правило set модели безопасности StaticMap
- Правило commit модели безопасности StaticMap
- Правило rollback модели безопасности StaticMap
- Выражение get модели безопасности StaticMap
- Выражение get_uncommited модели безопасности StaticMap
- Модель безопасности Flow
Модель безопасности Pred
Модель безопасности Pred позволяет выполнять операции сравнения.
PSL-файл с описанием модели безопасности Pred находится в KasperskyOS SDK по пути:
toolchain/include/nk/basic.psl
Объект модели безопасности Pred
В файле basic.psl
содержится декларация, которая создает объект модели безопасности Pred с именем pred
. Соответственно, включение файла basic.psl
в описание политики безопасности решения обеспечивает создание объекта модели безопасности Pred по умолчанию.
Объект модели безопасности Pred не имеет параметров и не может быть покрыт аудитом безопасности.
Создавать дополнительные объекты модели безопасности Pred не требуется.
Методы модели безопасности Pred
Модель безопасности Pred содержит выражения, которые выполняют операции сравнения и возвращают значения типа Boolean
. Для вызова этих выражений нужно использовать операторы сравнения:
- <
ScalarLiteral
>==
<ScalarLiteral
> – "равно"; - <
ScalarLiteral
>!=
<ScalarLiteral
> – "не равно"; - <
Number
><
<Number
> – "меньше"; - <
Number
><=
<Number
> – "меньше или равно"; - <
Number
>>
<Number
> – "больше"; - <
Number
>>=
<Number
> – "больше или равно".
Также модель безопасности Pred содержит выражение empty
, которое позволяет определить, содержат ли данные свои структурные элементы. Выражение возвращает значения типа Boolean
. Если данные не содержат своих структурных элементов (например, множество является пустым), выражение возвращает true
, иначе возвращает false
. Чтобы вызвать выражение, нужно использовать конструкцию:
pred.empty <Text | Set | List | Map | ()>
Модель безопасности Bool
Модель безопасности Bool позволяет выполнять логические операции.
PSL-файл с описанием модели безопасности Bool находится в KasperskyOS SDK по пути:
toolchain/include/nk/basic.psl
Объект модели безопасности Bool
В файле basic.psl
содержится декларация, которая создает объект модели безопасности Bool с именем bool
. Соответственно, включение файла basic.psl
в описание политики безопасности решения обеспечивает создание объекта модели безопасности Bool по умолчанию.
Объект модели безопасности Bool не имеет параметров и не может быть покрыт аудитом безопасности.
Создавать дополнительные объекты модели безопасности Bool не требуется.
Методы модели безопасности Bool
Модель безопасности Bool содержит выражения, которые выполняют логические операции и возвращают значения типа Boolean
. Для вызова этих выражений нужно использовать логические операторы:
!
<Boolean
> – "логическое НЕ";- <
Boolean
>&&
<Boolean
> – "логическое И"; - <
Boolean
>||
<Boolean
> – "логическое ИЛИ"; - <
Boolean
>==>
<Boolean
> – "импликация" (!
<Boolean
>||
<Boolean
>).
Также модель безопасности Bool содержит выражения all
, any
и cond
.
Выражение all
выполняет "логическое И" для произвольного числа значений типа Boolean
. Возвращает значения типа Boolean
. Если передать через параметр пустой список значений ([]
), возвращает true
. Чтобы вызвать выражение, нужно использовать конструкцию:
bool.all <List<Boolean>>
Выражение any
выполняет "логическое ИЛИ" для произвольного числа значений типа Boolean
. Возвращает значения типа Boolean
. Если передать через параметр пустой список значений ([]
), возвращает false
. Чтобы вызвать выражение, нужно использовать конструкцию:
bool.any <List<Boolean>>
Выражение cond
выполняет тернарную условную операцию. Возвращает значения типа ScalarLiteral
. Чтобы вызвать выражение, нужно использовать конструкцию:
bool.cond
{ if : <Boolean> // Условие
, then : <ScalarLiteral> // Значение, возвращаемое при истинности условия
, else : <ScalarLiteral> // Значение, возвращаемое при ложности условия
}
Помимо выражений модель безопасности Bool включает правило assert
, которое работает так же, как одноименное правило модели безопасности Base.
Модель безопасности Math
Модель безопасности Math позволяет выполнять операции целочисленной арифметики.
PSL-файл с описанием модели безопасности Math находится в KasperskyOS SDK по пути:
toolchain/include/nk/basic.psl
Объект модели безопасности Math
В файле basic.psl
содержится декларация, которая создает объект модели безопасности Math с именем math
. Соответственно, включение файла basic.psl
в описание политики безопасности решения обеспечивает создание объекта модели безопасности Math по умолчанию.
Объект модели безопасности Math не имеет параметров и не может быть покрыт аудитом безопасности.
Создавать дополнительные объекты модели безопасности Math не требуется.
Методы модели безопасности Math
Модель безопасности Math содержит выражения, которые выполняют операции целочисленной арифметики. Для вызова части этих выражений нужно использовать арифметические операторы:
- <
Number
>+
<Number
> – "сложение". Возвращает значения типаNumber
. - <
Number
>-
<Number
> – "вычитание". Возвращает значения типаNumber
. - <
Number
>*
<Number
> – "умножение". Возвращает значения типаNumber
.
Другая часть включает следующие выражения:
neg
<Signed
> – "изменение знака числа". Возвращает значения типаSinged
.abs
<Singed
> – "получение модуля числа". Возвращает значения типаSinged
.sum
<List<Number>
> – "сложение чисел из списка". Возвращает значения типаNumber
. Если передать через параметр пустой список значений ([]
), возвращает0
.product
<List<Number>
> – "перемножение чисел из списка". Возвращает значения типаNumber
. Если передать через параметр пустой список значений ([]
), возвращает1
.
Для вызова этих выражений нужно использовать конструкцию:
math.<имя выражения> <параметр>
Модель безопасности Struct
Модель безопасности Struct позволяет получать доступ к структурным элементам данных.
PSL-файл с описанием модели безопасности Struct находится в KasperskyOS SDK по пути:
toolchain/include/nk/basic.psl
Объект модели безопасности Struct
В файле basic.psl
содержится декларация, которая создает объект модели безопасности Struct с именем struct
. Соответственно, включение файла basic.psl
в описание политики безопасности решения обеспечивает создание объекта модели безопасности Struct по умолчанию.
Объект модели безопасности Struct не имеет параметров и не может быть покрыт аудитом безопасности.
Создавать дополнительные объекты модели безопасности Struct не требуется.
Методы модели безопасности Struct
Модель безопасности Struct содержит выражения, которые обеспечивают доступ к структурным элементам данных. Для вызова этих выражений нужно использовать следующие конструкции:
- <
{...}
>.
<имя поля
> – "получение доступа к полю словаря". Тип возвращаемых данных соответствует типу поля словаря. - <
List | Set | Sequence | Array
>.[
<номер элемента
>]
– "получение доступа к элементу данных". Тип возвращаемых данных соответствует типу элементов. Нумерация элементов начинается с нуля. При выходе за границы набора данных выражение завершается некорректно, и модуль безопасности Kaspersky Security Module возвращает решение "запрещено". - <
HandleDesc
>.handle
– "получение SID". Возвращает значения типаHandle
. (О взаимосвязи между дескрипторами и значениями SID см. "Управление доступом к ресурсам"). - <
HandleDesc
>.rights
– "получение маски прав дескриптора". Возвращает значения типаUInt32
.
Параметры интерфейсных методов сохраняются в специальном словаре message
. Чтобы получить доступ к параметру интерфейсного метода, нужно использовать конструкцию:
message.<имя параметра интерфейсного метода>
Имя параметра нужно указать в соответствии с IDL-описанием.
Чтобы получить доступ к структурным элементам параметров, нужно использовать конструкции, соответствующие выражениям модели безопасности Struct.
В началоМодель безопасности Base
Модель безопасности Base позволяет реализовать простейшую логику.
PSL-файл с описанием модели безопасности Base находится в KasperskyOS SDK по пути:
toolchain/include/nk/base.psl
Объект модели безопасности Base
В файле base.psl
содержится декларация, которая создает объект модели безопасности Base с именем base
. Соответственно, включение файла base.psl
в описание политики безопасности решения обеспечивает создание объекта модели безопасности Base по умолчанию. Методы этого объекта можно вызывать без указания имени объекта.
Объект модели безопасности Base не имеет параметров.
Объект модели безопасности Base может быть покрыт аудитом безопасности. Условия выполнения аудита, специфичные для модели безопасности Base, отсутствуют.
Необходимость создавать дополнительные объекты модели безопасности Base возникает в следующих случаях:
- Если нужно по-разному настроить аудит безопасности для разных объектов модели безопасности Base (например, для разных объектов можно применять разные профили аудита или разные конфигурации аудита одного профиля).
- Если нужно различать вызовы методов, предоставляемых разными объектами модели безопасности Base (поскольку в данные аудита включается как имя метода модели безопасности, так и имя объекта, предоставляющего этот метод, можно понять, что был вызван метод конкретного объекта).
Методы модели безопасности Base
Модель безопасности Base содержит следующие правила:
grant ()
Имеет параметр типа
()
. Возвращает результат "разрешено".Пример:
/* Клиенту класса foo разрешено обращаться
* серверу класса bar. */
request src=foo dst=bar { grant () }
assert
<Boolean
>Возвращает результат "разрешено", если через параметр передать значение
true
. Иначе возвращает результат "запрещено".Пример:
/* Любому клиенту в решении будет разрешено обращаться к серверу класса foo,
* вызывая метод Send службы net.Net, если через параметр port метода Send
* будет передаваться значение больше 80. Иначе любому клиенту в решении
* будет запрещено обращаться к серверу класса foo, вызывая метод Send
* службы net.Net. */
request dst=foo endpoint=net.Net method=Send { assert (message.port > 80) }
deny
<Boolean | ()
>Возвращает результат "запрещено", если через параметр передать значение
true
или()
. Иначе возвращает результат "разрешено".Пример:
/* Серверу класса foo запрещено отвечать
* клиенту класса bar. */
response src=foo dst=bar { deny () }
set_level
<UInt8
>Устанавливает уровень аудита безопасности равным значению, переданному через параметр. Возвращает результат "разрешено". (Подробнее об уровне аудита безопасности см. "Описание профилей аудита безопасности".)
Пример:
/* Сущность класса foo получит решение "разрешено" от модуля безопасности
* Kaspersky Security Module, если вызовет метод интерфейса безопасности SetAuditLevel,
* чтобы изменить уровень аудита безопасности. */
security src=foo method=SetAuditLevel { set_level (message.audit_level) }
Модель безопасности Regex
Модель безопасности Regex позволяет реализовать валидацию текстовых данных по статически заданным регулярным выражениям.
PSL-файл с описанием модели безопасности Regex находится в KasperskyOS SDK по пути:
toolchain/include/nk/regex.psl
Объект модели безопасности Regex
В файле regex.psl
содержится декларация, которая создает объект модели безопасности Regex с именем re
. Соответственно, включение файла regex.psl
в описание политики безопасности решения обеспечивает создание объекта модели безопасности Regex по умолчанию.
Объект модели безопасности Regex не имеет параметров.
Объект модели безопасности Regex может быть покрыт аудитом безопасности. При этом можно задавать условия выполнения аудита, специфичные для модели безопасности Regex. Для этого в описании конфигурации аудита нужно использовать следующие конструкции:
emit : ["match"]
– аудит выполняется, если вызван методmatch
;emit : ["select"]
– аудит выполняется, если вызван методselect
;emit : ["match", "select"]
– аудит выполняется, если вызван методmatch
илиselect
;emit : []
– аудит не выполняется.
Необходимость создавать дополнительные объекты модели безопасности Regex возникает в следующих случаях:
- Если нужно по-разному настроить аудит безопасности для разных объектов модели безопасности Regex (например, для разных объектов можно применять разные профили аудита или разные конфигурации аудита одного профиля).
- Если нужно различать вызовы методов, предоставляемых разными объектами модели безопасности Regex (поскольку в данные аудита включается как имя метода модели безопасности, так и имя объекта, предоставляющего этот метод, можно понять, что был вызван метод конкретного объекта).
Методы модели безопасности Regex
Модель безопасности Regex
содержит следующие выражения:
match {text :
<Text
>, pattern :
<Text
>}
Возвращает значение типа
Boolen
. Если текстtext
соответствует регулярному выражениюpattern
, возвращаетtrue
. Иначе возвращаетfalse
.Пример:
assert (re.match {text : message.text, pattern : "^[0-9]*$"})
select {text :
<Text
>}
Предназначено для использования в качестве выражения, проверяющего выполнение условий в конструкции
choice
(о конструкцииchoice
см. "Привязка методов моделей безопасности к событиям безопасности"). Проверяет соответствие текстаtext
регулярным выражениям. В зависимости от результатов этой проверки выполняются различные варианты обработки события безопасности.Пример:
choice (re.select {text : "hello world"}) {
"^hello .*": grant ()
".*world$" : grant ()
_ : deny ()
}
Модель безопасности HashSet
Модель безопасности HashSet позволяет ассоциировать с ресурсами одномерные таблицы уникальных значений одного типа, добавлять и удалять эти значения, а также проверять, входит ли заданное значение в таблицу. Например, можно ассоциировать сущность, в контексте которой выполняется сетевой сервер, с набором портов, который разрешено открывать этому серверу. Эту ассоциацию можно использовать, чтобы проверить, допустимо ли открытие порта, инициированное сервером.
PSL-файл с описанием модели безопасности HashSet находится в KasperskyOS SDK по пути:
toolchain/include/nk/hashmap.psl
Объект модели безопасности HashSet
Чтобы использовать модель безопасности HashSet, нужно создать объект (объекты) этой модели.
Объект модели безопасности HashSet содержит пул одномерных таблиц одинакового размера, предназначенных для хранения значений одного типа. Ресурс может быть ассоциирован только с одной таблицей из пула таблиц каждого объекта модели безопасности HashSet.
Объект модели безопасности HashSet имеет следующие параметры:
type Entry
– тип значений в таблицах (поддерживаются целочисленные типы, типBoolean
, а также словари и кортежи на базе целочисленных типов и типаBoolean
);config
– конфигурация пула таблиц:set_size
– размер таблицы;pool_size
– число таблиц в пуле.
Все параметры объекта модели безопасности HashSet являются обязательными.
Пример:
policy object S : HashSet {
type Entry = UInt32
config =
{ set_size : 5
, pool_size : 2
}
}
Объект модели безопасности HashSet может быть покрыт аудитом безопасности. Условия выполнения аудита, специфичные для модели безопасности HashSet, отсутствуют.
Необходимость создавать несколько объектов модели безопасности HashSet возникает в следующих случаях:
- Если нужно по-разному настроить аудит безопасности для разных объектов модели безопасности HashSet (например, для разных объектов можно применять разные профили аудита или разные конфигурации аудита одного профиля).
- Если нужно различать вызовы методов, предоставляемых разными объектами модели безопасности HashSet (поскольку в данные аудита включается как имя метода модели безопасности, так и имя объекта, предоставляющего этот метод, можно понять, что был вызван метод конкретного объекта).
- Если нужно использовать таблицы разных размеров и/или с разными типами значений.
Правило init модели безопасности HashSet
init {sid : <Sid>}
Ассоциирует свободную таблицу из пула таблиц с ресурсом, который имеет идентификатор безопасности sid
. Если свободная таблица содержит значения после предыдущего использования, то эти значения удаляются.
Возвращает результат "разрешено", если создало ассоциацию таблицы с ресурсом.
Возвращает результат "запрещено" в следующих случаях:
- В пуле нет свободных таблиц.
- Ресурс с идентификатором безопасности
sid
уже ассоциирован с таблицей из пула таблиц используемого объекта модели безопасности HashSet. - Идентификатор безопасности
sid
вне допустимого диапазона.
Пример:
/* Запуск сущности класса Server будет разрешен, если
* при инициации запуска будет создана ассоциация этой
* сущности с таблицей. Иначе запуск сущности класса
* Server будет запрещен. */
execute dst=Server {
S.init {sid : dst_sid}
}
Правило fini модели безопасности HashSet
fini {sid : <Sid>}
Удаляет ассоциацию таблицы с ресурсом, который имеет идентификатор безопасности sid
(таблица становится свободной).
Возвращает результат "разрешено", если удалило ассоциацию таблицы с ресурсом.
Возвращает результат "запрещено" в следующих случаях:
- Ресурс с идентификатором безопасности
sid
не ассоциирован с таблицей из пула таблиц используемого объекта модели безопасности HashSet. - Идентификатор безопасности
sid
вне допустимого диапазона.
Правило add модели безопасности HashSet
add {sid : <Sid>, entry : <Entry>}
Добавляет значение entry
в таблицу, ассоциированную с ресурсом, который имеет идентификатор безопасности sid
.
Возвращает результат "разрешено" в следующих случаях:
- Правило добавило значение
entry
в таблицу. - В таблице уже содержится значение
entry
.
Возвращает результат "запрещено" в следующих случаях:
- Таблица полностью заполнена.
- Ресурс с идентификатором безопасности
sid
не ассоциирован с таблицей из пула таблиц используемого объекта модели безопасности HashSet. - Идентификатор безопасности
sid
вне допустимого диапазона.
Пример:
/* Сущность класса Server получит решение "разрешено"
* от модуля безопасности Kaspersky Security Module, вызывая метод
* интерфейса безопасности Add, если при вызове этого
* метода значение 5 будет добавлено в таблицу,
* ассоциированную с этой сущностью, или уже содержится
* в этой таблице. Иначе сущность класса Server получит
* решение "запрещено" от модуля безопасности, вызывая
* метод интерфейса безопасности Add. */
security src=Server, method=Add {
S.add {sid : src_sid, entry : 5}
}
Правило remove модели безопасности HashSet
remove {sid : <Sid>, entry : <Entry>}
Удаляет значение entry
из таблицы, ассоциированной с ресурсом, который имеет идентификатор безопасности sid
.
Возвращает результат "разрешено" в следующих случаях:
- Правило удалило значение
entry
из таблицы. - В таблице нет значения
entry
.
Возвращает результат "запрещено" в следующих случаях:
- Ресурс с идентификатором безопасности
sid
не ассоциирован с таблицей из пула таблиц используемого объекта модели безопасности HashSet. - Идентификатор безопасности
sid
вне допустимого диапазона.
Выражение contains модели безопасности HashSet
contains {sid : <Sid>, entry : <Entry>}
Проверяет, содержится ли значение entry
в таблице, ассоциированной с ресурсом, который имеет идентификатор безопасности sid
.
Возвращает значение типа Boolean
. Если значение entry
содержится в таблице, возвращает true
. Иначе возвращает false
.
Выполняется некорректно в следующих случаях:
- Ресурс с идентификатором безопасности
sid
не ассоциирован с таблицей из пула таблиц используемого объекта модели безопасности HashSet. - Идентификатор безопасности
sid
вне допустимого диапазона.
Если выражение выполнено некорректно, модуль безопасности Kaspersky Security Module возвращает решение "запрещено".
Пример:
/* Сущность класса Server получит решение "разрешено"
* от модуля безопасности Kaspersky Security Module, вызывая метод
* интерфейса безопасности Check, если значение 42
* содержится в таблице, ассоциированной с этой сущностью.
* Иначе сущность класса Server получит решение "запрещено"
* от модуля безопасности, вызывая метод интерфейса
* безопасности Check. */
security src=Server, method=Check {
assert(S.contains {sid : src_sid, entry : 42})
}
Модель безопасности StaticMap
Модель безопасности StaticMap позволяет ассоциировать с ресурсами двумерные таблицы типа "ключ–значение", читать и изменять значения ключей. Например, можно ассоциировать сущность, в контексте которой выполняется драйвер, с регионом памяти MMIO, который разрешено использовать этому драйверу. Для этого потребуется два ключа, значения которых задают начальный адрес и размер региона памяти MMIO. Эту ассоциацию можно использовать, чтобы проверить, может ли драйвер обращаться к региону памяти MMIO, к которому он пытается получить доступ.
Ключи в таблице имеют одинаковый тип и является уникальными и неизменяемыми. Значения ключей в таблице имеют одинаковый тип.
Одновременно существует два экземпляра таблицы: базовый и рабочий. Оба экземпляра инициализируются одинаковыми данными. Изменения заносятся сначала в рабочий экземпляр, а затем могут быть добавлены в базовый экземпляр или, наоборот, заменены прежними значениями из базового экземпляра. Значения ключей могут быть прочитаны как из базового, так и из рабочего экземпляра таблицы.
PSL-файл с описанием модели безопасности StaticMap находится в KasperskyOS SDK по пути:
toolchain/include/nk/staticmap.psl
Объект модели безопасности StaticMap
Чтобы использовать модель безопасности StaticMap, нужно создать объект (объекты) этой модели.
Объект модели безопасности StaticMap содержит пул двумерных таблиц типа "ключ–значение", которые имеют одинаковый размер. Ресурс может быть ассоциирован только с одной таблицей из пула таблиц каждого объекта модели безопасности StaticMap.
Объект модели безопасности StaticMap имеет следующие параметры:
type Value
– тип значений ключей в таблицах (поддерживаются целочисленные типы);config
– конфигурация пула таблиц:keys
– таблица, содержащая ключи и их значения по умолчанию (ключи имеют типKey = Text | List<UInt8>
);pool_size
– число таблиц в пуле.
Все параметры объекта модели безопасности StaticMap являются обязательными.
Пример:
policy object M : StaticMap {
type Value = UInt16
config =
{ keys:
{ "k1" : 0
, "k2" : 1
}
, pool_size : 2
}
}
Объект модели безопасности StaticMap может быть покрыт аудитом безопасности. Условия выполнения аудита, специфичные для модели безопасности StaticMap, отсутствуют.
Необходимость создавать несколько объектов модели безопасности StaticMap возникает в следующих случаях:
- Если нужно по-разному настроить аудит безопасности для разных объектов модели безопасности StaticMap (например, для разных объектов можно применять разные профили аудита или разные конфигурации аудита одного профиля).
- Если нужно различать вызовы методов, предоставляемых разными объектами модели безопасности StaticMap (поскольку в данные аудита включается как имя метода модели безопасности, так и имя объекта, предоставляющего этот метод, можно понять, что был вызван метод конкретного объекта).
- Если нужно использовать таблицы с разными наборами ключей и/или разными типами значений ключей.
Правило init модели безопасности StaticMap
init {sid : <Sid>}
Ассоциирует свободную таблицу из пула таблиц с ресурсом, который имеет идентификатор безопасности sid
. Ключи инициализируются значениями по умолчанию.
Возвращает результат "разрешено", если создало ассоциацию таблицы с ресурсом.
Возвращает результат "запрещено" в следующих случаях:
- В пуле нет свободных таблиц.
- Ресурс с идентификатором безопасности
sid
уже ассоциирован с таблицей из пула таблиц используемого объекта модели безопасности StaticMap. - Идентификатор безопасности
sid
вне допустимого диапазона.
Пример:
/* Запуск сущности класса Server будет разрешен, если
* при инициации запуска будет создана ассоциация этой
* сущности с таблицей. Иначе запуск сущности класса
* Server будет запрещен. */
execute dst=Server {
M.init {sid : dst_sid}
}
Правило fini модели безопасности StaticMap
fini {sid : <Sid>}
Удаляет ассоциацию таблицы с ресурсом, который имеет идентификатор безопасности sid
(таблица становится свободной).
Возвращает результат "разрешено", если удалило ассоциацию таблицы с ресурсом.
Возвращает результат "запрещено" в следующих случаях:
- Ресурс с идентификатором безопасности
sid
не ассоциирован с таблицей из пула таблиц используемого объекта модели безопасности StaticMap. - Идентификатор безопасности
sid
вне допустимого диапазона.
Правило set модели безопасности StaticMap
set {sid : <Sid>, key : <Key>, value : <Value>}
Задает значение value
ключу key
в рабочем экземпляре таблицы, ассоциированной с ресурсом, который имеет идентификатор безопасности sid
.
Возвращает результат "разрешено", если задало значение value
ключу key
. (Текущее значение ключа будет перезаписано, даже если оно равно новому.)
Возвращает результат "запрещено" в следующих случаях:
- Ключ
key
не содержится в таблице. - Ресурс с идентификатором безопасности
sid
не ассоциирован с таблицей из пула таблиц используемого объекта модели безопасности StaticMap. - Идентификатор безопасности
sid
вне допустимого диапазона.
Пример:
/* Сущность класса Server получит решение "разрешено"
* от модуля безопасности Kaspersky Security Module, вызывая метод
* интерфейса безопасности Set, если при вызове этого
* метода значение 2 будет задано ключу k1 в рабочем
* экземпляре таблицы, ассоциированной с этой сущностью.
* Иначе сущность класса Server получит решение "запрещено"
* от модуля безопасности, вызывая метод интерфейса
* безопасности Set. */
security src=Server, method=Set {
M.set {sid : src_sid, key : "k1", value : 2}
}
Правило commit модели безопасности StaticMap
commit {sid : <Sid>}
Копирует значения ключей из рабочего в базовый экземпляр таблицы, ассоциированной с ресурсом, который имеет идентификатор безопасности sid
.
Возвращает результат "разрешено", если скопировало значения ключей из рабочего в базовый экземпляр таблицы.
Возвращает результат "запрещено" в следующих случаях:
- Ресурс с идентификатором безопасности
sid
не ассоциирован с таблицей из пула таблиц используемого объекта модели безопасности StaticMap. - Идентификатор безопасности
sid
вне допустимого диапазона.
Правило rollback модели безопасности StaticMap
rollback {sid : <Sid>}
Копирует значения ключей из базового в рабочий экземпляр таблицы, ассоциированной с ресурсом, который имеет идентификатор безопасности sid
.
Возвращает результат "разрешено", если скопировало значения ключей из базового в рабочий экземпляр таблицы.
Возвращает результат "запрещено" в следующих случаях:
- Ресурс с идентификатором безопасности
sid
не ассоциирован с таблицей из пула таблиц используемого объекта модели безопасности StaticMap. - Идентификатор безопасности
sid
вне допустимого диапазона.
Выражение get модели безопасности StaticMap
get {sid : <Sid>, key : <Key>}
Возвращает значение ключа key
из базового экземпляра таблицы, ассоциированной с ресурсом, который имеет идентификатор безопасности sid
.
Возвращает значение типа Value
.
Выполняется некорректно в следующих случаях:
- Ключ
key
не содержится в таблице. - Ресурс с идентификатором безопасности
sid
не ассоциирован с таблицей из пула таблиц используемого объекта модели безопасности StaticMap. - Идентификатор безопасности
sid
вне допустимого диапазона.
Если выражение выполнено некорректно, модуль безопасности Kaspersky Security Module возвращает решение "запрещено".
Пример:
/* Сущность класса Server получит решение "разрешено"
* от модуля безопасности Kaspersky Security Module, вызывая метод
* интерфейса безопасности Get, если значение ключа k1
* в базовом экземпляре таблицы, ассоциированной с этой
* сущностью, отлично от нуля. Иначе сущность класса
* Server получит решение "запрещено" от модуля
* безопасности, вызывая метод интерфейса
* безопасности Get. */
security src=Server, method=Get {
assert(M.get {sid : src_sid, key : "k1"} != 0)
}
Выражение get_uncommited модели безопасности StaticMap
get_uncommited {sid: <Sid>, key: <Key>}
Возвращает значение ключа key
из рабочего экземпляра таблицы, ассоциированной с ресурсом, который имеет идентификатор безопасности sid
.
Возвращает значение типа Value
.
Выполняется некорректно в следующих случаях:
- Ключ
key
не содержится в таблице. - Ресурс с идентификатором безопасности
sid
не ассоциирован с таблицей из пула таблиц используемого объекта модели безопасности StaticMap. - Идентификатор безопасности
sid
вне допустимого диапазона.
Если выражение выполнено некорректно, модуль безопасности Kaspersky Security Module возвращает решение "запрещено".
В началоМодель безопасности Flow
Модель безопасности Flow позволяет ассоциировать с ресурсами конечные автоматы, получать и изменять состояния конечных автоматов, а также проверять, что состояние конечного автомата входит в заданный набор состояний. Например, можно ассоциировать сущность с конечным автоматом, чтобы разрешать и запрещать этой сущности использовать накопители и/или сеть в зависимости от состояния конечного автомата.
PSL-файл с описанием модели безопасности Flow находится в KasperskyOS SDK по пути:
toolchain/include/nk/flow.psl
Объект модели безопасности Flow
Чтобы использовать модель безопасности Flow, нужно создать объект (объекты) этой модели.
Один объект модели безопасности Flow позволяет ассоциировать множество ресурсов со множеством конечных автоматов, которые имеют одинаковую конфигурацию. Ресурс может быть ассоциирован только с одним конечным автоматом каждого объекта модели безопасности Flow.
Объект модели безопасности Flow имеет следующие параметры:
type State
– тип, определяющий множество состояний конечного автомата (вариантный тип, объединяющий текстовые литералы);config
– конфигурация конечного автомата:states
– множество состояний конечного автомата (должно совпадать со множеством состояний, заданных типомState
);initial
– начальное состояние конечного автомата;transitions
– описание допустимых переходов между состояниями конечного автомата.
Все параметры объекта модели безопасности Flow являются обязательными.
Пример:
policy object service_flow : Flow {
type State = "sleep" | "started" | "stopped" | "finished"
config = { states : ["sleep", "started", "stopped", "finished"]
, initial : "sleep"
, transitions : { "sleep" : ["started"]
, "started" : ["stopped", "finished"]
, "stopped" : ["started", "finished"]
}
}
}
Диаграмма состояний конечного автомата в примере
Объект модели безопасности Flow может быть покрыт аудитом безопасности. При этом можно задавать условия выполнения аудита, специфичные для модели безопасности Flow. Для этого в описании конфигурации аудита нужно использовать следующую конструкцию:
omit : [
<"состояние 1"
>[,
] ...]
– аудит не выполняется, если конечный автомат находится в одном из перечисленных состояний.
Необходимость создавать несколько объектов модели безопасности Flow возникает в следующих случаях:
- Если нужно по-разному настроить аудит безопасности для разных объектов модели безопасности Flow (например, для разных объектов можно применять разные профили аудита или разные конфигурации аудита одного профиля).
- Если нужно различать вызовы методов, предоставляемых разными объектами модели безопасности Flow (поскольку в данные аудита включается как имя метода модели безопасности, так и имя объекта, предоставляющего этот метод, можно понять, что был вызван метод конкретного объекта).
- Если нужно использовать конечные автоматы с разными конфигурациями.
Правило init модели безопасности Flow
init {sid : <Sid>}
Создает конечный автомат и ассоциирует его с ресурсом, который имеет идентификатор безопасности sid
. Созданный конечный автомат имеет конфигурацию, заданную в параметрах используемого объекта модели безопасности Flow.
Возвращает результат "разрешено", если создало ассоциацию конечного автомата с ресурсом.
Возвращает результат "запрещено" в следующих случаях:
- Ресурс с идентификатором безопасности
sid
уже ассоциирован с конечным автоматом используемого объекта модели безопасности Flow. - Идентификатор безопасности
sid
вне допустимого диапазона.
Пример:
/* Запуск сущности класса Server будет разрешен, если
* при инициации запуска будет создана ассоциация этой
* сущности с конечным автоматом. Иначе запуск сущности
* класса Server будет запрещен. */
execute dst=Server {
service_flow.init {sid : dst_sid}
}
Правило fini модели безопасности Flow
fini {sid : <Sid>}
Удаляет ассоциацию конечного автомата ресурсом, который имеет идентификатор безопасности sid
. Конечный автомат, который более не ассоциирован с ресурсом, уничтожается.
Возвращает результат "разрешено", если удалило ассоциацию конечного автомата с ресурсом.
Возвращает результат "запрещено" в следующих случаях:
- Ресурс с идентификатором безопасности
sid
не ассоциирован с конечным автоматом используемого объекта модели безопасности Flow. - Идентификатор безопасности
sid
вне допустимого диапазона.
Правило enter модели безопасности Flow
enter {sid : <Sid>, state : <State>}
Переводит конечный автомат, ассоциированный с ресурсом, который имеет идентификатор безопасности sid
, в состояние state
.
Возвращает результат "разрешено", если перевело конечный автомат в состояние state
.
Возвращает результат "запрещено" в следующих случаях:
- Переход в состояние
state
из текущего состояния не допускается конфигурацией конечного автомата. - Ресурс с идентификатором безопасности
sid
не ассоциирован с конечным автоматом используемого объекта модели безопасности Flow. - Идентификатор безопасности
sid
вне допустимого диапазона.
Пример:
/* Любому клиенту в решении будет разрешено обращаться
* к серверу класса Server, если конечный автомат,
* ассоциированный с этим сервером, будет переведен
* в состояние started при инициации обращения. Иначе
* любому клиенту в решении будет запрещено обращаться
* к серверу класса Server. */
request dst=Server {
service_flow.enter {sid : dst_sid, state : "started"}
}
Правило allow модели безопасности Flow
allow {sid : <Sid>, states : <Set<State>>}
Проверяет, что состояние конечного автомата, ассоциированного с ресурсом, который имеет идентификатор безопасности sid
, входит в набор состояний states
.
Возвращает результат "разрешено", если состояние конечного автомата входит в набор состояний states
.
Возвращает результат "запрещено" в следующих случаях:
- Состояние конечного автомата не входит в набор состояний
states
. - Ресурс с идентификатором безопасности
sid
не ассоциирован с конечным автоматом используемого объекта модели безопасности Flow. - Идентификатор безопасности
sid
вне допустимого диапазона.
Пример:
/* Любому клиенту в решении разрешено обращаться к серверу класса
* Server, если конечный автомат, ассоциированный с этим сервером,
* находится в состоянии started или stopped. Иначе любому клиенту
* в решении запрещено обращаться к серверу класса Server. */
request dst=Server {
service_flow.allow {sid : dst_sid, states : ["started", "stopped"]}
}
Выражение query модели безопасности Flow
query {sid : <Sid>}
Предназначено для использования в качестве выражения, проверяющего выполнение условий в конструкции choice
(о конструкции choice
см. "Привязка методов моделей безопасности к событиям безопасности"). Проверяет состояние конечного автомата, ассоциированного с ресурсом, который имеет идентификатор безопасности sid
. В зависимости от результатов этой проверки выполняются различные варианты обработки события безопасности.
Выполняется некорректно в следующих случаях:
- Ресурс с идентификатором безопасности
sid
не ассоциирован с конечным автоматом используемого объекта модели безопасности Flow. - Идентификатор безопасности
sid
вне допустимого диапазона.
Если выражение выполнено некорректно, модуль безопасности Kaspersky Security Module возвращает решение "запрещено".
Пример:
/* Любому клиенту в решении разрешено
* обращаться к серверу класса ResourceDriver,
* если конечный автомат, ассоциированный с этим
* сервером, находится в состоянии started или
* stopped. Иначе любому клиенту в решении
* запрещено обращаться к серверу класса
*ResourceDriver. */
request dst=ResourceDriver {
choice (service_flow.query {sid : dst_sid}) {
"started" : grant ()
"stopped" : grant ()
_ : deny ()
}
}