KasperskyOS Community Edition 1.0

Содержание

Модель безопасности 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

Правило init модели безопасности HashSet

Правило fini модели безопасности HashSet

Правило add модели безопасности HashSet

Правило remove модели безопасности HashSet

Выражение contains модели безопасности HashSet

В начало

Объект модели безопасности 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

Правило init модели безопасности StaticMap

Правило fini модели безопасности StaticMap

Правило set модели безопасности StaticMap

Правило commit модели безопасности StaticMap

Правило rollback модели безопасности StaticMap

Выражение get модели безопасности StaticMap

Выражение get_uncommited модели безопасности StaticMap

В начало

Объект модели безопасности 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

Правило init модели безопасности Flow

Правило fini модели безопасности Flow

Правило enter модели безопасности Flow

Правило allow модели безопасности Flow

Выражение query модели безопасности Flow

В начало

Объект модели безопасности 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"]

}

}

}

finite_state_machine_example

Диаграмма состояний конечного автомата в примере

Объект модели безопасности 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 ()

}

}

В начало