Внедрение политик безопасности в программные системы обработки информации

2011 Математические основы компьютерной безопасности №3

МАТЕМАТИЧЕСКИЕ ОСНОВЫ КОМПЬЮТЕРНОЙ БЕЗОПАСНОСТИ

УДК 004.4’2+004.43

ВНЕДРЕНИЕ ПОЛИТИК БЕЗОПАСНОСТИ В ПРОГРАММНЫЕ СИСТЕМЫ ОБРАБОТКИ ИНФОРМАЦИИ

Д. А. Стефанцов Томский государственный университет, г. Томск, Россия E-mail: d.a.stefantsov@isc.tsu.ru

Рассматривается проблема защиты систем обработки информации (СОИ) посредством интеграции их с политиками безопасности (ПБ). Проанализированы существующие методы решения этой проблемы, отмечены их недостатки и предложен оригинальный метод её решения с помощью аспектно-ориентированного программирования (АОП), лишённый этих недостатков. В отличие от традиционных реализаций АОП, в данном методе аспект ПБ присоединяется к СОИ посредством соединительного модуля без изменения программных модулей СОИ и ПБ, написанных независимо друг от друга и от соединительного модуля. Для реализации этого метода созданы инструментальные средства в составе языка АОП AspectTalk, виртуальной машины и транслятора с языка AspectTalk в язык виртуальной машины. Работа содержит краткое описание предложенного метода и перечисленных инструметальных средств его реализации.

Ключевые слова: система обработки информации, политика безопасности, аспектно-ориентированное программирование, AspectTalk, виртуальная машина.

Введение

Защита информации, хранимой и преобразуемой в системах обработки информации (СОИ), является актуальной проблемой с момента появления многопользовательских компьютерных систем [1]. При разработке защиты таких систем определяется модель нарушителя в виде формального описания набора угроз системе и/или атак на неё, а также политика безопасности (ПБ) в виде набора формальных правил противодействия последним [2]. Невозможность компрометации системы при условии следования правилам ПБ доказывается соответствующими теоремами безопасности [1-3].

Одной из первых формальных ПБ, разработанных для реализации в вычислительных системах, является модель Белла — ЛаПадулы [1]. Обзор большинства существующих моделей безопасности можно прочитать в [3]. Министерством обороны США представлена классификация вычислительных систем на основе реализации ПБ для определённых моделей нарушителя [4].

Помимо политик разграничения доступа, в понятие ПБ будем включать любые требования к защите СОИ, например использование криптографических средств защиты информации и специальных методов преобразования информации, таких, как фильтрация и кодирование.

Программную составляющую защищённой СОИ можно разделить на две части (подсистемы)—часть, реализующую целевую обработку информации (далее — часть

ОИ), и часть, реализующую программную модель ПБ (далее — часть ПБ). Примерами подобной модели могут служить следующие алгоритмы и структуры данных, реализующие действия, предписываемые ПБ:

1) учётные записи пользователей, списки прав доступа — при реализации политики разграничения доступа;

2) алгоритмы шифрования и цифровой подписи, криптографические протоколы, хранилища ключевой информации — при реализации криптографической защиты данных;

3) алгоритмы фильтрации вводимых данных для предотвращения SQL-инъекций и XSS-атак.

Для соединения этих частей в одну программу часть ОИ обычно изменяется таким образом, что при совершении действий по обработке информации производится обращение к части ПБ для определения возможности доступа к запрашиваемой информации или для её преобразования. Эти изменения делают текст программы части ОИ зависимым от текста программы части ПБ.

При изменении модели нарушителя соответствующие изменения вносятся в часть ПБ, что может повлечь за собой необходимость изменения части ОИ. Примером подобных изменений может служить реализация политики мандатного разграничения доступа SELinux для операционной системы (ОС) GNU/Linux, ранее обладавшей только дискреционной политикой разграничения доступа [5]. Тесная интеграция программных реализаций СОИ и ПБ является препятствием к внесению изменений в ПБ.

