Пример ping

21 мая 2024

ID appendix_ping_example

Пример 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

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

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

Вам помогла эта статья?
Что нам нужно улучшить?
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!