WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!

Pages:     || 2 | 3 | 4 | 5 |   ...   | 6 |
-- [ Страница 1 ] --

О.В. КАЗАРИН Москва 2004 УДК 681.322 Казарин О.В.

Теория и практика защиты программ. – 2004. – 450 с.

В книге рассмотрены теоретические и прикладные аспекты проблемы защиты компьютерных программ от различного рода злоумышленных действий. Особое внимание уделено моделям и методам создания высокозащищенных и алгоритмически безопасных программ для применения в системах критических приложений.

Книга предназначена для ученых и практиков в области защиты программного обеспечения для современных компьютерных систем, предназначенных для применения в различных областях человеческой деятельности. Кроме того, книга может служить пособием по дисциплинам «Защита информации», «Программное обеспечение и средства его защиты», «Обеспечение безопасности программного обеспечения автоматизированных систем» для университетов, колледжей и курсов повышения квалификации.

Рецензенты: д-р техн. наук, проф. Л.М. Ухлинов;

канд. техн. наук, ст. научн. сотр. И.В. Марков;

В.С. Максимов © О.В. Казарин, ОГЛАВЛЕНИЕ ПРЕДИСЛОВИЕ.................................................................................................. ГЛАВА 1. ВВЕДЕНИЕ В ТЕОРИЮ ОБЕСПЕЧЕНИЯ БЕЗОПАСНОСТИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ......................................... 1.1. ЗАЧЕМ И ОТ КОГО НУЖНО ЗАЩИЩАТЬ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ КОМПЬЮТЕРНЫХ СИСТЕМ................................................................. 1.2. УГРОЗЫ БЕЗОПАСНОСТИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ................ 1.3. ПРИНЯТАЯ АКСИОМАТИКА И ТЕРМИНОЛОГИЯ................................. 1.4. ЖИЗНЕННЫЙ ЦИКЛ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ КОМПЬЮТЕРНЫХ СИСТЕМ. ТЕХНОЛОГИЧЕСКАЯ И ЭКСПЛУАТАЦИОННАЯ БЕЗОПАСНОСТЬ ПРОГРАММ............................................................. 1.5. МОДЕЛИ УГРОЗ БЕЗОПАСНОСТИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ.... 1.6. ОСНОВНЫЕ ПРИНЦИПЫ ОБЕСПЕЧЕНИЯ БЕЗОПАСНОСТИ ПО............ ГЛАВА 2. ФОРМАЛЬНЫЕ МЕТОДЫ ДОКАЗАТЕЛЬСТВА ПРАВИЛЬНОСТИ ПРОГРАММ И ИХ СПЕЦИФИКАЦИЙ... 2.1. ОБЩИЕ ПОЛОЖЕНИЯ......................................................................... 2.2. ПРЕДУСЛОВИЯ И ПОСТУСЛОВИЯ В ДОКАЗАТЕЛЬСТВАХ ПРАВИЛЬНОСТИ............................................................................... 2.3. ПРАВИЛА ВЫВОДА (ДОКАЗАТЕЛЬСТВА)........................................... 2.4. ПРИМЕНЕНИЕ ПРАВИЛ ВЫВОДА....................................................... 2.5. ПРИМЕР ДОКАЗАТЕЛЬСТВА ПРАВИЛЬНОСТИ ПРОГРАММЫ ДЛЯ АЛГОРИТМА ДИСКРЕТНОГО ЭКСПОНЕНЦИРОВАНИЯ........................ ГЛАВА 3. КОНФИДЕНЦИАЛЬНЫЕ ВЫЧИСЛЕНИЯ................................ 3.1. ВОДНЫЕ ЗАМЕЧАНИЯ ПО ПРОБЛЕМАТИКЕ КОНФИДЕНЦИАЛЬНЫХ ВЫЧИСЛЕНИЙ................................................................................... 3.2. ОПИСАНИЕ ИСПОЛЬЗУЕМЫХ ПРИМИТИВОВ, СХЕМ И ПРОТОКОЛОВ. 3.3. ОБОБЩЕННЫЕ МОДЕЛИ ДЛЯ СЕТИ СИНХРОННО И АСИНХРОННО ВЗАИМОДЕЙСТВУЮЩИХ ПРОЦЕССОРОВ.......................................... 3.4. КОНФИДЕНЦИАЛЬНОЕ ВЫЧИСЛЕНИЕ ФУНКЦИИ............................... 3.5. ПРОВЕРЯЕМЫЕ СХЕМЫ РАЗДЕЛЕНИЯ СЕКРЕТА КАК КОНФИДЕНЦИАЛЬНОЕ ВЫЧИСЛЕНИЕ ФУНКЦИИ.............................. 3.6. СИНХРОННЫЕ КОНФИДЕНЦИАЛЬНЫЕ ВЫЧИСЛЕНИЯ...................... 3.7. АСИНХРОННЫЕ КОНФИДЕНЦИАЛЬНЫЕ ВЫЧИСЛЕНИЯ.................... 3.8. RL-ПРОТОТИП МОДЕЛИ СИНХРОННЫХ КОНФИДЕНЦИАЛЬНЫХ ВЫЧИСЛЕНИЙ................................................................................. ГЛАВА 4. САМОТЕСТИРУЮЩИЕСЯ И САМОКОРРЕКТИРУЮЩИЕСЯ ПРОГРАММЫ............................................................................. 4.1. ВВОДНЫЕ ЗАМЕЧАНИЯ................................................................... 4.2. ОБЩИЕ ПРИНЦИПЫ СОЗДАНИЯ ДВУХМОДУЛЬНЫХ ВЫЧИСЛИТЕЛЬНЫХ ПРОЦЕДУР И МЕТОДОЛОГИЯ САМОТЕСТИРОВАНИЯ.................................................................... 4.3. УСТОЙЧИВОСТЬ, ЛИНЕЙНАЯ И ЕДИНИЧНАЯ СОСТОЯТЕЛЬНОСТЬ... 4.4. МЕТОД СОЗДАНИЯ САМОКОРРЕКТИРУЮЩЕЙСЯ ПРОЦЕДУРЫ ВЫЧИСЛЕНИЯ ТЕОРЕТИКО-ЧИСЛОВОЙ ФУНКЦИИ ДИСКРЕТНОГО ЭКСПОНЕНЦИРОВАНИЯ.................................................................. 4.5. МЕТОД СОЗДАНИЯ САМОТЕСТИРУЮЩЕЙСЯ РАСЧЕТНОЙ ПРОГРАММЫ С ЭФФЕКТИВНЫМ ТЕСТИРУЮЩИМ МОДУЛЕМ.......... 4.6. ИССЛЕДОВАНИЯ ПРОЦЕССА ВЕРИФИКАЦИИ РАСЧЕТНЫХ ПРОГРАММ..................................................................................... 4.7. ОБЛАСТИ ПРИМЕНЕНИЯ САМОТЕСТИРУЮЩИХСЯ И САМОКОРРЕКТИРУЮЩИХСЯ ПРОГРАММ И ИХ СОЧЕТАНИЙ........... ГЛАВА 5. ЗАЩИТА ПРОГРАММ И ЗАБЫВАЮЩЕЕ МОДЕЛИРОВАНИЕ НА RAM-МАШИНАХ.......................... 5.1. ОСНОВНЫЕ ПОЛОЖЕНИЯ................................................................ 5.2. МОДЕЛИРОВАНИЕ НА ЗАБЫВАЮЩИХ RAM-МАШИНАХ................ 5.3. МОДЕЛИ И ОПРЕДЕЛЕНИЯ............................................................... 5.4. ПРЕОБРАЗОВАНИЯ, ЗАЩИЩАЮЩИЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ................................................................................ 5.5. ОПРЕДЕЛЕНИЕ ЗАБЫВАЮЩЕЙ RAM-МАШИНЫ И ЗАБЫВАЮЩЕГО МОДЕЛИРОВАНИЯ.......................................................................... 5.6. СВЕДЕНИЕ ЗАЩИТЫ ПРОГРАММ К ЗАБЫВАЮЩЕМУ МОДЕЛИРОВАНИЮ НА RAM-МАШИНЕ......................................... 5.7. НЕТРИВИАЛЬНОЕ РЕШЕНИЕ ЗАДАЧИ ЗАБЫВАЮЩЕГО МОДЕЛИРОВАНИЯ.......................................................................... 5.8. ЗАКЛЮЧИТЕЛЬНЫЕ ЗАМЕЧАНИЯ..................................................... ГЛАВА 6. КРИПТОПРОГРАММИРОВАНИЕ............................................ 6.1. КРИПТОПРОГРАММИРОВАНИЕ ПОСРЕДСТВОМ ИСПОЛЬЗОВАНИЯ ИНКРЕМЕНТАЛЬНЫХ АЛГОРИТМОВ............................................... 6.2. ОСНОВНЫЕ ЭЛЕМЕНТЫ ИНКРЕМЕНТАЛЬНОЙ КРИПТОГРАФИИ....... 6.3. МЕТОДЫ ЗАЩИТЫ ДАННЫХ ПОСРЕДСТВОМ ИНКРЕМЕНТАЛЬНЫХ АЛГОРИТМОВ МАРКИРОВАНИЯ...................................................... 6.4. ВОПРОСЫ СТОЙКОСТИ ИНКРЕМЕНТАЛЬНЫХ СХЕМ........................ 6.5. ПРИМЕНЕНИЕ ИНКРЕМЕНТАЛЬНЫХ АЛГОРИТМОВ ДЛЯ ЗАЩИТЫ ОТ ВИРУСОВ........................................................................................ ГЛАВА 7. МЕТОДЫ И СРЕДСТВА АНАЛИЗА БЕЗОПАСНОСТИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ....................................... 7.1. ОБЩИЕ ЗАМЕЧАНИЯ....................................................................... 7.2. КОНТРОЛЬНО-ИСПЫТАТЕЛЬНЫЕ МЕТОДЫ АНАЛИЗА БЕЗОПАСНОСТИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ.................................................... 7.3. ЛОГИКО-АНАЛИТИЧЕСКИЕ МЕТОДЫ КОНТРОЛЯ БЕЗОПАСНОСТИ ПРОГРАММ..................................................................................... 7.4. СРАВНЕНИЕ ЛОГИКО-АНАЛИТИЧЕСКИХ И КОНТРОЛЬНО ИСПЫТАТЕЛЬНЫХ МЕТОДОВ АНАЛИЗА БЕЗОПАСНОСТИ ПРОГРАММ..................................................................................... 7.5. СПОСОБЫ ТЕСТИРОВАНИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ПРИ ИСПЫТАНИЯХ ЕГО НА ТЕХНОЛОГИЧЕСКУЮ БЕЗОПАСНОСТЬ......... 7.6. МЕТОД РАСЧЕТА ВЕРОЯТНОСТИ НАЛИЧИЯ РПС НА ЭТАПЕ ИСПЫТАНИЙ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ВЫЧИСЛИТЕЛЬНЫХ ЗАДАЧ............................................................................................ 7.7. ПОДХОДЫ К ИССЛЕДОВАНИЮ СЛОЖНЫХ ПРОГРАММНЫХ КОМПЛЕКСОВ................................................................................. ГЛАВА 8. МЕТОДЫ ОБЕСПЕЧЕНИЯ НАДЕЖНОСТИ ПРОГРАММ, ИСПОЛЬЗУЕМЫЕ ДЛЯ КОНТРОЛЯ ИХ ТЕХНОЛОГИЧЕСКОЙ БЕЗОПАСНОСТИ............................. 8.1. ИСХОДНЫЕ ДАННЫЕ, ОПРЕДЕЛЕНИЯ И УСЛОВИЯ........................... 8.2. КРАТКИЙ АНАЛИЗ СУЩЕСТВУЮЩИХ МОДЕЛЕЙ НАДЕЖНОСТИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ.................................................... 8.3. ОПИСАНИЕ МОДЕЛИ НЕЛЬСОНА..................................................... 8.4. ОЦЕНКА ТЕХНОЛОГИЧЕСКОЙ БЕЗОПАСНОСТИ ПРОГРАММ НА БАЗЕ МЕТОДА НЕЛЬСОНА....................................................................... ГЛАВА 9. ПОДХОДЫ К ЗАЩИТЕ РАЗРАБАТЫВАЕМЫХ ПРОГРАММ ОТ АВТОМАТИЧЕСКОЙ ГЕНЕРАЦИИ ИНСТРУМЕНТАЛЬНЫМИ СРЕДСТВАМИ ПРОГРАММНЫХ ЗАКЛАДОК................................................................................. 9.1. СПОСОБЫ ВНЕДРЕНИЯ РПС ПОСРЕДСТВОМ ИНСТРУМЕНТАЛЬНЫХ СРЕДСТВ......................................................................................... 9.2. ВОЗМОЖНЫЕ МЕТОДЫ ЗАЩИТЫ ПРОГРАММ ОТ ПОТЕНЦИАЛЬНО ОПАСНЫХ ИНСТРУМЕНТАЛЬНЫХ СРЕДСТВ.................................... ГЛАВА 10. МЕТОДЫ ИДЕНТИФИКАЦИИ ПРОГРАММ И ИХ ХАРАКТЕРИСТИК.................................................................... 10.1. ИДЕНТИФИКАЦИЯ ПРОГРАММ ПО ВНУТРЕННИМ ХАРАКТЕРИСТИКАМ....................................................................... 10.2. СПОСОБЫ ОЦЕНКИ ПОДОБИЯ ЦЕЛЕВОЙ И ИССЛЕДУЕМОЙ ПРОГРАММ С ТОЧКИ ЗРЕНИЯ НАЛИЧИЯ ПРОГРАММНЫХ ДЕФЕКТОВ................. ГЛАВА 11. МЕТОДЫ И СРЕДСТВА ЗАЩИТЫ ПРОГРАММ ОТ КОМПЬЮТЕРНЫХ ВИРУСОВ................................................ 11.1. ОБЩАЯ ХАРАКТЕРИСТИКА И КЛАССИФИКАЦИЯ КОМПЬЮТЕРНЫХ ВИРУСОВ............................................................ 11.2. ОБЩАЯ ХАРАКТЕРИСТИКА СРЕДСТВ НЕЙТРАЛИЗАЦИИ КОМПЬЮТЕРНЫХ ВИРУСОВ............................................................ 11.3. КЛАССИФИКАЦИЯ МЕТОДОВ ЗАЩИТЫ ОТ КОМПЬЮТЕРНЫХ ВИРУСОВ........................................................................................ ГЛАВА 12. МЕТОДЫ ЗАЩИТЫ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ОТ ИССЛЕДОВАНИЯ...................................................................... 12.1. КЛАССИФИКАЦИЯ СРЕДСТВ ИССЛЕДОВАНИЯ ПРОГРАММ............ 12.2. СПОСОБЫ ЗАЩИТЫ ПРОГРАММ ОТ ИССЛЕДОВАНИЯ.................... 12.3. СПОСОБЫ ВСТРАИВАНИЯ ЗАЩИТНЫХ МЕХАНИЗМОВ В ПРОГРАММНОЕ ОБЕСПЕЧЕНИЯ.................................................... 12.4. ОБФУСКАЦИЯ ПРОГРАММ............................................................. ГЛАВА 13. МЕТОДЫ И СРЕДСТВА ОБЕСПЕЧЕНИЯ ЦЕЛОСТНОСТИ И ДОСТОВЕРНОСТИ ИСПОЛЬЗУЕМОГО ПРОГРАММНОГО КОДА............................................................................................ 13.1. МЕТОДЫ ЗАЩИТЫ ПРОГРАММ ОТ НЕСАНКЦИОНИРОВАННЫХ ИЗМЕНЕНИЙ................................................................................... 13.2. СХЕМА ПОДПИСИ С ВЕРИФИКАЦИЕЙ ПО ЗАПРОСУ....................... 13.3. ПРИМЕРЫ ПРИМЕНЕНИЯ СХЕМЫ ПОДПИСИ С ВЕРИФИКАЦИЕЙ ПО ЗАПРОСУ........................................................................................ ГЛАВА 14. ОСНОВНЫЕ ПОДХОДЫ К ЗАЩИТЕ ПРОГРАММ ОТ НЕСАНКЦИОНИРОВАННОГО КОПИРОВАНИЯ............... 14.1. ОСНОВНЫЕ ФУНКЦИИ СРЕДСТВ ЗАЩИТЫ ОТ КОПИРОВАНИЯ....... 14.2. ОСНОВНЫЕ МЕТОДЫ ЗАЩИТЫ ОТ КОПИРОВАНИЯ........................ ГЛАВА 15. ПРАВОВАЯ И ОРГАНИЗАЦИОННАЯ ПОДДЕРЖКА ПРОЦЕССОВ РАЗРАБОТКИ И ПРИМЕНЕНИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ. ЧЕЛОВЕЧЕСКИЙ ФАКТОР...................................................................................... 15.1. СТАНДАРТЫ И ДРУГИЕ НОРМАТИВНЫЕ ДОКУМЕНТЫ, РЕГЛАМЕНТИРУЮЩИЕ ЗАЩИЩЕННОСТЬ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ И ОБРАБАТЫВАЕМОЙ ИНФОРМАЦИИ..................... 15.2. СЕРТИФИКАЦИОННЫЕ ИСПЫТАНИЯ ПРОГРАММНЫХ СРЕДСТВ.... 15.3. БЕЗОПАСНОСТЬ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ И ЧЕЛОВЕЧЕСКИЙ ФАКТОР. ПСИХОЛОГИЯ ПРОГРАММИРОВАНИЯ.. ЗАКЛЮЧЕНИЕ............................................................................................... ПРИЛОЖЕНИЯ............................................................................................... ПРИЛОЖЕНИЕ 1. ОСНОВНЫЕ РЕЗУЛЬТАТЫ ИЗ ТЕОРИИ СЛОЖНОСТИ ВЫЧИСЛЕНИЙ И КРИПТОЛОГИИ..................................................... ПРИЛОЖЕНИЕ 2. ПЕРЕЧЕНЬ ТИПОВЫХ ДЕФЕКТОВ РАЗРАБОТКИ, ВЛИЯЮЩИХ НА БЕЗОПАСНОСТЬ ПО, И ПРОГРАММНЫХ ЗАКЛАДОК, ЗАМАСКИРОВАННЫХ ПОД ДЕФЕКТЫ РАЗРАБОТКИ. ФОРМЫ ПРОЯВЛЕНИЯ ПРОГРАММНЫХ ДЕФЕКТОВ...................................... ПРИЛОЖЕНИЕ 3. ХАРАКТЕРИСТИКИ ПРОГРАММ С ТОЧКИ ЗРЕНИЯ ВЛИЯНИЯ НА ИХ ЗАЩИЩЕННОСТЬ И РЕЗУЛЬТАТЫ РАБОТЫ........... ПРИЛОЖЕНИЕ 4. ПЕРЕЧЕНЬ МЕЖДУНАРОДНЫХ НОРМАТИВНЫХ ДОКУМЕНТОВ, СВЯЗАННЫХ С ПРОБЛЕМАТИКОЙ ОБЕСПЕЧЕНИЯ БЕЗОПАСНОСТИ ПО....................................................................... ПРИЛОЖЕНИЕ 5. ПРАКТИЧЕСКАЯ РЕАЛИЗАЦИЯ ТЕХНОЛОГИИ КОНТРОЛЯ ОТСУТСТВИЯ НЕДЕКЛАРИРОВАННЫХ ВОЗМОЖНОСТЕЙ В ПРОГРАММНЫХ ПРОДУКТАХ ПРИ ИХ СЕРТИФИКАЦИИ ПО ТРЕБОВАНИЯМ БЕЗОПАСНОСТИ ИНФОРМАЦИИ............................. ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ....................................................................... ПРЕДИСЛОВИЕ «Целью настоящего курса является углубление и развитие трудностей, лежащих в основе современной теории...» А.А. Власов Из кн. «Физики шутят». – М.: Мир, 1993.