Примером СОИ, в которой части ОИ и ПБ реализованы раздельно, может служить ОС Mac OS X 10.4. В ней при необходимости организации доступа субъекта системы к её объекту вызывается специальная функция подсистемы kauth [6]. Эта функция опрашивает множество специальных модулей, ответственных за реализацию политики разграничения доступа. На основании ответов, полученных от модулей, функция вычисляет ответ подсистемы безопасности на запрос доступа: разрешение или отказ. Модули, выносящие решение в соответствии с некоторой ПБ, разрабатываются и реализуются независимо от ядра ОС в соответствии со специальными правилами и могут быть загружены в память ОС администратором системы. Таким образом, для реализации некоторой политики разграничения доступа с помощью подсистемы kauth необходимо описать совокупность модулей на некотором языке программирования, скомпилировать их и загрузить в память ОС. На рис. 1 схематически изображена работа ОС с реализованной в ней подсистемой kauth.

Гм]

,

Гм] Гм] Гм] Гм] Гм]

Ядро ОС

Рис. 1. Подсистема kauth ОС Mac OS X 10.4: цепочки модулей M определяют возможность предоставления доступов J

Подсистема kauth реализована также в ОС NetBSD [7]. В работе [8] показана возможность реализации механизма jail ОС FreeBSD в ОС NetBSD средствами подсистемы kauth.

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

Автором разработана технология и инструментальная среда создания защищённых СОИ в виде совокупности независимых частей ОИ и ПБ произвольного вида, соединяемых способом, исключающим необходимость их изменения. В основе этого способа лежит аспектно-ориентированное программирование (АОП) [9], модифицированное для случая, когда одна из объединяемых подсистем реализует ПБ, а именно: интеграция частей ОИ и ПБ осуществляется при помощи простых соединительных модулей, которые зависят одновременно от текста программы ОИ и текста присоединяемого аспекта ПБ. Части ОИ и ПБ и соединительные модули представляются в виде исходных текстов на языке АОП Аэрес1Та1к [10], специально разработанном для этой цели. В нём исходные тексты частей ОИ и ПБ являются описаниями классов объектов их предметных областей, а соединительные модули устанавливают соответствие между классами этих частей. В процессе трансляции соответствующие классы объединяются в один. Трансляция выполняется в язык интерпретируемой виртуальной машины (ВМ).

Краткое сообщение об этих средствах создания защищённых СОИ можно найти в [11]. Более развёрнутое изложение основных элементов данной технологии является целью настоящей работы.

1. Краткая характеристика АОП

АОП — это способ программирования, при котором главная подсистема (часть, выполняющая основную функцию системы) может быть реализована независимо от подчинённой подсистемы (части, выполняющей дополнительную функцию — например, реализацию ПБ) [10].

Рассмотрим СОИ, реализованную с помощью традиционного процедурного подхода и состоящую из программы Р и библиотеки Ь (рис. 2). Если в точках 3 программы Р необходим вызов процедуры Г библиотеки Ь, он будет осуществлён явно, что сделает текст программы Р зависимым от текста библиотеки Ь. В случае замены или удаления библиотеки Ь необходимо изменение текста программы Р.

Р

Рис. 2. Использование традиционного подхода в программировании. Текст программы Р зависит от текста библиотеки Ь

Разработка программ с помощью АОП основана на использовании неявных вызовов процедур. Рассмотрим СОИ, состоящую из программы Р и аспекта А (рис. 3). Аспект — это библиотека специального вида, состоящая из описаний состояний программы, а также специальных алгоритмов. Между описаниями и алгоритмами устанавливается соответствие: всякий раз, когда программа достигает состояния, подхо-

дящего под описание С, запускается соответствующий этому описанию алгоритм Д. При этом 3 — это точки выполнения программы, в которых достигаются состояния, подходящие под описание С, и осуществляется неявный вызов алгоритма Д. В данном случае текст аспекта А зависит от текста программы Р, к которой этот аспект применяется, но текст программы Р не зависит от текста аспекта А. К недостаткам данного варианта АОП можно отнести зависимость аспектов от программы, к которой они применяются, что затрудняет перенос аспектов в другие СОИ [12].

