Содержание
Модель безопасности 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
.
Возвращает результат "запрещено" в следующих случаях:
- В пуле нет свободных таблиц.
- Ресурс
sid
уже ассоциирован с таблицей из пула таблиц используемого объекта модели безопасности HashSet. - Значение
sid
вне допустимого диапазона.
Пример:
/* Запуск процесса класса Server будет разрешен, если
* при инициации запуска будет создана ассоциация этого
* процесса с таблицей. Иначе запуск процесса класса
* Server будет запрещен. */
execute dst=Server {
S.init {sid : dst_sid}
}
Правило fini модели безопасности HashSet
fini {sid : <Sid>}
Удаляет ассоциацию таблицы с ресурсом sid
(таблица становится свободной).
Возвращает результат "разрешено", если удалило ассоциацию таблицы с ресурсом sid
.
Возвращает результат "запрещено" в следующих случаях:
- Ресурс
sid
не ассоциирован с таблицей из пула таблиц используемого объекта модели безопасности HashSet. - Значение
sid
вне допустимого диапазона.
Правило 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}
}
Правило remove модели безопасности HashSet
remove {sid : <Sid>, entry : <Entry>}
Удаляет значение entry
из таблицы, ассоциированной с ресурсом sid
.
Возвращает результат "разрешено" в следующих случаях:
- Правило удалило значение
entry
из таблицы, ассоциированной с ресурсомsid
. - В таблице, ассоциированной с ресурсом
sid
, нет значенияentry
.
Возвращает результат "запрещено" в следующих случаях:
- Ресурс
sid
не ассоциирован с таблицей из пула таблиц используемого объекта модели безопасности HashSet. - Значение
sid
вне допустимого диапазона.
Выражение 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})
}