Центральным информационно-активным звеном любых компьютерных систем является их математическое, программное, информационное и лингвистическое обеспечение. Современные компьютеры и сети компьютеров, обладающие «потрясающими» вычислительными, информационными и телекоммуникационными возможностями, со своим сложным «внутренним технологическим миром», остаются широким полем деятельности для человека, который создает и совершенствует и сами компьютеры, и те задачи, которые они решают. При этом основным техническим инструментом для этого является программное обеспечение, которое наряду с интеллектом человека, его навыками и знаниями, позволяет создавать сложные и порою удивительные компьютерные объекты, существенно расширяющие горизонты деятельности человека, облегчающие нашу повседневную жизнь и делающие ее активнее и разнообразнее.

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

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

Таким образом, необходимость внесения в программное обеспечение защитных функций на всем протяжении его жизненного цикла от этапа уяснения замысла на создание программ и их разработки до этапов испытаний, эксплуатации, модернизации и сопровождения программ, не вызывает сомнений.

В связи с этим, в гл. 1 рассмотрены методологические основы проблемы защиты программ различных объектов автоматизации. Описаны жизненный цикл современных программных комплексов, модели угроз и принципы обеспечения безопасности программного обеспечения.

В главах 2-10 рассмотрены современные методы обеспечения безопасности программ на этапе их разработки и испытаний. Важное место отводится методам создания алгоритмически безопасного программного обеспечения, позволяющим «игнорировать», а в ряде случаев и устранять, программные дефекты деструктивного характера. При этом в главах 2 и рассматриваются методы высокоуровневой защиты программ от так называемых «программных закладок», а в главах 4 и 5 – теоретические основы защиты программ от компьютерных вирусов и от копирования. В главах 6-10 рассматриваются вопросы обеспечения технологической безопасности программ, реализуемые на этапах тестирования и испытания программных комплексов и методы защиты программ от генерации программных закладок инструментальными средствами.

Современные методы обеспечения эксплуатационной безопасности программного обеспечения рассматриваются в главах 11-14. Основное внимание уделено методам обеспечения целостности и достоверности программного кода, защите программ от несанкционированного копирования и распространения. Для этих же целей служат также и нормативно-правовые и организационно-технические методы обеспечения качества разработки и эксплуатации программ, а также современные методы сертификации программных комплексов. Данные вопросы рассматриваются в заключительной 15-й главе книги. Кроме того, исследуются особенности поведения программиста – разработчика, который может осуществлять, в том числе, широкий набор злоумышленных действий.

В заключении публикуется обширный список литературы, посвященной современной проблематике защиты программного обеспечения, а также ряд приложений, в которых приводятся необходимые базовые сведения из теории сложности вычислений и криптологии, вспомогательные сведения о характеристиках и типах программ, так или иначе связанных с проявлением программных дефектов, список международных рекомендаций и стандартов, посвященных проблематике обеспечения безопасности программ. Кроме того, в приложении рассматриваются вопросы применения современных контрольно испытательных методов для проведения сертификационных испытаний на отсутствие в заявленных для сертификации программах недекларированных возможностей.

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

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

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

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

С благодарностью, автор ГЛАВА 1. ВВЕДЕНИЕ В ТЕОРИЮ ОБЕСПЕЧЕНИЯ БЕЗОПАСНОСТИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ 1.1. ЗАЧЕМ И ОТ КОГО НУЖНО ЗАЩИЩАТЬ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ КОМПЬЮТЕРНЫХ СИСТЕМ Безопасность программного обеспечения в широком смысле является свойством данного программного обеспечения функционировать без проявления различных негативных последствий для конкретной компьютерной системы. Под уровнем безопасности программного обеспечения (ПО) понимается вероятность того, что при заданных условиях в процессе его эксплуатации будет получен функционально пригодный результат. Причины, приводящие к функционально непригодному результату, могут быть разными: сбои компьютерных систем, ошибки программистов и операторов, дефекты в программах. При этом дефекты принято рассматривать двух типов: преднамеренные и непреднамеренные. Первые являются, как правило, результатом злоумышленных действий, вторые - ошибочных действий человека.

При исследовании проблем защиты ПО от преднамеренных дефектов неизбежна постановка следующих вопросов:

• кто потенциально может осуществить практическое внедрение программных дефектов деструктивного воздействия в исполняемый программный код?

• каковы возможные мотивы действий субъекта, осуществляющего разработку таких дефектов?

• как можно идентифицировать наличие программного дефекта?

• как можно отличить преднамеренный программный дефект от программной ошибки?

• каковы наиболее вероятные последствия активизации деструктивных программных средств при эксплуатации компьютерных систем?

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

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

• в результате инициативных злоумышленных действий непосредственных разработчиков алгоритмов и программ;

• в результате штатной деятельности специальных служб и организаций, а также отдельных злоумышленников;

