KasperskyOS Community Edition 1.2

Пример ping

Пример ping демонстрирует использование политики безопасности решения для управления взаимодействиями между программами.

Пример ping включает в себя четыре программы: Client, Server, KlogEntity и KlogStorageEntity.

Программа Server предоставляет два идентичных метода Ping и Pong, которые получают число и возвращают измененное число:

Ping(in UInt32 value, out UInt32 result); Pong(in UInt32 value, out UInt32 result);

Программа Client вызывает оба этих метода в различной последовательности. Если вызов метода запрещен политикой безопасности решения, выводится сообщение о неудачной попытке вызова.

Системные программы KlogEntity, KlogStorageEntity выполняют аудит безопасности.

Транспортная часть примера ping практически аналогична таковой для примера echo. Единственное отличие состоит в том, что в примере ping используется два метода (Ping и Pong), а не один.

Политика безопасности решения в примере ping

Политика безопасности решения в этом примере разрешает запуск ядра KasperskyOS и программы Einit, которой разрешено запускать все программы в решении. Обращениями к программе Server управляют методы модели безопасности Flow.

Конечный автомат, описанный в конфигурации объекта request_state модели безопасности Flow, имеет два состояния: not_sent и sent. Исходное состояние – not_sent. Разрешены только переходы из not_sent в sent и обратно.

При вызове методов Ping и Pong проверяется текущее состояние объекта request_state. В состоянии not_sent разрешен только вызов Ping, при этом состояние изменится на sent. Аналогично, в состоянии sent разрешен только вызов Pong, при этом состояние изменится на not_sent.

Таким образом, методы Ping и Pong разрешено вызывать только по очереди.

Фрагмент файла security.psl

/* Политика безопасности решения для демонстрации использования модели * безопасности Flow в примере ping */ /* Включение PSL-файлов с формальными представлениями моделей безопасности * Base и Flow */ use nk.base._ use nk.flow._ /* Включение EDL-файлов */ use EDL Einit use EDL ping.Client use EDL ping.Server /* Создание объекта модели безопасности Flow */ policy object request_state : Flow { type States = "not_sent" | "sent" config = { states : [ "not_sent", "sent" ], initial : "not_sent", transitions : { "not_sent" : [ "sent" ], "sent" : [ "not_sent" ] } } } /* При запуске программой Einit программы Server * устанавливается начальное состояние конечного автомата */ execute src=Einit dst=ping.Server method=main { request_state.init { sid: dst_sid } } /* При вызове клиентом класса ping.Client метода Ping службы controlimpl.connectionimpl * сервера класса ping.Server проверяется, что объект request_state находится * в состоянии "not_sent". Если это так, то получение запроса разрешается и * объект request_state устанавливается в состояние "sent". */ request src=ping.Client dst=ping.Server endpoint=controlimpl.connectionimpl method=Ping { request_state.allow { sid: dst_sid, states: [ "not_sent" ] } request_state.enter { sid: dst_sid, state: "sent" } } /* При вызове клиентом класса ping.Client метода Pong службы controlimpl.connectionimpl * сервера класса ping.Server проверяется, что объект request_state находится * в состоянии "sent". Если это так, то получение запроса разрешается и * объект request_state устанавливается в состояние "not_sent". */ request src=ping.Client dst=ping.Server endpoint=controlimpl.connectionimpl method=Pong { request_state.allow { sid: dst_sid, states: [ "sent" ] } request_state.enter { sid: dst_sid, state: "not_sent" } } /* Серверу класса ping.Server разрешено отвечать на обращения клиента класса ping.Client, * который вызывает методы Ping и Pong службы controlimpl.connectionimpl. */ response src=ping.Server dst=ping.Client endpoint=controlimpl.connectionimpl { match method=Ping { grant () } match method=Pong { grant () } }

Описание политики безопасности в примере ping также содержит секцию тестов политики безопасности решения.

Пример такой политики см. в секции "Пример 2" раздела "Примеры тестов политик безопасности решений на базе KasperskyOS".

Полное описание политики безопасности примера ping находится в файлах security.psl.in и core.psl по следующему пути: /opt/KasperskyOS-Community-Edition-<version>/examples/ping/einit/src.

Файлы примера

Код примера и скрипты для сборки находятся по следующему пути:

/opt/KasperskyOS-Community-Edition-<version>/examples/ping

Сборка и запуск примера

См. "Сборка и запуск примеров".