При проектировании информационных систем определяющее значение играет цель их функционирования. Для простых систем, где множество значений входа и выхода невелико, достаточно сформулировать функцию по значениям входа и, проверив выполнение отношения, доказать тем самым, что целевая функция системы выполняется. В подавляющем большинстве случаев задать такую функцию в явном виде не представляется возможным, так как множество значений входа системы оказывается достаточно большим или бесконечным. Такие информационные системы будем называть сложными. Для них не удается представить целевую функцию в формализованном виде. Наиболее явно эта проблема видна в системах информационной безопасности, где существуют только конечные критерии конфиденциальности, целостности и доступности информации. Отсюда возникает вопрос, как сравнить две системы информационной безопасности на их соответствие целевой функции, если протестировать систему на полном множестве входных значений невозможно. Рассмотрим проблему функционального сравнения целевой функции информационных систем на примерах систем информационной безопасности.
Подобие с точностью до изоморфизма
Рассмотрим две системы – S1, которая представляет собой черный ящик, имеющий на входе множество параметров {p1, p2, …, pn}, а на выходе значение функции f1: {(p1, p2, …, pn): p1ÎP1, p2ÎP2, …, pnÎPn}®{(f1): f1ÎF1}, и S2, которая на входе имеет множество параметров {p¢1, p¢2, …, p¢n}, а на выходе значение функции f2: {(p¢1, p¢2, …, p¢n): p¢1ÎP¢1, p¢2ÎP¢2, …, p¢nÎP¢n}®{(f2): f2ÎF2}.
При этом можно ввести отношение эквивалентности на множестве входных значений этих черных ящиков {P1´P2´…´Pn}®{P¢1´P¢2´…´P¢n}:
(p1, p2, …, pn)@(p¢1, p¢2, …, p¢n)Û Ûf1(p1, p2, …, pn)=f2(p¢1, p¢2, …, p¢n). (1)
Такие системы называются изоморфными, например ввод текста с клавиатуры компьютера и сотового телефона (рис. 1). На телефоне клавиш значительно меньше, но при их многократном нажатии можно ввести эквивалентное клавишам клавиатуры ПК количество символов с тем же значением функции.
Это наиболее простой пример определения функциональной заменимости систем. В подавляющем большинстве случаев определить изоморфную систему невозможно, так как она строится на очень большом (или бесконечном) ко- личестве входных параметров. Чтобы перейти к анализу системы, необходимо ввести несколько дополнительных терминов.
Функция ценности системы
Обозначим область значения параметров функции черного ящика (исследуемой системы) как P: P=P1´P2´…´Pn, область значения самой функции – F. Таким образом, фактически определяются природа параметров на входе черного ящика и природа выхода. Любая информационная система сужает множество параметров, данных ей более низкоуровневым интерфейсом, и формирует новую функцию, область определения которой находится уже на более узком множестве (например, системы в модели OSI или системы, находящиеся на одном уровне OSI и выполняющие некую подфункцию одной системы).
При этом любая система должна выполнять некоторую целевую функцию, ради чего она и была создана. Для такой системы можно определить функцию f: P+®F+, P+ÍP, F+ÍF.
Назовем ее функцией ценности системы, то есть это именно та функция, которую выполняет идеальная система (рис. 2). Реальная реализация может соответствовать ей или быть близкой к ней по некоторым критериям. Для выявления этих критериев рассмотрим упрощенный вариант системы, когда функция ценности определяется только входным и выходным множествами, само же отображение множеств для нас не важно. К таким системам относятся, например, все системы безопасности, для которых необходимо определить перечень нежелательных входных данных и состояние блокировки для них.
Подобные системы можно записывать уже не функцией, а кортежем значений
áP+, F+ñ. (2)
Однозначно она также может быть определена кортежем áP, P–, F, F–ñ, так как P=P–ÈP+, P–ÇP+=Æ, F=F–ÈF+, F–ÇF+=Æ.
Критические ошибки первого и второго рода
Сформулируем свойства системы, функция ценности которой задана кортежем (2). Заметим, что функция ценности не является реальной функцией системы, но сформулирована для нее как некое идеальное состояние. Для примера рассмотрим систему информационной безопасности сайтов. В качестве полного множества P входных параметров она использует глобальные массивы переменных $_REQUEST. Из данного множества параметров, количество которых бесконечно, необходимо выделить те, которые ведут к нарушению безопасности сайта (множество P+), и заблокировать их, например обнулив множество $_REQUEST (искомое множество F+). Определить весь массив P+ невозможно, поскольку он бесконечен. Именно поэтому ни одну из систем безопасности нельзя считать абсолютно защищенной, поскольку в мире каждый день открываются новые уязвимости. Существует большое количество различных фильтров к входным параметрам, и данные, не соответствующие им, блокируются. Реально они пытаются выделить максимальное множество входных параметров и тем самым покрыть множество P+. Здесь возникают две проблемы (рис. 3).
Допустим, на исходном множестве параметров определена работа двух систем (например системы безопасности и полезного приложения сайта, обрабатывающего санкционированные действия пользователей). Кортеж áP+, F+ñ является функцией ценности системы безопасности. Реальным множеством системы безопасности было определено . Отсюда видно, что
– полезное множество параметров, перекрывающее реальные уязвимости системы;
– критическая ошибка, то есть открытые уязвимости системы (их можно назвать ошибками первого рода);
– бесполезная составляющая системы безопасности, перекрывающая уязвимости там, где их нет;
– критическая ошибка, связанная с тем, что целевая функция системы не выполняется и функция ценности второй системы отчасти утеряна; такие ошибки называются ошибками второго рода.
Ошибки в системе возникают из-за того, что возможное множество входных параметров слишком велико для его полного перебора и приведения к множеству функции ценности системы.
Классы входных значений системы
Чтобы на практике определить множество входных параметров, можно задать некоторые признаки, например, для приведенной выше системы безопасности таким признаком может быть обычная кавычка или соответствующий ей ASCII-код. Как известно, кавычки очень часто используются для реализации атак SQL-инъекций на сайт. В результате можно выделить этот признак как обязательный параметр системы безопасности и определить множество Безусловно, оно будет охватывать множество реально безопасных входных параметров, а возможно, даже допускать критическую ошибку второго рода. Здесь же будет и критическая ошибка первого рода, связанная с тем, что в атаке необязательно используется кавычка. Для конкретизации множества можно выделить дополнительные признаки, тем самым подкорректировав множество и сделав его ближе к функции ценности системы.
Чтобы определить, какое из множеств ( или ) более соответствует функции ценности системы, для конечных множеств можно выделить два показателя.
Показатель критической ошибки первого рода: – здесь ближе к функции ценности системы, чем .
Это не единственный показатель системы, так как можно увеличивать множество входных значений только за счет увеличения ошибки: .
Наиболее существенным для нас является показатель критической ошибки второго рода: – здесь имеет большую критическую ошибку, чем .
Для сужения множества необходимо вводить новые критерии. Так, для приведенного выше примера дополнительным критерием, помимо кавычки, может быть наличие ключевых слов SQL. Если первый критерий определяет класс (подмножество) входных значений Pclass 1, а второй критерий – Pclass 2, то пересечением этих классов будет множество с меньшей ошибкой: ½Pclass 1ÇP–½>½(Pclass 1Ç Pclass 2ÇP–)½.
Поиск функции ценности системы
Определим множество , максимально близкое к функции ценности системы. Выше уже отмечалось, что на множестве входных параметров можно выделять классы (подмножества), определяя некие признаки входных параметров. Выполняя конъюнкцию и дизъюнкцию этих классов, можно приближать множество к искомому множеству P+. В идеале получим ситуацию, когда они равны:
. (3)
Добавляя критерии входных параметров, формируем множество При этом следует приближаться к искомому множеству, уменьшая показатели критической ошибки первого и второго рода (рис. 4).
Отметим, что только операция объединения классов может уменьшить показатель критической ошибки первого рода и только операция пересечения уменьшить ошибку второго рода, так как в первом случае множество увеличивается, а во втором сокращается.
Таким образом, для поиска функции ценности системы необходимо сначала максимально расширить множество а затем сжать его, введя дополнительные критерии параметров.
Опишем пошагово эту процедуру на примере уже рассмотренной системы безопасности защиты сайта от SQL-инъекций (рис. 5). Если классифицировать методы несанкционированного воздействия по типу, то можно выделить множество: программные, физические воздействия и человеческий фактор. Заметим, что данное множество является полным, то есть любая атака всегда принадлежит одному из этих типов. Дальнейшая классификация системы, если такая классификация очевидна, не нарушает полноту.
Поскольку представленная система относится к программным средствам, выбираем данную ветку. Любая программа на компьютере выполняется каким-либо интерпретатором или запускается непосредственно в операционной системе в исполняемом файле. В данном случае вызывают интерес только программы, выполняемые веб-сервером. Веб-сервер интерпретирует коды двух видов: команды сервера БД (в предлагаемом случае MySQL) и непосредственно код приложения (речь идет именно о коде, интерпретируемом сервером БД). Функция ценности системы, задаваемая кортежем (2), подразумевает блокировку всех данных, передаваемых через массив $_REQUEST и содержащих в себе команды MySQL, нарушающие конфиденциальность, целостность и доступность данных. Это и есть искомое множество P+. В качестве множества F+ можно рассмотреть пустой массив $_REQUEST.
Данную ветку можно снова разбить на классы, перечень которых будет полон. Это команды, передаваемые в переменных с символьным типом данных (подмножество Pclass 1), и команды, передаваемые в переменных с числовым типом данных (подмножество Pclass 2). На данном шаге искомое множество соответствует
. (4)
Множество (4) не содержит ошибок первого рода, то есть получена абсолютно безопасная система, так как заблокированы и обнулены все входные данные.
Вторая часть поиска функции ценности искомой системы – это выделение конкретных признаков множества с целью сокращения ошибок второго рода. Например, для символьных параметров обязательной является закрывающая кавычка (множество параметров по этому признаку Pclass 11). Одной только закрывающей кавычки недостаточно для того, чтобы сгенерировать команду, нарушающую конфиденциальность, целостность и доступность данных, обязательным является и наличие ключевых слов MySQL (подмножество Pclass 12). Важен также порядок ключевых слов в тексте и т.д. В результате множества Pclass 1 и Pclass 2 можно представить в виде пересечений множеств, заданных конкретизирующими их признаками:
,
,
а искомое множество функции ценности системы следующим образом:
Выясним, можно ли на основании введения дополнительных критериев когда-либо получить систему, соответствующую критерию (3), то есть соответствующую искомой функции ценности. Для конечных множеств ответ очевиден: если каждый новый критерий будет уменьшать ошибку хотя бы на единицу, то введение конечного множества критериев рано или поздно приведет к функции ценности системы. Для бесконечных систем, которыми являются, например, объекты реального мира, это, скорее всего, невозможно. Это утверждение бездоказательно, однако данный факт был замечательно проиллюстрирован известным методологом науки Лакатосом на примере поиска понятия правильного многогранника, для которого справедлива теорема Эйлера (целевая функция) о соотношениях количества граней, сторон и углов (критерии) [1].
Сравнение двух систем безопасности
При разработке системы безопасности веб-приложений на основе технологий защиты от исследования [2] возникла проблема сопоставления эффективности их работы с существующими системами безопасности. В качестве лидирующего такого продукта была взята немецкая разработка с открытым исходным кодом PHP-IDS [3]. Необходимо было сопоставить систему защиты от исследования веб-сервера [4] с программой PHP-IDS относительно функции ценности системы.
Для начала выделим подмножества и критерии, формирующие множество входных значений системы. В программе PHP-IDS это множество регулярных выражений, каждое из которых является критерием к данным на входе. Всего таких критериев 70 (файл defaul_filter.xml).
Система безопасности на основе технологии защиты от исследования использует функциональный ключ, формирующий реакцию системы в зависимости от данных на входе. Этот функциональный ключ также записывается в виде правил, представляющих собой критерии к входным параметрам и формируемый результат на выходе. То есть систему защиты от исследования нельзя оценивать кортежем (2), так как для нее важна функция связи входа и выхода, но для сравнения блокировки реальных уязвимостей он вполне подходит.
Итак, обозначим систему PHP-IDS как S, а систему защиты от исследования как S*. Соответственно, критерии первой системы формируют классы параметров Pclass 1, Pclass 2, Pclass N, а критерии второй системы – P*class 1, P*class 2, P*class M.
Вторая система не должна увеличивать показатель ошибки первого рода, то есть необходимо соблюдать
. (5)
При этом
,
.
Таким образом, утверждение (5) можно записать как
Нетрудно заметить, что для соблюдения этого соотношения необходимо для каждого класса Pclass 1 найти такой класс P*class 1, чтобы соблюдалось соотношение P*class 1ÇPclass 1=Pclass 1 или множество классов (P*class 1ÈP*class 2È…)ÇPclass 1= =P*class 1.
В результате условие (5) можно переопределить как условие " iÎ1, …, N $ k, j, …Î1, …, M:
(6)
При соблюдении данного условия критическая ошибка первого рода не увеличивается.
Таким образом, рассмотренная система на основе технологии защиты от исследования не должна увеличивать критическую ошибку первого рода по сравнению с системой PHP-IDS. Из 70 правил регулярных выражений PHP-IDS было отобрано 57 нужных (удовлетворяющих критериям нарушения конфиденциальности, целостности и доступности), которые соответствуют функции ценности системы, и для них в соответствии с утверждением (6) найдены перекрывающие условия.
Таких условий 78. Они и легли в основу программной системы защиты от исследования веб-сервера Reflexion Web [5]. Таким образом, удалось спроектировать программную систему защиты интернет-ресурсов, не увеличивающую количество уязвимостей (ошибок первого рода) по сравнению с признанным на сегодняшний день мировым лидером в области инструментов обеспечения безопасности веб-ресурсов, но при этом добавив не использованный им ресурс снижения преднамеренных рисков – применение методов защиты от исследования систем. Это является существенным шагом в области формирования нового поколения систем интернет-безопасности.
Литература
1. Лакатос И. Доказательства и опровержения. Как доказываются теоремы. М.: Наука, 1967.
2. Стюгин М.А. Защита систем от исследования. Методы и модели построения защищенных систем и управления информацией в конфликте. Германия: LAP, 2011. 132 с.
3. Семенкин Е.С., Стюгин М.А. Защита от исследования и ее применение в системах безопасности // Вестн. СибГАУ. 2009. Вып. 2 (23). С. 66–70.
4. Стюгин М.А. Методы защиты от исследования систем // Информационные войны. 2009. № 4. С. 23–29.
5. PHP IDS, Web Application Security 2.0. URL: http:// phpids.org/ (дата обращения: 17.12.2012).
6. Семенкин Е.С., Стюгин М.А. Повышение информационной безопасности веб-сервера методом защиты от исследования // Программные продукты и системы. 2009. № 3.
7. Reflexion Web. URL: http://web.infosafety.ru/ (дата обращения: 17.12.2012).