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

21 мая 2024

ID ssp_descr_psl_syntax_binding

Чтобы создать привязку методов моделей безопасности к событию безопасности, нужно использовать следующую декларацию:

<вид события безопасности> [селекторы события безопасности] {

[профиль аудита безопасности]

<вызываемые методы моделей безопасности>

}

Вид события безопасности

Чтобы задать вид события безопасности, нужно использовать следующие спецификаторы:

  • request – отправка IPC-запросов;
  • response – отправка IPC-ответов;
  • error – отправка IPC-ответов, содержащих сведения об ошибках;
  • security – обращения процессов к модулю безопасности Kaspersky Security Module через интерфейс безопасности;
  • execute – инициация запусков процессов или запуск ядра KasperskyOS.

При взаимодействии процессов с модулем безопасности применяется механизм, отличный от IPC. Но при описании политики на обращения процессов к модулю безопасности можно смотреть как на передачу IPC-сообщений, так как процессы действительно передают модулю безопасности сообщения (в этих сообщениях не указывается приемник).

Для запуска процессов не используется механизм IPC. Но когда инициируется запуск процесса, ядро обращается к модулю безопасности, сообщая сведения об инициаторе запуска и запускаемом процессе. Поэтому с точки зрения разработчика описания политики можно считать, что запуск процесса – это передача IPC-сообщения от инициатора запуска к запускаемому процессу. Также при запуске ядра можно считать, что ядро отправляет IPC-сообщение самому себе.

Селекторы события безопасности

Селекторы события безопасности позволяют уточнить описание события безопасности заданного вида. Можно использовать следующие селекторы:

  • src=<имя класса процессов/ядро> – процессы заданного класса или ядро KasperskyOS являются источниками IPC-сообщений;
  • dst=<имя класса процессов/ядро> – процессы заданного класса или ядро являются приемниками IPC-сообщений;
  • interface=<имя интерфейса> – описывает следующие события безопасности:
    • клиенты пытаются использовать службы серверов или ядра с заданным интерфейсом;
    • процессы обращаются к модулю безопасности Kaspersky Security Module через заданный интерфейс безопасности;
    • серверы или ядро отправляют клиентам результаты использования служб с заданным интерфейсом;
  • component=<имя компонента> – описывает следующие события безопасности:
    • клиенты пытаются использовать службы серверов или ядра, предоставляемые заданным компонентом;
    • серверы или ядро отправляют клиентам результаты использования служб, предоставляемых заданным компонентом;
  • endpoint=<квалифицированное имя службы> – описывает следующие события безопасности:
    • клиенты пытаются использовать заданную службу серверов или ядра;
    • серверы или ядро отправляют клиентам результаты использования заданной службы;
  • method=<имя метода> – описывает следующие события безопасности:
    • клиенты пытаются обратиться к серверам или ядру, вызывая заданный метод службы;
    • процессы обращаются к модулю безопасности, вызывая заданный метод интерфейса безопасности;
    • серверы или ядро отправляют клиентам результаты вызова заданного метода службы;
    • ядро сообщает о своем запуске модулю безопасности, вызывая заданный метод execute-интерфейса;
    • ядро инициирует запуски процессов, вызывая заданный метод execute-интерфейса;
    • процессы инициируют запуски других процессов, в результате чего ядро вызывает заданный метод execute-интерфейса.

Классы процессов, компоненты, экземпляры компонентов, интерфейсы, службы, методы должны называться так, как они называются в IDL-, CDL-, EDL-описаниях. Ядро должно называться kl.core.Core.

Квалифицированное имя службы является конструкцией вида <путь к службе.имя службы>. Путь к службе представляет собой последовательность разделенных точкой имен экземпляров компонентов, среди которых каждый последующий экземпляр компонента вложен в предыдущий, а последний предоставляет службу с заданным именем.

Для событий вида security нужно указывать квалифицированное имя метода интерфейса безопасности, если требуется использовать интерфейс безопасности, заданный в CDL-описании. (Если требуется использовать интерфейс безопасности, заданный в EDL-описании, указывать квалифицированное имя метода не нужно.) Квалифицированное имя метода интерфейса безопасности является конструкцией вида <путь к интерфейсу безопасности.имя метода>. Путь к интерфейсу безопасности представляет собой последовательность разделенных точкой имен экземпляров компонентов, среди которых каждый последующий экземпляр компонента вложен в предыдущий, а последний поддерживает интерфейс безопасности, который включает метод с заданным именем.

Если селекторы не указаны, участниками события безопасности могут быть любые процессы и ядро (кроме событий вида security, в которых ядро не может участвовать).

Можно использовать комбинации селекторов. При этом селекторы можно разделять запятыми.

На использование селекторов есть ограничения. Для событий безопасности вида execute нельзя использовать селекторы interface, component и endpoint. Для событий безопасности вида security нельзя использовать селекторы dst, component, endpoint.

Также есть ограничения на комбинации селекторов. Для событий безопасности видов request, response и error селектор method можно использовать только совместно с одним из селекторов endpoint, interface, component или их комбинацией. (Селекторы method, endpoint, interface и component должны быть согласованы, то есть метод, служба, интерфейс и компонент должны быть связаны между собой.) Для событий безопасности вида request селектор endpoint можно использовать только совместно с селектором dst. Для событий безопасности видов response и error селектор endpoint можно использовать только совместно с селектором src.

Вид и селекторы события безопасности образуют описание события безопасности. События безопасности рекомендуется описывать максимально точно, чтобы разрешать только необходимые взаимодействия процессов между собой и с ядром. Если при обработке заданного события всегда проверяются IPC-сообщения одного и того же типа, то описание этого события является максимально точным.