Рис. 3. Использование АОП. Текст аспекта А зависит от текста программы Р

АОП не является самостоятельным способом программирования, но реализуется в виде расширения некоторого традиционного способа программирования [12]. А именно, программа Р и алгоритм Д могут быть реализованы без применения аспектов. Аспектное расширение традиционного подхода — это присутствие описаний С состояний программы Р.

2. Метод защиты СОИ с помощью АОП

Опишем метод создания защищённых СОИ средствами АОП, в котором тексты программы и аспектов разрабатываются независимо друг от друга, а для интеграции частей используются специальные соединительные модули, которые зависят одновременно от текста программы и текста присоединяемого аспекта (рис. 4). Соединительные модули предполагаются много проще соединяемых ими частей СОИ.

Рис. 4. СОИ получена интеграцией частей с помощью соединительных модулей

Части ОИ и ПБ предполагаются представленными в виде исходных текстов на объектно-ориентированном языке программирования. Предметной областью части ОИ является целевая предметная область СОИ, предметной областью части ПБ является политика безопасности. Исходные тексты частей ОИ и ПБ — это описания классов объектов соответствующих предметных областей.

Предлагаемая технология основана на установлении соответствия между классами объектов данных предметных областей. На рис. 5 показано соответствие между классами двух предметных областей: Ишх-подобной ОС и дискреционной политики разграничения доступа.

Часть ОИ Часть ПБ

Рис. 5. Диаграмма классов и примесей Unix-подобной системы обработки файлов

Классы подчинённой системы (в данном случае — ПБ) называются примесями, а соответствие примесей части ПБ и классов части ОИ обозначается «mix». По данному соответствию на этапе трансляции происходит объединение классов и примесей в составной класс, множество член-данных которого — это объединение множеств член-данных соответствующих класса и примесей, а множество член-функций — объединение множеств член-функций соответствующих класса и примесей (рис. 6). Соответствие «mix» является альтернативной реализацией механизма множественного наследования.

Файл

Член-данные Член-функции

Имя Открыть

Дата Считать

Записать

Закрыть

Объект

Член-данные Член-функции Конверты

Идентификатор владельца Идентификатор группы Права доступа владельца Права доступа группы Права доступа прочих польз. Авторизовать Доступ

v

Файл-объект

Член-данные Член-функции Конверты

Имя Дата Открыть Считать Записать Закрыть

Идентификатор владельца Идентификатор группы Права доступа владельца Права доступа группы Права доступа прочих польз. Авторизовать Доступ

Рис. 6. Объединение класса и примеси на этапе трансляции

Для примесей определяются также специальные алгоритмы, называемые конвертами. При указании соответствия между классами и примесями для конвертов задаются шаблоны строк в виде регулярных выражений. Всякий раз, когда будет вызвана член-функция с именем а некоторого объекта из части ОИ, а будет проверено на соответствие шаблонам для конвертов соответствующих примесей. При совпадении вместо вызываемого алгоритма будет запущен соответствующий алгоритм-конверт. Алгоритм-конверт получает в качестве параметров объект, вызвавший исходную член-функцию, объект, член-функция которого была вызвана, имя член-функции, а также параметры вызова. Алгоритм-конверт формирует возвращаемое значение, в процессе чего может вызывать исходную член-функцию. Механизм конвертов позволяет реализовать вход программы в аспект.

Рассмотренный механизм примесей похож на описанный в [12], однако в [12] примесь реализована в виде базовой конструкции языка. Предлагаемый же подход основан на реализации в языке протокола метаобъектов [13] в качестве базовой конструкции с последующей реализацией примесей на самом языке программирования. Это позволяет упростить семантическую модель языка и не различать примеси, модифицирующие алгоритмы, и примеси, модифицирующие структуры данных, как это сделано

в [12].

Таким образом, реализован следующий метод построения СОИ, защищённых ПБ:

1) часть ОИ описывается в терминах классов;

