KasperskyOS Community Edition 1.1

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

В начало
[Topic ssp_descr_security_models_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 (поскольку в данные аудита включается как имя метода модели безопасности, так и имя объекта, предоставляющего этот метод, можно понять, что был вызван метод конкретного объекта).
  • Если нужно использовать таблицы с разными наборами ключей и/или разными типами значений ключей.
В начало
[Topic ssp_descr_security_models_staticmap_object]

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

init {sid : <Sid>}

Ассоциирует свободную таблицу из пула таблиц с ресурсом sid. Ключи инициализируются значениями по умолчанию.

Возвращает результат "разрешено", если создало ассоциацию таблицы с ресурсом sid.

Возвращает результат "запрещено" в следующих случаях:

  • В пуле нет свободных таблиц.
  • Ресурс sid уже ассоциирован с таблицей из пула таблиц используемого объекта модели безопасности StaticMap.
  • Значение sid вне допустимого диапазона.

Пример:

/* Запуск процесса класса Server будет разрешен, если

* при инициации запуска будет создана ассоциация этого

* процесса с таблицей. Иначе запуск процесса класса

* Server будет запрещен. */

execute dst=Server {

M.init {sid : dst_sid}

}

В начало
[Topic ssp_descr_security_models_staticmap_init]

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

fini {sid : <Sid>}

Удаляет ассоциацию таблицы с ресурсом sid (таблица становится свободной).

Возвращает результат "разрешено", если удалило ассоциацию таблицы с ресурсом sid.

Возвращает результат "запрещено" в следующих случаях:

  • Ресурс sid не ассоциирован с таблицей из пула таблиц используемого объекта модели безопасности StaticMap.
  • Значение sid вне допустимого диапазона.
В начало
[Topic ssp_descr_security_models_staticmap_fini]

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

set {sid : <Sid>, key : <Key>, value : <Value>}

Задает значение value ключу key в рабочем экземпляре таблицы, ассоциированной с ресурсом sid.

Возвращает результат "разрешено", если задало значение value ключу key в рабочем экземпляре таблицы, ассоциированной с ресурсом sid. (Текущее значение ключа будет перезаписано, даже если оно равно новому.)

Возвращает результат "запрещено" в следующих случаях:

  • Ключ key не содержится в таблице, ассоциированной с ресурсом sid.
  • Ресурс 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}

}

В начало
[Topic ssp_descr_security_models_staticmap_set]

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

commit {sid : <Sid>}

Копирует значения ключей из рабочего в базовый экземпляр таблицы, ассоциированной с ресурсом sid.

Возвращает результат "разрешено", если скопировало значения ключей из рабочего в базовый экземпляр таблицы, ассоциированной с ресурсом sid.

Возвращает результат "запрещено" в следующих случаях:

  • Ресурс sid не ассоциирован с таблицей из пула таблиц используемого объекта модели безопасности StaticMap.
  • Значение sid вне допустимого диапазона.
В начало
[Topic ssp_descr_security_models_staticmap_commit]

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

rollback {sid : <Sid>}

Копирует значения ключей из базового в рабочий экземпляр таблицы, ассоциированной с ресурсом sid.

Возвращает результат "разрешено", если скопировало значения ключей из базового в рабочий экземпляр таблицы, ассоциированной с ресурсом sid.

Возвращает результат "запрещено" в следующих случаях:

  • Ресурс sid не ассоциирован с таблицей из пула таблиц используемого объекта модели безопасности StaticMap.
  • Значение sid вне допустимого диапазона.
В начало
[Topic ssp_descr_security_models_staticmap_rollback]

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

get {sid : <Sid>, key : <Key>}

Возвращает значение ключа key из базового экземпляра таблицы, ассоциированной с ресурсом sid.

Возвращает значение типа Value.

Выполняется некорректно в следующих случаях:

  • Ключ key не содержится в таблице, ассоциированной с ресурсом sid.
  • Ресурс 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)

}

В начало
[Topic ssp_descr_security_models_staticmap_get]

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

get_uncommited {sid: <Sid>, key: <Key>}

Возвращает значение ключа key из рабочего экземпляра таблицы, ассоциированной с ресурсом sid.

Возвращает значение типа Value.

Выполняется некорректно в следующих случаях:

  • Ключ key не содержится в таблице, ассоциированной с ресурсом sid.
  • Ресурс sid не ассоциирован с таблицей из пула таблиц используемого объекта модели безопасности StaticMap.
  • Значение sid вне допустимого диапазона.

Когда выражение выполняется некорректно, модуль безопасности Kaspersky Security Module возвращает решение "запрещено".

В начало
[Topic ssp_descr_security_models_staticmap_get_u]