Реферат
ВВЕДЕНИЕ 7
1 Анализ 9
1.1 Обзор языка OVAL 9
1.2 Определение требований 11
1.2.1 Функциональные требования 11
1.2.2 Нефункциональные требования 12
1.3 Модель предметной области 12
1.4 Используемые технологии и инструменты 15
2 Исследование текущей версии модуля 17
2.1 Программный интерфейс модуля 17
2.2 Разбор XML документов 20
2.3 Обнаружение уязвимостей 23
3 Подготовка среды для тестирования нового модуля 29
3.1 Разработка среды для тестирования 29
3.2 Измерения производительности и потребления ресурсов 30
4 Реализация новой версии модуля 33
4.1 Замена генерации AST 33
4.2 Кэширование проверок 34
4.3 Промежуточные измерения 37
4.4 Использование SQLite в качестве хранилища 40
4.5 Финальные тесты производительности и потребления ресурсов 44
5 Тестирование новой версии модуля 48
ЗАКЛЮЧЕНИЕ 51
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ И ЛИТЕРАТУРЫ 52
ПРИЛОЖЕНИЕ А 53
Выделяют следующие виды уязвимостей информационных систем (ИС) по области происхождения:
1 Уязвимости кода.
2 Уязвимости конфигурации.
3 Уязвимости архитектуры.
4 Организационные уязвимости.
5 Многофакторные уязвимости.
Одной из важнейших функций программы MP8 является обнаружение уязвимостей первых двух видов. Частным случаем уязвимости кода является версионная уязвимость. В отличие от уязвимостей конфигурации, версионные уязвимости легко обнаружить — достаточно определить версии всего установленного ПО на сканируемой ЭВМ, после чего сравнить полученные данные с некоторой «базой знаний», в которой содержится список уязвимых версий.
В программе MP8 «база знаний» версионных уязвимостей хранится в виде документов на языке OVAL. Вычислением наличия уязвимостей на сканируемой ЭВМ занимается отдельный модуль. Этот модуль собирает со сканируемой системы всю необходимую информацию, после чего сравнивает её с документами OVAL и делает заключение о наличии или отсутствии определенных уязвимостей из «базы знаний».
Несмотря на то, что модуль соответствует всем функциональным требованиям, за время эксплуатации были выявлены следующие проблемы реализации:
1 Высокое потребление оперативной памяти (ОЗУ).
Количество уязвимостей, которые могут быть обнаружены MP8, постоянно растёт. Следовательно, увеличивается размер XML-документов, которые описывают условия существования этих уязвимостей. Текущая реализация модуля не приспособлена для работы с большими XML-документами — с ростом размера XML-документа значительно увеличивается потребление ОЗУ.
2 Утечки ОЗУ при многократном сканировании.
Было выявлено, что при многократном сканировании ЭВМ не вся выделенная во время работы модуля память возвращается операционной системе.
3 Плохая документация и отсутствие автоматических тестов.
Текущая реализация модуля плохо задокументирована и не имеет ни одного теста, что затрудняет внесение каких-либо изменений или исправлений недочетов.
4 Запутанный и неподдерживаемый код.
Исходный код модуля был написан давно, и его авторы уже не являются сотрудниками компании-производителя. Код имеет сложную и запутанную структуру, что, учитывая предыдущий недостаток, делает модификацию кода практически невозможной.
Таким образом, учитывая сложность внесения изменений в текущую реализацию и наличие серьезных проблем, которые нужно исправлять, было принято решение о полной переработке модуля вычисления версионных уязвимостей.
Цель данной работы — создание новой версии модуля вычисления версионных уязвимостей, описанных на языке OVAL.
Задачи, выполнение которых необходимо для достижения поставленной цели:
1 Выполнить анализ исходного кода текущей версии модуля.
2 Выявить причины неоптимального использования ресурсов.
3 Разработать новую версию модуля.
4 Протестировать производительность и потребление ресурсов новой версии модуля.
5 Провести интеграционное тестирование новой версии модуля.
В рамках проделанной работы были успешно выполнены все поставленные задачи:
1 Был выполнен анализ исходного кода модуля с целью выявления всех внешних зависимостей, совместимость с которыми было необходимо сохранить в процессе переработки. Проведение этого этапа разработки позволило внедрить новую версию модуля с минимальными изменениями в остальных частях кодовой базы.
2 В исходной версии модуля были выявлены проблемные места, приводящие к высокому потреблению оперативной памяти, а также низкой производительности. Это позволило сформулировать гипотезы о возможных способах оптимизации, которые могли бы решить существующие проблемы.
3 Была разработана новая версия модуля, улучшающая показатели производительности и потребления ресурсов. При этом разработка проводилась в два этапа: первая версия заложила основу иерархии объектов и их взаимодействия, а вторая оптимизировала потребление оперативной памяти.
4 На каждом этапе проводилось тестирование производительности и потребления ресурсов для сравнения показателей с исходной версии модуля. Тестирование показало, что финальная версия модуля использует до десяти раз меньше оперативной памяти, при этом имея большую скорость выполнения по сравнению с исходной версией.
5 Было проведено функциональное и интеграционное тестирования с целью выявления возможных недочетов в новой версии программы. По результатам тестирования было выявлено, что результаты сканирования новой версии модуля совпадают с результатами исходной версии.
Таким образом, цель работы в виде создания новой версии модуля вычисления версионных уязвимостей, описанных на языке OVAL, была достигнута. При этом были соблюдены все функциональные и нефункциональные требования, сформулированные перед разработкой.
Новая версия модуля была успешно внедрена в производство и за время эксплуатации не было выявлено недочетов в реализации.