close

Вход

Забыли?

вход по аккаунту

?

Методы и модели оценки и снижения ущерба при потере доступности приложений в процессе эволюции автоматизированных систем.

код для вставкиСкачать
На правах рукописи
ГЕНИН Михаил Геннадьевич
МЕТОДЫ И МОДЕЛИ ОЦЕНКИ И СНИЖЕНИЯ УЩЕРБА
ПРИ ПОТЕРЕ ДОСТУПНОСТИ ПРИЛОЖЕНИЙ В ПРОЦЕССЕ
ЭВОЛЮЦИИ АВТОМАТИЗИРОВАННЫХ СИСТЕМ
05.13.19 — Методы и системы защиты информации,
информационная безопасность
АВТОРЕФЕРАТ
диссертации на соискание ученой степени
кандидата технических наук
Санкт-Петербург — 2013
2
Работа выполнена на кафедре проектирования и безопасности компьютерных систем
федерального государственного бюджетного образовательного учреждения высшего
профессионального образования «Санкт-Петербургский национальный исследовательский университет информационных технологий, механики и оптики» (НИУ ИТМО).
Научный руководитель:
доктор технических наук, профессор, Арустамов Сергей
Аркадьевич, профессор кафедры проектирования и безопасности компьютерных систем НИУ ИТМО
Официальные оппоненты:
Коробейников Анатолий Григорьевич, доктор технических наук, профессор, заместитель директора по науке
Санкт-Петербургского филиала Федерального государственного бюджетного учреждения науки «Институт
земного магнетизма, ионосферы и распространения радиоволн им. Н.В. Пушкова» Российской Академии наук
Мажников Павел Викторович, кандидат технических
наук, доцент, старший преподаватель кафедры систем
сбора и обработки информации Федерального государственного казенного военного образовательного учреждения высшего профессионального образования «Военно-космическая академия имени А.Ф. Можайского»
Министерства обороны Российской Федерации (ВКА
имени А.Ф. Можайского)
Ведущая организация:
Федеральное государственное бюджетное учреждение
высшего профессионального образования «Государственный университет морского и речного флота имени
адмирала С.О. Макарова»
Защита диссертации состоится «01» июля 2013 года в 15ч. 50мин. на заседании диссертационного совета Д 212.227.05 при Санкт-Петербургском национальном исследовательском университете информационных технологий, механики и оптики по адресу: 197101, г. СанктПетербург, Кронверкский пр., д. 49.
Отзывы на автореферат, заверенные печатью, просим направлять по адресу: 197101,
Санкт-Петербург, Кронверкский пр., д. 49, СПб НИУ ИТМО, ученому секретарю диссертационного совета Д 212.227.05.
С диссертацией можно ознакомиться в библиотеке Санкт-Петербургского национального исследовательского университета информационных технологий, механики и оптики.
Автореферат разослан «17» мая 2013 г.
Ученый секретарь
диссертационного совета Д 212.227.05
кандидат технических наук, доцент
В. И. Поляков
3
ОБЩАЯ ХАРАКТЕРИСТИКА РАБОТЫ
Актуальность темы. Защите информационных систем от разного рода внешних и внутренних угроз посвящено большое количество работ в области защиты информации. В большинстве случаев речь, как правило, идет о неких злонамеренных действиях, защиту от которых необходимо выстраивать. Предлагаются самые разнообразные методы защиты внешнего
и внутреннего периметра, такие, как защищенные каналы передачи, криптографическая защита данных, межсетевые экраны, разграничение прав доступа, разного рода внутренние
процедуры аудита и контроля, процессов и т.д. Однако, существует большая группа рисков,
не связанных со злонамеренными действиями и с ошибками пользователей. Это риски, возникающие при обновлениях систем. Автору представляется, что именно они являются
наиболее вероятными. В то же время, эти риски являются наименее изученными.
Вопросами управления обновлениями (или изменениями) информационных систем занимаются достаточно давно, им посвящено много публикаций. Одна из первых работ датируется 1980-м годом и принадлежит фирме IBM. В ней впервые управление изменениями рассматривается не как отдельная дисциплина, а как составная часть управления информационными системами. С тех пор эта область знаний сильно расширилась, были предложены
различные подходы к управлению изменениями, однако этот основополагающий принцип в
силе и по сегодняшний день. В настоящее время процесс управления изменениями обычно
связывают с методологией ITIL. Наряду с ITIL, существуют и другие методологии, посвященные управлению изменениями в информационных системах, например, COBIT,
Microsoft Operational Framework. В конце концов, в 2005-м году был разработан международный стандарт ISO/EIC 20000, который объединил все эти методологии в одну общую
концепцию управления процессами в ИТ, в том числе и управления изменениями.
Тем не менее, несмотря на достаточно большое количество разработанных подходов и
методик, все они являются в значительной степени организационными и носят формальный
характер. Предлагаемые в них процедуры являются внешними по отношению собственно к
процессу обновления, они не дают ответа на вопрос о том, как нужно проводить обновление
систем наиболее безопасным образом, так, чтобы ущерб от возникновения внештатных ситуаций при этом был минимальным.
По мнению автора, задача разработки методов и алгоритмов для снижения ущерба от потери доступности приложений в процессе их обновления является актуальной.
Объектом исследования являются автоматизированные системы в процессе проведения обновлений.
Предметом исследования являются риски потери доступности, возникающие в результате проведения обновления приложений автоматизированных систем.
Цель диссертационной работы - разработка общей методики, моделей и методов оценки
и снижения ущерба, связанных с потерей доступности приложений в процессе эволюции
автоматизированных систем.
Задачи исследования. Для достижения указанной цели необходимо решить следующие
задачи:
1. разработка модели уязвимостей приложений при проведении запланированных изменений;
2. разработка метода расчета возможного ущерба для каждого из выявленных негативных событий на основе модели дерева ущербов;
3. разработка метода декомпозиции обновлений для снижения общего рассчитанного
ущерба для всех выявленных негативных событий;
4
4. разработка программного обеспечения, выполняющего расчет ожидаемых и максимальных ущербов при проведении обновления;
5. настройка и исследование эффективности предложенных моделей и методов на примере системы дистанционного банковского обслуживания (ДБО).
Методы исследования основаны на использовании теории вероятности, математической
статистики, математического моделирования. В работе широко применяется компьютерное
моделирование, в том числе с использованием самостоятельно разработанного программного
обеспечения (ПО).
Информационной базой исследования являются отечественные и зарубежные литературные источники: методические рекомендации, монографии, публикации в отраслевых периодических журналах, материалы крупных исследовательских и методических центров.
Также использованы материалы, размещенные в сети Интернет.
Научная новизна работы.
1. Разработана модель уязвимостей приложений при проведении запланированных изменений, учитывающая взаимосвязь приложений на основе анализа информационных
процессов применительно к планируемому обновлению.
2. Разработан метод расчета ожидаемого и максимального ущерба для каждого из выявленных негативных событий на основе модели дерева ущербов, позволяющий снизить
риски потери доступности за счет применения приоритетного тестирования
3. Предложен метод декомпозиции обновлений, снижающий время восстановления системы при возникновении инцидентов потери доступности после обновлений.
Реализация и внедрение результатов исследования. Основные результаты исследований использованы на кафедре проектирования и безопасности компьютерных систем НИУ
ИТМО при выполнении ряда научно-исследовательских работ и внедрении в образовательный процесс лабораторных работ по защите информационных процессов в компьютерных
сетях.
Достоверность полученных результатов подтверждается полнотой и корректностью математического аппарата и теоретических обоснований, а также и результатами экспериментов, проведенных с помощью разработанного в диссертации программного обеспечения.
Практическая значимость работы заключается в следующем:
1. разработанный метод расчета ожидаемого и максимального ущерба для каждого из
выявленных негативных событий позволяет применить стратегию тестирования с
приоритетом по отношению к информационным процессам, порождающих максимальные риски потери доступности;
2. разработанное программное обеспечение позволяет рассчитать ожидаемые и максимальные ущербы для каждого из выявленных негативных событий, что дает возможность определить приоритетность тестирования;
3. предложенный метод декомпозиции установки обновлений позволяет повысить эффективность традиционных методов резервирования за счет разбиения обновления на
элементарные составляющие;
4. разработанные методы и модели позволяют адаптировать предложенные подходы для
различных типов автоматизированных систем.
Внедрение и реализация. Практические результаты работы были внедрены и использованы в НИУ ИТМО, что подтверждено соответствующими актами о внедрении.
Публикации по теме диссертации. По теме диссертации опубликовано шесть научных
работ, из них две выполнено самостоятельно, четыре в соавторстве. Три статьи опубликованы в рецензируемом научном журнале, определенном в перечне ВАК.
5
Апробация работы. Основные научные положения и практические результаты работы
были представлены и обсуждены на следующих научно-технических конференциях:
1) VII всероссийской межвузовской конференции молодых ученых, 2010 г.;
2) XL научной и учебно-методической конференции, 2011 г.;
3) VIII всероссийской межвузовской конференции молодых ученых, 2011 г.;
4) IX всероссийской межвузовской конференции молодых ученых, 2012 г.;
5) XLI научной и учебно-методической конференции, 2012 г.;
6) VIII miedzynarodowej naukowi – praktycznej konferencji «Aktualne problemy
nowoczesnych nauk - 2012», 2012 г.;
7) XLII научной и учебно-методической конференции НИУ ИМТО, 2013 г.
Основные научные положения, выносимые на защиту:
1. модель уязвимостей приложений при проведении запланированных изменений, учитывающая взаимосвязь приложений на основе анализа информационных процессов
применительно к планируемому обновлению;
2. метод расчета ожидаемого и максимального ущерба для каждого из выявленных негативных событий на основе модели дерева ущербов, позволяющий снизить риски потери доступности за счет применения приоритетного тестирования;
3. метод декомпозиции обновлений, снижающий время восстановления системы при возникновении инцидентов потери доступности после обновлений.
Структура и объем диссертации. Диссертация состоит из введения, четырех глав, заключения, списка литературы. Материал изложен на 115 страницах компьютерного текста, иллюстрирован 20 рисунками и 30 таблицами.
СОДЕРЖАНИЕ РАБОТЫ
Во введении обоснована актуальность темы диссертации, сформулированы цель и
задачи исследования, описаны объект и предмет исследования, указаны теоретич еские и методологические основы, раскрыты элементы научной новизны работы, ее
теоретическая и практическая значимость.
В первой главе работы вводится понятие доступности, проводится анализ процесса эволюции автоматизированных систем и связанных с этим рисков потери д оступности приложений, рассматриваются существующие и применяемые на сегодняшний день методики управления изменениями в автоматизированных системах,
выявляются сильные и слабые стороны этих методик. На основе проведенного анал иза делается вывод о недостаточности современных подходов к контролю за провед ениями изменений в автоматизированных системах, формулируются цели и задачи
диссертационной работы.
Под доступностью в данной работе понимается возможность системы выполнять
заявленные функции их легальными пользователями.
Во второй главе работы рассматривается процессная модель системы, на основе
которой составляется список возможных уязвимостей при проведении обновления.
Затем вводится понятие риска потери доступности для негативного события, приводится алгоритм расчета величины ожидаемого ущерба на основе построения дерева
ущерба для данного негативного события.
6
На рис. 1 представлен пример графического описания процессного взаимодействия приложений для некоторой автоматизированной системы.
Предположим, что обновляется структура данных для процесса P3, что требует
обновления приложений С5 и С7.
P5
C2
C1
C10
P1
P1
P5
P1
P2
P2
C9
C7
C4
C3
P2
P1, P2, P3
P1, P2, P3
P4
P3
C6
C5
P3
C8
P3
Рисунок 1. Пример схемы процессного взаимодействия приложений с тремя основными (P1, P2, P3) и двумя вспомогательными (P4, P5) процессами и с обновляемыми приложениями С5 и С7.
При выявлении уязвимостей будем придерживаться следующих принципов:
1. во всех процессах, в которых участвует обновляемое приложение, могут возникнуть уязвимости;
2. процессы, выявленные в п.1, могут, в свою очередь, вызывать уязвимости во
всех остальных приложениях, через которые они проходят;
3. дополнительные приложения, выявленные в п.2, могут вызывать уязвимости
других процессов, выполняемых данными приложениями.
Как следует из рисунка 1, для проверки работоспособности всей системы после
проведения данного обновления необходимо проверить работу всех приложений,
непосредственно обеспечивающих процесс P3 (C5, C6, C7, C9), несмотря на то,
что обновление затронуло только приложения С5 и С7. Кроме этого, необходимо
учесть, что изменяемое приложение С7 обеспечивает работу и всех остальных
процессов. Следовательно, есть вероятность, что изменения в приложения С7 для
процесса P3 могут повлиять и на работу остальных процессов. При отсутствии
информации об изменениях внутренней структуры С7 можно сделать вывод о
необходимости проверять работоспособность всех приложений системы. Иными
словами, в этом случае при проведении данного обновления нужно тестировать
все процессы P1-P5. Если информация об изменениях в структуре приложения С7
доступна, то объем необходимого тестирования, возможно, уменьшится.
7
Исходя из полученной информации (рис.2), дополнительно к P3 необходимо тестировать только процессы P4 и P5, что существенно облегчает задачу. Для дальнейшего уточнения объема необходимого тестирования следует продолжать применять данную методику для каждого из обновляемых частей данного приложения
(например для С7.4).
Компонент С7
P5
C7.1
C7.4
P1
P5
P1
P1, P2, P3
C7.2
P2
P2
P3
P4
C7.3
C7.5
P3
P4
Рисунок 2. Пример структуры приложения С7 с учетом данного обновления.
Если на очередной итерации число процессов, подлежащих проверке, перестает
уменьшаться, дальнейшая детализация данного компонента нецелесообразна. В результате анализа данной модели можно определить возможные уязвимости. Для рассмотренного примера выявленные уязвимости приведены ниже:
Модуль
Уязвимость
С5
Ошибки при выполнении процесса P3
C6
Ошибки при выполнении процесса P3
С7.3
Ошибки при выполнении процесса P3
С7.3
Ошибки при выполнении процесса P4
С7.4
Ошибки при выполнении процесса P5
С7.1
Ошибки при выполнении процесса P5
С7.2
Ошибки при выполнении процесса P5
С9
Ошибки при выполнении процесса P3
С10
Ошибки при выполнении процесса P5
Таблица 1. Список выявленных уязвимостей при установке данного обновления.
8
На основе полученного списка уязвимостей необходимо выбрать оптимальную
стратегию установки и тестирования обновления для снижения возможных ущербов
от потери доступности системы.
Обычно риск потери доступности определяют как пару, состоящую из вероятности
наступления того или иного события, приведшего к потере доступности после проведения обновления, и ущерба от наступления этого события.
В данной работе предлагается ввести расширенное понятие ущерба в предположении, что он носит вероятностный характер. Например, утрата части клиентской базы
и связанная с этим потеря доли рынка в результате сбоя ПО может и не произойти.
Все зависит от множества различных объективных и субъективных факторов, таких,
как продолжительность неработоспособности системы в результате сбоя, время сбоя,
наличие клиентов, которые в момент сбоя работали с системой и т.д. Поэтому можно
говорить как о величине ущерба, так и о вероятности наступления ущерба при усл овии, что сбой произошел.
Основываясь на этих предположениях, определим риск потери доступности следующим образом:
Ri={Pi,Li (PLi)},
(1)
где Ri – риск наступления i-го события, Pi – вероятность наступления i-го события,
Li (PLi )-величина ущерба от i-го события, наступающая с вероятностью PLi , при этом
ущерб будем рассматривать как дискретную случайную величину (ДСВ).
Будем считать, что на момент начала исследования текущая версия системы до
обновления не содержит ошибок, т.е. риски потери доступности для неё отсутствуют.
Для решения данной задачи предлагается следующий эвристический подход. Для
каждого из выявленных возможных негативных событий, которые могут иметь место
в результате обновления, проводится оценка риска потери доступности на основе
анализа возможных ущербов от этого события. События с более высоким ущербом
признаются более опасными. Для количественной оценки возможного ущерба в работе предлагается метод построения дерева ущерба для каждого из выявленных нег ативных событий.
Для дальнейшего развития понятия ущерба обратим внимание на то, что ущерб Li,
возникший в результате события i, может быть составным, т.е. представленным в виде нескольких независимых составляющих:
Li ={Lij }, j={1, 2 ,…, N},
где Lij – j-я составляющая ущерба Li , возникшего в результате i-го события.
Такое представление оправдано, т.к. в результате сбоя системы могут произойти
одновременно и независимо друг от друга несколько негативных последствий.
Например, в результате неполадок новой версии СУБД перестали быть доступными
независимые друг от друга функции (такие, например, как ввод документов и подг отовка отчетности). При этой ситуации возникают несколько независимых друг от
друга ущербов. Продолжая рассуждения, по аналогии с (1), можно заметить, что у
каждой j-й составляющей ущерба Lij может быть своя независимая от других составляющих вероятность возникновения PLji . В результате получаем следующее выражение для риска потери доступности:
9
Ri={Pi, {Li1 (PLi1), Li2 (PLli2), Li3(PLi3), …, LiN(PLiN)}},
(2)
где N – количество независимых составляющих ущерба от i-го события.
Далее рассмотрим ситуацию, когда составляющие ущерба являются зависимыми
друг от друга, т.е. когда одна составляющая ущерба является следствием другой. Это
возможно в случае, когда в результате неполадок в работе системы часть клиентов
переходит к другому поставщику услуг, в результате чего уменьшается доля контр олируемого рынка, и т.д. При этом один ущерб может породить другой, т.е. возникает
цепочка вложенных ущербов. Каждый из них имеет свою собственную вероятность
возникновения при условии, что реализовались все предыдущие ущербы цепочки. В
этом случае риск потери доступности для зависимых ущербов определяется следующим образом:
Ri={Pi, {Li1 (PLi1 )}, Li2(PLi2| Li1), …, LiN(PLiM| LiM-1…Li3Li2Li1 )}},
(3)
где M – количество зависимых ущербов от i-го события в данной цепочке.
Возможно существование ситуаций, когда цепочка зависимых ущербов завершается несколькими независимыми ущербами, каждый из которых может быть началом
новой цепочки зависимых ущербов, т.е. присутствует комбинация зависимых и независимых ДСВ. В общем случае можно сказать, что в результате события i возникает
набор независимых ущербов, некоторые из которых могут породить цепочку завис имых. Каждая из порожденных цепочек зависимых ущербов может заканчиваться несколькими независимыми ущербами, которые тоже могут порождать свои цепочки, и
т.д. Формально это можно описать различными вложенными комбинациями формул
(2) и (3), однако выразить общий случай в виде одной формулы сложно, т.к. выраж ение будет слишком громоздким. Вместо этого предлагается графическое представление совокупности ущербов в виде дерева.
При построении дерева перейдем к более удобному способу обозначения пары
«вероятность-ущерб». Вместо нижних индексов будем использовать индексы, заключенные в квадратные скобки. Индексы в скобках будем указывать сразу для пары
(P,L), а не для каждой из составляющих, так как индексы для P и для L из одной пары
всегда совпадают. Например, запись Li1 (PIi1) преобразуется в (P,L)[i,1]. Тогда запись
(3) для независимых ущербов будет выглядеть следующим образом:
Ri={Pi, {(P,L)[i,1], (P,L)[i,2], (P,L)[i,3], …, (P,L)[i,Ni]}},
где Ni – количество независимых составляющих ущерба от i-го события.
Для обозначения ущерба, подчиненного предыдущему, будем использовать индекс
следующего уровня. Например, ущерб, который подчинен ущербу (P,L)[i,2] будем
обозначать как (P,L)[i,2,1], следующий за ним в цепочке ущерб будет уже
(P,L)[i,2,1,1], и т.д. Запись (4) для зависимых ущербов в новой форме примет вид:
Ri={Pi, {(P,L)[i,1], (P,L)[i,1,1], (P,L)[i,1,1,1] ,…, (P,L)[i,1,…,1]}}.
Например, если у узла (P,L)[i,1,1] будет не один подчиненный ему ущерб, а Ni
подчиненных ущербов, независимых друг от друга, то будем обозначать их как
(P,L)[i,1,1,1], (P,L)[i,1,1,2], (P,L)[i,1,1,3], …, (P,L)[i,1,1,Ni]. Используя данное обозначение ущербов разных уровней (узлов дерева), перейдем к наглядной модели ущербов в виде дерева (рис.3).
10
Введем понятие ожидаемого значения ущерба Liest для события i. Для его вычисления будем применять подход, основанный на расчете математического ожидания
для случайной величины. Вначале рассмотрим варианты расчета математического
ожидания для независимых и зависимых ущербов, а затем их комбинацию для в ычисления ожидаемого значения ущерба всего дерева.
Для независимых событий (горизонтальный уровень дерева) средневзвешенное
значение ДСВ (математическое ожидание) вычисляется как сумма произведений в ероятности и величины каждой из возможных комбинаций ущербов, разделенная на
сумму вероятностей комбинаций этих ущербов. Так как перечисляются все возможные комбинации независимых ущербов одного горизонтального уровня, то их совокупность можно считать полной группой событий, поэтому сумма вероятностей всех
возможных комбинаций, т.е. знаменатель формулы, будет равен единице.
Событие i
(P,L)[i,1]
(P,L)[i,2]
(P,L)[i,3]
(P,L)[i,Ni]
...
(P,L)[i,2,1]
(P,L)[i,2,1,1]
(P,L)[i,2,1,2]
(P,L)[i,2,1,3]
(P,L)[i,2,1,3,1]
(P,L)[i,2,1,3,1,1]
Рисунок 3. Пример графического изображения дерева ущербов, порождаемого i-м
событием
Рассмотрим дерево k при гипотезе, что число его независимых ущербов горизонтального уровня равно 2. Для простоты записи обозначим вероятность j-ого ущерба
Pkj, а его величину Lkj (j=1,2). Тогда ожидаемое значение ущерба для дерева k будет
следующим:
L 
est
k
P k 1  (1  P k 2 )  Lk 1+P k 2  (1  P k 1 )  Lk 2  P k 1  P k 2  (Lk 1  Lk 2 )  (1  P k 1 )  (1  P k 2 )  Lk(0)
P k 1  (1  P k 2 )+P k 2  (1  P k 1 )  P k 1  P k 2  (1  P k 1 )  (1  P k 2 )
,
(4)
k
где L (0)=0 – нулевая величина ущерба, соответствующая исходу, при котором он
отсутствует.
Т.к. Lk (0)=0, а знаменатель, образуя сумму вероятностей полной группы событий (ущербов), равен единице, то формула (4) примет следующий вид:
k
k
k
k
k
k
k
k
k
k
est
Lk  P 1  (1  P 2 )  L 1+P 2  (1  P 1 )  L 2  P 1  P 2  ( L 1  L 2 ).
(5)
11
После аналогичных рассуждений и преобразований для дерева m c гипотезой о
трех независимых ущербах, формула расчета ожидаемого ущерба примет вид:
m
m
m
m
m
m
m
m
m
m
m
m
est
L m  P 1  (1  P 2 )  (1  P 3 )  L 1+P 2  (1  P 1 )  (1  P 3 )  L 2+ P 3  (1  P 1 )  (1  P 2 )  L 3 
 P m1  P m 2  (1  P m3 )  ( Lm1  Lm 2 )+P m 2  P m3  (1  P1 )  ( Lm 2  Lm3 )+ P m1  P m3  (1  P m 2 )  ( Lm1  Lm3 ) 
