KasperskyOS Community Edition 1.3

Примеры тестов политик безопасности решений на базе 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" } } }