1. Анализ безопасности программного обеспечения В настоящее время появилось новое направление в исследовании программ - исследование их безопасности. Под безопасностью программного обеспечения (ПО) в данном случае понимается отсутствие в коде исследуемой программы элементов разрушающих программных средств (РПС), то есть вирусов, "закладок", троянских коней и т. д. Главное отличие в постановке этой задачи от традиционных задач анализа ПО состоит в том, что анализу на безопасность подвергается непосредственно исполняемый код программы, а не ее алгоритм, спецификация или текст на языке высокого уровня. Для анализа безопасности имеет смысл исследовать только конкретный экземпляр программы, предназначенный для работы в определенной ОС и на заданном компьютере. Методы анализа безопасности ПО пока еще не оформились теоретически, хотя имеется большое количество практических разработок, решающих те или иные частные задачи. В основном это средсчъа антивирусного контроля, проверяющие наличие в программе вируса из некоторого набора, или системы контроля состояния вычислительной среды, фиксирующие попытки какого-либо вмешательства в ее работу. Такие средства могут хорошо решать частные задачи, однако комплексные решения в области анализа безопасности отсутствуют, что объясняется недостаточной проработкой теории безопасности ПО и методов анализа безопасности. В задачу данной статьи входит структурирование понятий, связанных с этой проблемой и попытка формальной постановки основных задач в зтой области. Традиционные методы анализа ПО связаны с доказательством правильности программ (верификация). Начало этому направлению было положено работами Наура и Флойда, в которых сформулирована идея доказательства частичной правильности программ с помощью индуктивных промежуточных утверждений. Фундаментальный вклад в теорию верификации внес Хоор [1], создавший аппарат логических предикатов, что позволяло сформулировать и доказать положения о правильности программ. Эта теория позволяет с помощью логики предикатов доказать правильность любой программы, если заданы предусловия и постусловия ее выполненияю Трудности, которые при эгом возникают носят чисто технический характер и связаны с необходимостью составить логическое выражение для каждого оператора программы. Данные методы не могут быть применены для анализа безопасности ПО, так квк отсутсивует формальная постановка задачи анализа 6езопасности ПО и математический аппарат, который позволил бы построить модели РПС и провести формальное доказательство их на личия или отсутствия в исследуемой программе. Попытки построить формальные модели РПС пока не привели к успеху, поскольку очень сложно определить, что такое вирус или троянский конь, так как самокопирование программы или уничтожение данных могут осуществляться вполне легальными методами, без нарушения систем защиты и разграничения доступа. В зтой связи наиболее продуктивным является функциональное представление РПС в виде совокупности процедур самокопирования, преодоления систем защиты, нарушения систем разграничения доступа и т. д. [2]. 2. Методы анализа безопасности ПО Широко известны различные средства программного обеспечения обнаружения элементов РПС - от простейших антивирусных программ-сканеров до сложных отладчиков и дисассемблеров-анализаторов, так что практика в данном случае опережает теорию. На базе этих средств и выработался набор методов, которыми осуществляется анализ безопасности ПО. Предлагается разделить методы,используемые для анализа и оценки безопасности ПО, на две категории: контрольно-испытательные и логико-аналитические. В основу данного разделения положены принципиальные различия в точке зрения на исследуемый объект (программу) - контрольно-испытательные методы анализа рассматривают РПС как феномен, а логико-аналитические как ноумен. Если рассматривать РПС как феномен, то для доказательства его присутствия в системе необходимо представить зафиксированный факт нарушения безопасного состояния этой системы. Если рассматривать РПС как ноумен, то его присутствие определяется с помощью доказательства наличия отношения эквивалентности между моделью исследуемой программы и моделью РПС. В такой классификации тип используемых для анализа средств не принимается во внимание - в ее зтом преимущество по сравнению, например, с разделением на статический и динамический анализ. Комплексная система исследования безопасности ПО должна включать как контрольноиспытательные так и логико-аналитические методы анализа, используя преимущества каждого из них. С методической точки зрения логико-аналитические методы выглядят более предпочтительными, т. к. позволяют оценить надежность полученных результатов и проследить последовательность (путем обратных рассуждений) их получения. Однако, как уже говорилось, эти методы пока еще мало развиты и несомненно более трудоемки, чем контрольно-испытательные. 3. Контрольно-испытательные методы анализа безопасности ПО Контрольно-испытательные методы - это методы, р которых критерием безопасности программы служит факт регистрации в ходе тестирования программы нарушения требований по безопасности, предъявляемых в системе предполагаемого применения исследуемой программы. Тестирование может проводиться с помощью тестовых запусков, исполнения в виртуальной программной среде, с помощью символического выполнения программы, ее интерпретации и другими методами. Контрольно-испытательные методы делятся на те, в которых контролируется процесс выполнения программы и те, в которых отслеживаются изменения в операционной среде, к которым приводит запуск программы. Эти методы наиболее распространены, так как они не требуют формального анализа, позволяют использовать имеющиеся технические и программные средства и быстро ведут к созданию готовых методик. В качестве примера - можно привести методику пробного запуска в специальной среде с фиксацией попыток нарушения систем защиты и разграничения доступа [3]. Рассмотрим формальную постановку задачи анализа безопасности ПО для решения ее с помощью контрольно-испытательных методов. Пусть задано множество ограничений на функционирование программы, определяющих ее соответствие требованиям по безопасности в системе предполагаемой эксплуатации. Эти ограничения задаются в виде множества предикатов ___ С ={ сi(а1, a2, ... ам)| i = 1,N }, зависящих от множества аргументов ___ А ={ аi | i =1,М }. Это множество состоит из двух подмножеств: а) подмножества ограничений на использование ресурсов аппаратуры и операционной системы, например оперативной памяти, процессорного времени, ресурсов ОС, возможностей интерфейса и другик ресурсов. б) подмножества ограничений, регламенти- ния (от операционной системы) и исследуерующих доступ к объектам, содержащим данные (информацию), то есть областям памяти, файлам и т. д. Для доказательства том, что исследуемая программа удовлетворяет требованиям по безопасности, предъявляемым на предполагаемом обьекте эксплуатации, необходимо доказать, что программа не нарушает ни одно из условий, входящих в С. Для этого необходимо определить множество параметров ______ Р = { pi |i = 1,K }, контролируемых при тестовых запусках программы. Параметры, входящие в это множество определяются используемыми системами тестирования. Множество контролируемых параметров должно быть выбрано таким образом, что по множеству измеренных значений параметров Р можно было получить множество значений аргументов А. После проведения Т испытаний по вектору полученных значений параметров ___ _____ Pi,i=1,Т можно построить вектор значений аргументов Аi, i =1,Т. Тогда задача анализа безопасности формализуется следующим образом: ____ Программа не содержит РПС, если для любого ее испытания i=1,Т, _____ множество предикатов С = { сj ( а1i, а2i ... амi ) | j = 1,N } истинно. Очевидно, что результат выполнения программы зависит от входных данных, окружения и т.д., поэтому при ограничении ресурсов, необходимых для проведения испытаний, контрольно-испытательные методы не ограничиваются тестовыми запусками и применяют механизмы экстраполяции результатов испытаний, включают в себя методы символического тестирования и другие методы, заимствованные из достаточно проработанной теории верификации(тестирования правильности) программ [4]. Контрольно-испытательные методы анализа безопасности начинаются с определения набора контролируемых параметров среды или программы. Необходимо отметить, что этот набор параметров будет зависеть от используемого аппаратного и программного обеспечения (от операционной системы) и исследуемой программы. Затем необходимо составить программу испытаний, осуществить их и проверить требования к безопасности, предъявляемые к данной программе в предполагаемой среде эксплуатации, на запротоколированных действиях программы и изменениях в операционной среде, а также используя методы экстраполяции результатов и стохастические методы [4]. Очевидно, что наибольшую трудность здесь представляет определение набора критичных с точки зрения безопасности параметров программы и операционной среды. Они очень сильно зависят от специфики операционной системы и определяются путем экспертных оценок. Кроме того в условиях ограниченных объемов испытаний, заключение о выполнении или невыполнении требований безопасности как правило будет носить вероятностный характер. 4. Логико-аналитические методы анализа безопасности ПО При проведении анализа безопасности с помощью логико-аналитических методов строится модель программы и формально доказывается эквивалентность модели исследуемой программы и модели РПС. В простейшем случае в качестве модели программы может выступать ее битовый образ, в качестве моделей вирусов множество их сигнатур, а доказательство эквивалентности состоит в поиске сигнатур вирусов в программе. Более сложные методы используют формальные модели основанные на совокупности признаков, свойственных той или иной группе РПС [5]. Формальная постановка задачи анализа безопасности логико-аналитическими методами может быть сформулирована следующим образом: Выбирается некоторая система моделирования программ, представленная множеством моделей всех программ - Z. В выбранной системе исследуемая программа представляется своей моделью М, принадлежащей множеству Z. Должно быть задано множество моделей РПС ___ V = {vi | i=1,N}, полученное либо путем построения моделей всех известных РПС, либо путем порождения множества моделей всех возможных (в рамкахданной модели) РПС. Множество V является подмножеством множества Z. Кроме того должно быть задано отношение эквивалентности определяющее наличие РПС в модели программы, обозначим его Е (х,у). Это отношение выражает тождественность программы х и РПС у, где х - модель программы, у - модель РПС, у принадлежит множеству V. Тогда задача анализа безопасности сводится к доказательству того, что модель исследуемой программы М принадлежит отношению Е(М,v), где v принадлежит множеству V. Для проведения логико-аналитического анализа безопасности программы необходимо, во-первых, выбрать способ представления и получения моделей программы и РПС. После этого необходимо построить модель исследуемой программы и попытаться доказать ее принадлежность к отношению эквивалентности, задающему множество РПС. На основании полученных результатов можно сделать заключение о степени безопасности программы. Ключевыми понятиями здесь являются "способ представления" и "модель программы". Дело в том, что на компьютерную программу можно смотреть с очень многих точек зрения - это и алгоритм, который она реализует, и последовательность команд процессора, и файл, содержащий последовательность байтов и т. д. Все эти понятия образуют иерархию моделей компьютерных программ. Можно выбрать модель любого уровня модели и способ ее представления, необходимо только чтобы модель РПС и программы были заданы одним и тем же способом, с использованием понятий одного уровня. Другой серьезной проблемой является создание формальных моделей программ, или хотя бы определенных классов РПС. В работе [2] была предпринята попытка создания концептуальной модели одного из классов РПС - компьютерных вирусов. Механизм зщания отношения между программой и РПС определяется способом представления модели. Наиболее перспективным здесь представляется использование семантических графов [6] и объектно-ориентированных моделей [7]. 5. Проблемы анализа безопасности ПО Таким образом, задача анализа безопасности связана с решением следующих проблем: 1. Создание иерархии моделей программ и построения моделей РПС, предсказание на основании зтих моделей возникновения новых типов РПС. 2. Разработка программных средств, реализующих построение моделей программ и РПС. 3. Создание аппарата реализующего операции над моделями программ и РПС. 4. Разработка интеллектуальных систем, обеспечивающих разрешение вопроса о наличии отношения эквивалентности между моделями РПС и программ, на основе формальной постановки задачи исследования безопасности ПО. Очевидно, что задача анализа безопасности ПО по своей сложности не уступает задачам верификации и оптимизации и, следовательно, требует создания адекватного математического инструментария для формальной постановки, построения моделей РПС и математических методов доказательства безопасности ПО. Разработка этих проблем, по мнению авторов, создает предпосылки для создания фундаментальных основ теории информационной безопасности. Литература 1. У. Дал Э. Дейкстра К. Хоор. Структурное программирование. Мир. М. 1975. 2. D.P.Zegzhda, A.V.Meshkov, P.V. Semjanov "Mathematical Modelling of Computer Viruses with Automatization Their Analysis and Creation the Virus Defending Systems", Abstracts of "European Simulation Multiconference", June 1994, Barcelona Spain. 3. А. В. Мешков С. В, Молотков. Интеллектуальная система оценки подсистем защиты. Республиканская научно-техническая конференция "Теория и практика обеспечения безопасности информационных технологий", 1994 г., тезисы докладов, СПбГТУ, 1994. 4. В. В. Липаев. Тестирование программ. Радио и связь. М. 1986. 5. С. П. Расторгуев. Исследование систем защиты информации. "Информационные процессы и системы." Э12, 1993. 6. М. В. Фомина. Методы последовательного построения иерархического представления состояний сложного объекта. "Техническая кибернетика" Э6, 1985. 7. С. Шлеер, С.Меллор. Объектно-ориентированный анализ: моделирование мира в состояниях. Киев,"Диалектика", 1993.