Перед тем как рассматривать примеры, нужно ознакомиться со сведениями о моделях безопасности Struct, Base и Flow.
Пример 1
Политика безопасности решения в этом примере разрешает любые взаимодействия процессов классов Client
, Server
и Einit
между собой и с ядром KasperskyOS. При обращении процессов к модулю безопасности Kaspersky Security Module всегда будет получено решение "разрешено". Эту политику можно использовать только в качестве заглушки на ранних стадиях разработки решения на базе KasperskyOS, чтобы модуль безопасности Kaspersky Security Module "не мешал" взаимодействиям. В реальном решении на базе KasperskyOS применять такую политику недопустимо.
security.psl
execute: kl.core.Execute
use nk.base._
use EDL Einit
use EDL Client
use EDL Server
use EDL kl.core.Core
execute { grant () }
request { grant () }
response { grant () }
error { grant () }
security { grant () }
Пример 2
Политика безопасности решения в этом примере накладывает ограничения на обращения клиентов класса FsClient
к серверам класса FsDriver
. Когда клиент открывает ресурс, управляемый сервером класса FsDriver
, с этим ресурсом ассоциируется конечный автомат в состоянии unverified
. Клиенту класса FsClient
разрешено читать данные из ресурса, управляемого сервером класса FsDriver
, только если конечный автомат, ассоциированный с этим ресурсом, находится в состоянии verified
. Чтобы перевести конечный автомат, ассоциированный с ресурсом, из состояния unverified
в состояние verified
, процессу класса FsVerifier
нужно обратиться к модулю безопасности Kaspersky Security Module.
В реальном решении на базе KasperskyOS эту политику применять нельзя, поскольку разрешено избыточное множество взаимодействий процессов между собой и с ядром KasperskyOS.
security.psl
execute: kl.core.Execute
use nk.base._
use nk.flow._
use nk.basic._
policy object file_state : Flow {
type States = "unverified" | "verified"
config = {
states : ["unverified" , "verified"],
initial : "unverified",
transitions : {
"unverified" : ["verified"],
"verified" : []
}
}
}
execute { grant () }
request { grant () }
response { grant () }
use EDL kl.core.Core
use EDL Einit
use EDL FsClient
use EDL FsDriver
use EDL FsVerifier
response src=FsDriver, endpoint=operationsComp.operationsImpl, method=Open {
file_state.init {sid: message.handle.handle}
}
request src=FsClient, dst=FsDriver, endpoint=operationsComp.operationsImpl, method=Read {
file_state.allow {sid: message.handle.handle, states: ["verified"]}
}
security src=FsVerifier, method=Approve {
file_state.enter {sid: message.handle.handle, state: "verified"}
}
В начало