Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Теоретические основы защиты информации. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
Ошибки администрирования
Можно выделить следующие типы ошибок администрирования.
1. Ошибки конфигурирования. Включают ошибки установки и
выбора режимов функционирования программного обеспечения вычислительной системы. При существовании ошибок конфигури­рования уязвимости не содержатся непосредственно в программ­ном обеспечении, а вносятся в систему администратором. Можно привести следующие примеры ошибок данного типа:
– программное обеспечение установлено в неверном месте
(например, в разделяемый всеми пользователями каталог);
– программное обеспечение установлено с неверными пара-
метрами установки (при этом возможно последующее функциони­рование программ в небезопасном режиме);
– установлены некорректные права доступа к установленным
программам, файлам данных аудита и рабочим каталогам;
2. Ошибки окружения. При существовании ошибок окружения уязвимости не содержатся непосредственно в программном обес­печении, а вносятся в систему администратором. К ошибкам дан­ного типа относятся ошибки, связанные с некорректной обработ­кой переменных окружения, ошибки командного интерпретатора.
13.3. Поиск уязвимостей в процессе разработки
и анализа систем
Поиск уязвимостей в процессе разработки и анализа системы
может осуществляться с использованием следующих техник:
1. Анализ исходных текстов программ.
2. Динамический анализ безопасности программ.
Анализ безопасности программного обеспечения на основе
исходных текстов
Достоинством анализа безопасности программного обеспече-
ния на основе исходных текстов (так называемый статический ана­лиз) является возможность выявления проблем безопасности, а также анализ всех «скрытых» особенностей программного обес­печения до его запуска. В общем случае при статическом анализе решаются следующие задачи:
– исследование структуры программы;
191
– выделение набора стандартных системных функций, исполь-
зуемых программой;
– выявление способов и целей взаимодействия программы
с внешними устройствами и системными ресурсами;
– поиск типовых уязвимостей; – поиск разрушающих программных средств в коде программы. Эффективность и, следовательно, целесообразность данного
анализа определяются его трудоемкостью. Таким образом, при статическом анализе безопасности программного обеспечения с точки зрения трудоемкости анализа возможны две ситуации:
– наличие исходных текстов программ на языке высокого
уровня;
– наличие объектного кода программы с необходимостью его
дизассемблирования.
Принципиальных отличий между этими двумя вариантами не
существует (методы, применяемые при анализе безопасности, схо­жи).
Требования к анализу исходных текстов программного обес-
печения на языке высокого уровня рассмотрены в нормативном документе [6].
При этом необходимо отметить, что данный анализ менее тру-
доемок, чем дизассемблирование, хотя и не всегда возможен.
Исследование безопасности объектного кода программного обеспечения основано на применении принципа дизассемблирова­ния кода программы с последующим анализом мнемокода. Для решения частных задач модуль включает в себя базы знаний о стандартных функциях операционной системы. Данный метод является единственно возможным методом статического анализа программ в случае отсутствия исходных текстов (а это типичная ситуация). Кроме того, необходимо отметить, что данный подход позволяет решить проблему «доказательства безопасности компи­лятора», формально существующую для анализа безопасности программ на основе исследования исходных текстов на языках программирования высокого уровня. Однако применение данного метода, в силу низкого уровня языка программирования, характе­ризуется высокими трудозатратами.
192
Современные средства статического анализа безопасности программного обеспечения в основном исследуют уязвимости в исходных текстах программ.
В настоящее время существуют следующие свободно распро­страняемые средства поиска уязвимостей: its4, rats, flawfinder, lclint. Все эти средства обладают сходной функциональностью, обнаруживая уязвимости в программном обеспечении, написанном на языках С и C++, на основе базы данных известных ошибок про­граммирования, приводящих к уязвимостям.
Динамический анализ безопасности программного
обеспечения
Статический анализ способен полностью решить поставлен­ную задачу исследования входной информации только в том слу­чае, если в программе не применены специальные средства маски­ровки своего присутствия и действий (например, шифрования, ко­дирования и т. п.). В противном случае статический анализ не сможет выявить, а значит, исследовать несанкционированные дей­ствия, что приведет к нанесению ущерба компьютерной системе. Для решения данной проблемы следует использовать методы ди­намического анализа программного обеспечения.
Идея динамического анализа заключена в исследовании пове­дения программы под воздействием разнообразной входной ин­формации с обеспечением полного контроля использования внеш­них устройств и системных ресурсов. К средствам динамического анализа можно отнести автоматизированные отладчики и средства мониторинга.
Непосредственное тестирование программного
обеспечения
Отсутствие исходных текстов исключает применение боль­шинства методов тестирования программного обеспечения. При использовании метода непосредственного тестирования выводы о свойствах исследуемого объекта делают на основе анализа реак­ции системы на внешние воздействия.
Схема, иллюстрирующая данный метод, показана на рис. 13.1.
193
Генератор
тестов
Анализ
откликов
Тестируемая
система
Интерфейсы
Тестирующее
воздействие
Тестирующее
воздействие
Рис. 13.1. Использование матрицы тестирования
При непосредственном тестировании программного обеспече­ния может пригодиться методика, известная как матрица тестиро­вания, позволяющая выполнить декомпозицию множества тестов. Данная методика описывает тесты с использованием матриц те­стирования верхнего и нижнего уровней.
Матрица тестирования верхнего уровня определяет логически объединенные группы объектов тестирования и функции, которые необходимо протестировать для каждой группы. Составление мат­рицы тестирования верхнего уровня является отправной точкой при анализе безопасности программного обеспечения. Строки мат­рицы верхнего уровня определяются логически объединенными группами объектов тестирования. Столбцы данной матрицы опре­деляются соответствующими функциями программы. Функции программы могут быть определены, например, в соответствии с требованиями к функциям защиты, предъявляемым к программе. Элементы матрицы тестирования верхнего уровня являются указа­телями на матрицы тестирования низкого уровня, в которых более детально описываются соответствующие тесты.
Матрицы тестирования нижнего уровня расширяют матрицу верхнего уровня. Строки данной матрицы соответствуют про­граммным интерфейсам, поддерживающим соответствующие под­системы. Столбцы описывают соответствующие требования. Каж­дый элемент матрицы нижнего уровня описывает единственный программный интерфейс и единственное требование. Элементы матрицы указывают на множество тестов, которые необходимо провести для анализа безопасности программных интерфейсов.
Если подсистема содержит большое количество программных интерфейсов, можно создавать матрицы промежуточного уровня, содержащие группы интерфейсов. Элементы такой матрицы ука-
194
зывают на матрицы более низкого уровня, описывающие все ин­терфейсы в группе.
Таким образом, при использовании методики матрицы тести­рования необходимо:
1. Составить список логических подсистем тестируемой про-
граммы.
2. Составить список программных интерфейсов логических
подсистем.
3. Определить множество тестов, составляющих план тести-
рования.
Информация для создания матрицы тестирования верхнего уровня может быть получена из документации на программный продукт.
Для того чтобы начать конструирование матрицы тестирова­ния нижнего уровня, необходимо создать по одной матрице для каждой ячейки матрицы тестирования верхнего уровня. Для запол­нения матрицы тестирования нижнего уровня для каждого элемен­та матрицы определяется:
– необходимо ли тестировать данное требование для данной подсистемы; если тестирования не требуется, элемент матрицы должен указывать на множество заключений, объясняющих, поче­му соответствие этому требованию не должно тестироваться для данного программного интерфейса;
– множество тестов для тестирования требований.
В матрице нижнего уровня не должно остаться незаполненных клеток. Если незаполненные клетки остались, то говорить о пол­ном тестировании программы не представляется возможным.
По результатам заполнения матрицы нижнего уровня состав­ляется план тестирования, содержащий описание тестов. Описание теста тестирования должно содержать:
– описание и анализ теста;
– список указателей на процедуры тестирования;
– системное окружение, используемое при тестировании;
– автоматические инструменты, используемые при тестировании.
Описание теста создается на основе анализа документации на разработанное программное обеспечение и идентификации усло­вий, которые могут привести к нарушению безопасности.
195
До начала тестирования необходимо обеспечить соответству­ющее системное окружение. Некоторые параметры системного окружения могут быть одинаковыми для многих тестов и должны быть описаны в плане тестирования.
К понятию окружения относятся версии программного и аппа­ратного обеспечения, используемого при тестировании. Также должны быть описаны особые условия, которые могут быть ис­пользованы при тестировании.
Процедуры тестирования должны описывать детальную доку­ментацию для одного или нескольких тестов.
Описание теста потенциально может привести к большому коли­честву тестирующих воздействий. Таким образом, желательно опре­деление разумного количества выполняемых проверок. Например, описание теста для интерфейса с большим количеством параметров ведет к очень большому количеству тестов (тестирование с различной комбинацией параметров). Предварительный анализ реализации дол­жен уменьшить количество необходимых тестов.
Каждое логическое действие, выполняемое тестом, должно быть четко документировано как в случае применения автоматиче­ских средств, так и без них. Обычно документацию к тестам пред­ставляют в виде псевдокода. Также документация должна вклю­чать специфические особенности описываемого теста, в том числе данные о системном окружении, интерпретации результатов те­стирования, верификации результатов тестирования и т. д. Рас­смотрим подробнее требования к документации по тестированию.
Целесообразность выполнения теста, а также интерпретация его результатов может зависеть от результатов выполнения преды­дущих тестов. Данные зависимости должны быть четко оговорены. Примером таких зависимостей может являться файл, созданный одним тестом в качестве выходных данных и используемый дру­гим тестом в качестве входных. Должно быть отмечено, является ли тест независимым от других тестов.
Входные данные для теста должны являться соответствующи­ми (по типу) для анализируемого программного интерфейса. Дан­ные могут быть получены, например, в результате функциониро­вания генератора случайных чисел.
196
13.4. Поиск уязвимостей в процессе
функционирования систем
Сканеры уязвимостей
Сканер уязвимостей – программа, которая обнаруживает уяз­вимости удаленной и/или локальной системы. Различают две ос­новные стратегии, используемые сканерами уязвимостей: пассив­ное и активное сканирование.
Для поиска уязвимостей при пассивном сканировании необхо­димо рассматривать программы и настройки, реализующие политику безопасности системы. Активное сканирование состоит в выполнении типовых сценариев атак и анализе реакции системы на них.
Сканирование уязвимостей предоставляет администратору си­стемы оценку безопасности системы на момент проведения скани­рования. Таким образом, хотя сканер уязвимостей не в состоянии зафиксировать атаку на безопасность системы, он способен опре­делить условия, при которых возможен успех той или иной атаки (а иногда и тот факт, что атака на систему уже была успешно осу­ществлена).
Тестирование путем проникновения в систему
Тестирование путем проникновения в систему впервые было описано в методе гипотез об уязвимостях. Метод гипотез об уяз­вимостях (Flaw Hypothesis Methodology) был разработан System Development Corporation для анализа возможности нарушения без­опасности компьютерных систем с помощью проникновения в си­стему (penetration testing). Авторами метода было отмечено следу­ющее: «В отсутствие формальных техник доказательства коррект­ности метод проникновения является самым дешевым методом поиска уязвимостей. Исчерпывающее тестирование операционной системы отличается от метода проникновения. При тестировании можно обнаружить ошибки реализации, а при проникновении ана­лиз реализации системы используется в целях обнаружения оши­бок проектирования». Метод гипотез об уязвимостях является стратегией обнаружения уязвимостей разработки операционной системы на основе ошибок, найденных при реализации системы. Метод состоит из четырех этапов, перечисленных ниже.
197
1. Сбор знаний об управляющих структурах системы. Для
успешного проникновения нарушитель должен иметь информацию о принципах взаимодействия пользователей с операционной си­стемой, о сервисах, присутствующих в системе, и об ограничениях, накладываемых на использование сервисов. В том числе требуется информация о реализации:
– межмодульных связей;
– внутренних структур модулей системы;
– механизма контроля доступа;
– иерархии объектов управления;
– модулей.
2. Выдвижение гипотез об уязвимостях. На этом этапе нару-
шитель предлагает гипотезы о существовании уязвимостей в си­стеме на основании изучения исходных текстов и документации на систему.
3. Проверка гипотез. На данном этапе нарушитель подтвер-
ждает или отвергает гипотезы об уязвимостях на основании атак на систему с использованием предполагаемых уязвимостей.
4. Обобщение уязвимостей. На данном этапе уязвимости ана-
лизируемой системы обобщаются на основе данных об ошибках системы, полученных на этапе 3.
В изучаемых с использованием данного метода системах сле­дующие функциональные модули, реализующие:
– контроль ввода / вывода;
– разделение программ и данных;
– контроль доступа;
– управление инсталляцией.
Метод гипотез об уязвимостях был успешно применен в не­скольких исследованиях. К недостаткам данной методологии мож­но отнести требование глубоких априорных знаний о реализации системы и отсутствие формализации алгоритмов тестирования ме­ханизмов безопасности.
Контрольные вопросы
1. Что обычно понимается под уязвимостью?
2. Вследствие каких причин могут возникать уязвимости?
198
3. С помощью каких характеристик может быть описана уяз-
вимость?
4. Поясните процесс занесения уязвимости в список CVE.
5. Какие ошибки, приводящие к уязвимостям, относятся к
ошибкам реализации?
6. В чем состоит ошибка переполнения буфера?
7. Назовите основные группы объектов, являющихся целью
атаки на переполнение буфера.
8. Какие меры следует предпринять для недопущения уязви-
мости переполнения буфера ?
9. Какие типы ошибок относятся к ошибкам администрирова-
ния?
10. Каким образом осуществляется поиск уязвимостей в про-
цессе разработки и анализа системы?
11. В чем состоит идея динамического анализа безопасности
программного обеспечения?
12. Как осуществляется поиск уязвимостей в процессе функци-
онирования систем?
199
14. АТАКИ И ВТОРЖЕНИЯ
Нарушитель Атакуемый хост
Нарушитель Атакуемый хост
Атакуемый хост
Атакуемый хост
14.1. Характеристики атак
Атака на компьютерную систему – это действие, предприни­маемое злоумышленником, которое заключается в поиске и ис­пользовании той или иной уязвимости. Атаку на вычислительную систему можно рассматривать с точки зрения нарушителя и жерт­вы. Атака с точки зрения нарушителя может быть описана с ис­пользованием следующих компонентов:
– цель;
– сценарий;
– уязвимость в атакуемой системе;
– риск обнаружения нарушителя;
– ущерб, причиненный жертве / выгода нарушителя.
С точки зрения жертвы атака может быть описана с помощью ответов на следующие вопросы:
– что случилось?
– кому и в каком размере нанесен ущерб?
– как был нанесен ущерб?
– кто нарушитель?
– когда, как и почему состоялось нарушение?
По соотношению нарушитель — атакуемый объект атаки мо­гут быть описаны следующим образом.
1. «Один к одному» (см. рис. 14.1).
Рис. 14.1. Отношение нарушитель – атакуемый объект «один к одному»
2. «Один ко многим» (см. рис. 14.2).
Рис. 14.2. Отношение нарушитель – атакуемый объект «один ко многим»
200
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]