• в результате применения инструментальных средств проектирования ПО, несущих вредоносное свойство автоматической генерации деструктивных программных средств.

Для описания мотивов злоумышленных действий при разработке программных компонентов необходим психологический «портрет» злоумышленника, что требует проведения специальных исследований психологов и криминологов в области психологии программирования (психологии криминального программирования, см. главу 15). Однако некоторые мотивы очевидны уже сейчас и могут диктоваться следующим:

• неустойчивым психологическим состоянием алгоритмистов и программистов, обусловленным сложностью взаимоотношений в коллективе, перспективой потерять работу, резким снижением уровня благосостояния, отсутствием уверенности в завтрашнем дне и т.п., в результате чего может возникнуть, а впоследствии быть реализована, мысль отмщения;

• неудовлетворенностью личных амбиций непосредственного разработчика алгоритма или программы, считающего себя непризнанным талантом, в результате чего может появиться стремление доказать и показать кому-либо (в том числе и самому себе) таким способом свои высокие интеллектуальные возможности;

• перспективой выезда за границу на постоянное место жительства (перспективной перехода в другую организацию, например, конкурирующую) с надеждой получить вознаграждение за сведения о программной закладке и механизме ее активизации, а также возможностью таким способом заблокировать применение определенного класса программных средств по избранному месту жительства (месту работы);

• потенциальной возможностью получить вознаграждение за устранение возникшего при испытаниях или эксплуатации системы «программного отказа» и т.п.

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

Таким образом, правомерно утверждать, что вредоносные программы, в отличие от широко применяемых электронных закладок, являются более изощренными объектами, обладающими большей скрытностью и эффективностью применения.

Ответы на три последних вопроса можно найти в рамках быстро развивающейся методологии обеспечения безопасности программных средств и оценки уровня их защищенности (разделы 2-14).

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

«Программное пиратство» является, в связи с большими вероятными потерями, одной из основных проблем для фирм-разработчиков, так или иначе, связанных с созданием и реализацией программного обеспечения.

Программные пираты покупают или «берут на прокат» необходимое программное обеспечение и, если в нем нет соответствующей защиты, они могут скопировать программы и использовать их без соответствующей оплаты (регистрации, подтверждения лицензионных соглашений, авторских прав и т.п.) по своему усмотрению. Таким образом, вопрос защиты ПО от несанкционированного копирования, распространения и использования является одним из наиболее важных в компьютерной практике. Все известные методы защиты ПО от несанкционированного копирования и распространения относятся к организационно-правовым и инженерно-техническим методам. При решении указанных задач защиты сегодня практически полностью отсутствуют теоретические основания. В частности, нет четкого определения собственно проблемы и определения того, что собственно должно являться ее удовлетворительным решением.

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

При ответе на вопрос о несанкционированном копировании программ необходимо ответить на следующие вопросы:

• что может сделать злоумышленник («пират») в ходе попыток изучения программы?

• что является существенными знаниями о программе?

• что является спецификацией программы?

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

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

1.2. УГРОЗЫ БЕЗОПАСНОСТИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ 1.2.1. Разрушающие программные средства Угрозы безопасности информации и программного обеспечения КС возникают как в процессе их эксплуатации, так и при создании этих систем, что особенно характерно для процесса разработки ПО, баз данных и других информационных компонентов КС.

Наиболее уязвимы с точки зрения защищенности информационных ресурсов являются так называемые критические компьютерные системы.

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

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

В настоящее время одним из наиболее опасных средств информационного воздействия на компьютерные системы являются программы - вирусы или компьютерные вирусы.

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

В качестве основных средств вредоносного (деструктивного) воздействия на КС необходимо, наряду с компьютерными вирусами, рассматривать алгоритмические и программные закладки.

Под алгоритмической закладкой будем понимать преднамеренное завуалированное искажение какой-либо части алгоритма решения задачи, либо построение его таким образом, что в результате конечной программной реализации этого алгоритма в составе программного компонента или комплекса программ, последние будут иметь ограничения на выполнение требуемых функций, заданных спецификацией, или вовсе их не выполнять при определенных условиях протекания вычислительного процесса, задаваемого семантикой перерабатываемых программой данных.

Кроме того, возможно появление у программного компонента функций, не предусмотренных прямо или косвенно спецификацией, и которые могут быть выполнены при строго определенных условиях протекания вычислительного процесса.

Под программной закладкой будем понимать совокупность операторов и (или) операндов, преднамеренно в завуалированной форме включаемую в состав выполняемого кода программного компонента на любом этапе его разработки. Программная закладка реализует определенный несанкционированный алгоритм с целью ограничения или блокирования выполнения программным компонентом требуемых функций при определенных условиях протекания вычислительного процесса, задаваемого семантикой перерабатываемых программным компонентом данных, либо с целью снабжения программного компонента не предусмотренными спецификацией функциями, которые могут быть выполнены при строго определенных условиях протекания вычислительного процесса.

Действия алгоритмических и программных закладок условно можно разделить на три класса: изменение функционирования вычислительной системы (сети), несанкционированное считывание информации и несанкционированная модификация информации, вплоть до ее уничтожения. В последнем случае под информацией понимаются как данные, так и коды программ. Следует отметить, что указанные классы воздействий могут пересекаться.

В первом классе воздействий выделим следующие:

• уменьшение скорости работы вычислительной системы (сети);

• частичное или полное блокирование работы системы (сети);

• имитация физических (аппаратурных) сбоев работы вычислительных средств и периферийных устройств;

• переадресация сообщений;

• обход программно-аппаратных средств криптографического преобразования информации;

• обеспечение доступа в систему с непредусмотренных периферийных устройств.

Несанкционированное считывание информации, осуществляемое в автоматизированных системах, направлено на:

• считывание паролей и их отождествление с конкретными пользователями;

• получение секретной информации;

• идентификацию информации, запрашиваемой пользователями;

• подмену паролей с целью доступа к информации;

• контроль активности абонентов сети для получения косвенной информации о взаимодействии пользователей и характере информации, которой обмениваются абоненты сети.

Несанкционированная модификация информации является наиболее опасной разновидностью воздействий программных закладок, поскольку приводит к наиболее опасным последствиям. В этом классе воздействий можно выделить следующие:

• разрушение данных и кодов исполняемых программ внесение тонких, трудно обнаруживаемых изменений в информационные массивы;

• внедрение программных закладок в другие программы и подпрограммы (вирусный механизм воздействий);

• искажение или уничтожение собственной информации сервера и тем самым нарушение работы сети;

• модификация пакетов сообщений.

Из изложенного следует вывод о том, что алгоритмические и программные закладки имеют широкий спектр воздействий на информацию, обрабатываемую вычислительными средствами в КС.

Следовательно, при контроле технологической безопасности программного обеспечения необходимо учитывать его назначение и состав аппаратных средств и общесистемного программного обеспечения (программно-аппаратную среду) КС.

С точки зрения времени внесения программных закладок в программы их можно разделить на две категории: априорные и апостериорные, то есть закладки, внесенные при разработке ПО (или «врожденные») и закладки, внесенные при испытаниях, эксплуатации или модернизации ПО (или «приобретенные») соответственно. Хотя последняя разновидность закладок и относятся больше к проблеме обеспечения эксплуатационной, а не технологической безопасности ПО, однако методы тестирования программных комплексов, вероятностные методы расчета наличия программных дефектов и методы оценивания уровня безопасности ПО могут в значительной мере пересекаться и дополнять друг друга. Тем более что действие программной закладки после того как она была внесена в ПО либо на этапе разработки, либо на последующих этапах жизненного цикла ПО, практически не будет ничем не отличаться.

Таким образом, рассмотренные программные средства деструктивного воздействия по своей природе носят, как правило, разрушительный, вредоносный характер, а последствия их активизации и применения могут привести к значительному или даже непоправимому ущербу в тех областях человеческой деятельности, где применение компьютерных систем является жизненно необходимым. В связи с этим такие вредоносные программы будем называть разрушающими программными средствами (РПС), а их обобщенная классификация может выглядеть следующим образом:

• компьютерные вирусы - программы, способные размножаться, прикрепляться к другим программам, передаваться по линиям связи и сетям передачи данных, проникать в электронные телефонные станции и системы управления и выводить их из строя;

• программные закладки - программные компоненты, заранее внедряемые в компьютерные системы, которые по сигналу или в установленное время приводятся в действие, уничтожая или искажая информацию, или дезорганизуя работу программно технических средств;

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

1.2.2. Несанкционированное копирование, распространение и использование программ Так как программное обеспечение в большинстве случаев является товаром, сама сущность человеческой психологии будет предполагать процесс его «купли-продажи», в том числе и незаконное приобретение, распространение и использование программ, в том числе и для спекулятивных целей, для незаконного проката и т.п.

Подобные злоумышленные действия направлены на преодоление юридических (правовых), административно-организационных, административно-экономических и технических барьеров. Так как предлагаемая читателю книга носит, в основном, научно-технический характер мы не будем останавливаться на первых трех видах злоупотреблений. Отметим только, что вследствие того, что правовые вопросы в области защиты программ от копирования и незаконного распространения и использования в нашей стране практически не отрегулированы, для потенциального злоумышленника существует широкий спектр несанкционированных действий, которые не подпадают под действие существующего законодательства. Деятельность в данной области регламентируются в основном подзаконными актами и ведомственными организационно-распорядительными документами, совокупность которых, в свою очередь, не обладает полнотой и не носит системного характера (некоторые из этих нормативно-технических документов рассматриваются в главе 15 и в приложении).

Административно-экономические меры [РД], проводимые фирмами изготовителями программного обеспечения, предусматривают всяческое стимулирование легального приобретения программ. Такое стимулирование проводится только для зарегистрированных пользователей, легально покупающих программные продукты, что значительно позволяет сэкономить средства при использовании программного продукта, а иногда даже делает невыгодным его нелегальное копирование, использование и распространение. Для предотвращения незаконных действий с программным обеспечением возможны следующие сценарии поведения для зарегистрированных пользователей:

• периодическое получение новых версий программного продукта, соответствующей документации, специальных журналов;

• возможность получения оперативной консультации;

• проведение семинаров и курсов по обучению использованию программного продукта;

• предоставление скидки при покупке следующей версии продукта.

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

Действия злоумышленника по преодолению технической составляющей защиты сводятся по существу к реализации следующей очевидной парадигмы.

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

www.kiev-security.org.ua BEST rus DOC FOR FULL SECURITY После копирования программы и ее глобального и детального изучения, злоумышленник может попытаться, изменив идентификационные признаки программы, с целью ее дальнейшей выдачи за свою собственную, осуществить незаконное распространение и/или продажу программного обеспечения.

Таким образом, защита (техническая составляющая) от подобных злоумышленных действий может заключаться в сочетании методов защиты от исследования и защиты от копирования, методов обеспечения целостности и достоверности (а в ряде случаев и конфиденциальности) программ, в обеспечении их неизменяемыми идентификационными характеристиками.

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

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

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

Необходимым условием для отнесения программы к классу разрушающих программных средств является наличие в ней процедуры нападения, которую можно определить как процедуру нарушения целостности вычислительной среды, поскольку объектом нападения разрушающего программного средства (РПС) всегда выступает элемент этой среды.

При этом необходимо учитывать два фактора:

• любая прикладная программа, не относящаяся к числу РПС, потенциально может содержать в себе алгоритмические ошибки, появление которых при ее функционировании приведет к непреднамеренному разрушению элементов вычислительной среды;

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

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

• достаточным условием для отнесения РПС к классу компьютерных вирусов является наличие в его составе процедуры саморепродукции;

• достаточным условием для отнесения РПС к классу средств несанкционированного доступа являются наличие в его составе процедуры преодоления защиты и отсутствия процедуры саморепродукции;

• достаточным условием для отнесения РПС к классу программных закладок является отсутствие в его составе процедур саморепродукции и преодоления защиты.

Предполагается наличие в РПС следующего набора возможных функциональных элементов:

• процедуры захвата (получения) управления;

• процедуры самомодификации («мутации»);

• процедуры порождения (синтеза);

• процедуры маскировки (шифрования).

Этих элементов достаточно для построения обобщенной концептуальной модели РПС, которая отражает возможную структуру (на семантическом уровне) основных классов РПС.

