Байесовский подход в кибербезопасности - Студенческий научный форум

XVII Международная студенческая научная конференция Студенческий научный форум - 2025

Байесовский подход в кибербезопасности

Башкирова В.В. 1, Тиликина Е.В. 1, Фирсова Е.В. 1
1Коломенский институт (филиал) Московского политехнического университета
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF

В мире, где технологии не стоят на месте и усовершенствуются с каждым днём, всё больше и больше возрастает вероятность попасть под «прицел» компьютерных злоумышленников. С каждым годом количество кибератак возрастает не только в России, но и по всему миру. Так, согласно данным за 2024 год, количество кибератак увеличилось в 2,5 раза по сравнению с предыдущим годом, что подчеркивает важность кибербезопасности [1]. Вообще, современная кибербезопасность — это не только про шифрование данных, мощные антивирусы и брандмауэры. Это в первую очередь про грамотный анализ информации, оценку возможных рисков и предсказание киберугроз.

В мире ежедневно обрабатываются миллиарды сигналов. Это и подозрительные аномалии в сетях, и вредоносные письма на почте, содержащие в себе опасный код. В таком потоке данных важно не терять способность видеть суть, и здесь на помощь приходит байесовский подход.

В вопросах безопасности байесовский подход является одним из самых практичных методов выявления угроз и оценки возможных рисков. Его суть заключается в использовании имеющихся данных для точных расчётов вероятности, что делает этот метод максимально точным [2]. Байесовская теорема — это инструмент, который позволяет оценить, насколько вероятно то или иное событие, учитывая новую информацию. Данный подход основывается конкретно на реальных ситуациях, которые могли бы произойти при каких-либо условиях, что также выделяет его среди других методов оценки проблемы кибербезопасности [4]. Давайте разберемся, как это работает не только на теоретическом уровне, но и применим его на практике, рассматривая реальные случаи возможных киберугроз.

Для того, чтобы применить данный подход на практике, сначала нужно изучить теорию, основные формулы, а также некоторые нюансы.

Рассмотрим формулу Байеса [2]:

Где:

- P(H|А) — вероятность гипотезы H, например, что система атакована, при условии, что мы наблюдаем событие А;

- P(А|H) — вероятность того, что событие А произойдет, если гипотеза H верна (например, система фиксирует подозрительное поведение во время атаки);

- P(H) — априорная вероятность гипотезы H, то есть то, как мы изначально оцениваем вероятность события;

- P(А) — общая вероятность события А, или, другими словами, насколько часто мы вообще встречаем это явление.

Идея проста: мы обновляем свои предположения о том, насколько вероятно какое-то событие, по мере того как поступает новая информация. Такую идею можно сравнить с процессом обучения – чем больше знаний мы получаем, тем точнее наши выводы.

Рассмотрим пример, как это работает в кибербезопасности. Смоделируем такую ситуацию: Некий пользователь открывает свою электронную почту и замечает, что его антиспам-фильтр пометил письмо как опасное. Но как понять, действительно ли это письмо является вредоносным? Имеются следующие данные:

- Только 1% всех писем в вашей почте действительно вредоносные (P(H) = 0.01).

- Фильтр правильно распознает такие письма в 98% случаев (P(А|H) = 0.98).

- Но иногда фильтр ошибается, и 5% безопасных писем он тоже относит к категории "вредоносные" (P(А| ) = 0.05).

На первый взгляд, кажется, что 98% чувствительности — это очень хороший показатель, но давайте посмотрим на реальную вероятность того, что помеченное письмо действительно опасно.

Для решения этой задачи напишем код на языке C++, используя приложение Visual Studio 2022 (рис.1) [5].

Рис. 1 Код программы

Давайте разберёмся, как она работает.

В первую очередь нам необходимо подключить библиотеки <iostream> и <iomanip> с помощью функции #include, а также используем пространство имен using namespace std (строки 1-3) (рис.2).

Рис. 2 Подключение библиотек

Функция <iostream> очень важна для абсолютно любого кода, так как она отвечает за ввод/вывод информации. Функция <iomanip> нужна для управления форматом вывода. Например, она может задавать количество знаков после запятой в полученном значении.

Использование пространства имён не является обязательным, но весьма упрощает написание кода, так как позволяет использовать стандартные функции и объекты (например, cout, cin) без необходимости писать std:: перед ними.

Далее рассмотрим функцию BayesTheorem, которая выполняет все основные вычисления (строки 6-12) (рис.3).

Рис. 3 Функция BayesTheorem

Тип функции double в данной программе указывает на то, что функция BayesTheorem возвращает значение с плавающей запятой двойной точности. Это связано с тем, что значения, приходящие в функцию, являются десятичными дробями.

Параметры функции:

  1. P_H: вероятность того, что письмо вредоносное;

  2. P_А_given_H: вероятность того, что фильтр правильно распознает вредоносное письмо;

  3. P_А_given_not_H: вероятность того, что фильтр ошибочно пометит безопасное письмо как вредоносное.

