KasperskyOS Community Edition 1.0

Модель безопасности 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 возвращает решение "запрещено".

В начало