1.3.2. Используемая терминология Разработка терминологии в области обеспечения безопасности ПО является базисом для формирования нормативно-правового обеспечения и концептуальных основ по рассматриваемой проблеме. Единая терминологическая база является ключом к единству взглядов в области, информационной безопасности, стимулирует скорейшее развитие методов и средств защиты ПО. Термины освещают основные понятия, используемые в рассматриваемой области на данный период времени.

Определения освещают толкование конкретных форм, методов и средств обеспечения информационной безопасности.

Термины и определения Непреднамеренный дефект - объективно и (или) субъективно образованный дефект, приводящий к получению неверных решений (результатов) или нарушению функционирования КС.

Преднамеренный дефект - криминальный дефект, внесенный субъектом для целенаправленного нарушения и (или) разрушения информационного ресурса.

Разрушающее программное средство (РПС) - совокупность программных и/или технических средств, предназначенных для нарушения (изменения) заданной технологии обработки информации и/или целенаправленного разрушения извне внутреннего состояния информационно-вычислительного процесса в КС.

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

Несанкционированный доступ - действия, приводящие к нарушению целостности, конфиденциальности и доступности информационных ресурсов.

Нарушитель (злоумышленник, противник) - субъект (субъекты), совершающие несанкционированный доступ к информационному ресурсу.

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

Оценка безопасности ПО - процесс получения количественных и/или качественных показателей информационной безопасности при учете преднамеренных и непреднамеренных дефектов в системе.

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

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

Технологическая безопасность - свойство программного обеспечения и информации не быть преднамеренно искаженными и (или) начиненными избыточными модулями (структурами) диверсионного назначения на этапе создания КС.

Эксплуатационная безопасность - свойство программного обеспечения и информации не быть несанкционированно искаженными (измененными) на этапе их эксплуатации.

1.4. ЖИЗНЕННЫЙ ЦИКЛ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ КОМПЬЮТЕРНЫХ СИСТЕМ. ТЕХНОЛОГИЧЕСКАЯ И ЭКСПЛУАТАЦИОННАЯ БЕЗОПАСНОСТЬ ПРОГРАММ Необходимость определения этапов жизненного цикла (ЖЦ) ПО обусловлена стремлением разработчиков к повышению качества ПО за счет оптимального управления разработкой и использования разнообразных механизмов контроля качества на каждом этапе, начиная от постановки задачи и заканчивая авторским сопровождением ПО. Наиболее общим представлением жизненного цикла ПО является модель в виде базовых этапов – процессов [Лип1], к которым относятся:

• системный анализ и обоснование требований к ПО;

• предварительное (эскизное) и детальное (техническое) проектирование ПО;

• разработка программных компонент, их комплексирование и отладка ПО в целом;

• испытания, опытная эксплуатация и тиражирование ПО;

• регулярная эксплуатация ПО, поддержка эксплуатации и анализ результатов;

• сопровождение ПО, его модификация и совершенствование, создание новых версий.

Данная модель является общепринятой и соответствует как отечественным нормативным документам в области разработки программного обеспечения, так и зарубежным. С точки зрения обеспечения технологической безопасности целесообразно рассмотреть более подробно особенности представления этапов ЖЦ.

Графическое представление моделей ЖЦ позволяет наглядно выделить их особенности и некоторые свойства процессов. Первоначально была создана каскадная модель ЖЦ [Лип1], в которой крупные этапы начинались друг за другом с использованием результатов предыдущих работ. Наиболее специфической является спиралевидная модель ЖЦ [Лип1]. В этой модели внимание концентрируется на итерационном процессе начальных этапов проектирования. На этих этапах последовательно создаются концепции, спецификации требований, предварительный и детальный проект. На каждом витке уточняется содержание работ и концентрируется облик создаваемого ПО.

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

Совокупность этапов данной модели ЖЦ целесообразно делить на две части, существенно различающихся особенностями процессов, технико экономическими характеристиками и влияющими на них факторами.

В первой части ЖЦ производится системный анализ, проектирование, разработка, тестирование и испытания ПО. Номенклатура работ, их трудоемкость, длительность и другие характеристики на этих этапах существенно зависят от объекта и среды разработки. Изучение подобных зависимостей для различных классов ПО позволяет прогнозировать состав и основные характеристики графиков работ для новых версий ПО.

Этой совокупности этапов ЖЦ ПО соответствует процесс внесения в разрабатываемые программы определенных защитных функций. Этот процесс называется обеспечением технологической безопасности и характеризуется необходимостью предотвращения модификации ПО за счет внедрения РПС априорного типа (алгоритмических и программных закладок).

Вторая часть ЖЦ, отражающая поддержку эксплуатации и сопровождения ПО, относительно слабо связана с характеристиками объекта и среды разработки. Номенклатура работ на этих этапах более стабильна, а их трудоемкость и длительность могут существенно изменяться, и зависят от массовости применения ПО. Для любой модели ЖЦ обеспечение высокого качества программных комплексов возможно лишь при использовании регламентированного технологического процесса на каждом из этих этапов. Такой процесс поддерживается CASE средствами (средствами автоматизации разработки ПО), которые целесообразно выбирать из имеющихся или создавать с учетом объекта разработки и адекватного ему перечня работ.

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

1.5. МОДЕЛИ УГРОЗ БЕЗОПАСНОСТИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ 1.5.1. Вводные замечания Использование при создании программного обеспечения КС сложных операционных систем, инструментальных средств разработки ПО увеличивают потенциальную возможность внедрения в программы преднамеренных дефектов диверсионного типа. Помимо этого, при создании прикладного программного обеспечения всегда необходимо исходить из возможности наличия в коллективе разработчиков программистов - злоумышленников, которые в силу тех или иных причин могут внести в разрабатываемые программы РПС.

Характерным свойством РПС в данном случае является возможность внезапного и незаметного нарушения или полного вывода из строя КС.

Функционирование РПС реализуется в рамках модели угроз безопасности ПО, основные элементы которой рассматриваются в следующем разделе.

1.5.2. Подходы к созданию модели угроз технологической безопасности ПО Один из возможных подходов к созданию модели угроз технологической безопасности ПО КС может основываться на обобщенной концепции технологической безопасности компьютерной инфосферы [Е1,ЕП, ЮП1,ЮП2], которая определяет методологический базис, направленный на решение, в том числе, следующих основных задач:

• создания теоретических основ для практического решения проблемы технологической безопасности ПО;

• создания безопасных информационных технологий;

• развертывания системы контроля технологической безопасности компьютерной инфосферы.

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

Модель угроз должна включать:

• полный реестр типов возможных программных закладок;

• описание наиболее технологически уязвимых мест компьютерных систем (с точки зрения важности и наличия условий для скрытого внедрения программных закладок);

• описание мест и технологические карты разработки программных средств, а также критических этапов, при которых наиболее вероятно скрытое внедрение программных закладок;

• реконструкцию замысла структур, имеющих своей целью внедрение в ПО заданного типа (класса, вида) программных закладок диверсионного типа;

• психологический портрет потенциального диверсанта в компьютерных системах.

В указанной Концепции [ЕП] также оговариваются необходимость содержания в качестве приложения банка данных о выявленных программных закладках и описания связанных с их обнаружением обстоятельств, а также необходимость периодического уточнения и совершенствования модели на основе анализа статистических данных и результатов теоретических исследований.

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

Наполнение модели угроз технологической безопасности ПО должно включать в себя следующие элементы: матрицу чувствительности КС к «вариациям» ПО (то есть к появлению искажений), энтропийный портрет ПО (то есть описание «темных» запутанных участков ПО), реестр камуфлирующих условий для конкретного ПО, справочные данные о разработчиках и реальный (либо реконструированный) замысел злоумышленников по поражению этого ПО. На рис.1.2 приведен пример типового реестра угроз для сложных программных комплексов.

1.5.3. Элементы модели угроз эксплуатационной безопасности ПО Анализ угроз эксплуатационной безопасности ПО КС позволяет, разделить их на два типа: случайные и преднамеренные, причем последние подразделяются на активные и пассивные. Активные угрозы направлены на изменение технологически обусловленных алгоритмов, программ функциональных преобразований или информации, над которой эти преобразования осуществляются. Пассивные угрозы ориентированы на нарушение безопасности информационных технологий без реализации таких модификаций.

Вариант общей структуры набора потенциальных угроз безопасности информации и ПО на этапе эксплуатации КС приведен в табл.1.1.

Рассмотрим основное содержание данной таблицы. Угрозы, носящие случайный характер и связанные с отказами, сбоями аппаратуры, ошибками операторов и т.п. предполагают нарушение заданного собственником информации алгоритма, программы ее обработки или искажение содержания этой информации. Субъективный фактор появления таких угроз обусловлен ограниченной надежностью работы человека и проявляется в виде ошибок (дефектов) в выполнении операций формализации алгоритма функциональных преобразований или описания алгоритма на некотором языке, понятном вычислительной системе.

Рекламационные ЭКСПЛУ доработки АТАЦИЯ Прогр Закладки ам Межведомственные апостериорн мные испытания закла ого типа дки Совместные отработочные испытания ИСПЫ- ТАНИЯ В Эксплуатационные Утечка отработочные испытания информации О З Ж Маски КОНТ М рующ И Стендовые испытания ие РОЛЬ О З мероп рияти Ж Н я Подтверждение Н Е Запись на штатные внесения закладок носители Н Ы Н Е ОТЛАД КА Ы Комплексная отладка Й У Автономная отладка Прогр Г Утечка ам информации Ц мные Р закла И дки О ПРОГРАММИРОВАНИЕ К З Л Ы Разработка архитектуры П ПРО О ЕК- Про ектн ТИР Разработка алгоритмов ые О закла ВА дки НИЕ Утечка информации Эскизное проектирование Рис.1.1. Схема угроз технологической безопасности ПО ПРОЕКТИРОВАНИЕ Проектные решения Злоумышленный выбор нерациональных алгоритмов работы.

Облегчение внесения закладок и затруднение их обнаружения.

Внедрение злоумышленников в коллективы, разрабатывающие наиболее ответственные части ПО.

Используемые информационные технологии Внедрение злоумышленников, в совершенстве знающих «слабые» места и особенности используемых технологий.

Внедрение информационных технологий или их элементов, содержащих программные закладки.

Внедрение неоптимальных информационных технологий.

Используемые аппаратно-технические средства Поставка вычислительных средств, содержащих программные, аппаратные или программно-аппаратные закладки.

Поставка вычислительных средств с низкими эксплуатационными характеристиками.

Задачи коллективов разработчиков и их персональный состав Внедрение злоумышленников в коллективы разработчиков программных и аппаратных средств.

Вербовка сотрудников путем подкупа, шантажа и т.п.

Рис.1.2. Пример типового реестра угроз технологической безопасности информации и ПО КОДИРОВАНИЕ Архитектура программной системы, взаимодействие ее с внешней средой и взаимодействие подпрограмм программной системы Доступ к «чужим» подпрограммам и данным.

Нерациональная организация вычислительного процесса.

Неправильная организация динамически формируемых команд или параллельных вычислительных процессов.

Неправильная организация переадресации команд, запись злоумышленной информации в используемые программной системой или другими программами ячейки памяти.

Функции и назначение кодируемой части программной системы, взаимодействие этой части с другими подпрограммами Формирование программной закладки, воздействующей на другие части программной системы.

Организация замаскированного спускового механизма программной закладки.

Формирование программной закладки, изменяющей структуру программной системы.

Технология записи программного обеспечения и исходных данных Поставка программного обеспечения и технических средств со встроенными дефектами.

Продолжение рис.1.2.

ОТЛАДКА И ИСПЫТАНИЯ Назначение, функционирование, архитектура программной системы Встраивание программной закладки как в отдельные подпрограммы, так и в управляющую программу программной системы.

Формирование программной закладки с динамически формируемыми командами.

Неправильная организация переадресации отдельных команд программной системы.

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

Поставка вычислительных средств, содержащих программные, аппаратные или программно-аппаратные закладки.

Формирование программной закладки, не обнаруживаемой с помощью используемой модели объекта в силу ее неадекватности описываемому объекту.

Вербовка сотрудников коллектива, проводящих испытания.

Продолжение рис.1.2.

КОНТРОЛЬ Используемые процедуры и методы контроля Формирование спускового механизма программной закладки, не включающего ее при контроле на безопасность.

Маскировка программной закладки путем внесения в программную систему ложных «непреднамеренных» дефектов.

Формирование программных закладок в ветвях программной системы, не проверяемых при контроле.

Формирование программных закладок, не позволяющих выявить их внедрение в программную систему путем контрольного суммирования.