2) часть ПБ описывается в терминах примесей;

3) соединительные модули описываются в виде сопоставлений класс — примесь, а

также указания шаблонов для алгоритмов-конвертов.

3. Краткая характеристика языка AspectTalk

Для создания СОИ, защищённых с помощью АОП, необходим специальный аспектно-ориентированный язык программирования (АОЯП), на котором описываются программа и её аспекты. Первым АОЯП принято считать AspectJ [14, 15] —расширение объектно-ориентированного языка программирования Java. В AspectJ описания C состояний программы P (см. рис. 3) даются в виде набора синтаксических конструкций, и состояние считается достигнутым, если выполняется действие, соответствующее той или иной конструкции языка. В других АОЯП, например в MetaclassTalk [12], под состоянием понимается состояние специальных переменных. О других способах реализации АОП можно прочитать в [16-18].

Для экспериментального исследования изложенного выше метода создания защищённых СОИ разработан и реализован АОЯП AspectTalk [10]. За его основу взят диалект Little Smalltalk объектно-ориентированного языка программирования Smalltalk [19].

Все типы данных в AspectTalk являются объектами. Среди объектов выделяется подмножество, называемое классами. С помощью классов и иерархии их наследования реализуются механизмы создания объектов и установления соответствия между объектами и их член-данными и член-функциями.

В языке AspectTalk декларативные конструкции языка Smalltalk, отвечающие, в том числе, за объявление классов и анализируемые на этапе трансляции, заменены на совокупности элементарных операций, которые исполняются на этапе выполнения программы. Это позволяет уменьшить число конструкций языка.

Язык AspectTalk содержит следующие базовые операции:

1) примитивы ВМ, с помощью которых производятся низкоуровневые действия, такие, как сложение чисел, работа с файлами;

2) посылка сообщения — это базовая операция, которая приводит к вызову член-функции, определяемой в соответствии с иерархией наследования классов;

3) возврат результата — операция, приводящая к завершению работы член-функции и возврату выполнения программы на следующую команду после соответствующей посылки сообщения;

4) присвоение — операция, с помощью которой переменным присваиваются указатели на объекты.

Как и в Smalltalk, в AspectTalk есть специальный тип данных — метаклассы, но, в отличие от Smalltalk, метаклассы в AspectTalk не только являются классами классов, но и позволяют программисту давать ВМ дополнительные указания о работе объектной системы. Эти указания определяются в виде обработчиков операции посылки сообщения от объекта к объекту и наследуются метаклассами в иерархии наследования метаклассов. Более подробное описание языка AspectTalk с примером реализации с его помощью некоторой ПБ можно найти в [10].

4. Краткая характеристика интерпретатора

В большинстве случаев АОЯП разделяется на две составляющие: базовый язык программирования, с помощью которого реализуются основная часть программы и алгоритмы аспектов, и аспектное расширение, с помощью которого аспекты присоединяются к программе. Транслятор с такого языка реализуется, в основном, следующим образом. Этап трансляции разделяется на два шага. На первом шаге программа, написанная на базовом языке программирования совместно с его аспектным расширением, транслируется в программу, содержащую только конструкции базового языка программирования. В результате выполнения этого шага все неявные вызовы процедур аспекта, которые могут быть определены без запуска программы, заменяются на явные в автоматическом режиме. Если вызов процедуры может быть осуществлён на основе информации, доступной только во время выполнения программы, то во всех предположительных местах вызова помещается обращение к специальной библиотеке, которая определяет необходимость вызова процедуры аспекта. На втором шаге осуществляется трансляция с базового языка программирования на язык машины, выполняющей программу.

Возможен другой способ реализации транслятора с АОЯП, используемый в данной работе,—в виде ВМ, внутренние структуры данных и алгоритмы которой реализуют программную модель АОЯП, и транслятора с АОЯП в язык ВМ. В этом случае трансляция осуществляется за один шаг — программа, написанная на базовом языке программирования и его аспектном расширении, транслируется в язык ВМ напрямую. Совокупность транслятора и ВМ далее будем называть интерпретатором. Интерпретация менее эффективна по времени и по памяти, чем компиляция, однако реализуется более простым способом и более наглядна.

