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

В составе KasperskyOS Community Edition поставляется пример pal_tests, который демонстрирует использование PAL (Policy Assertion Language) при написании тестов политики безопасности решения. Подробнее см. "Пример pal_tests".

Пример 1

/* Набор тестов, который включает один тест. */

assert "some tests" {

/* Тест, который включает шесть тестовых примеров. */

sequence "first sequence" {

/* Ожидается, что запуск ядра KasperskyOS разрешен.

* Если это так, переменной core будет присвоено значение SID

* запущенного процесса ядра. */

core <- execute dst=kl.core.Core

/* Ожидается, что ядру KasperskyOS разрешено запустить процесс класса Einit.

* Если это так, переменной einit будет присвоено значение SID

* запущенного процесса класса Einit. */

einit <- execute src=core dst=Einit

/* Ожидается, что процессу класса Einit разрешено запустить процесса класса pal_tests.WebServer.

* Если это так, переменной ws будет присвоено значение SID

* запущенного процесса класса pal_tests.WebServer. */

ws <- execute src=einit dst=pal_tests.WebServer

/* Ожидается, что процессу класса Einit разрешено запустить процесса класса pal_tests.UserManager.

* Если это так, переменной usrmngr будет присвоено значение SID

* запущенного процесса класса pal_tests.UserManager. */

usrmngr <- execute src=einit dst=pal_tests.UserManager

/* Ожидается, что клиенту класса pal_tests.WebServer запрещено обращаться к

* серверу класса pal_tests.UserManager, вызывая метод Login службы auth

* если параметр userName содержит пустую сроку (значение по умолчанию для

* не указанного параметра строкового типа). */

deny "Web server calls Login without user name" request src=ws dst=usrmngr endpoint=auth method=Login { }

/* Ожидается, что клиенту класса pal_tests.WebServer разрешено обращаться к

* серверу класса pal_tests.UserManager, вызывая метод Login службы auth

* если параметр userName задан. */

grant "Web server calls Login with user name" request src=ws dst=usrmngr endpoint=auth method=Login { userName : "Somebody" }

}

}

Пример 2

/* Набор тестов, который включает два теста. */

assert "login tests"{

/* Начальная часть каждого из двух тестов,

* которая включает четыре тестовых примера. */

setup {

/* Ожидается, что запуск ядра KasperskyOS разрешен.

* Если это так, переменной core будет присвоено значение SID

* запущенного процесса ядра. */

core <- execute dst=kl.core.Core

/* Ожидается, что ядру KasperskyOS разрешено запустить процесс класса Einit.

* Если это так, переменной einit будет присвоено значение SID

* запущенного процесса класса Einit. */

einit <- execute src=core dst=Einit

/* Ожидается, что процессу класса Einit разрешено запустить процесса класса pal_tests.WebServer.

* Если это так, переменной ws будет присвоено значение SID

* запущенного процесса класса pal_tests.WebServer. */

ws <- execute src=einit dst=pal_tests.WebServer

/* Ожидается, что процессу класса Einit разрешено запустить процесса класса pal_tests.UserManager.

* Если это так, переменной usrmngr будет присвоено значение SID

* запущенного процесса класса pal_tests.UserManager. */

usrmngr <- execute src=einit dst=pal_tests.UserManager

}

/* Тест, который включает семь тестовых примеров: четыре тестовых примера

* в начальной части и три тестовых примера в основной части.*/

sequence "login after login is denied" {

/* Ожидается, что клиенту класса pal_tests.WebServer разрешено обращаться к

* серверу класса pal_tests.UserManager, вызывая метод Login службы auth

* если параметр userName задан. */

ws ~> usrmngr : auth.Login { userName: "Somebody" }

/* Ожидается, что серверу класса pal_tests.UserManager разрешено отвечать

* клиенту класса pal_tests.WebServer, если клиент вызывает метод Login службы auth

* и этот вызов разрешен. В качестве значения выходного параметра role

* устанавливается "user", что в данном случае означает успешную авторизацию

* пользователя с правами обычного пользователя. */

ws <~ usrmngr : auth.Login { role : "user" }

/* Ожидается, что клиенту класса pal_tests.WebServer запрещено обращаться к

* серверу класса pal_tests.UserManager, вызывая метод Login службы auth

* если ранее была выполнена успешная авторизация. */

deny ws ~> usrmngr : auth.Login { userName: "SomebodyElse" }

}

/* Тест, который включает семь тестовых примеров: четыре тестовых примера

* в начальной части и три тестовых примера в основной части.*/

sequence "logout after login is granted" {

/* Ожидается, что клиенту класса pal_tests.WebServer разрешено обращаться к

* серверу класса pal_tests.UserManager, вызывая метод Login службы auth

* если параметр userName задан. */

ws ~> usrmngr : auth.Login { userName: "Somebody" }

/* Ожидается, что серверу класса pal_tests.UserManager разрешено отвечать

* клиенту класса pal_tests.WebServer, если клиент вызывает метод Login службы auth

* и этот вызов разрешен. В качестве значения выходного параметра role

* устанавливается "user", что в данном случае означает успешную авторизацию

* пользователя с правами обычного пользователя. */

ws <~ usrmngr : auth.Login { role : "user" }

/* Ожидается, что клиенту класса pal_tests.WebServer разрешено обращаться к

* серверу класса pal_tests.UserManager, вызывая метод Logout службы auth

* если ранее была выполнена успешная авторизация. */

ws ~> usrmngr : auth.Logout {}

}

}