Чтобы описанию события безопасности соответствовали IPC-сообщения одного типа, для этого описания должно выполняться одно из следующих условий:

  • Для событий безопасности вида request, response и error однозначно определена цепочка "интерфейсный метод-служба-класс сервера или ядро". Например, описанию события безопасности request dst=Server endpoint=net.Net method=Send соответствуют IPC-сообщения одного типа, а описанию события безопасности request dst=Server соответствуют любые IPC-сообщения, отправляемые серверу Server.
  • Для событий вида security указан метод интерфейса безопасности.
  • Для событий вида execute указан метод execute-интерфейса.

    В настоящее время поддерживается только один фиктивный метод execute-интерфейса main. Этот метод используется по умолчанию, поэтому его можно не задавать через селектор method. Таким образом, любому описанию события безопасности вида execute соответствуют IPC-сообщения одного типа.

Профиль аудита безопасности

Чтобы задать профиль аудита безопасности, нужно использовать следующую конструкцию:

audit <имя профиля аудита безопасности>

Если профиль аудита безопасности не задан, используется глобальный профиль аудита безопасности.

Вызываемые методы моделей безопасности

Чтобы вызвать метод модели безопасности, нужно использовать следующую конструкцию:

[имя объекта модели безопасности.]<имя метода модели безопасности> <параметр>

В качестве параметра могут использоваться данные поддерживаемых в языке PSL типов. При этом нужно учитывать следующие особенности:

  • Если у метода модели безопасности фактически нет параметра, то формально этот метод имеет параметр типа Unit, обозначаемый как ().
  • Если параметром метода модели безопасности является словарь {имя поля 1 : значение поля 1[, имя поля 2 : значение поля 2...]}, то этот параметр не нужно заключать в круглые скобки.
  • Если параметр метода модели безопасности не является словарем и не имеет тип Unit, то этот параметр нужно заключить в круглые скобки.

Можно вызвать один или несколько методов, используя один и тот же или разные объекты моделей безопасности. Правила моделей безопасности через параметр могут принимать значения, возвращаемые выражениями моделей безопасности.

При обработке события безопасности модулем безопасности Kaspersky Security Module выражения вызываются перед правилами, поэтому выражения не получают изменений, сделанных правилами. Например, если в декларации привязки методов модели безопасности StaticMap к событиям безопасности сначала указано правило set, а затем для того же ресурса указано выражение get_uncommited, то выражение get_uncommited вернет значение ключа, которое было до обработки текущего события безопасности, а не то, которое задано правилом set при обработке текущего события безопасности. Значение ключа, заданное правилом set при обработке текущего события безопасности, может быть возвращено выражением get_uncommited только при обработки последующих событий безопасности, если в результате обработки текущего события безопасности модуль безопасности вернет решение "разрешено". Если в результате обработки текущего события безопасности модуль безопасности вернет решение "запрещено", то все изменения, сделанные правилами и выражениями, вызванными при обработке текущего события безопасности, будут отменены.

Метод модели безопасности (правило или выражение) через параметр может принимать параметры интерфейсных методов. (О получении доступа к параметрам интерфейсных методов см. "Модель безопасности Struct"). Также метод модели безопасности через параметр может принимать значения SID процессов и ядра KasperskyOS, которые задаются ключевыми словами src_sid и dst_sid. Первое означает SID процесса (или ядра), который является источником IPC-сообщения. Второе означает SID процесса (или ядра), который является приемником IPC-сообщения (при обращениях к модулю безопасности Kaspersky Security Module dst_sid использовать нельзя).

Для вызова некоторых методов моделей безопасности можно не указывать имя объекта модели безопасности. Также часть методов моделей безопасности нужно вызывать, используя операторы, а не конструкцию вызова. Подробнее о методах моделей безопасности см. "Модели безопасности KasperskyOS".

Вложенные конструкции для привязки методов моделей безопасности к событиям безопасности

В одной декларации можно создать привязку методов моделей безопасности к разным событиям безопасности одного вида. Для этого нужно использовать match-секции, которые представляют собой конструкции следующего вида:

match <селекторы события безопасности> {

[профиль аудита безопасности]

<вызываемые методы моделей безопасности>

}

Match-секции могут быть вложены в другую match-секцию. Match-секция использует одновременно свои селекторы события безопасности и селекторы события безопасности уровня декларации и всех match-секций, которые "оборачивают" эту match-секцию. Также match-секция применяет по умолчанию профиль аудита безопасности своего контейнера (match-секции предыдущего уровня или уровня декларации), но можно задать отдельный профиль аудита безопасности для match-секции.

Также в одной декларации можно задать различные варианты обработки события безопасности в зависимости от условий, при которых это событие наступило (например, от состояния конечного автомата, ассоциированного с ресурсом). Для этого нужно использовать условные секции, которые являются элементами следующей конструкции:

choice <вызов выражения модели безопасности, проверяющего выполнение условий> {

"<условие 1>" : [{] // Условная секция 1

<вызываемые методы моделей безопасности>

[}]

"<условие 2>" : ... // Условная секция 2

...

_ : ... // Условная секция, если ни одно условие не выполняется.

}

Конструкцию choice можно использовать внутри match-секции. Условная секция использует селекторы события безопасности и профиль аудита безопасности своего контейнера.

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

В качестве выражения, проверяющего выполнение условий в конструкции choice, можно использовать только те выражения, которые предназначены специально для этого. Некоторые модели безопасности содержат такие выражения (подробнее см. "Модели безопасности KasperskyOS").

В качестве условий можно использовать только текстовые и целочисленные литералы, значения логического типа и символ _, обозначающий всегда истинное условие.

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

См. "Примеры привязок методов моделей безопасности к событиям безопасности", "Примеры описаний простейших политик безопасности решений на базе KasperskyOS", "Модели безопасности KasperskyOS".

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