В интерпретаторе с языка AspectTalk во многом повторяется структура интерпретатора с языка Smalltalk [19]. Основные принципы, применяемые для перевода программы с AspectTalk в язык ВМ, не новы и описаны в [20].

ВМ интерпретатора с языка AspectTalk является стековой машиной, язык которой представляет собой польскую инверсную запись команд, с помощью которых производится манипуляция данными, а также обращение к ОС, в которой запускается интерпретатор. Основной тип данных ВМ — объект. Экземпляры этого типа данных

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

Команды ВМ можно разделить на следующие группы:

— примитивы ВМ;

— команды создания объектов;

— команды, помещающие значение переменной на вершину стека;

— команды, сохраняющие в переменных объект с вершины стека;

— команды, посылающие сообщение объекту, находящемуся на вершине стека (при этом параметры сообщения также берутся из стека);

— команда возврата из процедуры;

— команды удаления и дублирования объекта на вершине стека.

Примитивы ВМ — это операции обращения к ВМ для выполнения низкоуровневых операций, такие, как сложение целых чисел, выделение памяти, вывод строки на экран, работа с файлами и т. д. Поиск переменных по имени осуществляется в соответствии с моделью лексического окружения, описанного в [21].

Основа работы интерпретатора — объектная модель. В этой модели вся система представлена в виде совокупности объектов, посылающих сообщения другим объектам. Получив сообщение, объект осуществляет его диспетчеризацию — поиск процедуры, которая должна быть выполнена в ответ на сообщение, после чего объект возвращает результат работы процедуры отправителю сообщения. Совокупность сообщений, для которых объект может найти соответствующую процедуру, называется протоколом этого объекта. В большинстве систем существует множество объектов, обладающих одинаковым протоколом. Для того чтобы упростить алгоритм поиска процедур для таких объектов, в объектно-ориентированном программировании вводится специальное понятие — класс. Класс — это объект, который осуществляет диспетчеризацию сообщений для объектов, обладающих одинаковым протоколом. Такие объекты называются экземплярами этого класса. Вводится также отношение наследования, которое организует классы в иерархию: потомок может обработать те же сообщения, что и предок, и ещё некоторые дополнительные сообщения.

В свою очередь, метаклассы — это классы классов. Они не только осуществляют диспетчеризацию сообщений, отправляемых классам, но и могут заменить у некоторых классов процедуру диспетчеризации сообщений, посылаемых экземплярам этих классов. Этот механизм называется протоколом метаобъектов и описан в [13]. С помощью этого механизма реализовано АОП в Азрее1Та1к: всякий раз, когда некоторому объекту посылается сообщение, метакласс прерывает его диспетчеризацию и проверяет посылаемое сообщение на соответствие набору регулярных выражений. Если соответствие найдено, то запускается специальный алгоритм-конверт, соответствующий регулярному выражению. Если соответствия не найдено, то метакласс возобновляет диспетчеризацию сообщений через иерархию классов.

Следует отметить, что диспетчеризация сообщений, классы, метаклассы, протоколы метаобъектов и конверты не являются встроенными конструкциями языка ВМ, а описаны на самом Азрее1Та1к в его библиотеке: для этого достаточно четырёх базовых операций языка.

Заключение

Разработаны технология и инструментальная среда создания защищённых СОИ в виде совокупности независимых частей (подсистем) — ОИ и ПБ произвольного вида,

соединённых простым способом, основанном на АОП, модифицированном для случая, когда одна из подсистем — это реализация ПБ. В составе разработанных средств:

1) язык программирования AspectTalk, обладающий конструкциями базового языка программирования Smalltalk и метаязыковыми конструкциями;

2) ВМ, выполняющая операции над данными, описанными на языке AspectTalk;

3) транслятор с языка AspectTalk в язык ВМ.

Разработанная технология предполагает:

1) описане ОИ в терминах классов;