Пример 3

/* Набор тестов, который включает один тест. */

assert {

/* Тест, который включает десять тестовых примеров. */

sequence {

/* Ожидается, что запуск ядра KasperskyOS разрешен.

* Если это так, переменной core будет присвоено значение SID

* запущенного процесса ядра. */

core <- execute dst=kl.core.Core

/* Ожидается, что ядру KasperskyOS разрешено запустить процесс класса Einit.

* Если это так, переменной einit будет присвоено значение SID

* запущенного процесса класса Einit. */

einit <- execute src=core dst=Einit

/* Ожидается, что процессу класса Einit разрешено запустить процесса класса pal_tests.WebServer.

* Если это так, переменной ws будет присвоено значение SID

* запущенного процесса класса pal_tests.WebServer. */

ws <- execute src=einit dst=pal_tests.WebServer

/* Ожидается, что процессу класса Einit разрешено запустить процесса класса pal_tests.UserManager.

* Если это так, переменной usrmngr будет присвоено значение SID

* запущенного процесса класса pal_tests.UserManager. */

usrmngr <- execute src=einit dst=pal_tests.UserManager

/* Ожидается, что процессу класса Einit разрешено запустить процесса класса pal_tests.Service.

* Если это так, переменной srvc будет присвоено значение SID

* запущенного процесса класса pal_tests.Service. */

srvc <- execute src = einit dst = pal_tests.Service

/* Ожидается, что клиенту класса pal_tests.WebServer запрещено обращаться к

* серверу класса pal_tests.Service, вызывая метод ProcessRequest службы handler

* если ранее не была выполнена успешная авторизация. */

deny ws ~> srvc : handler.ProcessRequest { }

/* Ожидается, что клиенту класса pal_tests.WebServer разрешено обращаться к

* серверу класса pal_tests.UserManager, вызывая метод Login службы auth

* если параметр userName задан. */

grant request src=ws dst=usrmngr endpoint=auth method=Login { userName : "Somebody" }

/* Ожидается, что серверу класса pal_tests.UserManager разрешено отвечать

* клиенту класса pal_tests.WebServer, если клиент вызывает метод Login службы auth

* и этот вызов разрешен. В качестве значения выходного параметра role

* устанавливается "user", что в данном случае означает успешную авторизацию

* пользователя с правами обычного пользователя. */

grant ws <~ usrmngr : auth.Login { role : "user" }

/* Ожидается, что клиенту класса pal_tests.WebServer разрешено обращаться к

* серверу класса pal_tests.Service, вызывая метод ProcessRequest службы handler

* если ранее была выполнена успешная авторизация. */

grant ws ~> srvc : handler.ProcessRequest { }

/* Ожидается, что клиенту класса pal_tests.WebServer запрещено обращаться к

* серверу класса pal_tests.UserManager, вызывая метод AddUser службы user

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

deny request src=ws dst=usrmngr endpoint=user method=AddUser { userName : "Anonymous" }

}

}

В начало