Поставка программного обеспечения и вычислительной техники, содержащих программные, аппаратные и программно аппаратные закладки.

Сведения о персональном составе контролирующего подразделения и испытываемых программных системах Внедрение злоумышленников в контролирующее подразделение.

Вербовка сотрудников контролирующего подразделения.

Сбор информации об испытываемой программной системе.

Сведения об обнаруженных при контроле программных закладках Разработка новых программных закладок при доработке программной системы.

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

Сведения о функционировании программной системы, доступе к ее загрузочному модулю и исходным данным, алгоритмах проверки сохранности программной системы и данных.

Продолжение рис.1.2.

Таблица 1. Угрозы Несанкционированные действия нарушения Случайные Преднамеренные безопас Пассивные Активные ности ПО Прямые Невыявленные Маскировка Включение в программы ошибки несанкционированных РПС, выполняющих функции программного запросов под запросы ОС;

нарушения целостности и обеспечения КС;

обход программ конфиденциальности отказы и сбои разграничения доступа;

информации и ПО;

технических чтение конфиденциальных ввод новых программ, средств КС;

данных из источников выполняющих функции ошибки информации;

нарушения безопасности ПО;

операторов;

подключение к каналам незаконное применение неисправность связи с целью получения ключей разграничения средств защиты информации доступа;

информации;

(«подслушивание» и/или обход программ скачки «ретрансляция»);

разграничения доступа;

электропитания на анализ трафика;

вывод из строя подсистемы технических использование терминалов и регистрации и учета;

средствах;

ЭВМ других операторов;

уничтожение ключей старение носителей намеренный вызов шифрования и паролей;

информации;

случайных факторов. подключение к каналам связи разрушение с целью модификации, информации под уничтожения, задержки и воздействием переупорядочивания данных;

физических несанкционированное факторов копирование, (аварии, распространение и неправильная использование программных эксплуатация КС и средств КС;

т.п.). намеренный вызов случайных факторов.

Косвенные нарушение перехват ЭМИ от помехи;

пропускного технических средств;

отключение режима и режима хищение производственных электропитания;

секретности;

отходов намеренный вызов случайных естественные (распечаток, отработанных факторов.

потенциальные дискет и т.п.);

поля;

использование визуального помехи и т.п. канала, подслушивающих устройств и т.п.;

дистанционное фотографирование и т.п.

Угрозы, носящие злоумышленный характер вызваны, как правило, преднамеренным желанием субъекта осуществить несанкционированные изменения с целью нарушения корректного выполнения преобразований, достоверности и целостности данных, которое проявляется в искажениях их содержания или структуры, а также с целью нарушения функционирования технических средств в процессе реализации функциональных преобразований и изменения конструктивных особенностей вычислительных систем и систем телекоммуникаций.

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

К неформализованному описанию модели угроз приходится прибегать в том случае, когда структура, состав и функциональная наполненность компьютерных системы управления носят многоуровневый, сложный, распределенный характер, а действия потенциального нарушителя информационных и функциональных ресурсов трудно поддаются формализации. Пример описания модели угроз при исследовании попыток несанкционированных действий в отношении защищаемой КС приведен на рис.1.3.

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

Таким образом, разработка моделей угроз безопасности программного обеспечения КС, являясь одним из важных этапов комплексного решения проблемы обеспечения безопасности информационных технологий, на этапе создания КС отличается от разработки таких моделей для этапа их эксплуатации.

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

Планирование исследований и Модель угроз безопасности экспериментов ПО КС Угрозы Классификация информации о 1 2 N программно-аппаратных средствах … КС, их свойствах и характеристиках, об Характеристики реализации б б й КС ф процессов обработки информации Разработка сценариев нарушения безопасности, определение соответствия между вероятными Сценарии нарушения угрозами и возможными безопасности последствиями ПО Обоснование допустимости угроз, Характеристики реализации спецификация необходимых процессов обработки средств защиты и установление информации после нарушения уровней допустимых потерь безопасности Обоснование соответствия между допустимыми потерями и Расчет количественных стоимостью выбранного для показателей потери свойств каждого сценария варианта защиты КС, способности выполнять свои функции или прямых потерь от искажения эксплуатируемых программ, используемых в КС (могут Расстановка приоритетов и применяться экспертные определение состава используемых оценки, моделирование и т.д.) методов и средств защиты ПО Рис. 1.3. Неформализованное описание модели угроз безопасности ПО на этапе исследований попыток несанкционированных действий в отношении информационных ресурсов КС 1.5.4. Модель разрушающего программного средства Обобщенное описание и типизация РПС Обобщенное описание и типизация РПС будет делаться в соответствии с работой [ПАС].

Разрушающим программным средством, в данном случае, будем считать некоторую программу, которая способна выполнить любое непустое подмножество перечисленных функций:

• сокрытия признаков своего присутствия в программной среде КС;

• реализации самодублирования, ассоциирования себя с другими программами и/или переноса своих фрагментов в иные (не занимаемые изначально указанной программой) области оперативной или внешней памяти;

• разрушения (искажения произвольным образом) кода программ в оперативной памяти КС;

• перемещения (сохранения) фрагментов информации из оперативной памяти в некоторые области оперативной или внешней памяти прямого доступа;

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

Можно выделить следующие основные типы РПС.

РПС, отключающие защитные функции системы. Во многих случаях РПС, внедренные в защищенную систему, могут модифицировать машинный код или конфигурационные данные системы, тем самым полностью или частично отключая ее защитные функции. В защищенной системе создается «черный ход», позволяющий злоумышленнику работать в системе, обходя ее защитные функции.

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

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

Существуют три основные архитектуры построения перехватчиков паролей.

1. Перехватчики паролей первого рода действуют по следующему сценарию. Злоумышленник запускает программу, содержащую программную закладку - перехватчик паролей. Она имитирует приглашение пользователю для входа в систему, и ждет ввода. Когда пользователь вводит имя и пароль, закладка сохраняет их в доступном злоумышленнику месте, после чего завершает работу и осуществляет выход из системы пользователя-злоумышленника. По окончании работы закладки на экране появляется настоящее приглашение для входа пользователя в систему. Пользователь, ставший жертвой закладки, видит, что он не вошел в систему и что ему снова предлагается ввести имя и пароль. Пользователь предполагает, что при вводе пароля произошла ошибка, и вводит имя и пароль повторно. После этого пользователь входит в систему, и дальнейшая его работа протекает нормально. Некоторые закладки, функционирующие по данной схеме, перед завершением работы выдают на экран правдоподобное сообщение об ошибке, например:

«Пароль введен неправильно. Попробуйте еще раз».

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

Информация о нажатой клавише и введенном символе, возвращаемая этими прерываниями, используется закладками для своих целей.

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

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

Закладки данного типа позволяют злоумышленнику осуществлять доступ к тем объектам, доступ к которым должен быть ему запрещен согласно текущей стратегии защиты. В большинстве систем, поддерживающих разграничение доступа, существуют администраторы безопасности, которые могут осуществлять доступ ко всем или почти всем объектам системы. Если программная закладка наделяет пользователя злоумышленника полномочиями администратора и злоумышленник имеет практически неограниченный доступ к ресурсам системы, средства и методы, используемые такими закладками для превышения полномочий пользователя, в значительной мере определяются архитектурой системы.

Чаще всего закладки данного класса используют ошибки в программном обеспечении системы.

Логические бомбы. Это программные закладки оказывают, как правило, разрушающие воздействия на атакованную систему и обычно нацелены на полное выведение системы из строя. В отличие от вирусов логические бомбы не размножаются или размножаются ограниченно.

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

Иногда выделяют особый класс логических бомб - временные бомбы, для которых условием срабатывания является достижение определенного момента времени.

Характерным свойством логических бомб является то, что реализуемые ими негативные воздействия на атакованную систему носят исключительно разрушающий характер. Логические бомбы, как правило, не используются для организации НСД к ресурсам системы, их единственной задачей является полное или частичное разрушение системы.

Мониторы. Это программные закладки, перехватывающие те или иные потоки данных, протекающие в атакованной системе. В частности, к мониторам относятся перехватчики паролей второго рода.

Целевое назначение мониторов может быть самым разным:

• полностью или частично сохранять перехваченную информацию в доступном злоумышленнику месте;

• искажать потоки данных;

• помещать в потоки данных навязанную информацию;

• полностью или частично блокировать потоки данных;

• использовать мониторинг потоков данных для сбора информации об атакованной системе.

Мониторы позволяют перехватывать самые различные информационные потоки атакуемой системы. Наиболее часто перехватываются следующие потоки:

• потоки данных, связанные с чтение, записью и другими операциями над файлами;

• сетевой трафик;

• потоки данных, связанные с удалением информации с дисков или из оперативной памяти компьютера (так называемая «сборка мусора»).

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

Кроме того, РПС можно классифицировать по методу и месту их внедрения и применения, т.е. по «способу доставки» в компьютерную систему (ниже приводится пример персонального компьютера) [ПАС]:

• РПС, ассоциированные с программно-аппаратной средой компью терной системы (основная BIOS или расширенные BIOS);

• РПС, ассоциированные с программами первичной загрузки (нахо дящиеся в Master Boot Record или ВООТ-секторах активных разделов), - загрузочные РПС;

• РПС, ассоциированные с загрузкой драйверов DOS, драйверов внешних устройств других ОС, командного интерпретатора, сетевых драйверов, т.е. с загрузкой операционной среды;

• РПС, ассоциированные с системным программным обеспечением общего назначения (встроенные в клавиатурные и экранные драйверы, программы тестирования компьютеров, утилиты и оболочки интерфейса с пользователем и т.п.);

• исполняемые модули, содержащие только код РПС (как правило, внедряемые в файлы пакетной обработки типа.BAT);

• модули-имитаторы, совпадающие по внешнему виду с некоторыми программами, требующими ввода конфиденциальной информации - наиболее характерны для Unix-систем;

• РПС, маскируемые под программные средства оптимизационного назначения (архиваторы, ускорители обмена с диском и т.д.);

• РПС, маскируемые в программные средства игрового и развлекательного назначения (как правило, используются для первичного внедрения закладок).

Для того чтобы РПС смогли выполнять какие-либо действия по отношению к прикладной программе или данным, они должны получить управление, т.е. процессор должен начать выполнять инструкции (коман ды), относящиеся к коду РПС. Это возможно только при одновременном выполнении двух условий:

1). РПС должно находиться в оперативной памяти до начала работы РПС, которое является целью воздействия закладки, а следовательно, РПС должно быть загружено раньше или одновременно с этой программой;

2). РПС должно активизироваться по некоторому общему как для закладки, так и для программы событию, т.е. при выполнении ряда условий в программно-аппаратной среде управление должно быть передано программе-закладке.

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

Кроме того, возможен случай [ПАС], когда при запуске программы (активизирующим событием является запуск программы) закладка разрушает некоторую часть кода программы, уже загруженной в оперативную память, и, возможно, систему контроля целостности кода или контроля иных событий и на этом заканчивает свою работу. Данный случай не противоречит необходимым условиям.

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

1). РПС резидентного типа - находятся в памяти постоянно с не которого момента времени до окончания сеанса работы компьютера (вы ключения питания или перезагрузки). РПС может быть загружено в память при начальной загрузке компьютера, загрузке операционной среды или запуске некоторой программы (которая по традиции называется виру соносителем или просто носителем), а также запущена отдельно.

2). РПС нерезидентного типа - начинают работу, как и РПС резидентного типа, но заканчивают ее самостоятельно через некоторый промежуток времени или по некоторому событию, при этом выгружая себя из памяти целиком.

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

1. Модель «перехват». Программная закладка встраивается (внедряется) в ПЗУ, ОС или прикладное программное обеспечение и сохраняет все или избранные фрагменты вводимой или выводимой информации в скрытой области локальной или удаленной внешней памяти прямого доступа. Объектом сохранения может быть клавиатурный ввод, документы, выводимые на принтер, или уничтожаемые файлы-документы.

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

2. Модель «троянский конь». Закладка встраивается в постоянно используемое программное обеспечение и по некоторому активизирующему событию моделирует сбойную ситуацию на средствах хранения информации или в оборудовании компьютера (сети). Тем самым могут быть достигнуты две различные цели: во-первых, парализована нормальная работа компьютерной системы и, во-вторых, злоумышленник (например, под видом обслуживания или ремонта) может ознакомиться с имеющейся в системе или накопленной посредством использования модели «перехват» информацией. Событием, активизирующим закладку, может быть некоторый момент времени, либо сигнал из канала модемной связи (явный или замаскированный), либо состояние некоторых счетчиков (например, число запусков программ).