Тело функции:

  • P_not_H: вычисляется как 1 - P_H, что представляет вероятность того, что письмо безопасное.

  • P_А: полная вероятность события E (письмо помечено как вредоносное) вычисляется по следующей формуле [2]:

  • P_H_given_А: вероятность того, что письмо действительно вредоносное, если оно помечено как таковое, вычисляется по формуле Байеса [2]:

В конце функция возвращает значение P_H_given_А с помощью оператора return.

И так, мы подошли к самой главной части нашей программы, а именно к функции int main(), которая содержит в себе всё необходимое, для реализации функции BayesTheorem и вывода результата вычислений (строки 14-28) (рис.4).

Рис. 4 Реализации функции BayesTheorem

Для начала необходимо прописать функцию setlocale (LC_ALL, ""), которая подключит русский язык. Без неё программа будет выводить бессмысленные символы, вместо букв.

Далее заведём три переменные с типом double с уже известными значениями, исходя из условия задачи:

  • P_H = 0.01 (1% того, что письмо вредоносное).

  • P_А_given_H = 0.98 (98% правильного распознавания вредоносного письма).

  • P_А_given_not_H = 0.05 (5% ошибочного распознавания безопасного письма как вредоносного).

А также вызовем функцию BayesTheorem, которая возвращает результат и сохраняет его в переменной result. Результат программы выводится на экран с помощью cout. Функции fixed и setprecision() задают формат вывода числа с фиксированной точкой и определённым количеством знаков после запятой, которое указывается в скобках. В нашем случае результат будет выводиться с округлением в 4 знака после запятой (рис.5):

Рис. 5 Вывод результата на консоли

Таким образом, вероятность того, что полученное письмо действительно является вредоносным, составляет 0,1653.

Вывод: даже при высокой чувствительности системы вероятность того, что помеченное письмо действительно вредоносное, составляет всего 0,1653. Почему так? Потому что вредоносных писем в потоке изначально слишком мало, а ложные тревоги "перебивают" правильные срабатывания.

Вообще, теорема Байеса — ключевая концепция в теории вероятностей и статистике, обладающая многофункциональным характером и широким применением в различных областях, таких как [3]:

  • Статистика: используется для обновления вероятностей на основе новых данных. Применяется в байесовской статистике для оценки параметров и построения доверительных интервалов.

  • Машинное обучение: применяется в алгоритмах, таких как наивный байесовский классификатор, который используется для классификации текстов, спама и других задач.

  • Медицинская диагностика: помогает оценить вероятность наличия заболевания на основе результатов тестов и других факторов.

  • Финансовый анализ: используется для оценки рисков и принятия решений на основе вероятностных моделей.

  • Информационный поиск: применяется в системах рекомендательных алгоритмов для предсказания предпочтений пользователей.

  • Экономика: используется для оценки вероятностей различных экономических событий и принятия решений.

Таким образом, байесовский подход в кибербезопасности — это способ мыслить рационально в условиях неопределенности. Он помогает не только снизить риск ложных срабатываний, но и грамотно оценить возможности системы. Но важно помнить, что это лишь инструмент. Его точность зависит от качества входных данных и правильного применения [4].

Список литературы

  1. Баланов А.Н., Кибербезопасность: учебное пособие для вузов [Электронный ресурс] / Баланов А.Н. — URL: https://e.lanbook.com/book/422558 (дата обращения 02.01.2025).

  2. Гмурман В.Е., Теория вероятностей и математическая статистика: учебник для вузов [Электронный ресурс] / В.Е. Гмурман — URL: https://urait.ru/viewer/teoriya-veroyatnostey-i-matematicheskaya-statistika-559584 (дата обращения 03.01.2025).

3. Моррис Дэн., Теорема Байеса: визуальное введение для начинающих [Электронный ресурс] / Дэн Моррис. — URL: https://baguzin.ru/wp/wp-content/uploads/2018/05/Den-Morris.-Teorema-Bajesa-vizualnoe-vvedenie-dlya-nachinayushhih.pdf (дата обращения 02.01.2025).

4. Тулупьев А.Л., Николенко С.И., Сироткин А.В., Основы теории байесовских сетей: учебник [Электронный ресурс] / А.Л. Тулупьев, С.И. Николенко, А.В. Сироткин — URL: http://i.uran.ru/webcab/system/files/bookspdf/osnovy-teorii-bayesovskih-setey/osnovy.pdf (дата обращения 04.01.2025).

5. Рейзлин В.И., Язык С++ и программирование на нем: учебное пособие [Электронный ресурс] / В.И. Рейзлин — URL: https://portal.tpu.ru/SHARED/v/VIR/Met/Tab/programming2021.pdf (дата обращения 04.01.2025).

Просмотров работы: 8