2) описание ПБ в терминах примесей;

3) описание соединительных модулей путём сопоставлений класс — примесь и указания шаблонов для алгоритмов-конвертов.

Научная новизна исследования состоит в модификации аспектно-ориентированного подхода в программировании, состоящей в специализации средств метаязыка, а именно: в классическом АОП они используются при написании аспекта совместно с операциями объединения с основной программой, в модификации — только при написании соединительных модулей. Последнее упрощает процедуру повторного использования аспектов: вместо переписывания заново самого аспекта (в классическом подходе) переписывается только соединительный модуль (в новом подходе), который, как правило, много проще присоединяемого аспекта.

Использование разработанных методов и средств позволяет снизить затраты на внесение изменений в ПБ СОИ, а также повторно использовать реализации ПБ при разработке новых программных систем.

ЛИТЕРАТУРА

1. Bell D.E. and LaPadula L. J. Secure computer system: Unified exposition and multics interpretation: Tech. Rep. ESD-TR-75-306. The MITRE Corporation, 1976.

2. Landwehr C. E. Formal models for computer security // ACM Comput. Surv. 1981. V. 13. No. 3. P. 247-278.

3. Девянин П. Н. Анализ безопасности управления доступом и информационными потоками в компьютерных системах. М.: Радио и связь, 2006. 176с.

4. DoD 5200.28-STD (Trusted Computer System Evaluation Criteria) USA: National Computer Security Center, 1985. 116 p.

5. http://www.nsa.gov/research/selinux/index.shtml — Security-Enhanced Linux. 2009.

6. http://developer.apple.com/library/mac/#technotes/tn2127/_index.html — Technical Note TN2127. Kernel Authorization. 2010.

7. http://netbsd.gw.com/cgi-bin/man-cgi?kauth+9+NetBSD-current — NetBSD Kernel Developer’s Manual. kauth. 2009.

8. http://2008.asiabsdcon.org/papers/P3A-paper.pdf — Implementing Jails Under the kauth Framework. 2008.

9. ElradT., Filman R. E., and Bader A. Aspect-Oriented Programming // Commun. ACM. 2001. V. 44. No. 10. P. 29-32.

10. Стефанцов Д. А. Реализация политик безопасности в компьютерных системах с помощью аспектно-ориентированного программирования // Прикладная дискретная математика. 2008. №1. С. 94-100.

11. Стефанцов Д. А. Технология и инструментальная среда создания защищённых систем обработки информации // Прикладная дискретная математика. Приложение. 2009. №1. С.55-56.

12. Bouraqadi N., Seriai A., and Leblanc G. Towards unified aspect-oriented programming // ESUG 2005 Research Conference. Brussels, Belgium, 2005. 22 p.

13. Kiczales G. The Art of Meta-Object Protocol. The MIT Press, 1991. 345 p.

14. http://eclipse.org/aspectj — The AspectJ Project. 2011.

15. Kiczales G., Hilsdale E., Hugunin J., et al. Getting Started with AspectJ // Commun. ACM. 2001. V. 44. No. 10. P. 59-65.

16. Diaz Pace J. A. and CampoM.R. Analyzing the Role of Aspects in Software Design // Commun. ACM. 2001. V.44. No. 10. P. 67-73.

17. Lieberherr K., Orleans D., and Ovlinger J. Aspect-Oriented Programming with Adaptive Methods // Commun. ACM. 2001. V.44. No. 10. P. 39-41.

18. Bergmans L. and Aksit M. Composing Crosscutting Concerns Using Composition Filters // Commun. ACM. 2001. V.44. No. 10. P. 51-57.

19. Goldberg A. and Robson D. Smalltalk 80 —The Language and its implementation. Addison-Wesley, 1983. V. 1. 714 p.

20. Ахо А., Ульман Дж., Сети Р. Компиляторы: принципы, технологии и инструменты. М.: Вильямс, 2003. 768с.

21. АбельсонХ., Сассман Дж. Структура и интерпретация компьютерных программ. М.: Добросвет, 2006. 608 с.