3. Модель «наблюдатель». Закладка встраивается в сетевое или телекоммуникационное программное обеспечение. Пользуясь тем, что данное ПО, как правило, всегда активно, программная закладка осуществляет контроль за процессами обработки информации на данном компьютере, установку и удаление закладок, а также съем накопленной информации. Закладка может инициировать события для ранее внедренных закладок, действующих по модели «троянский конь».

4. Модель «компрометация». Закладка либо передает заданную злоумышленником информацию (например, клавиатурный ввод) в канал связи, либо сохраняет ее, не полагаясь на гарантированную возможность последующего приема или снятия. Более экзотический случай – закладка инициирует постоянное обращение к информации, приводящее к росту отношения сигнал/шум при перехвате побочных излучений.

5. Модель «искажение или инициатор ошибок». Программная закладка искажает потоки данных, возникающие при работе прикладных программ (выходные потоки), либо искажает входные потоки информации, либо инициирует (или подавляет) возникающие при работе прикладных программ ошибки.

6. Модель «сборка мусора». В данном случае прямого воздействия РПС может и не быть;

изучаются «остатки» информации. В случае применения программной закладки навязывается такой порядок работы, чтобы максимизировать количество остающихся фрагментов ценной информации. Злоумышленник получает либо данные фрагменты, используя закладки моделей 2 и З, либо непосредственный доступ к компьютеру под видом ремонта или профилактики.

У рассмотренных различных по целям воздействия моделей закладок имеется важная общая черта - наличие операции записи, производимой закладкой (в оперативную или внешнюю память). При отсутствии данной операции никакое негативное влияние невозможно. Вполне понятно, что для направленного воздействия закладка должна также выполнять и операции чтения. Так, например, можно реализовать функцию целенаправленной модификации данных в каком-либо секторе жесткого диска, которая возможна только после их прочтения.

Таким образом, исполнение кода закладки может быть сопровождено операциями несанкционированной записи (НСЗ), например, для сохранения некоторых фрагментов информации, и несанкционированного считывания (НСЧ), которое может происходить отдельно от операций чтения прикладной программы или совместно с ними. При этом операции считывания и записи могут быть не связаны с получением информации, например считывание параметров устройства или его инициализация - закладка может использовать для своей работы и такие операции, в частности, для инициирования сбойных ситуаций или переназначения ввода вывода.

Возможные комбинации несанкционированных действий (НСЧ и НСЗ), а также санкционированных действий прикладной программы или операционной среды по записи (СЗ) или считыванию (СЧ) приведены в табл. 1.2 [ПАС].

Ситуации 1 - 4 соответствуют нормальной работе прикладной программы, когда закладка не оказывает на нее никакого воздействия.

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

Ситуация 6 связана с разрушением или с сохранением информации (искажение или сохранение выходного потока), записываемой прикладной программой.

Ситуация 7 связана с сохранением информации (сохранение входного потока) считываемой прикладной программой.

Ситуация 8 связана с сохранением информации закладкой при считывании или записи информации прикладной программой.

Ситуация 9 не связана с прямым негативным воздействием, поскольку прикладная программа не активна, а закладка производит только НСЧ (процесс «настройки»).

Ситуация 10 может быть связана с сохранением выводимой информации в оперативную память.

Ситуация 11 может быть связана с сохранением вводимой информации в оперативную память либо с изменением параметров процесса санкционированного чтения закладкой.

Ситуация 12 может быть связана с сохранением как вводимой, так и выводимой прикладной программой информации в оперативную память.

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

Таблица 1. Номер НСЧ НСЗ Действия РПС СЧ СЗ ситуац ии 1 0 0 Нет 0 2 0 0 Нет 0 3 0 0 Нет 1 4 0 0 Нет 1 5 0 1 Изменение (разрушение) кода 0 прикладной программы в ОП 6 0 1 Разрушение или сохранение 0 выводимых прикладной программой данных 7 0 1 Разрушение или сохранение 1 вводимых прикладной программой данных 8 0 1 Разрушение или сохранение 1 вводимых и выводимых данных 9 1 0 Нет 0 10 1 0 Перенос выводимых прикладной 0 программой данных в ОП 11 1 0 Перенос вводимых прикладной 1 программой данных в ОП 12 1 0 Перенос вводимых и 1 выводимых данных в ОП 13 1 1 Процедуры типа «размножения 0 вируса» (действия закладки независимо от операций прикладной программы) 14 1 1 0 Те же действия, что и в 15 1 1 1 процедурах 6 – 16 1 1 1 Ситуации 14 - 16 могут быть связаны как с сохранением, так и с разрушением данных или кода и аналогичны ситуациям 6 - 8.

Несанкционированная запись закладкой может происходить:

• в массив данных, не совпадающий с пользовательской информацией, - сохранение информации;

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

Следовательно, можно рассматривать три основные группы деструк тивных функций, которые могут выполняться РПС [ПАС]:

• сохранение фрагментов информации, возникающей при работе пользователя, прикладных программ, вводе/выводе данных, во внешней памяти (локальной или удаленной) в сети или выделенном компьютере, в том числе сохранение различных паролей, ключей и кодов доступа, собственно конфиденциальных документов в электронном виде, либо безадресная компрометация фрагментов ценной информации (модели «перехват», «компрометация»);

• изменение алгоритмов функционирования прикладных программ (т.е. целенаправленное воздействие во внешней или оперативной памяти) - происходит изменение собственно исходных алгоритмов работы программ, например, программа разграничения доступа станет пропускать пользователей по любому паролю (модели «искажение», «троянский конь»);

• навязывание некоторого режима работы (например, при уничтожении информации - блокирование записи на диск, при этом информация, естественно, не уничтожается) либо замена записываемой информации данными, навязанными закладкой.

Методы внедрения РПС Можно выделить следующие основные методы внедрения РПС [ПАС].

Маскировка закладки под «безобидное» программное обеспечение.

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

Маскировка закладки под «безобидный» модуль расширения программной среды. Многие программные среды допускают свое расширение дополнительными программными модулями. Например, для операционных систем семейства Microsoft Windows модулями расширения могут выступать динамически подгружаемые библиотеки (DLL) и драйверы устройств. В таких модулях расширения может содержаться РПС, которое может потенциально внедрено в систему. Данный метод фактически является частным случаем предыдущего метода и отличается от него только тем, что закладка представляет собой не прикладную программу, а модуль расширения программной среды.

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

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

Оптимальной является ситуация, когда доступен исходный текст подменяемого модуля.

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

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

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

1.6. ОСНОВНЫЕ ПРИНЦИПЫ ОБЕСПЕЧЕНИЯ БЕЗОПАСНОСТИ ПО В качестве объекта обеспечения технологической и эксплуатационной безопасности ПО рассматривается вся совокупность его компонентов в рамках конкретной КС. В качестве доминирующей должна использоваться стратегия сквозного тотального контроля технологического и эксплуатационного этапов жизненного цикла компонентов ПО.

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

Принципы обеспечения технологической безопасности при обосновании, планировании работ и проектном анализе ПО Принципы обеспечения безопасности ПО на данном этапе включают принципы:

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

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

Обоснованности средств обеспечения безопасности ПО, заключающейся в глубоком научно-обоснованном подходе к принятию проектных решений по оценке степени безопасности, прогнозированию угроз безопасности, всесторонней априорной оценке показателей средств защиты.

Достаточности защищенности программ, отражающей необходимость поиска наиболее эффективных и надежных мер безопасности при одновременной минимизации их стоимости.

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

Документируемости технологии создания программ, подразумевающей разработку пакета нормативно-технических документов по контролю программных средств на наличие преднамеренных дефектов.

Принципы достижения технологической безопасности ПО в процессе его разработки Принципы обеспечения безопасности ПО на данном этапе включают принципы:

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

Автоматизации средств контроля управляющих и вычислительных программ на наличие преднамеренных дефектов.

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

Последовательной многоуровневой фильтрации программных модулей в процессе их создания с применением функционального дублирования разработок и поэтапного контроля.

Типизации алгоритмов, программ и средств информационной безопасности, обеспечивающей информационную, технологическую и программную совместимость, на основе максимальной их унификации по всем компонентам и интерфейсам.

Централизованного управления базами данных проектов ПО и администрирование технологии их разработки с жестким разграничением функций, ограничением доступа в соответствии со средствами диагностики, контроля и защиты.

Блокирования несанкционированного доступа соисполнителей и абонентов государственных и негосударственных сетей связи, подключенных к стендам для разработки программ.

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

Использования только сертифицированных и выбранных в качестве единых инструментальных средств разработки программ для новых технологий обработки информации и перспективных архитектур вычислительных систем.

Принципы обеспечения технологической безопасности на этапах стендовых и приемо-сдаточных испытаний Принципы обеспечения безопасности ПО на данном этапе включают принципы:

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

Проведения натурных испытаний программ при экстремальных нагрузках с имитацией воздействия активных дефектов.

Осуществления «фильтрации» программных комплексов с целью выявления возможных преднамеренных дефектов определенного назначения на базе создания моделей угроз и соответствующих сканирующих программных средств.

Разработки и экспериментальной отработки средств верификации программных изделий.

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

Отработки средств защиты от несанкционированного воздействия нарушителей на ПО.

Сертификации программных изделий КС по требованиям безопасности с выпуском сертификата соответствия этого изделия требованиям технического задания.

Принципы обеспечения безопасности при эксплуатации программного обеспечения Принципы обеспечения безопасности ПО на данном этапе включают принципы:

Сохранения эталонов и ограничения доступа к ним программных средств, недопущение внесения изменений в эталоны.

Профилактического выборочного тестирования и полного сканирования программных средств на наличие преднамеренных дефектов.

Идентификации ПО на момент ввода его в эксплуатацию в соответствии с предполагаемыми угрозами безопасности ПО и его контроль.

Обеспечения модификации программных изделий во время их эксплуатации путем замены отдельных модулей без изменения общей структуры и связей с другими модулями.

Строгого учета и каталогизации всех сопровождаемых программных средств, а также собираемой, обрабатываемой и хранимой информации.

Статистического анализа информации обо всех процессах, рабочих операциях, отступлениях от режимов штатного функционирования ПО.

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

http://www.natahaus.ru/ ГЛАВА 2. ФОРМАЛЬНЫЕ МЕТОДЫ ДОКАЗАТЕЛЬСТВА ПРАВИЛЬНОСТИ ПРОГРАММ И ИХ СПЕЦИФИКАИЦЙ 2.1. ОБЩИЕ ПОЛОЖЕНИЯ Традиционные методы анализа ПО включают, в том числе, методы доказательства правильности программ. Начало этому направлению было положено работами П. Наура и Р. Флойда, в которых сформулирована идея приписывания точке программы так называемого индуктивного, или промежуточного утверждения и указана возможность доказательства частичной правильности программы (то есть соответствия друг другу ее предусловия и постусловия), построенного на установлении согласованности индуктивных утверждений.

Фундаментальный вклад в теорию верификации внес Ч. Хоор, высказавший идеи проведения доказательства частичной правильности программы в виде вывода в некоторой логической системе, а Э. Дейкстра ввел понятие слабейшего предусловия, позволяющее одновременно как соответствие друг другу предусловия и постусловия, так и завершимость.

Методы доказательства правильности программ принесли определенную пользу программированию. Было отмечено, что эти методы указывают способ рассуждения о ходе выполнения программ, дают удобную систему комментирования программ и устанавливают взаимосвязи между конструкциями языков программирования и их семантикой. Если принять более широкое толкование термина «анализ программ», подразумевая доказательство разнообразных свойств программ или доказательство теорем о программах, то ценность методов анализа станет более ясной. В частности можно исследовать характер изменения выходных значений программы, количество операций при выполнении программы, наличие зацикливаний, незадействованных участков программы. Таким образом, в некоторых частных случаях методы верификации могут применяться и для доказуемого обнаружения программных дефектов.

Формальное доказательство в виде вывода в некоторой логической системе вполне надежно, но сами доказательства оказываются очень длинными и часто необозримыми. Рассмотрим следующий фрагмент программы [ДДХ].

integer r, dd;

r:=a;

dd:=d;

while ddr do dd:=2*dd;

while ddd do begin dd:=dd/2;

