Матричные правила связывания (<match-entry>)

Матричные правила связывания – это альтернативный способ задать правила применения политик безопасности.

Этот способ связывания позволяет группировать правила по отдельным атрибутам, которые характеризуют событие. Например, вы можете задать список политик, применяемых ко всем обращениям по определенному интерфейсу. Другой пример: с помощью одной объявленной глобально инструкции execute { grant; } можно разрешить сущности запускать любые другие сущности, при этом не требуется указывать execute call main = grant; в конфигурации каждой сущности.

Помимо этого, матричные правила связывания позволяют задавать активный профиль аудита.

Матричные правила связывания могут использоваться как внутри инструкции entity, так и снаружи (глобально). При этом внутри секции матричных правил не могут находиться инструкции entity.

Для указания отправителя и получателя IPC-сообщения, к которому применяются правила, используются атрибуты с зарезервированными именами src (для отправителя) и dst (для получателя). Если атрибуты src и dst не заданы, матричные правила действуют для всех сущностей в решении. При использовании матричных правил в секции сущности (инструкция entity) требуется указать, является ли эта сущность отправителем (src=@) или получателем (dst=@) сообщения.

Матричные правила связывания могут содержать вложенные секции правил связывания (см. элемент <match-section-inner>). Во вложенных секциях невозможно указать тип события (<match-operation>), но можно уточнить атрибуты (<match-attrs>).

Синтаксис

<match-entry>

::= <match-operation> [<match-attrs>] "{" <match-body> "}"

<match-operation> ::= "request"

| "response"

| "security"

| "execute"

<match-attrs> ::= <match-attr> {"," <match-attr>}

<match-attr> ::= <match-entity>

| <match-message>

| <match-endpoint>

| <match-interface>

| <match-method>

<match-entity> ::= <call-side> "=" <match-entity-value>

<call-side> ::= "src" | "dst"

<match-entity-value> ::= <entity-self> | <entity-name>

<entity-self> :: = "@"

<match-message> ::= "message=" <name-path>

<match-endpoint> ::= "endpoint=" <name-path>

<match-interface> ::= "interface=" <name-path>

<match-method> ::= "method=" <method-name>

<match-body> ::= [<audit-profile>] {<match-body-section>}

<match-body-section> ::= <policy-list> | <match-section-inner>

<match-section-inner> ::= "match" <match-attrs> "{" <match-body> "}"

Элементы

<match-operation>

Тип события:

  • request – обращение сущности-клиента к сущности-серверу (клиент отправляет, а сервер получает сообщение-запрос);
  • response – ответ сущности-сервера на обращение сущности-клиента (сервер отправляет, а клиент получает сообщение-ответ);
  • security – обращение сущности к Kaspersky Security System по интерфейсу безопасности;
  • execute – запуск сущности.

<match-attrs>

Список атрибутов матричных правил, перечисляемых через запятую.

<match-entity>

Атрибуты, конкретизирующие сущность.

<call-side>

Роль сущности в событии.

Атрибут src обозначает:

  • сущность-клиент, если событие имеет тип request;
  • сущность-сервер, если событие имеет тип response;
  • сущность, инициирующую обращение по интерфейсу безопасности, если событие имеет тип security;
  • сущность, запускающую другую сущность, если событие имеет тип execute.

Атрибут dst обозначает:

  • сущность-сервер, если событие имеет тип request;
  • сущность-клиент, если событие имеет тип response;
  • запускаемую сущность, если событие имеет тип execute.

<match-entity-value>

Указатель на сущность.

<entity-self>

Специальный символ @, применяемый в матричных правилах связывания внутри инструкции entity. Используется в атрибутах src или dst для указания на имя сущности из родительской инструкции entity.

<match-message>

Атрибут, конкретизирующий полное имя типа сообщения, состоящего из компонента, интерфейса и метода. Например:

message=com.example.ISomething.do

<match-endpoint>

Атрибут, конкретизирующий имя экземпляра компонента и имя реализации интерфейса. Например:

endpoint=comp.iface

<match-interface>

Атрибут, конкретизирующий полное имя интерфейса без метода. Например:

interface=com.example.ISomething

<match-method>

Атрибут, конкретизирующий имя метода. Используется для уточнения атрибутов interface или endpoint.

<match-body>

Тело инструкции, содержащее правила связывания.

<audit-profile>

Назначение профиля аудита ко всем привязкам в текущей и вложенных секциях.

<policy-list>

Привязка политик на все подходящие вызовы, заданные атрибутами в текущей и родительских секциях.

Является полным аналогом правой части привязок в секциях сущностей.

<match-section-inner>

Секция вложенных матричных правил связывания.

Наследует тип события, атрибуты и профиль аудита от родительской секции.

Пример

use audit empty;

/* Разрешает всем сущностям отправлять ответы. Указание профиля аудита "empty" означает, что информация об ответах не будет попадать в журнал событий. */

response {

audit empty;

grant;

}

/* Задает правила, применяемые при обращении "client" к "server".

В отличие от привязок в конфигурации сущности, эти правила будут действовать

только в отношении указанных сущностей и не будут объединяться с конфигурацией

второй сущности.

*/

request src=com.example.client, dst=com.example.server {

/* Вложенная секция, которая уточняет взаимодействие указанных выше сущностей.

Правила внутри этой секции применяются при вызове метода "do_something".

*/

match message=com.example.api.IServer.do_something { grant; }

/* Эта запись эквивалентна предыдущей. */

match interface=com.example.api.IServer {

match method=do_something {

grant;

}

}

}

/* Инструкция, информирующая компилятор о существовании сущностей.

Правила связывания с политиками безопасности заданы извне. */

entity com.example.client;

entity com.example.server {

/* Секция с матричными правилами связывания внутри конфигурации сущности.

Сущность выступает в роли получателя запросов (сервера),

что дает возможность использовать атрибут "endpoint". */

request dst=@, endpoint=tst.impl {

/* В соответствии с описаниями EDL, CDL и IDL

будет выполнена проверка на наличие реализаций и указанного

метода у сущности "server".

*/

match method=do_something_else { grant; }

}

}

В начало