KasperskyOS Community Edition 1.1

Модель безопасности HashSet

Модель безопасности HashSet позволяет ассоциировать с ресурсами одномерные таблицы уникальных значений одного типа, добавлять и удалять эти значения, а также проверять, входит ли заданное значение в таблицу. Например, можно ассоциировать процесс, в контексте которого выполняется сетевой сервер, с набором портов, который разрешено открывать этому серверу. Эту ассоциацию можно использовать, чтобы проверить, допустимо ли открытие порта, инициированное сервером.

PSL-файл с описанием модели безопасности HashSet находится в KasperskyOS SDK по пути:

toolchain/include/nk/hashmap.psl

В этом разделе

Объект модели безопасности HashSet

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

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

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

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

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

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

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

init {sid : <Sid>}

Ассоциирует свободную таблицу из пула таблиц с ресурсом sid. Если свободная таблица содержит значения после предыдущего использования, то эти значения удаляются.

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

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

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

Пример:

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

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

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

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

execute dst=Server {

S.init {sid : dst_sid}

}

В начало
[Topic ssp_descr_security_models_hashset_init]

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

fini {sid : <Sid>}

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

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

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

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

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

add {sid : <Sid>, entry : <Entry>}

Добавляет значение entry в таблицу, ассоциированную с ресурсом sid.

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

  • Правило добавило значение entry в таблицу, ассоциированную с ресурсом sid.
  • В таблице, ассоциированной с ресурсом sid, уже содержится значение entry.

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

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

Пример:

/* Процесс класса Server получит решение "разрешено" от

* модуля безопасности Kaspersky Security Module, вызывая метод интерфейса

* безопасности Add, если при вызове этого метода значение

* 5 будет добавлено в таблицу, ассоциированную с этим

* процессом, или уже содержится в этой таблице. Иначе

* процесс класса Server получит решение "запрещено" от

* модуля безопасности, вызывая метод интерфейса

* безопасности Add. */

security src=Server, method=Add {

S.add {sid : src_sid, entry : 5}

}

В начало
[Topic ssp_descr_security_models_hashset_add]

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

remove {sid : <Sid>, entry : <Entry>}

Удаляет значение entry из таблицы, ассоциированной с ресурсом sid.

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

  • Правило удалило значение entry из таблицы, ассоциированной с ресурсом sid.
  • В таблице, ассоциированной с ресурсом sid, нет значения entry.

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

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

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

contains {sid : <Sid>, entry : <Entry>}

Проверяет, содержится ли значение entry в таблице, ассоциированной с ресурсом sid.

Возвращает значение типа Boolean. Если значение entry содержится в таблице, ассоциированной с ресурсом sid, возвращает 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})

}

В начало
[Topic ssp_descr_security_models_hashset_contains]