if ddr do r:=r-dd;

end.

Должно соблюдаться условие, что целые константы a и d удовлетворяют отношениям ad и d>0.

Рассмотрим последовательность значений, заданную выражениями для:

i=0 ddi=d i>0 ddi=2*ddi-1.

Далее с помощью обычных математических приемов можно вывести, что:

ddn=d*2n (2.1) Кроме того, поскольку d>0, можно сделать вывод, что для любого конечного значения r отношение ddk>r будет выполняться при некотором конечном значении k;

первый цикл завершается при dd=d*2k. Решая уравнение di=2*di-1 относительно di-1, получаем di-1=di/2, что позволяет утверждать, что второй цикл тоже завершится. По окончании первого цикла dd=ddk и поэтому выполняется соотношение 0r

dd0(mod d) (2.4) Это следует, например, из того, что возможные значения dd имеют вид (см. 2.1) d*2i при 0ik.

Следующая задача состоит в том, чтобы показать, что после присваивания r начального значения всегда выполняется отношение ar(mod d) (2.5) Оно выполняется после начальных присваиваний.

Повторяемый оператор первого заголовка (dd:=2*dd) сохраняет отношение 2.5, и поэтому весь первый цикл сохраняет отношение 2.5.

Повторяемый оператор из второго цикла состоит из двух операторов.

Первый dd:=2/dd сохраняет инвариантность 2.5;

второй тоже сохраняет отношение 2.5, так как он либо не изменяет значение r, либо уменьшает r на текущее dd, а эта операция в силу 2.4 также сохраняет справедливость отношения 2.5. Таким образом, весь повторяемый оператор второго цикла сохраняет отношение 2.5.

Объединяя отношения 2.3 и 2.5, получаем, что окончательное значение r удовлетворяет условиям 0r

Как мы можем видеть, что программа, состоящая всего из нескольких строчек кода, может требовать формального доказательства ее правильности (т.е. доказательства соответствия предусловия и постусловия, а также доказательства завершимости), состоящего из нескольких страниц текста.

Таким образом, чтобы доказать правильность программы, сегмента программы или оператора, формулируется математическая теорема о результатах выполнения рассматриваемого сегмента программы. Затем эта теорема доказывается.

Почти всегда подобные теоремы формулируются следующим образом [Бей]. «Если конкретное условие истинно непосредственно перед выполнением сегмента программы, тогда после выполнения этого сегмента тоже истинным будет некоторое условие (в общем случае другое)».

Как было сказано выше, такие условия принято называть предусловиями и постусловиями. Предусловия и постусловия основаны на переменных из программы. На самом деле в большинстве условий используются лишь значения переменных в программе. В данном случае мы будем рассматривать лишь предусловия и постусловия именно такого вида.

Для упрощения доказательства теорема о корректности в приведенной выше форме разбивается на две части. Одна часть служит для доказательства того, что рассматриваемый сегмент программы вообще работает, то есть его выполнение заканчивается получением некоторого определенного результата (без ошибок на фазе компиляции или выполнения). В другой части доказывается корректность упомянутой теоремы в предположении, что программа завершает свою работу.

2.2. ПРЕДУСЛОВИЯ И ПОСТУСЛОВИЯ В ДОКАЗАТЕЛЬСТВАХ ПРАВИЛЬНОСТИ Условие — это алгебраическое выражение, значение которого либо «ложно», либо «истинно». Обычно в выражениях присутствуют имена переменных программы;

каждому имени соответствует значение соответствующей переменной. Условия также называют логическими выражениями, булевыми выражениями или суждениями.

Если из истинности условия V непосредственно перед выполнением оператора S следует истинность условия Р после выполнения этого оператора, то говорят, что V есть предусловие для постусловия Р по отношению к оператору S. Подобная взаимозависимость V, Р и S обычно записывается как {V} S {Р}. Оператор S может быть простым или составным, содержащим любое число отдельных операторов, то есть может быть сегментом программы или же целой программой.

Результат выполнения оператора, сегмента программы или программы будет корректным, если он удовлетворяется заданному постусловию. Оператор программы (либо сегмент программы, либо программа) завершается, если его выполнение доходит до конца за конечное время и при этом отсутствуют ошибки фазы выполнения (и ошибки фазы компиляции) - то есть его выполнение приводит к получению вполне определенного результата.

Если выполнение оператора, сегмента программы или программы приводит к получению корректного результата, когда бы он ни завершился, то говорят, что оператор (сегмент программы или программа) частично корректный. Если, кроме того, доказано, что его выполнение действительно заканчивается, то говорят, что оператор (сегмент программы или программа) полностью корректный. За счет выделения таких двух аспектов в корректности упрощаются доказательства.

Предусловия и постусловия представляют ключевые моменты в доказательствах корректности. Они выражают понятие «корректности» конкретной программы или сегмента программы. При записи различным образом, предусловие и постусловие вместе образуют общую спецификацию рассматриваемой программы. Основные части стандартного доказательства правильности предусловия и постусловия и, в частности, их взаимозависимости. Иногда можно алгебраическим путем вывести предусловие для заданного постусловия и заданного оператора (простого или составного). Такой подход особенно плодотворен в случае операторов присваивания. Часто задача сводится к проверке (доказательству) утверждения о корректности предусловий и постусловий сегмента программы. В таком случае доказываемое утверждение о корректности разбивается на утверждения о корректности частей рассматриваемого сегмента программы, и они доказываются раздельно.

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

2.3. ПРАВИЛА ВЫВОДА (ДОКАЗАТЕЛЬСТВА) 2.3.1. Правило усиления предусловия и ослабления постусловия Предметом каждого правила вывода является взаимосвязь предусловия и постусловия. Начнем с правила вывода, которое в ряде случаев поможет упростить алгебраические преобразования выражений, возникающих в ходе доказательства. Это правило следует из вышеприведенного определения предусловий и постусловий и упрощает восприятие ряда других правил.

Правило вывода Р1 – «Усиление предусловия и ослабление постусловия» If V V1 and {V1} OP {P1} and P1 P then {V} OP {P} Если условие V истинно перед выполнением оператора OP и если из V следует V1, то V1 истинно перед выполнением оператора OP. Если V является предусловием для P1 по отношению к OP, то P1 будет истинным после выполнения оператора OP. Если, наконец, из P1 следует Р, то и Р будет истинным после выполнения оператора OP. Иными словами, из истинности V перед выполнением OP следует истинность Р после его выполнения. Следовательно, V является предусловием для Р по отношению к OP.

Продвигаясь по программе в обратном направлении, можно усилить условия. Усиление условие может быть достигнуто путем добавления произвольного элемента с помощью операции логического умножения and или отбрасыванием элемента, участвующего в операции логического сложения or.

Двигаясь по программе в прямом направлении, можно ослабить условия. Условие может быть ослаблено добавлением произвольного элемента с помощью операции логического сложения or или отбрасыванием элемента, участвующего в операции логического умножения and.

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

2.3.2. Правило получения предусловия оператора присваивания Чтобы получить предусловие для заданного постусловия Р по отношению к заданному оператору присваивания х:=Е, подставим выражение Е вместо переменной с именем х всюду, где это имя встречается в постусловии Р. Либо, используя введенные ранее обозначения, запишем то же в следующем виде.

Правило вывода А1 – «Получение предусловия оператора присваивания» (Рх } х:=Е{Р} Е Значение х после выполнения оператора присваивания х:=Е будет таким же, как и значение Е перед его выполнением. Значение у будет неизменным (на основании допущения, что не должно появляться «побочных эффектов»). Здесь переменная у обозначает все те переменные программы, которые отличны от х. Таким образом, значение Р(х,у) после выполнения оператора присваивания будет равно значению Р(Е,у) до его выполнения. Следовательно, из истинности Р(Е,у) до выполнения следует истинность Р(х,у) после выполнения, то есть Р(Е,у) является предусловием для Р(х,у) по отношению к оператору присваивания х:=Е.

2.3.3. Правило проверки предусловия оператора присваивания Правило вывода А2 – «Проверка предусловия оператора присваивания» If x VPP Е then {V} x:=E{P} Правило вывода А2 представляет собой комбинацию правил вывода A1 и P1. Из правила вывода P1 следует, что V является предусловием для Р по отношению к оператору присваивания, если (V=РxЕ) and {РxЕ} х:=Е{Р}.

Из правила вывода A1 следует, что {РxЕ } х:=Е{Р}. Поэтому достаточно показать, что VРxЕ, если желательно проверить, что {V} х:=Е{Р}.

При применении правила вывода А2 неявно используются два правила вывода (A1 и P1). И действительно, правило вывода A используется для получения предусловия. Затем проверяется, что из заданного предусловия вытекает полученное предусловие, то есть, что гипотеза правила вывода P1 удовлетворяется.

2.3.4. Правило проверки предусловия условного оператора if Правило вывода IF1 – «Проверка предусловия условного оператора if» If {V and B} OP1 {P} and {V and not B} OP2 {Р} then {V} if В then OP1 else OP2 endif {P} Если условие V истинно перед выполнением условного оператора if, то и V, и В истинны непосредственно перед выполнением OP1 (если этот оператор выполняется). Поскольку (V and В) является предусловием для Р по отношению к OP1, то Р будет истинным после выполнения OP1.

Поступая аналогичным образом, получаем, что Р будет истинным после выполнения OP2. Таким образом, из истинности V перед выполнением условного оператора в обоих случаях следует истинность Р после его выполнения. Поэтому V является предусловием для Р по отношению к условному оператору целиком.

2.3.5. Правило получения предусловия условного оператора if Правило вывода IF2 – «Получение предусловия условного оператора if» If {V1} OP1 {P} and {V2} OP2 {Р} then ((V1 and В) or (V2 and not B)} if В then OP1 else OP2 endif {P} В действительности правило вывода IF2 представляет правило вывода IF1 с V=[(V1 and В) or (V2 and not В)]. Правило вывода IF2 следует из правил вывода IF1 и P1. Применяя правило вывода IF2, можно получить предусловие заданного постусловия Р по отношению к заданному условному оператору. Сначала получаем предусловия для Р по отношению к частям then и else (в выражениях OP1 и OP2), воспользовавшись подходящими правилами вывода для этих операторов.

Затем объединяем два предусловия приведенным выше образом.

2.3.6. Правило условного оператора if № Правило вывода IFЗ – «Условный оператор if» If {V1} OP1 {P} and {V2} OP2 {Р} then {V1 and V2} if В then OP1 else OP2 endif {P} Правило вывода IF3 представляет собой слабую теорему, которая следует из правил вывода IF1 и P1. Благодаря простой форме образующих ее выражений, на практике иногда она оказывается удобной для применения.

2.3.7. Правило условного оператора if № Правило вывода IF4 –«Условный оператор if» If {V1 and B} OP1 {P} and {V2 and not B} OP2 {Р} then (V1 and V2} if В then OP1 else OP2 endif {Р} Правило вывода IF4 также следует из правил вывода IF1 и P1.

Подобно правилу вывода IF3 оно обладает определенной практической полезностью вследствие простоты формы предусловия (V1 and V2).

2.3.8. Правило последовательности операторов Правило вывода S1 - «Последовательность операторов» If {V} OP1 {P1} and {P1} OP2 (Р} then {V} (OP1;

OP2) {Р} Правило вывода S1 очевидным образом обобщается на последовательность операторов произвольной длины. Таким образом, для того чтобы отыскать предусловие для заданного постусловия по отношению к последовательности операторов, сначала отыщем предусловие для Р по отношению к последнему оператору последовательности. Затем воспользуемся им в качестве постусловия по отношению к предыдущему, предпоследнему оператору и так далее, то есть будем продвигаться от оператора к оператору по последовательности в обратном направлении. Полученное таким образом предусловие по отношению к первому оператору последовательности является также предусловием для Р по отношению ко всей последовательности.

2.3.9. Правило цикла с условием продолжения без инициализации Правило вывода W1 - «Цикл с условием продолжения без инициализации» If {I and B} OP {I} then {I} while В do S endwhile (I and not B} Если условие I истинно непосредственно перед началом выполнения цикла с условием продолжения, то и I, и В будут истинными до первого выполнения тела цикла OP. Поскольку (I and В) является предусловием для I по отношению к OP, то I будет истинным после первого выполнения OP. Поэтому и I, и В будут истинными до второго выполнения тела цикла OP и так далее. Условие I будет истинным после каждого выполнения OP. Если когда-то наступит такой момент, что выполнение цикла закончится, то условие I будет истинным, а условие В ложным. То есть условие (I and not В) будет истинным при завершении цикла (если завершится его выполнение).