m
P m1  P m 2  P m3  ( Lm1  Lm 2  Lm3 ).
(6)
В общем случае с N>3 независимыми составляющими ущерба от i-го события
формула для вычисления Liest будет слишком громоздкой, поэтому в работе она не
приведена. Кроме того, на практике крайне редко удается выделить более трех независимых существенных ущербов, порождаемых одним узлом дерева.
При суммировании зависимых ущербов одной ветви дерева будем использовать
тот же подход, что и для (5, 6), рассматривая все возможные комбинации ущербов
для ветви дерева и учитывая при этом, что реализация каждого следующего ущерба
из данной ветви возможна при условии, что все предыдущие ущербы реализовались.
В отличие от независимых ущербов одного горизонтального уровня, совокупность
зависимых ущербов вертикальной ветви не образует полную группу событий, т.к. не
все возможные комбинации реализуются. Ущерб d не может реализоваться в случае,
если не реализовались ущербы 1, 2, …, (d-1).
Рассмотрим дерево q при гипотезе, что оно состоит из одной ветви, содержащей
три последовательных ущерба (d=3). В этом случае ожидаемое значение ущерба примет вид:
est
Lq 
(1  P q1 )  Lq (0)  P q1  (1  P q 2 )  (1  P q 3 )  Lq1+  P q1  P q 2  (1  P q 3 )  ( Lq1  Lq 2 )+P q1  P q 2  P q 3  ( Lq1  Lq 2  Lq 3 )
(1  P q1 )  P q1  (1  P q 2 )  (1  P q 3 )  P q1  P q 2  (1  P q 3 )+P q1  P q 2  P q 3
, (7)
где Lq (0) – нулевой ущерб. Т.к. Lq (0)=0, то формула (7) примет следующий вид:
est
Lq 
P q1  (1  P q 2 )  (1  P q 3 )  Lq1+  P q1  P q 2  (1  P q 3 )  ( Lq1  Lq 2 )+P q1  P q 2  P q 3  ( Lq1  Lq 2  Lq 3 )
(1  P q1 )  P q1  (1  P q 2 )  (1  P q 3 )  P q1  P q 2  (1  P q 3 )+P q1  P q 2  P q 3
(8)
Поскольку совокупность зависимых ущербов вертикальной ветви не образует
полную группу событий, знаменатель формулы (8) меньше единицы.
С использованием этой методики, можно рассчитать ожидаемое значение ущерба
для всего дерева. Вначале, используя (8), проведем свертку самых нижних ветвей до
нижних горизонтальных уровней, а затем, в соответствии с (5, 6), свертку этих горизонтальных уровней. Последовательно повторяя эти операции, свернем все дерево
снизу вверх от самых длинных ветвей к вершине (рис.4).
Использование ожидаемого значения ущерба Liest после свертки всего дерева
ущербов для события i позволяет получить некоторую обобщенную оценку величины
возможного ущерба от данного события.
Кроме того, для любого события r, связанного с потерей доступности ПО, наряду
с ожидаемым значением ущерба Lrest логично ввести понятие максимального значения ущерба Lr max , которое рассчитывается при условии, что вероятность любого из
составляющих ущербов события r равна единице.
12
Событие i
аг
Ш
(P1,L1)
(P3,L3)
(P2,L2)
Шаг 4.
3.
(P4,L4)
(P5,L5)
(P6,L6)
(P7,L7)
Шаг 2.
(P8,L8)
(P9,L9)
Шаг 1.
Рисунок 4. Пример пошагового алгоритма свертки для дерева ущербов
При невозможности точного расчета абсолютных величин ущербов в денежном
выражении предлагается перейти от абсолютных значений величин ущерба к некоторым условным значениям. Представим ущерб в некоторых условных единицах, соответствующих степени его критичности. Для того, чтобы с величинами ущербов можно было выполнять операции сложения и умножения, поставим в соответствие величинам ущербов числовой ряд {1, 2, 3, 4, 5} так, что числу 5 соответствует
максимальный ущерб (табл. 2).
Очень низкий (ОН)
1
Низкий (Н)
2
Средний
(С)
Высокий
(В)
3
4
Очень высокий (ОВ)
5
Таблица 2. Градации величин ущербов
Введем градации вероятности. Будем использовать три уровня вероятности ущерба: низкую (Н), среднюю (С), высокую (В), поставив им в соответствие числовой ряд
{0.3, 0.6, 0.9} 1 (табл. 3).
Низкий (Н)
Средний (С)
Высокий (В)
0.3
0.6
0.9
Таблица 3. Градации вероятностей ущербов
Предложенное автором разбиение представляется удобным с точки зрения программной
реализации. Можно использовать и другую шкалу градаций величин ущербов и вероятностей, которую можно настраивать в зависимости от сложности эксплуатируемой инфраструктуры.
1
13
После введения градаций величин ущербов и их вероятностей перейдем к оценке
ущерба, используя механизм расчета ожидаемого значения ущерба, описанный выше.
При построении дерева ущербов представляется целесообразным учитывать возмо жное изменение вероятности возникновения или величины ущерба от продолжител ьности недоступности системы. Анализируя возможный рост вероятности и величины
ущерба для каждого из ущербов в построенном дереве, можно перейти от статического изображения дерева ущербов к его динамическому изображению, указав во зможную эволюцию во времени каждого из ущербов дерева. Стоит отметить, что и
ожидаемое значение ущерба Liest и максимальный ущерб Li max будут зависеть от продолжительности простоя системы.
Предположим, что определено максимально допустимое значение величины возможного ущерба при возникновении какого-либо негативного события в результате
обновления. Анализируя динамику роста общего ущерба от времени для всех выявленных негативных событий, можно указать максимально допустимое время простоя
системы (RTO – recovery time objective), соответствующее выбранной максимально
допустимой величине ущерба.
С использованием платформы Visual Basic автором разработано программное
обеспечение (ПО), с помощью которого можно рассчитать ожидаемое и максимальное значение ущерба для каждого из заданных деревьев ущербов. Исходными данными для него являются экспертные оценки вероятности величин ущербов для событий, образующих каждое из деревьев ущербов, а результатами расчета – их ожидаемые и максимальные ущербы. Этот расчет позволяет определить приоритетность
тестирования для процессов, порождающих максимальные ущербы после обновления.
В третьей главе разработан метод декомпозиции обновлений для снижения
возможного суммарного ущерба при проведении обновлений для случая, когда время
тестирования всего комплексного обновления ограничено.
Предлагаемый эвристический подход к обновлению систем основан на том, чтобы
единовременно устанавливать только такие обновления, которые возможно отменить
или исправить за допустимое время. Для этого нужно определиться с максимально
допустимым временем простоя (RTO), а затем разбить планируемое обновление на
несколько т.н. элементарных обновлений, возврат каждого из которых в отдельности
возможен за данный интервал времени. Каждое элементарное обновление в составе
комплексного обновления должно удовлетворять следующим условиям:
1. в определенный момент времени устанавливается только одно элементарное обновление;
2. после корректной установки элементарного обновления потеря доступности отсутствует;
3. в случае возникновения проблем после установки элементарного обновления возврат к предыдущей конфигурации происходит за допустимый интервал времени
(RTO) и либо не приводит к потере данных вообще, либо приводит лишь к минимальной потере данных, связанных с новым функционалом.
Покажем, что предлагаемый эвристический подход снижает риск потери доступности по сравнению с одновременной установкой всего комплексного обновления.
14
Назовем обновление ui элементарным, если возможен процесс возврата за допустимое время к предыдущему состоянию системы по прошествии некоторого времени после установки обновления ui. Если ui установилось корректно, то система работоспособна и готова к установке обновления ui+1 .
Будем считать, что любое комплексное обновление U может быть разложено на
несколько элементарных обновлений ui , i=1,…,N:
U={u1, u2, …, uN}.
Утверждение. Последовательная установка элементарных обновлений ui, i=1,…,N
в составе обновления U снижает риск потери доступности по сравнению с установкой всего комплексного обновления U сразу.
Будем исходить из того, что после установки любого ui система работоспособна, В
этом случае есть выбор: либо установить все комплексное обновление U целиком,
либо поэтапно устанавливать каждое элементарное обновление ui , после чего проводить тесты на потерю доступности, и при их успешном завершении устанавливать
ui+1 и т.д.
Обозначим p(ui ) вероятность сохранения доступности системы после установки
обновления ui.. Рассчитаем теперь вероятность сохранения доступности системы P(U)
после установки всего комплексного обновления в том и в другом случае.
Рассмотрим случай установки всего обновления сразу. Если все обновление U состоит из одного элементарного обновления u1, можно записать:
P(U)=p(u1 ).
Для обновления, состоящего из двух элементарных обновлений u1 и u2 формула
будет выглядеть как произведение вероятностей:
P(U)=p(u1 )∙p(u2 ),
так как сохранение доступности после установки всего обновления возможно только
при сохранении доступности после установки обновлений u1 и u2. Соответственно,
для N обновлений формула будет выглядеть следующим образом:
P(U) = p(u1 )∙p(u2 )∙…∙p(uN) = ∏ p(ui ), i=1,…,N
(9)
Поскольку любая p(u i ) меньше единицы, то можно утверждать, что P(U) < p(ui)
для любого i. Отсюда вытекает, что при одновременной установке всех элементарных обновлений ui в составе комплексного обновления U вероятность P(U) всегда
ниже, чем при единовременной установке только одного обновления ui .
Рассмотрим ситуацию, когда каждое обновление ui в составе обновления U устанавливаются не одновременно, а через определенные промежутки времени, между
которыми проводятся тесты на отсутствие потери доступности. Другими словами,
установка обновления ui производится только после того, как обновление ui-1 было
корректно установлено и после этого система находилась в эксплуатации без потери
доступности.
Проанализируем зависимость вероятности p(ui ) от времени эксплуатации при таком способе обновления. Известно, что в первое время после запуска обновленной
системы вероятность потери доступности выше, чем в последующем. Как правило,
большинство проблем после обновления возникает в первые часы работы. Если в
15
первые часы эксплуатации потери доступности не произошло, то вероятность того,
что они возникнут позднее, существенно ниже, т.е. после установки обновления ui с
течением времени вероятность p(ui ) будет возрастать и в предельном случае стремиться к единице. На рисунке 5 вероятность p(ui ) представлена графически как
функция времени.
Рисунок 5. Зависимость вероятности сохранения доступности обновления от времени
Здесь момент времени, равный нулю, соответствует времени запуска системы сразу после обновления ui, а момент
времени t – состоянию, когда система уже проработала некоторое время после обновления без потери доступности.
Чем больше это время, тем меньше шансов, что из-за установки i-го обновления возникнет потеря доступности. Если между каждым обновлением u1 , u2 , ...,ui-1 проходит достаточное количество времени, то вероятности сохранения доступности системы после этих уже установленных обновлений p(u1 ),…, p(ui1 ) близки к единице (см. рис. 5).
Рисунок 6. Вероятности сохранения доступности после уже установленных обновлений
Обозначим P(ui ) вероятность сохранения
доступности после установки всех обновлений системы с первого по i-е при последовательной их установке. По аналогии с (9) можем записать:
P(ui ) = p(u1 )∙p(u2 )∙…∙p(ui ) = ∏ p(uj ),
j=1,…,i
Учитывая, что p(u1 ),…,p(u i-1 ) в случае последовательной установки близки к единице при установке i-го обновления, можно записать, что P(ui )  p(ui ).
Таким образом, при последовательной установке обновлений u1, u2 ,...,ui вероятность
сохранения доступности после всех этих обновлений равна вероятности сохранения
доступности после установки последнего, i-го обновления. Действительно, все
предыдущие обновления установлены ранее и после каждого обновления система некоторое время эксплуатировалась без потери доступности.
Выше показано, что при одновременной установке всех обновлений вероятность
p(ui ) сохранения доступности каждого из них от первого до последнего не стремится
к единице, а имеет начальное значение для момента времени ноль, и, следовательно,
вносит свой негативный вклад в общую вероятность P(U). Поэтому (см. формулу (1)),
вероятность P(U) сохранения доступности после установки всех обновлений одновременно ниже вероятности P(ui ) при последовательной установке обновлений с u1
по ui, и так вплоть до последнего uN. Следовательно, можно записать, что
P(U) < P(ui ) для любого i от единицы до N.
16
Таким образом, показано, что при выполнении требования о работоспособности
системы при установке любого из элементарных обновлений в составе комплексного
обновления вероятность успешного исхода выше именно при последовательной, ра стянутой во времени установке обновлений. При одновременной установке всех элементарных обновлений риск потери доступности существенно возрастает.
В приведенных выше рассуждениях не проводился анализ степени разбиения комплексного обновления на элементарные составляющие. В предположении, что промежуток времени между соседними обновлениями примерно один и тот же, время,
которое система должна эксплуатироваться без потери доступности при установке
всего комплексного обновления U определяется как:
T(U) = Tc ∙N +  T(ui ), i=1,…,N
где Tc - время работы системы между соседними элементарными обновлениями, N
– количество элементарных обновлений ui, составляющих U, а T(ui ) – время установки i-го обновления. Если считать, что установка обновлений ui проводится во внерабочее для пользователей системы время и/или что время установки каждого ui мало
по сравнению со временем Tc эксплуатации системы между элементарными обновлениями, то время установки T(ui ) каждого i-го обновления можно не учитывать и второе слагаемое в формуле опустить:
T(U)  Tc ∙N
(10)
Таким образом, можно считать, что время установки всего комплексного обновления U растет линейно с количеством элементарных обновлений. При отсутствии
необходимости уложиться в определенное время установку последовательных элементарных обновлений можно проводить в режиме без жестких ограничений по времени. Рассмотрим более реальную ситуацию, когда время установки обновлений
ограничено практическими соображениями. Для сокращения время T(U). согласно
(10) это можно сделать двумя способами: уменьшая время работы системы Tc между
элементарными обновлениями или сокращая количество элементарных обновлений в
составе полного.
Проведем анализ ситуации при сокращении времени между соседними элементарными обновлениями. Из графиков на рисунках 3 и 4 следует, что вероятность сохранения доступности системы после обновления тем выше, чем больше времени после
него прошло. Соответственно, при сокращении времени между обновлениями вероятность сохранения доступности снижается (рис.7).
Рисунок 7. Влияние сокращения времени между
соседними обновлениями на вероятности сохранения доступности после их проведения
Рассмотрим ситуацию при сокращении числа
элементарных обновлений. Это означает, что за
один раз устанавливается не одно обновление ui, а
сразу несколько элементарных обновлений от ui-k
до ui. В этом случае вероятность сохранения доступности после установки этих нескольких обновлений в одном пакете будет равна произведению соответствующих вероятностей для каждого из обновлений:
17
P(ui-k ,…, ui ) = p(ui-k )∙p(ui-k+1 )∙…∙p(ui ).
Так как любая p(ui ) меньше единицы, то в соответствии с (9) мы можем сделать
вывод, что вероятность сохранения доступности после одновременной установки нескольких обновлений ниже, чем после установки каждого обновления отдельно.
Рассмотрев оба варианта сокращения времени, сделаем вывод, что сократить время установки обновления можно только за счет повышения риска сбоя системы. Повышенный риск может быть либо следствием сокращения времени работы системы
между элементарными обновлениями либо следствием установки нескольких элементарных обновлений сразу (причем второй вариант сводится к первому, т.к. при этом
время между этими обновлениями сокращается до нуля). На рисунке 8 изображены
оба варианта.
Рисунок 8. Вероятность сохранения доступности при одновременной установке нескольких обновлений
Наряду с разработкой метода декомпозиции обновлений, в третьей главе рассмотрены возможности его применения в сочетании
с традиционным резервированием для снижения ущерба от потери доступности приложений.
В контексте использования резервирования представим всю систему как состоящую из статической (СЧ) и динамической части (ДЧ). К СЧ будем относить то, что воспринимается как «черный ящик», кот орый
в случае неполадок можно заменить в любой момент без существенного ущерба для
работы (каналы связи, сетевое оборудование, серверы, дисковые массивы и т.д.). К
динамической части (ДЧ) будем относить только те ПО и данные, замена которых на
аналогичные в случае неполадок или сбоев не приводит к полному восстановлению
работы системы без потери функциональности. Такая ситуация может сложиться, е сли сбой носит логический характер, например, ошибка в коде программы или в
структуре БД. В этом случае использование резервной копии может оказаться бе ссмысленным, т.к. логическая ошибка также будет присутствовать и в ней.
В работе показано, что применение метода декомпозиции в комбинации с резервированием позволяет повысить эффективность традиционных методов резервирования за счет разбиения обновления на элементарные составляющие.
В четвертой главе проводится исследования эффективности предложенной методики.
Для решения данной задачи использовалась ИТ-платформа с установленной системой ДБО.
18
Тестовая система дистанционного банковского обслуживания (ДБО)
Модуль
печати
Веб-сервер
Модуль
регистрации
Модуль
обработки
рублевых п/п
Модуль
обработки
валютных
переводов
Модуль
обмена с
БД
База
двнных
(БД)
Обмен с
внешними
подсистемами
(ОВП)
Банковская
система
Модуль
обработки
сообщений
Административный модуль
(АМ)
Рисунок 9. Тестовая система дистанционного банковского обслуживания
В работе тестировались варианты обновлений, затрагивающие различные информационные процессы системы ДБО. Эффективность предложенных методов подтверждена для всех рассмотренных примеров. Объем автореферата позволяет привести результаты для одного их них.
Для приведенного примера обновление затрагивало следующие компоненты системы: административный модуль (АМ), модуль рублевых платежей (РП), а также
модуль обмена с внешними подсистемами (ОВП). На основе анализа возможных проблем при обновлении каждого из указанных компонентов был получен следующий
список возможных негативных событий (уязвимостей), связанный с обновлениями
этих компонентов (табл. 3).
Модуль
Уязвимость процесса
АМ
Некорректная обработка прав существующих пользователей
АМ
Ошибки при заведении новых пользователей/изменении прав существующих пользователей
РП
Ошибки при заведении клиентом платежей нового формата ускоренной доставки
РП
Ошибки при заведении клиентом платежей старых форматов
ОВП
Ошибки при обработке платежей нового формата ускоренной доставки на стороне банка
ОВП
Ошибки при обработке платежей старых форматов на стороне банка
Таблица 4. Список выявленных уязвимостей процессов
При построении дерева ущербов для каждого из выявленных событий использовались условные, а не абсолютные значения ущербов. В результате анализа деревьев
ущербов, построенных для случая возможной неработоспособности каждого из пере-
19
численных компонентов, были получены следующие значения ожидаемых Liest и максимальных Li max ущербов (табл. 4).
Возможное время неработоспособности
№ Модуль
Уязвимость процесса
1 час
Liest
4 часа
8 часов
Li max
Liest
Li max
Liest
АМ
Некорректная обработка
прав
существующих 3.51
пользователей
6
8.79
12
18.49 29
АМ
Ошибки при заведении
новых
пользователей/
изменении прав суще- 0.3
ствующих пользователей
1
0.78
2
7.53
10
РП
Ошибки при заведении
клиентом платежей но- 0.3
вого формата
1
0.63
2
6.26
10
4
РП
Ошибки при заведении
клиентом платежей ста- 3.32
рых форматов
6
8.78
12
12.2
15
5
ОВП
Ошибки при обработке
платежей нового форма- 0.3
та на стороне банка
1
0.78
2
3.51
6
ОВП
Ошибки при обработке
платежей старых фор- 6.41
матов на стороне банка
12
10.98 15
18.43 25
Итого: 14.14 27
30,74 45
66,42 95
1
2
3
6
Li max
Таблица 5. Оценка ожидаемых и максимальных ущербов для выявленных уязвимостей.
Значения обоих параметров Liest и Li max однозначно указывают на события с максимальными возможными ущербами, на предотвращение которых надо обратить
особое внимание при тестировании (№1,6,4). Вместе с тем, для событий с меньшими
возможными ущербами параметр Li (свертка всех ущербов для дерева данного события) дает более точную оценку и позволяет различать события с одинаковыми параметрами Limax - простая сумма всех ущербов для дерева (№2,3). Исходя из полученных результатов, была выбрана следующая приоритетная стратегия тестирования
процессов (приоритет 1 - наибольший, 5 - наименьший, таблица 6).
Модуль Процесс
Приоритет тестирования
АМ
Обработка прав существующих пользователей
1-2
АМ
Заведение новых пользователей/изменение прав су- 3-4
ществующих пользователей
20
РП
Заведение клиентом платежей нового формата
3-4
РП
Заведении клиентом платежей старых форматов
1-2
ОВП
Обработка платежей нового формата на стороне бан- 4-5
ка
ОВП
Обработка платежей старых форматов на стороне 1
банка
Таблица 6. Выбранные приоритеты при тестировании процессов
В таблице 7 приведены сравнительные результаты для двух типов тестирования:
интуитивного и основанного на приоритетах.
Примененный метод тестирования
Выявлено критических Выявлено критических
ошибок при тестироошибок в процессе эксвании
плуатации (1 неделя)
Тестирование процессов в произвольном порядке
2
3
Приоритетное тестирование
процессов с учетом вычисленных ущербов
4
1
Таблица 7. Сравнение результатов тестирования системы при использовании интуитивного тестирования и тестирования на основе вычисления ущербов.
Для данного тестовой среды было решено максимально допустимыми величинами
ожидаемого Liest и максимального Li max ущерба считать значения 15 и 30 соответственно. Исходя из данных таблицы 5, этим величинам соответствует максимальное
время неработоспособности (RTO) 1 час. При проведении обновления в случае возникновения проблем время возврата системы в работоспособное состояние не должно превышать величины RTO (1 час). Для обеспечения данного условия применялся
метод декомпозиции обновлений. Пакет обновления был подготовлен в двух вариантах: для единовременной и для поэтапной установки. Пакет для поэтапной установки
был разбит на части, каждую из которых нужно было устанавливать отдельно в опр еделенной последовательности. Для подтверждения корректности установки каждой
из частей пакета система должна была отработать не менее одного дня перед уст ановкой следующей по порядку части пакета.
В таблице 8 приведены данные об ошибках, возникших во время установки обновлений на обе тестовые платформы.
Время
установки
всех обновлений
Тестовая платформа
1, установка без де-
14
чел*час
Всего ошибок
на этапе эксплуатации системы (1 неделя)
5
Время устранения
менее
1 часа
от 1 до
4 часов
Более 4х часов
3
1
1
21
композиции пакета
обновления
Тестовая платформа
2, установка с декомпозицией пакета
обновления
58
чел*час
5
5
Таблица 8. Данные о потере доступности системы при установке обновлений традиционным и предложенным методом
Как видно из приведенных данных, поэтапная установка пакета обновлений с декомпозицией заняла существенно больше времени по сравнению с единовременной,
но при этом оказалась гораздо менее рискованной с точки зрения потери доступности
приложения, т.к. привела к существенно меньшим величинам ущербов (табл.5). Использование метода декомпозиции при проведении обновления существенно увеличило время полного обновления системы, однако позволило ограничить время неработоспособности максимально допустимым значением RTO 1 час. Напротив, единовременная установка всего обновления, будучи выполненной за один день, привела к
ошибкам, вызвавшим гораздо более длительную потерю доступности системы, сущ ественно превышающую максимально допустимую.
В заключении изложены основные итоги диссертационной работы и приводятся
основные результаты, полученные в процессе ее выполнения.
ОСНОВНЫЕ НАУЧНЫЕ И ПРАКТИЧЕСКИЕ РЕЗУЛЬТАТЫ ДИССЕРТАЦИИ
На основании полученных результатов диссертационной работы можно сделать вывод, что цель диссертации, сформулированная во введении, достигнута и поставленные задачи решены.
Основные научные и практические результаты диссертационной работы:
1. разработана модель уязвимостей приложений при проведении запланированных изменений;
2. разработан метод расчета возможного и максимального ущерба для каждого из выявленных негативных событий на основе модели дерева ущербов, позволяющий снизить риски
потери доступности за счет применения приоритетного тестирования;
3. разработан метод декомпозиции обновлений, снижающий время восстановления системы
при возникновении инцидентов потери доступности после обновлений и позволяющий
повысить эффективность традиционных методов резервирования за счет разбиения обновления на элементарные составляющие;
4. разработано программное обеспечение, позволяющее рассчитать ожидаемые и максимальные ущербы для каждого из выявленных негативных событий, что дает возможность
определить приоритетность тестирования;
5. проведена настройка и выполнено исследование эффективности предложенных моделей
и методов на примере системы дистанционного банковского обслуживания, критичной к
потерям доступности.
22
23
СПИСОК ПУБЛИКАЦИЙ ПО ТЕМЕ ДИССЕРТАЦИИ
Опубликовано в рецензируемых изданиях из списка ВАК:
1. Арустамов С.А., Генин М.Г. Минимизация рисков потери доступности программного обеспечения после установки обновлений или изменения функциональности //
Научно-технический вестник СПбГУ ИТМО. – 2011. – № 3 (73). – С. 111–116.
2. Арустамов С.А., Генин М.Г. Методы снижения рисков потерь доступности программного обеспечения критических информационных систем // Научнотехнический вестник информационных технологий, механики и оптики. – 2012. –
№ 4 (80). – С. 131–136.
3. Арустамов С.А., Генин М.Г. Деревья ущербов как модель оценки рисков потерь доступности после проведения изменений в финансовых информационных системах
// Научно-технический вестник информационных технологий, механики и оптики.
– 2013. – № 2 (84). – С. 129–135.
Опубликовано в других изданиях:
1. Генин М.Г. Методика проведения обновлений, снижающая риски доступности информационных ресурсов. Информатика, моделирование, автоматизация проектирования // Сборник научных трудов под ред. Н.Н. Войта. – Ульяновск: УлГТУ, 2011.
– С. 125–137.
2. Арустамов С.А., Генин М.Г. Управление рисками потери доступности программного обеспечения критических информационных систем // Materialy
VIII miedzynarodowej naukowi – praktycznej konferencji «Aktualne problemy
nowoczesnych nauk - 2012», - 2012. – C.89 - 99.
3. Генин М. Организация взаимодействия ИБС с внешними подсистемами // Банки и
технологии 3'2000 - с.16-20.
24
Заказ № 22-П/05/2013 Подписано в печать 16.05.2013 Тираж 100 экз. Усл. п.л. 1,85
ООО “Цифровичок”, тел. (495) 797-75-76; (495) 649-83-30
www.cfr.ru ; e-mail:info@cfr.ru
1/--страниц
Пожаловаться на содержимое документа