Ключевые слова: Big Code, структурированные и неструктурированные данные, технологическая
безопасность программных средств, надежность программного обеспечения, анализ исходных кодов.
Современные стандарты по разработке промышленного программного обеспечения
(ПО) подразумевают главенствование вопроса обеспечения надежности функционирования
ПО над оценкой надежности. Парадокс заключается в том, что для должного обеспечения
уровня надежности функционирования разработанного ПО, необходимо однозначно
определять этот уровень. На сегодняшний день в отрасли не принят единый стандарт по
оценке надежности.
Проблема обеспечения надежности программных продуктов стала одним из
важнейших приоритетов мирового экономического развития, эффективным средством
решения социальных задач. В цивилизованных государствах сложилась развитая система
технического законодательства, не просто устанавливающая конкретные обязательные
требования к качеству ПО, но нацеленная на то, чтобы эти требования были финансово и
экономически обоснованы [1].
Оценка надежности программных средств представляет собой совокупность операций,
включающих выбор номенклатуры показателей надежности оцениваемого программного
средства, определение значений этих показателей и сравнение их с базовыми значениями.
Альманах научных работ молодых ученых
XLVII научной и учебно-методической конференции Университета ИТМО. Том 1
128
Здесь и далее, под технологической безопасностью программных средств будет пониматься
способность программных средств сохранять заданный уровень пригодности в заданных
условиях в течение заданного интервала времени, где в качестве ограничения уровня
пригодности рассматриваются дефекты безопасности и уязвимости [2]. В свою очередь,
машинное обучение – это методы и алгоритмы, предназначенные для частичной или полной
автоматизации решения сложных профессиональных задач в самых разных областях
человеческой деятельности.
По информации аналитической компании Gartner (сведения за июль 2017 года)
машинное обучение находится на пике завышенных ожиданий (рис. 1). Это значит, что
данную технологию пытаются применять практически в каждой области, начиная от
приложений в офисной автоматизации и заканчивая приложениями в медицине и
биоинформатике.
Рис. 1. Исследовательский отчет фирмы Gartner
На сегодняшний день некоторые специалисты уже проявляют скепсис относительно
перспектив применения методов и алгоритмов машинного обучения. Данная работа
описывает некоторые практические аспекты применения машинного обучения в контексте
информационной безопасности, и, в частности, при анализе технологической безопасности
программных средств.
Можно выделить следующие основные типы задач, решаемые с помощью машинного
обучения [3], для анализа технологической безопасности программных средств:
1. задача обнаружения аномалий (outliers detection) – обнаружение в обучающей выборке
небольшого числа нетипичных объектов. В некоторых приложениях их поиск является
самоцелью (например, обнаружение мошенничества) (рис. 2, а);
2. задача сокращения размерности заключается в том, чтобы по исходным признакам с
помощью некоторых функций преобразования перейти к наименьшему числу новых
признаков, не потеряв при этом никакой существенной информации об объектах выборки.
В классе линейных преобразований наиболее известным примером является метод
главных компонент (рис. 2, в);
3. задача кластеризации (clustering) заключается в том, чтобы сгруппировать объекты в
кластеры, используя данные о попарном сходстве объектов. Функционалы качества могут
Альманах научных работ молодых ученых
XLVII научной и учебно-методической конференции Университета ИТМО. Том 1
129
определяться по-разному, например, как отношение средних межкластерных и
внутрикластерных расстояний (рис. 2, в).
а
б
в
Рис. 2. Обнаружение аномалий (а); сокращение размерности (б); кластеризация (в)
Рассмотрим метод обнаружения уязвимостей с помощью выявления аномалий (рис. 3).
На первом этапе происходит синтаксический анализ исходного кода, благодаря
которому выделяются так называемые API symbols – типовые функции и типы данных.
На втором этапе происходит построение векторного пространства, где каждой символу
API соответствует свое измерение.
Далее происходит определение основных паттернов API c помощью метода
определения главных компонент (Principal Component Analysis, PCA). Данный метод
аппроксимирует облако наблюдений до эллипсоида, сохраняя наибольшее количество
информации.
Наконец, каждая функция выражается через смесь доминирующих паттернов API.
Такое представление позволяет идентифицировать похожие функции, использующие схожие
паттерны API, и, соответственно, содержащие похожие уязвимости.
Рис. 3. Метод обнаружения уязвимостей с помощью выявления аномалий
Следующий метод обнаружения уязвимостей основан на сокращении размерности
(рис. 4).
Рассмотрим данный метод на примере проверки условий:
1. определяются для исследуемой функции все входные и выходные параметры;
2. происходит группировка схожих по содержанию функций;
3. определяются основные условия, выполнение которых обязательно для корректной
работы функций из выбранной группы;
4. группы функций представляются в виде векторов, содержащих проверку этих условий;
5. формируется эталонная модель функции для группы функций. Благодаря сформированной
эталонной модели происходит выявление аномальных функций (например, функций, в
которых отсутствует проверка какого-либо условия).
Рис. 4. Метод обнаружения уязвимостей, основанный на сокращении размерности
Альманах научных работ молодых ученых
XLVII научной и учебно-методической конференции Университета ИТМО. Том 1
130
Еще одним примером практического применения методов машинного обучения
является метод обнаружения уязвимостей при помощи решения задачи кластеризации
(рис. 5).
Рис. 5. Метод обнаружения уязвимостей при помощи решения задачи кластеризации
Данный метод заключается в следующем.
1. Определяются все вызовы выбранной функции, и строится соответствующий граф
определения. Данный граф показывает, как входные данные инициализируются и
экранируются в конкретной функции.
2. Далее, графы определения раскладываются для перечисления отдельных вызовов
функций. Затем вызовы функций группируются для определения наборов вызовов с
аналогичными инициализируемыми аргументами.
3. Для каждого сформированного кластера определяется некоторый предел для
экранирования аргументов, т.е. определяются условия, проверка которых должна
выполняться после инициализации и перед вызовом.
4. В результате генерируются поисковые шаблоны, содержащие условия проверки, для
обхода всех графов вызовов функций.
Принимая во внимание все вышесказанное, можно усовершенствовать методику для
расчета оценки технологической безопасности программных средств, предложенную в
работе [4] следующим образом.
– На первом этапе происходит вычисление расчетных метрик. Данный этап подразумевает
определение таких метрик, как показатель устойчивости к искажающим воздействиям,
вероятность безотказной работы, оценка по среднему времени восстановления, оценка по
продолжительности преобразования входного набора данных в выходной.
– На втором этапе дается оценка метрикам с помощью экспертного опроса.
– Третий этап включает в себя использование технологии Big Code. В рамках данного этапа
происходит следующее: строится вероятностная модель на основе большого объема
исходных кодов. Затем данная модель используется для проверки метрик исследуемого
исходного кода.
– Четвертый этап – сравнение полученных метрик с соответствующими значениями аналога
или программного средства, принимаемого за эталонный образец. В качестве аналогов
выбираются реально существующие программные средства того же функционального
назначения, что и сравниваемое программное обеспечение, с такими же основными
параметрами, подобной структурой и применяемые в схожих условиях эксплуатации.
Таким образом, в ходе исследования была предложена принципиально новая
технология, позволяющая повысить качество оценки надежности программных средств.
Предложенная методика сложна в применении, так как требует знаний таких
характеристик ПО, которые можно вычислить только после длительной эксплуатации.
Основываясь на данной работе, можно сделать вывод: отсутствует общее решение
проблемы расчета оценки надежности ПО, и существуют множество частных решений,
которые не учитывают такие факторы как интенсивность внесения и устранения ошибок в
программе [5].
Альманах научных работ молодых ученых
XLVII научной и учебно-методической конференции Университета ИТМО. Том 1
131
Важным вопросом практического применения методики является подготовка исходных
данных. Эта задача особенно актуальна при оценке на ранних этапах жизненного цикла.
Исходные данные (общее количество ошибок и временные характеристики процессов их
поиска и устранения) могут быть получены с использованием объектно-ориентированных
метрик сложности и статистики, собранной при разработке похожих программных проектов,
в том числе с помощью использования технологии Big Code.
Тем не менее, использование представленной методики позволит повысить уровень
качества автоматизированных систем управления различного назначения, а также
минимизировать риски, связанные с отказом программного обеспечения на ранних стадиях
эксплуатации. Данная методика будет использована при разработке научных и программных
решений для расчета надежности программных средств.
Do'stlaringiz bilan baham: |