Значение условия I истинное, то есть константа, до и после каждого выполнения тела цикла OP. Поэтому условие I называют инвариантом цикла. Инвариант цикла является ключевым понятием в разработке и понимании существа цикла.

При применении правила вывода W1 требуется, чтобы инвариант цикла I был истинным до выполнения цикла. Обычно инвариант I изначально истинен тривиальным образом. Другими словами, начальное состояние представляет особый случай инварианта цикла. При завершении выполнения цикла условие (I and not В) истинно. То есть конечное состояние также представляет особый случай инварианта I. Рассматривая инвариант цикла I с общих позиций, его можно считать результатом обобщения начального и конечного состояний. Из последнего вытекает следующее правило.

Эмпирическое правило определения инварианта цикла. Следует обобщить (ослабить) начальное и конечное состояния (предусловие и постусловие) для того, чтобы найти подходящий инвариант цикла.

Почти любому циклу предшествует его «инициализация» выполнение сегмента программы, единственным назначением которого является установка исходной истинности инварианта цикла.

Весьма часто желательно доказать корректность цикла совместно с его инициализацией. Для этого мы располагаем правилом вывода W2.

2.3.10. Правило цикла с условием продолжения с инициализацией Правило вывода W2 – «Цикл с условием продолжения с инициализацией Пусть задано условие I (инвариант цикла).

If {V} инициализация {I} and {I and B} OP {I} and (I and not B} Р then {V} (инициализация;

while В do OP endwhile) {P} Правило вывода W2 объединяет в себе (и следует из) правила вывода S1, P1 и W1.

Чтобы доказать частичную корректность цикла с условием продолжения с помощью правила вывода W2, необходимо:

1. найти инвариант цикла I (если он не был уже указан разработчиком или программистом);

2. доказать, что {V} инициализация {I} (то есть I изначально истинно);

3. доказать, что {I and B} OP {I} (то есть тело цикла обеспечивает сохранение истинности I) и 4. доказать, что (I and not В} постусловие P (то есть P истинно при завершении цикла). Для доказательства, что цикл полностью корректный, необходимо дополнительно 5. показать, что цикл завершается, то есть существует верхняя граница числа выполнений оператора OP.

Доказательство завершения обычно заключается в показе того, что (1) значение некоторого выражения увеличивается или уменьшается по крайней мере на фиксированное значение при каждом выполнении OP и что (2) существует соответственно верхняя или нижняя граница значений такого выражения. Часто граница вытекает из условия В цикла while;

иногда она является частью инварианта цикла. Такое выражение называют вариантом цикла. Строго говоря, для шага OP требуется также показать, что весь цикл вообще выполняется, то есть не может возникнуть «ошибка фазы прогона» (например, переполнение, ссылка на неописанную переменную и т.п.).

2.3.11. Правило «разделяй и властвуй» № Правило вывода DC1 – «Разделяй и властвуй» If {V1} OP {Р1} and {V2} OP {Р2} then {V1 and V2} OP {P1 and P2} Правило вывода DC1 обобщается очевидным образом на произвольное число элементов (P1, P2, РЗ, P4 и т.д.).

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

Правило вывода DC1 относится к элементам, связанным операциями логического умножения and. Аналогичное правило вывода существует и для элементов, связанных операциями логического сложения or.

2.3.12. Правило «разделяй и властвуй» №2- Правило вывода DC2 – «Разделяй и властвуй» If {V1} OP {Р1} and {V2} OP {Р2} then {V1 or V2} OP {P1 or P2} Правило вывода DC3 – «Разделяй и властвуй» If {V} OP {Р1} and {V} OP {Р2} then {V} OP {P1 and P2} Правило вывода DC3 представляет собой правило вывода DC1 при V=V1=V2.

Правило вывода DC4 – «Разделяй и властвуй» If {V} OP {Р1} and {V} OP {Р2} then {V} OP {P1 or P2} Правило вывода DC4 представляет собой правило вывода DC2 при V=V1=V2.

2.3.13. Правило подпрограммы или сегмента программы № Правило вывода SP1 – «Подпрограмма или сегмент программы» Если значения всех переменных, присутствующих в условии В, остаются неизменными при выполнении сегмента программы S (например, подпрограммы, то {B} S {B} Если в условии В используются лишь такие переменные, значения которых одинаковы до и после выполнения S, очевидно, что значение В до исполнения S равно значению В после исполнения. Следовательно, если В истинно до исполнения, то В будет истинным и после, то есть В является предусловием для самого себя по отношению к S.

2.3.14. Правило подпрограммы или сегмента программы № Правило вывода SP2 – «Подпрограмма или сегмент программы» Если значения всех переменных, присутствующих в условии В, остаются неизменными при выполнении подпрограммы или сегмента программы S и If {V} S {P} then {V and B} S (Р and B} and {V or В} S {Р or В} Правило вывода SР2 непосредственно следует из правил вывода SP1, DC1 и DС2.

Чтобы применить правило вывода SР2, необходимо разделить постусловие на две части. В одной части должны быть ссылки лишь на те переменные, чьи значения не изменяются в результате выполнения S. Эта часть постусловия является (согласно правилу вывода SP1) его собственным предусловием. Во второй части постусловия содержатся ссылки на все те переменные, значения которых изменяются (или могли бы измениться) в результате выполнения S. Тем самым будет получено предусловие для той части постусловия (применяя, например, соответствующие правила вывода или используя формальную спецификацию S). И, наконец, эти два частных предусловия нужно объединить, образуя требуемое предусловие.

2.3.15. Правило подпрограммы или сегмента программы № Правило вывода SP3 – «Подпрограмма или сегмент программы» Если значения всех переменных, присутствующих в условии В, остаются неизменными при выполнении подпрограммы или сегмента программы S и If VV1 and {V1} S {Р1} and P1Р то цикл с условием продолжения инициализации {V and В} S {Р and B} and цикл с условием продолжения без инициализации {V or В} S {Р or В} Правило вывода SР3 является комбинацией правил вывода SР2 и P1.

Та часть постусловия, которая зависит от результата выполнения S (то есть Р в вышеприведенном утверждении), может быть более слабой по сравнению с тем постусловием, которое в действительности устанавливается при выполнении S (то есть P1). Аналогично соответствующая часть предусловия, которая в действительности удовлетворяется до выполнения S (то есть V), может оказаться сильнее того предусловия, которое требуется для удовлетворительной работы S (то есть V1).

2.4. ПРИМЕНЕНИЕ ПРАВИЛ ВЫВОДА Для доказательства правильности программы или сегмента программы, необходимо четко определить смысл понятия «корректность» по отношению к рассматриваемой конкретной программе. Кроме того, необходимо знать, по крайней мере, постусловие.

Часто также задается предусловие и в таком случае необходимо доказать заданное утверждение о правильности, то есть проверить, действительно ли данное предусловие является предусловием для данного постусловия по отношению к данной программе. В остальных случаях необходимо получить предусловие для данного постусловия и данной программы.

Выбор для применения того или иного правила вывода зависит: во первых, от вида рассматриваемого оператора программы и, во-вторых, от того, задано ли предусловие или же его следует получить.

Правила вывода DC1 - DС4 можно применять для операторов всех типов и для обеих задач доказательства (проверки и получения предусловия) для разложения длинных условий на малые части. Из правил вывода и их практической применимости при доказательстве правильности программ вытекает ряд требований, которым должна удовлетворять документация на программу.

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

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

Кроме того, в документации необходимо указать те условия (суждения), которые должны быть истинными в определенных местах подпрограммы. В этом плане особенно удобными являются места между циклами и условными операторами, а также до и после последовательности операторов присваивания. Не требуется включать в документацию те условия, которые можно легко получить непосредственно из других условий. Но в документацию обязательно должны быть включены те условия, которые отражают принятые в работе решения или которые можно получить лишь в результате выполнения длинных алгебраических преобразований, занимающих много времени.

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

Любой программист, который составляет свою программу и включает в нее оператор вызова документированной подпрограммы, должен знать предусловия и постусловия для этой подпрограммы, а также переменные, которые изменяются в результате ее выполнения. Предусловие указывает ему, какое состояние должна подготовить его программа перед вызовом подпрограммы, то есть, что ему следует учитывать перед вызовом.

Постусловие сообщает ему о том, что он может считать истинным после вызова подпрограммы.

И хотя методы доказательства правильности программ изо своей «громоздкости» существенно ограничены при доказательстве безопасности большинства программных комплексов, тем не менее, есть области, где данные методы могут найти прикладное значение.

Следующий пример характеризует это.

2.5. ПРИМЕР ДОКАЗАТЕЛЬСТВА ПРАВИЛЬНОСТИ ПРОГРАММЫ ДЛЯ АЛГОРИТМА ДИСКРЕТНОГО ЭКСПОНЕНЦИРОВАНИЯ 2.5.1. Вводные замечания Большинство известных алгоритмов электронной цифровой подписи, криптосистем с открытым ключом и схем вероятностного шифрования (см.

приложение) в качестве основной алгоритмической операции используют дискретное возведение в степень. Стойкость соответствующих криптографических схем основывается (как правило, гипотетически) или на сложности извлечения корней в поле GF(n), n - произведение двух больших простых чисел, или на трудности вычисления дискретных логарифмов в поле GF(p), p - большое простое число. Чтобы противостоять известным на данный момент методам решения этих задач операнды должны иметь длину порядка 512 или 1024 битов. Понятно, что выполнение вычислений над операндами повышенной разрядности (еще будет употребляться термин «операнды многократной точности» по аналогии с операндами однократной и двукратной точности [Кн]) требует высокого быстродействия рабочих алгоритмов криптографических схем.

2.5.2. Представление чисел Пусть A, N, e - три целых положительных числа многократной точности, причем A

Алгоритм Р (при разработке и доказательстве его правильности использованы результаты работы [Bk]), реализует вычислительную систему с фиксированной длиной слова, то есть A, B, N, P и S будут также рассматриваться как векторы A[1,m], B[1,m], N[1,m], P[1,m'] и S[1,m'], где каждый элемент вектора (элемент одномерного массива) есть цифра r ичной системы счисления, m'=m+h, величина h будет изменяться в зависимости от вида алгоритма. Основание r такой системы будет ограничено длиной машинного слова и цифры такой системы имеют вид 0,1,...,r-1 (r выбирается как целое положительное основание с неотрицательной базой). При этом n и m связаны соотношением n=s*m, где s=log2r (в дальнейших рассуждениях log - логарифм по основанию 2).

Наиболее целесообразно выбрать основание r=2 как наиболее экономное представление чисел в машине, так как при r<2 на представление чисел уходит больше памяти. Например, широко принятое на практике представление десятичных чисел в двоично-десятичном коде требует на 20 % большего объема памяти, чем двоичное представление тех же чисел.

Тем не менее, иногда полезно представлять ситуацию, когда r= [Кн, стр.283] или r=10k, например, при отладке программ.

Следует также обратить внимание на тот факт, что при выполнении арифметических операций над числами многократной точности, например, по классическим алгоритмам Кнута [Кн, стр.282-302], основание r следует уменьшать, чтобы не возникло переполнение разрядной сетки. Так, для операции сложения уменьшение выполняется до r=2-1, для умножения - до r=2/2. Однако если архитектурой вычислительной системы предусмотрен флаг переноса или хранение промежуточного результата с двойной точностью, то можно возвращаться к основанию r=2.

2.5.3. Алгоритм A*B modulo N - алгоритм выполнения операции модулярного умножения Операнды многократной точности для данного алгоритма представляются в виде одномерного массива целых чисел. Для знака можно зарезервировать элемент с нулевым индексом. Особенности представления чисел при организации взаимодействия алгоритма с другими рабочими программами, при организации ввода-вывода и т.д.

рассматриваются, например, в работе [Hu]. В алгоритме использован известный вычислительный метод «разделяй и властвуй» и реализован способ вычисления «цифра-за-цифрой». Прямое умножение не следует делать по нескольким причинам: во-первых, произведение A*B требует в два раза больше памяти, чем при методе «цифра-за-цифрой»;

во-вторых, умножение двух многоразрядных чисел труднее организовать, чем умножение числа многократной точности на число однократной точности.

Pages:     || 2 | 3 | 4 | 5 |   ...   | 6 |



© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.