- •1.1. Введение. Понятие политики безопасности
- •Рис. 1. Основные каналы утечки информации при ее обработке на отдельной ПЭВМ
- •1.2. Модель компьютерной системы. Понятие доступа и монитора безопасности
- •Рис. 2. Порождения субъекта и понятие потока
- •Рис. 3. Примеры потоков в КС
- •1.3. Описание типовых политик безопасности
- •1.3.1. Модели на основе дискретных компонент
- •1.3.1.1. Модель АДЕПТ-50
- •1.3.1.2. Пятимерное пространство безопасности Хартстона
- •1.3.1.3. Резюме по моделям Адепт и Хартстона
- •1.3.2. Модели на основе анализа угроз системе
- •1.3.2.1. Игровая модель
- •1.3.2.2. Модель системы безопасности с полным перекрытием
- •1.3.2.3. Резюме по моделям анализа угроз
- •1.3.3. Модели конечных состояний.
- •1.3.3.1. Модель Белла-ЛаПадула.
- •1.3.3.2. Модель low-water-mark (LWM)
- •Таблица 1. Операции в модели LWM
- •1.3.3.3. Модель Лендвера
- •Определение 10
- •1.3.3.4. Резюме по моделям состояний
- •1.4. Обеспечение гарантий выполнения политики безопасности
- •Утверждение 1 (достаточное условие гарантированного выполнения политики безопасности в КС 1).
- •Утверждение 2 (достаточное условие гарантированного выполнения политики безопасности в КС 2).
- •Утверждение 3 (базовая теорема ИПС)
- •Рис. 5. Классическая модель ядра безопасности
- •Рис. 6. Ядро безопасности с учетом контроля порождения субъектов
- •1.5. Метод генерации изолированной программной среды при проектировании механизмов гарантированного поддержания политики безопасности
- •Таблица 2. Иерархия уровней при загрузке ОС
- •Утверждение 4 (условие одинакового состояния КС).
- •Утверждение 5 (достаточное условие ИПС при ступенчатой загрузке).
- •Утверждение 6 (требования к субъектному наполнению изолированной программной среды).
- •Утверждение 7 (достаточное условие чтения реальных данных).
- •1.6. Реализация гарантий выполнения заданной политики безопасности
- •Утверждение 8 (условия генерации ИПС при реализации метода доверенной загрузки).
- •1.7. Опосредованный несанкционированный доступ в компьютерной системе. Модель опосредованного НСД
- •Таблица 3. Полная группа событий в системе «ПП-РПВ»
- •Утверждение 9 (условия невозможности опосредованного НСД в ИПС).
- •Литература к первой части
- •Часть 2. Модели безопасного субъектного взаимодействия в компьютерной системе. Аутентификация пользователей. Сопряжение защитных механизмов
- •2.1. Введение
- •2.1. Процедура идентификации и аутентификации
- •Таблица 1. Объект-эталон для схемы 1
- •Таблица 2. Объект-эталон для схемы 2
- •Утверждение 1 (о подмене эталона).
- •2.2. Формализация задачи сопряжения. Методы сопряжения
- •Утверждение 2. (необходимое условие корректного взаимодействия сопрягаемых субъектов)
- •Утверждение 3. (о свойствах модуля сопряжения)
- •Рис. 1. Методы эмуляции органов управления и замены аутентифицирующего субъекта
- •2.3. Типизация данных, необходимых для обеспечения работы средств сопряжения
- •Таблица 3. Структура объекта вторичной аутентификации
- •Утверждение 4 (о свойствах объекта первичной аутентификации).
- •Утверждение 5 (об изменении информации пользователя в АНП).
- •2.4. Использование внешних субъектов при реализации и гарантировании политики безопасности
- •2.5. Понятие внешнего разделяемого сервиса безопасности. Постановка задачи
- •Рис. 2. Схема взаимодействия МРЗФ с МБО И МБС
- •2.6. Понятие и свойства модуля реализации защитных функций
- •Утверждение 6 (о потенциальной возможности некорректного возврата результата из МРЗФ)
- •Утверждение 7 (о потенциально возможном некорректном вызове МРЗФ)
- •2.7. Проектирование модуля реализации защитных функций в среде гарантирования политики безопасности
- •Утверждение 8 (достаточные условия корректного использования МРЗФ)
- •2.8. Передача параметров при составном потоке
- •Таблица 4. (Свойства составного потока при использовании МРЗФ)
- •2.9. Методика проверки попарной корректности субъектов при проектировании механизмов обеспечения безопасности с учетом передачи параметров
- •Заключение
- •Литература ко второй части
- •Часть 3. Управление безопасностью в компьютерной системе
- •3.1. Введение
- •3.2. Модель управления безопасностью. Термины
- •Утверждение 1 (о корректном управлении в ИПС).
- •Утверждение 2 (условия нарушения корректности управления).
- •Рис. 1. Локализация субъекта и объектов управления в распределенной КС
- •Таблица 1. (локализация управляющего субъекта и объекта управления)
- •3.3. Система удаленного управления безопасностью в отсутствии локального объекта управления
- •Утверждение 3 (необходимое условие 1 для создания системы корректного управления)
- •Утверждение 4 (необходимое условие 2 для создания системы корректного управления)
- •Утверждение 5
- •3.5. Метод “мягкого администрирования”. Автоматизированное формирование списков разрешенных задач и правил разграничения доступа
- •Утверждение 6 (лемма для обоснования метода мягкого администрирования)
- •3.6. Системы управления безопасностью при распределенном объекте управления
- •Утверждение 7 (условия корректности управления при мягком администрировании).
- •Заключение
- •Литература к третьей части
- •Часть 4. Модели сетевых сред. Создание механизмов безопасности в распределенной компьютерной системе
- •4.1. Введение
- •4.2.Модели воздействия внешнего злоумышленника на локальный сегмент компьютерной системы
- •Рис. 1. К моделям воздействия внешнего злоумышленника на локальный сегмент КС
- •4.3. Механизмы реализации политики безопасности в локальном сегменте компьютерной системы
- •Утверждение 1 (о распределенной КС с полным проецированием прав пользователя на субъекты).
- •Утверждение 2 (о доступе в системе с проецированием прав)
- •Таблица 1. Групповые правила разграничения доступа в ЛС КС
- •Таблица 2. Правила разграничения доступа при запрете транспортировки вовне избранных объектов
- •4.4. Метод межсетевого экранирования. Свойства экранирующего субъекта
- •Утверждение 3 (о существовании декомпозиции на подобъекты).
- •Утверждение 4 (Основная теорема о корректном экранировании).
- •Утверждение 6 (о тождестве фильтра сервисов и изолированной программной среды в рамках локального сегмента КС)
- •4.5. Модель политики безопасности в распределенной системе
- •4.6. Архитектура фильтрующего субъекта и требования к нему
- •Таблица 3. Показатели и классы защищенности межсетевого экрана
- •Заключение
- •Литература к четвертой части
- •Часть 5. Нормативные документы для решения задач компьютерной безопасности
- •Введение к пятой части
- •5.1.2. Структура требований безопасности
- •5.1.3. Показатели защищенности средств вычислительной техники от несанкционированного доступа
- •Таблица 1. Требования к защите от НСД СВТ
- •5.1.5. Классы защищенности автоматизированных систем
- •Таблица 2. Требования к защите от НСД АС
- •5.1.6. Выводы
- •5.2. Критерии безопасности компьютерных систем Министерства обороны США (“Оранжевая книга”)
- •5.2.1. Цель разработки
- •5.2.2. Общая структура требований «Оранжевой книги»
- •5.2.3. Классы безопасности компьютерных систем
- •Таблица 3. Требования «Оранжевой книги»
- •5.2.4. Интерпретация и развитие “Оранжевой книги”
- •5.2.5. Выводы
- •5.3. Европейские критерии безопасности информационных технологий
- •5.3.1. Основные понятия
- •5.3.2. Функциональные критерии
- •5.3.3. Критерии адекватности
- •5.3.4. Выводы
- •5.4. Федеральные критерии безопасности информационных технологий
- •5.4.1. Цель разработки
- •5.4.2. Основные положения
- •5.4.3. Профиль защиты
- •Назначение и структура Профиля защиты
- •Этапы разработки Профиля защиты
- •5.4.4. Функциональные требования к продукту информационных технологий
- •Таблица 4. Применение критериев ранжирования
- •5.4.5. Требования к процессу разработки продукта информационных технологий
- •5.4.6. Требования к процессу сертификации продукта информационных технологий
- •5.4.7. Выводы
- •Литература к пятой части
- •Заключение. Процесс построения защищенной компьютерной системы
- •Рис. 1. Взаимосвязь методов проектирования защищенной КС.
- •Список сокращений
- 73 -
одновременное наличие потока к промежуточному объекту заведомо порождает некорректный вызов или возврат результата.
Итак, содержательному анализу подвергнем ситуации 4-11. Ситуация 4 описывает поток с искажением промежуточного объекта.
Ситуация 5 кроме искажения промежуточного объекта содержит еще и поток к постороннему объекту.
Ситуация 6 описывает полностью корректную передачу к промежуточному объекту.
Ситуация 7 описывает передачу параметров без изменения, но с организацией потока к другому объекту.
Ситуации 8 и 9 описывают функционально аналогичные ситуациям 4 и 5, но относительно другого инициирующего поток субъекта.
Аналогично рассматриваются и ситуации 10 и 11.
Рассмотрев различные ситуации, связанные с передачей и возвратом параметров через промежуточный объект, можно сформулировать требования к субъекту, управляющему потоками информации через данный объект.
1.В субъекте Sl должно быть реализовано только тождественное отображение объекта Op.
2.Субъект Sl не должен инициировать потоки, отображающие промежуточный объект на другие объекты.
Данные свойства должны быть предметом содержательного анализа при проектировании защиты в КС, где существуют субъекты - участники составных потоков.
2.9.Методика проверки попарной корректности субъектов при проектировании механизмов обеспечения безопасности с учетом передачи параметров
Рассмотренная выше модель передачи параметров между субъектами позволяет уточнить понятие попарной корректности, изложенное в части 1. Общие подходы к изучению субъектного наполнения КС изложены в [1,2].
Под некорректным программным субъектом понимается процедура (в
терминах языка высокого уровня), выполняющая хотя бы одну из операций:
-выделение в теле процедуры динамической памяти и неосвобождение ее при выходе из процедуры;
-обращение по чтению/записи к динамически выделенной памяти после
ееосвобождения;
-обращение по чтению/записи за границы как динамически, так и статически (стек, глобальные переменные) выделенной памяти;
-запись в сегмент кода программного модуля;
-запись в область переменных, задающих порядок возврата управления при выходе из процедуры.
Под контекстуально некорректным программным субъектом
понимается некорректный в некотором (хотя бы одном) контексте вызова программный субъект.
- 74 -
Под контекстом вызова программного субъекта понимается совокупность объектов данных известной размерности (или их адресов), передающихся ему в качестве параметров вызова.
Контекстуальная некорректность проявляется при вызове одних программных субъектов другими и заключается в некорректных операциях с объектами, адреса которых передаются в качестве параметров в процедуру. Выявить такого рода некорректность можно только в контексте вызова одной процедуры другой, поскольку передача в качестве параметра указателя на некоторый объект (например, типа массив) не дает информации, достаточной для осуществления контроля за правильностью операций над данным объектом.
Таким образом, данная классификация отражает предмет статического анализа программного кода по исходным текстам на языке высокого уровня.
Под программным субъектом понимается выделенная процедура: фрагмент кода на языке высокого уровня, ограниченный точкой входа (и, возможно, передачи параметров) и точкой (точками) возврата управления (выходом из процедуры).
Попарная корректность процедур P1 и P2 понимается как отсутствие
операций
-по записи в области памяти, содержащие код как процедуры P1, так и процедуры P2 из процедур P1 и P2;
-по записи в область данных процедуры P1 из процедуры P2 и наоборот (кроме передачи параметров при взаимном вызове);
-по записи в область передачи параметров при вызове процедуры P2 из процедуры P1 (или наоборот), превышающую размерность объекта для передачи параметров;
-по записи в область переменных, задающих порядок возврата управления
ипередачи параметров (стека).
Динамические методы анализа направлены на выявление некорректных ситуаций в динамике выполнения программного кода, реализующего целевую функцию ПО. К динамическим методам анализа относятся:
-исполнение ПО (фрагментов ПО) под управлением отладчика. При этом имеется возможность использования условных точек останова (breakpoints) для различных классов событий (обращение к участкам памяти по чтению/записи, обращение к портам ввода/вывода, возникновение исключений (exceptions) в работе ПО), а также пошаговое исполнение наиболее критичных участков программного кода.
-написание тестовых макросов, которые вносятся в исходные тексты ПО перед его компиляцией в исполняемые модули, выполняющих динамическую проверку некоторых условий на этапе исполнения программного кода (например, на входе процедуры тестовый макрос сохраняет сегмент стека (stack frame) на некоторую глубину и проверяет его неизменность на выходе из процедуры, или тестовый макрос на входе процедуры вычисляет контрольную сумму программного кода и проверяет его неизменность на выходе процедуры
ит.д.) и сигнализирующих в случае их невыполнения.
-75 -
-написание и исполнение тестовых программ, создающих стрессовые или нештатные условия эксплуатации ПО и дальнейший анализ реакции ПО на данные ситуации.
Статическими являются методы анализа по исходным текстам на языке высокого уровня.
Анализ одиночной процедуры
1. Выявление прямых операционных конструкций:
1.1.Вызовов других процедур.
1.2.Циклов for, do while, do until.
2.Выявление косвенных операционных конструкций
2.1.Изменение объектов стека.
2.2.Косвенные циклы через if-else.
2.3.Процедур типа longjump.
3. Анализ выявленных конструкций:
3.1.Происходит ли перемещение данных внутри процедуры, каковы параметры операций, возможно ли повреждение (запись) в области собственного кода или кода другой процедуры.
3.2.Происходит ли перемещение данных непосредственно во вне процедуры (в глобальные переменные), каковы параметры этих операций и возможно ли повреждение кода других процедур.
3.3.Происходит ли перемещение данных в область стека данной процедуры или других процедур.
3.4.Происходит ли сквозная передача параметров для вызовов из данной процедуры, существует ли возможность повреждения кода и данных данной процедуры при возврате управления.
Пример сквозного вызова: int fun1 (char *buf, int len)
{
...
fun2(buf,15);
}
Пример повреждения при возврате: int fun1 (...)
{
char buf[32];
...
fun2(buf);
}
void fun2(char *p)
{
...
for(i=0;i<64;i++) p[i]=i;
}
- 76 -
Целесообразно выделить процедуры по прямому перемещению объектов типа memcpy, strcpy и т.д.
Для каждой процедуры составляется формуляр, в котором указываются все вызываемые процедуры с указанием результатов анализа по пп.3.1 - 3.4, указывается интегральный вывод по свойствам операционных конструкций (типа «перемещение данных в области памяти других процедур не найдено (или найдено)»; при нахождении указывается конкретная локализация в процедуре с указанием параметров, при которых реализуется то или иное негативное свойство.
Должны быть проанализированы все процедуры, принадлежащие к полному множеству.
Множество процедур ПО называется полным, если во всех принадлежащих этому множеству процедурах все вызываемые процедуры также принадлежат данному множеству.
Далее будет рассмотрена конкретизированная в виде алгоритма методика анализа ПО на предмет наличия (отсутствия) как некорректных, так и контекстуально некорректных программных субъектов. Под ошибкой типа buffer overflow понимается потенциально возможная ситуация, связанная с записью в область памяти за объявленной границей объекта.
Описание алгоритма.
1.Фиксируется список {F} всех процедур комплекса ПО. Для каждой процедуры описываются ее параметры (с указанием размерности) и возвращаемое значение. В том случае, когда размерность объекта данных (либо непосредственно выступающего в качестве параметра, либо опосредованно через указатель на него) не может быть определена без контекста вызова данной процедуры, указывается "размерность не определена" (unknown). Такие функции заносятся также в список {Fc} процедур, являющихся объектом анализа на предмет контекстуальной корректности. Также создается список {P} глобальных переменных. Для каждой переменной указывается ее размерность.
2.Для любой глобальной переменной P из списка {P} производится ее поиск во всех файлах с исходными текстами на языке С:
-переменную P слева от оператора присваивания (включая
вхождения в операционные конструкции типа for(), while(),..); при этом размерность присваиваемого значения не должна превышать размерность переменной P,
-переменную P в качестве первого параметра в вызове функции strcpy(char *dest, char *src); при этом размерность присваиваемого значения не должна превышать размерность переменной P,
-переменную P в качестве второго параметра в вызове функции bcopy(char *src, char *dest, size_t n); при этом значение n не должно превышать размерности переменной P,
