Пример 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
Сборка и запуск примера
См. "Сборка и запуск примеров".
В начало